library("shiny")
module_UI <- function(id) {
ns <- NS(id)
tagList(
selectInput(ns("in_no_options"), label = "Number of options:", choices = 10:20, selected = 10),
uiOutput(ns("ui_in_option"))
)
}
module <- function(input, output, session) {
ns <- session$ns
available_options <- reactive({
tmp <- seq_len(req(input$in_no_options))
res <- letters[tmp]
names(res) <- letters[tmp]
res
})
output$ui_in_option <- renderUI({
selectInput(ns("in_option"), label = "Options:",
choices = available_options())
})
selected_option <- reactive({
opt <- isolate(available_options())
selected <- req(input$in_option)
opt[[selected]]
})
observeEvent(selected_option(), {print(sprintf("New option: %s", selected_option()))})
}
ui <- basicPage(htmlOutput("ui"))
server <- function(input, output, session) {
output$ui <- renderUI(module_UI("module"))
callModule(module, "module")
}
runApp(shinyApp(ui, server))