Оповещение / уведомление в блестящем - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы получать оповещение / уведомление в блестящем приложении, когда пользователь нажимает кнопку загрузки! Все примеры работают, если у вас есть кнопка действия, например:

library(shiny)
library(shinyalert)
 
ui <- fluidPage(
   useShinyalert(),  # Set up shinyalert
   actionButton("preview", "Preview")
 )
 
 server <- function(input, output, session) {
   observeEvent(input$preview, {
     # Show a modal when the button is pressed
     shinyalert("Oops!", "Something went wrong.", type = "error")
   })
 }
 
 shinyApp(ui, server)

Я хочу разработать аналогичную концепцию для кнопки загрузки, и если у нас есть кнопка загрузки, то нет input$preview, потому что я предполагаю, что для downloadButton у нас есть output$preview, и это не работает с текущими настройками!

1 Ответ

2 голосов
/ 04 августа 2020

Итак, для более полного примера того, как вы можете использовать это всплывающее окно для подтверждения загрузки, вы можете сделать следующее:

  1. Мы создаем другую кнопку действия на основе примеров здесь
  2. Мы собираемся скрыть оригинал downloadButton с помощью style = "visibility: hidden;"
  3. Мы будем прослушивать событие загрузки через document.getElementById('downloadData').click();
  4. Мы собираемся создать reactiveValues переменная, чтобы узнать, хотят ли пользователи загружать данные или нет
  5. Наконец, нам нужно сбросить ответ, чтобы вы могли постоянно нажимать кнопку Ok во всплывающем окне, иначе он не сработает снова, поскольку он установлен на TRUE
library(shiny)
library(shinyalert)

ui <- fluidPage(
    shinyjs::useShinyjs(),
    useShinyalert(), 
    actionButton("init", "Download", icon = icon("download")),
    downloadButton("downloadData", "Download", style = "visibility: hidden;")
)

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

    global <- reactiveValues(response = FALSE)
    
    observeEvent(input$init,{
        shinyalert("Confirmation", 
                   "Do you want to download the data?", 
                   type = "success",
                   callbackR = function(x) {
                       global$response <- x
                   },
                   showCancelButton = TRUE
        )
    })
    
    observeEvent(global$response,{
        if(global$response){
            shinyjs::runjs("document.getElementById('downloadData').click();")
            global$response <- FALSE
        }
    })
    
    output$downloadData <- downloadHandler(
        filename = function() {
            paste("data-", Sys.Date(), ".csv", sep="")
        },
        content = function(file) {
            write.csv(mtcars, file)
        }
    )
}

shinyApp(ui, server)

введите описание изображения здесь

...