rstudio / shinydashboard

Shiny Dashboarding framework
https://rstudio.github.io/shinydashboard/
Other
892 stars 300 forks source link

0.6.0 introduced minor bug #214

Closed bborgesr closed 7 years ago

bborgesr commented 7 years ago

From: https://stackoverflow.com/questions/44172064/shinydashboard-is-not-showing-item-properly-in-sidebar

For some reason, in 0.6.0, selected = TRUE in a menuItem() does not trigger the corresponding conditionalPanel(). (If you leave that out though, everything works fine - see example below).

No repro for < 0.6.0.

Repro

This works as expected:

library(shinydashboard)
library(shiny)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(id = "tabs",
      menuItem("tab1", tabName = "tab1"),
      menuItem("tab2", tabName = "tab2")
    ),
    conditionalPanel("input.tabs == 'tab1'", 
      "This does should appear on startup"
    )
  ),
  dashboardBody()
)

server <- function(input, output, session){}
shinyApp(ui, server)

This should result in exactly the same app, but it gets messed up:

library(shinydashboard)
library(shiny)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenu(id = "tabs",
      menuItem("tab1", tabName = "tab1", selected = TRUE),
      menuItem("tab2", tabName = "tab2")
    ),
    conditionalPanel("input.tabs == 'tab1'", 
      "This should appear on startup"
    )
  ),
  dashboardBody()
)

server <- function(input, output, session){}
shinyApp(ui, server)

Workaround

Use a dynamic sidebar menu:

library(shinydashboard)
library(shiny)

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(
    sidebarMenuOutput("menu"),
    conditionalPanel("input.tabs == 'tab1'", 
      "This should appear on startup"
    )
  ),
  dashboardBody()
)

server <- function(input, output, session){
  output$menu <- renderMenu({
    sidebarMenu(id = "tabs",
      menuItem("tab1", tabName = "tab1", selected = TRUE),
      menuItem("tab2", tabName = "tab2")
    )
  })
}
shinyApp(ui, server)