简体   繁体   中英

Update output in dynamic module - R Shiny

I have a code that allows to dynamically add modules in a Shiny app. This module is composed of a selectInput and can be added by clicking on the "Add filter" Button.

What I try to do is to put text at the right of each selectInput widget which value update when the user click on the perform Button and is equal to the selection on the selectInput

I don't know how to do. Many tries were unsuccessfull...

The code is the following :

library(shiny)

moduleFilterUI <- function(id) {
ns <- NS(id)
uiOutput(ns("SymbolicFilter"))
}


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

output$SymbolicFilter <- renderUI({
    fluidRow(
        column(width = 4, selectInput(session$ns("cname"), "Column name", choices =  c(1:5)))
    )
})

}

ui <- fluidPage(
    fluidRow(
       actionButton("addSymbolicFilterModule", "Add filter"),
        actionButton("Filter", "Perform"),
        uiOutput("symbolicFilters"))
    )
)

server <- function(input, output, session) {
    symbolicFilterModules <- list()
    makeReactiveBinding("symbolicFilterModules") 

observeEvent(input$addSymbolicFilterModule, {
    duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", input$addSymbolicFilterModule)
    symbolicFilterModules <<- c(symbolicFilterModules, list(moduleSymbolicFilterUI(duplicateSymbolicFilterid)))
    callModule(moduleSymbolicFilter, duplicateSymbolicFilterid)


    shinyjs::disable("addSymbolicFilterModule")
    iLast <- length(symbolicFilterModules)
    for (i in 1:(iLast-1)){
        duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", i)
        updateSelectInput(session, paste0(duplicateSymbolicFilterid,"-cname"),
                          selected=input[[paste0(duplicateSymbolicFilterid,"-cname")]])
    }
})


observeEvent(input$Filter,{
    shinyjs::enable("addSymbolicFilterModule")
    iLast <- length(symbolicFilterModules)
    duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", iLast)
    cname <- input[[paste0(duplicateSymbolicFilterid,"-cname")]]

    for (i in 1:(iLast)){
        duplicateSymbolicFilterid <- paste0("duplicateSymbolicFilter", i)
        updateSelectInput(session, paste0(duplicateSymbolicFilterid,"-cname"),
                          selected=input[[paste0(duplicateSymbolicFilterid,"-cname")]])

    }
})


output$symbolicFilters <- renderUI({
    symbolicFilterModules
})

}

shinyApp(ui = ui, server = server)

也许您已经解决了问题,但是...您将模块命名为moduleFilterUI ,但是您调用moduleSymbolicFilterUI ...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM