Наблюдать Sweetalert2 подтвердить с помощью JavaScript в R Shiny - PullRequest
0 голосов
/ 23 ноября 2018

Я перешел на sweetalert2, поскольку старая версия более ограничена, чем новая, которая активно развивается.

Я столкнулся с проблемой, однако код, который я использовал для подтверждения или отмены в старой версии, больше не работает для меня.

В старой версии я использовал для добавления функции в коде 'myjava' после

closeOnConfirm: true}

, а именно:

,
 evalFunction = function(isConfirm){
if (isConfirm === true) {
var val1= 1;
Shiny.onInputChange('option1', [val1, Math.random()]);
}
else  {  
var val2= 2;
Shiny.onInputChange('option2'', [val2, Math.random()]);
}
}

, но это неработать с sweetalert2 похоже.

Я пытался заставить примеры на сайте работать, но безуспешно.https://sweetalert2.github.io/ Они используют такую ​​структуру, как:

.then((result) =>  {
  if (result.value === true) {
  swal('Processing');
    } 
});

, но она продолжает приводить к Предупреждение: Ошибка в :inyjs: Ошибка синтаксического анализа файла JavaScript: SyntaxError: Неожиданный токен>.

Вот приложение для тестирования.Вам нужно будет изменить каталог и загрузить два файла, чтобы sweetalert2 работал здесь: https://www.jsdelivr.com/package/npm/sweetalert2

Кнопка загрузки находится справа от заголовка sweetalert2 и 2 необходимых файланаходятся в папке dist с именем:

sweetalert2.min.js & sweetalert2.min.css

setwd('FOLDER WHERE THE sweetalert2files are ')

library(shiny)
library(shinyjs)

myjava <- "shinyjs.swalFromButton = function(params) { 
  var defaultParams = {
    title : null,
    html : null
  };
  params = shinyjs.getParams(params, defaultParams);
  swal({title : params.title, html : params.html, 
    showConfirmButton : true,
    confirmButtonText : 'Left',
    confirmButtonColor: '#00cc00',
    showCancelButton : true,
    cancelButtonText : 'Right',
    cancelButtonColor :  '#339fff',
    closeOnCancel : true,
    allowOutsideClick: true,
    allowEscapeKey: true,
    closeOnConfirm: true});
};"

ui  <- fluidPage(

  actionButton(inputId = 'messagebutton', label = 'click me'),

  shinyjs::useShinyjs(),
  shinyjs::extendShinyjs(text = myjava),
  tags$head(includeScript("sweetalert2.min.js"),
            includeCSS("sweetalert2.min.css")
            )
)

server <- function(input, output, session) { 

  observeEvent(input$messagebutton, { 
    shinyjs::js$swalFromButton( title = paste('<span style ="color:#339FFF;">An alert with a choice'),
                          html = paste('Pick left or right'))

      })

  observeEvent(input$option1, { print('confirm choosen')})
  observeEvent(input$option2, { print('cancel choosen')})

}

shinyApp(ui = ui, server = server)

ОБНОВЛЕНИЕ Я пробовал бесконечные варианты этого javascript, удаляя проблемный символ>, как было предложено, но R продолжает выдавать 'ошибку при разборе предоставленного кода javascript.

myjava <- "shinyjs.swalFromButton = function(params) { 
var defaultParams = {
title : null,
html : null
};
params = shinyjs.getParams(params, defaultParams);
swal({title : params.title, html : params.html, 
showConfirmButton : true,
confirmButtonText : 'Left',
confirmButtonColor: '#00cc00',
showCancelButton : true,
cancelButtonText : 'Right',
cancelButtonColor :  '#339fff',
closeOnCancel : true,
allowOutsideClick: true,
allowEscapeKey: true,
closeOnConfirm: true}).then((result){
  if (result.value === true) {
swal('Processing');
} 
});
};"

1 Ответ

0 голосов
/ 24 ноября 2018

Благодаря комментариям Стефана Лоренца, это решение: включает средства для отправки переменной обратно в R глянцевый.

myjava <- "shinyjs.swalFromButton = function(params) { 
var defaultParams = {
title : null,
html : null
};
params = shinyjs.getParams(params, defaultParams);
swal({title : params.title, html : params.html, 
showConfirmButton : true,
confirmButtonText : 'Left',
confirmButtonColor: '#00cc00',
showCancelButton : true,
cancelButtonText : 'Right',
cancelButtonColor :  '#339fff',
closeOnCancel : true,
allowOutsideClick: true,
allowEscapeKey: true,
closeOnConfirm: true})
.then(function(result){
  swal('succes');
  if (result.value === true) {
 var val1= true;
  Shiny.setInputValue('option1', val1, {priority: "event"});}  
else { 
swal('failure');
var val2= true;
          Shiny.setInputValue('option2', val2, {priority: "event"});}  
});
};"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...