Как создать версию sweetalert2
сообщения R Shiny с раскрывающимся меню. Я создал довольно много сообщений sweetalert в R Shiny, но для меня это новый тип, и Я застрял на правильном пути, чтобы получить выбор из selectinput внутри сообщения в виде текста, а не числа.
В некоторой степени это работает, но вывод - это номер n-го элемента в списке, а не текстовые строки .....
Исходный пример чистого javascript: пример в разделе select (размещено на внизу этого сообщения.
После созданного мной демонстрационного приложения, которое выводит числа вместо текста, я попробовал следующее: (следуя рабочему решению, которое я создаю в конце на основе этого другого SO вопрос о sweetalerts
myjava <- "shinyjs.swalFromButton = function(params) {
var defaultParams = {
title : null,
html : null,
inputOptions: null
};
params = shinyjs.getParams(params, defaultParams);
swal({title : params.title, html : params.html, inputOptions : params.inputOptions,
input: 'select',
inputPlaceholder: 'Select a batchname',
showCancelButton: true,
inputValidator: function(value) {
return new Promise(function(resolve) {
if (value === 'Select a batchname') {
resolve('You need to select a batchname')
} else {
resolve()
}
})
}
})
.then(function(result){
if(result.dismiss === swal.DismissReason.cancel) {
} else {
Shiny.setInputValue('SweetDropChoice', result.value, {priority: 'event'});
}
});
};"
Я думаю, что моя проблема в том, что я понятия не имею, как правильно использовать разрешение из примера в моей собственной версии.
Вот приложение для тестирования. Вам нужно будет сменить каталог и загрузить два файла, чтобы sweetalert2
работал здесь: https://www.jsdelivr.com/package/npm/sweetalert2, кнопка загрузки находится справа от заголовка: sweetalert2, а 2 необходимых файла находятся в папке dist папка с именем:
sweetalert2.min.js и sweetalert2.min.css
setwd(PASTE LOCATION WHERE YOU SAVED THE SWEETALERT SCRIPTS)
library(shiny)
library(shinyjs)
myjava <- "shinyjs.swalFromButton = function(params) {
var defaultParams = {
title : null,
html : null,
inputOptions: null
};
params = shinyjs.getParams(params, defaultParams);
swal({title : params.title, html : params.html, inputOptions : params.inputOptions,
input: 'select',
inputPlaceholder: 'Select a batchname',
showCancelButton: true})
.then(function(result){
if (result.value === 'Select a batchname') {
resolve('You need to select a batchname:)')
} else {
var batchname = result.value
Shiny.setInputValue('SweetDropChoice', batchname, {priority: 'event'});}
});
};"
ui <- fluidPage(
actionButton(inputId = 'messagebutton', label = 'click me'),
verbatimTextOutput('Choice', placeholder = T),
shinyjs::useShinyjs(),
shinyjs::extendShinyjs(text = myjava),
tags$head(includeScript("sweetalert2.min.js"),
includeCSS("sweetalert2.min.css")
)
)
server <- function(input, output, session) {
values <- reactiveValues(Choice = '?',
Choices = rownames(mtcars)[1:6] ## dummy input to use in the sweetalert with dropdown
)
observeEvent(input$messagebutton, {
shinyjs::js$swalFromButton( title = paste('<span style ="color:#339FFF;">An alert with a choice'),
html = paste('Pick a name'),
inputOptions = values$Choices)
})
output$Choice <- renderPrint({input$SweetDropChoice}) ## print output of new sweetalert
}
shinyApp(ui = ui, server = server)
result.value
- это индекс выбора? В этом случае я бы попробовал заменить его наinputOptions[result.value]
. - person Stéphane Laurent   schedule 11.02.2019params.inputOptions[result.value]
. Также заменитеif (result.value === 'Select a batchname')
наif (result.value === '')
. - person Stéphane Laurent   schedule 11.02.2019.then(function(result){
я поставилconsole.log(result);
. И когда я запускаю приложение, я открываю console в Chrome (Ctrl + Shift + i). Затем я могу видеть объектresult
в консоли при нажатии кнопки ОК. Консоль тоже показывает ошибки. - person Stéphane Laurent   schedule 11.02.2019