'How to disable all Shiny UI elements, including a downloadButton

This answer explains how can one disable/enable all UI elements in a Shiny app.

Among the two solutions given, the one I am interested in uses the shinyjs package (I'd rather not play with javascript directly).

My problem is that UI elements of the class downloadButton are not listed as elements of input.

library(shiny)
library(shinyjs)


ui <- fluidPage(
    useShinyjs(),
    tagList(
        downloadButton("downloadBtn", "Download button"),
        actionButton("printBtn", "Print and disable all members of input")
    )
)

server <- function(input, output) {
    
    observeEvent(input$printBtn, { 
        
        print (names(input))
        for(n in names(input))
            shinyjs::disable(id=n)
        
        })
}

shinyApp(ui = ui, server = server)

When I click on the "Print all members of input", only "printBtn" is printed ("downloadBtn" is not).

Hence, since downloadButton is not a member of input, disabling it by looping over all the elements of input - and disabling them one by one does not work.

Is there an elegant workaround that can be used in order to disable all of the elements?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source