R Shiny conditional dateInput for every checkboxGroupInput selected

R Shiny conditional dateInput for every checkboxGroupInput selected

我正在创建一个允许用户 multi-select 项目列表的应用程序。对于每个选定的项目,我希望在项目名称旁边显示一个 dateInput 字段(即 a/b/c)。

目前,我可以为任何一个项目显示 dateInput 字段,但不能显示多个(如下所示)

一旦多个 dateInputs 显示在项目列表旁边,如下所示:我想知道 dateInput 字段如何排列得很好,因为它们似乎比复选框列表占用更多 space,如下所示:

ui <-  dashboardPage(
  dashboardHeader(
    title = ""
  ),

  dashboardSidebar(
    sidebarMenu(
      menuItem("Projects", tabName = "tab1")
    ) 
  ),

  dashboardBody(
    tabItems(
      tabItem(tabName = "tab1",
              fluidRow(h2("Projects"), 
                column(6,
                       checkboxGroupInput("Projects", "",
                                          c("a", "b", "c")
                       )
                ),
                column(4,
                       conditionalPanel(condition = "input.Projects == 'a' || 
                                        input.Projects == 'b' || input.Projects 
                                        == 'c'", dateInput("proj_date", ""))
                       )
                )
              )
      )
    )
  )

server <- function(input, output) {
}


shinyApp(ui, server)

我知道我需要在 conditionalPanel 的条件参数中输入 javascript。请告知我应该如何更正代码并为任何和所有选定项目显示一个或多个 dateInput 字段。

尝试 uiOutput

library(shiny)
library(shinydashboard)

ui <-  dashboardPage(
    dashboardHeader(),
    dashboardSidebar(
        sidebarMenu(
            menuItem("Projects", tabName = "tab1")
        ) 
    ),
    dashboardBody(
        tabItems(
            tabItem(tabName = "tab1",
                    fluidRow(h2("Projects"), 
                             column(6, checkboxGroupInput("Projects", "", c("a", "b", "c"))),
                             column(4, uiOutput('dates'))))
        )
    )
)

server <- function(input, output) {
    output$dates <- renderUI({
        lapply(input$Projects, function(project) {
            div(dateInput(paste0("proj_date_",project), paste("Project", project, "date")))
        })
    })
}

shinyApp(ui, server)