Search code examples
rshinyshinydashboard

Disable right sidebar ability at all for a specific tab of a shiny dashboard


I have a shiny dashboard below and I would like to know if there is a way to keep left and right sidebar hidden by default when a specific tab is selected. In this case the tab 'Front'. I did it with shinyJs().Is there a way to also hide the 'gear' icons and the ability to open the right sidebar at all from the "Front"? More specifically when the user is in the Front tab the right sidebar display which is enabled when he clicks on the gear icon in the top right corner should not be possible at all. No right sidebar for this tab as it is empty and useless.

## app.R ##
        library(shiny)
        library(shinydashboard)
        library(shinydashboardPlus)
        library(DT)
        library(shinyWidgets)
        library(shinyjs)
        ui <- dashboardPagePlus(
            dashboardHeaderPlus(
                enable_rightsidebar = TRUE,
                rightSidebarIcon = "gears",
                fixed = T
            ),

            dashboardSidebar(
            ),

            dashboardBody(
                useShinyjs(),
                tags$hr(),
                tabsetPanel(
                    id ="tabA",
                    type = "tabs",
                    tabPanel("Front",icon = icon("accusoft")),
                    tabPanel("Data", icon = icon("table")


                    )
                )
            ),
            rightsidebar = rightSidebar(

            )
        )

        server <- function(input, output) {
            observe({
               if (input$tabA == "Front") {
                   addClass(selector = "body", class = "sidebar-collapse")
                   removeClass(selector = "body", class = "control-sidebar-open")
               } else {
                   removeClass(selector = "body", class = "sidebar-collapse")
                   addClass(selector = "body", class = "control-sidebar-open")
               }
            })
        }

        shinyApp(ui = ui, server = server)

Solution

  • Edit: Here an updated version using updateControlbar can be found.

    Please see the following:

    ## app.R ##
    library(shiny)
    library(shinydashboard)
    library(shinydashboardPlus)
    library(DT)
    library(shinyWidgets)
    library(shinyjs)
    
    ui <- dashboardPagePlus(
      dashboardHeaderPlus(
        enable_rightsidebar = TRUE,
        rightSidebarIcon = "gears",
        fixed = T
      ),
      dashboardSidebar(),
      dashboardBody(
        useShinyjs(),
        tags$hr(),
        tabsetPanel(
          id ="tabA",
          type = "tabs",
          tabPanel("Front",icon = icon("accusoft")),
          tabPanel("Data", icon = icon("table")
          )
        )
      ),
      rightsidebar = rightSidebar()
    )
    
    server <- function(input, output) {
      observe({
        if (input$tabA == "Front") {
          hide(selector = "body > div.wrapper > header > nav > div:nth-child(4) > ul")
          addClass(selector = "body", class = "sidebar-collapse")
          removeClass(selector = "body", class = "control-sidebar-open")
        } else {
          show(selector = "body > div.wrapper > header > nav > div:nth-child(4) > ul")
          removeClass(selector = "body", class = "sidebar-collapse")
          addClass(selector = "body", class = "control-sidebar-open")
        }
      })
    }
    
    shinyApp(ui = ui, server = server)