rshinyshinybs

R shinyBS modal pop up stopped working and can't make it to work with Shiny Server


I have a simple example below of a shinyBS modal pop up concept upon a user entering the site. This was working fine, and now suddenly stopped working. I have shiny server pro. Not only does the modal not show up, but the datatable is also not rendered. It is as if the server side is not running at all. I get a blank page.

library(shiny)
library(shinyBS)
library(DT)

ui <- fluidPage(
  fluidRow(
    bsModal(
      id = 'startupModal',
      title = h4('IMPORTANT NOTICE. MUST READ AND ACKNOWLEDGE!'),
      trigger = '', size = 'large',
      p('The system you are entering is proprietary ... Do not mess with us!')
      )
    ),
  fluidRow(
    mainPanel(
      DT::dataTableOutput('myData'),
      width = 12
      )
    )
  )

server <- function(input, output, session) {
  toggleModal(session, "startupModal", toggle = "open")
  output$myData <- DT::renderDataTable({
    mtcars %>%
      DT::datatable(
        escape = FALSE, class = 'compact', rownames = '', filter = 'none'
        )
    })
  }

shinyApp(ui, server)

If I comment out the modal UI as follows, the page and the datatable render fine.

library(shiny)
library(shinyBS)
library(DT)

ui <- fluidPage(
#   fluidRow(
#     bsModal(
#       id = 'startupModal',
#       title = h4('IMPORTANT NOTICE. MUST READ AND ACKNOWLEDGE!'),
#       trigger = '', size = 'large',
#       p('The system you are entering is proprietary ... Do not mess with us!')
#       )
#     ),
  fluidRow(
    mainPanel(
      DT::dataTableOutput('myData'),
      width = 12
      )
    )
  )

server <- function(input, output, session) {
  toggleModal(session, "startupModal", toggle = "open")
  output$myData <- DT::renderDataTable({
    mtcars %>%
      DT::datatable(
        escape = FALSE, class = 'compact', rownames = '', filter = 'none'
        )
    })
  }

shinyApp(ui, server)

Here is some more information on packages and R running:

R version 3.4.1 (2017-06-30) -- "Single Candle"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

  Natural language support but running in an English locale

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

> packageVersion('shiny')
[1] ‘1.4.0’
> packageVersion('shinyBS')
[1] ‘0.61’
> packageVersion('DT')
[1] ‘0.5’

shiny-server --version
Shiny Server Pro v1.5.12.1023
Node.js v10.15.3

I tried this with Chrome (including with pop-ups enabled setting) and also on Microsoft Edge. None of them work.


Solution

  • this is not a fix but rather a workaround.

    By doing some testing I found that the problem lies in the trigger parameter of bsModal. The absence of values (no space/blank values are accepted as well) result in the issue.

    If you can add some sort of identifier string, for instance a title to the table, then the modal window pops up again, even with shiny 1.4.0. I added the 'Project Title' string to the mainPanel as well as the trigger parameter in the modal.

    Below a working example (with my packages version at the bottom).

    Hope that this helps in your case.

    library(shiny)
    library(shinyBS)
    library(DT)
    
    ui <- fluidPage(
           fluidRow(
             bsModal(
               id = 'startupModal',
               title = h4('IMPORTANT NOTICE. MUST READ AND ACKNOWLEDGE!'),
               trigger = 'Project Title', size = 'large',
               p('The system you are entering is proprietary Do not mess with us')
               )
             ),
    
        fluidRow(
            mainPanel(h3("Project Title"),
                DT::dataTableOutput('myData'),
                width = 12
            )
        )
    )
    
    server <- function(input, output, session) {
        toggleModal(session, "startupModal", toggle = "open")
        output$myData <- DT::renderDataTable({
            mtcars %>%
                DT::datatable(
                    escape = FALSE, class = 'compact', rownames = '', filter = 'none'
                )
        })
    }
    
    shinyApp(ui, server)
    

    enter image description here

    R version 3.6.0 (2019-04-26)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Ubuntu 16.04.6 LTS
    
    Matrix products: default
    BLAS:   /usr/lib/atlas-base/atlas/libblas.so.3.0
    LAPACK: /usr/lib/atlas-base/atlas/liblapack.so.3.0
    
    Random number generation:
     RNG:     Mersenne-Twister 
     Normal:  Inversion 
     Sample:  Rounding 
    
    locale:
     [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
     [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
     [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
    [10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     
    
    other attached packages:
    [1] DT_0.9       shinyBS_0.61 shiny_1.4.0 
    
    loaded via a namespace (and not attached):
     [1] Rcpp_1.0.2        rstudioapi_0.10   magrittr_1.5      tidyselect_0.2.5 
     [5] munsell_0.5.0     xtable_1.8-4      colorspace_1.4-1  R6_2.4.0         
     [9] rlang_0.4.0       fastmap_1.0.1     dplyr_0.8.3       tools_3.6.0      
    [13] grid_3.6.0        gtable_0.3.0      sourcetools_0.1.7 crosstalk_1.0.0  
    [17] htmltools_0.4.0   yaml_2.2.0        lazyeval_0.2.2    assertthat_0.2.1 
    [21] digest_0.6.21     tibble_2.1.3      crayon_1.3.4      purrr_0.3.2      
    [25] ggplot2_3.2.1     later_1.0.0       htmlwidgets_1.5.1 promises_1.1.0   
    [29] glue_1.3.1        mime_0.7          compiler_3.6.0    pillar_1.4.2     
    [33] scales_1.0.0      jsonlite_1.6      httpuv_1.5.2      pkgconfig_2.0.3