Display shiny widget only for specific tabPanel in shiny dashboard

18 Views Asked by At

I want to display a ashiny widget only when specific tab is selected. Now I cannot display it all.

## app.R ##
library(shiny)
library(shinydashboard)
library(shinyWidgets)
ui <- dashboardPage(
  dashboardHeader(title = "P-T-H2O-An"),
  dashboardSidebar(
    uiOutput("filter1")
  ),
  dashboardBody(
    tabsetPanel(
      id="tabs",
      tabPanel(strong("PLAGIOCLASE SATURATION CHECK")),
      tabPanel(strong("AN CONTENT")),
      tabPanel(strong("THERMOMETRY")),
      tabPanel(strong("HYGROMETRY")),
      tabPanel(strong("BAROMETRY")),
      tabPanel(strong("Filtering & Saving Estimates"))
      
      
    )
  )
)

server <- function(input, output) {
  
  
  output$filter1<-renderUI({
    if(input$tabs=="PLAGIOCLASE SATURATION CHECK"){
      pickerInput(
        inputId = "x1",
        label = "Select all option",
        choices = rownames(mtcars),
        multiple = F,
        options = list(`actions-box` = TRUE)
      )
    }
    else{
      return(NULL)
    }
  })
}

shinyApp(ui, server)
1

There are 1 best solutions below

0
Soren On BEST ANSWER

Your input tab name is "strong("PLAGIOCLASE SATURATION CHECK")" and this results in the HTML/Text value passed to the "input" as

<strong>PLAGIOCLASE SATURATION CHECK</strong>

Therefore "==" will fail as it is not actually the name being read-in.

Try instead:

  output$filter1<-renderUI({
    ui <- NULL
    if(grepl("PLAGIOCLASE SATURATION CHECK",input$tabs)) {
      ui <- pickerInput(
        inputId = "x1",
        label = "Select all option",
        choices = rownames(mtcars),
        multiple = F,
        options = list(`actions-box` = TRUE)
      )
    }
    return (ui)
  })