我有一个闪亮的应用程序,用户可以在其中为不同的日期选择不同的选项(将其视为一天的食物选项,例如每天只有一个选项,但它可能是星期一的选项 A 和星期二的选项 B)。
目前,使用交互式 ggplot 图表创建交互式“日历”视图。最近我发现了shinyWidgets::airDatepicker
,它看起来很棒,给我带来了 90%。
现在我希望能够根据选项为选定的日期着色。也就是说,如果用户点击了某个日期,则该日期应该对应于该选项被着色,例如所有 A 选项都是红色的,所有 B 选项都是绿色的。
粗制的 MWE(没有着色)看起来像这样:
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
fluidRow(
selectInput("option", "Choice?", choices = c("A", "B")),
airDatepickerInput(
inputId = "input_dates", label = "Inline:",
multiple = Inf, inline = TRUE
)
)
)
server <- function(input, output, session) {
observeEvent(input$input_dates, {
print(sprintf("Selected Dates: %s", paste(input$input_dates, collapse = ", ")))
})
observe({
print(sprintf("Option is now: '%s'", input$option))
})
}
shinyApp(ui = ui, server = server)
预期目标是让用户选择选项 A,点击某些日期,这些日期会以红色突出显示,然后用户选择选项 B,点击某些日期(可能相同或不同),这些日期将是现在在仍然红色的日期旁边以绿色突出显示。
早期尝试
我的一个想法是我可以尝试更改 shinyWidgets 的 JS 代码以向单击的单元格添加一个 ID(取决于所选的选项),然后使用 CSS 为单元格着色。
CSS 可能如下所示:
tags$style(HTML(".airdatepicker--cell.-selected-#OPTIONA {background: red;}
.airdatepicker--cell.-selected-#OPTIONB {background: green;}")),
但我找不到更改单元格 ID 和类的 JS 代码。