I would like to have dynamic tabs for my shiny app. I tried the below code
## app.R ##
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
checkboxGroupInput("Tabs",
label = h4("tabpanel"),
choices = list("tabs" = "tabs"),
selected = NULL),
checkboxGroupInput("moreTabs",
label = h4("moretabpanel"),
choices = list("moretabs" = "moretabs"),
selected = NULL)
),
dashboardBody(
conditionalPanel(
condition = "input.Tabs == 'tabs'",
tabBox(
title = "intro",
id= "ttabs", width = 8, height = "420px",
tabPanel("Files", dataTableOutput("Files")),
conditionalPanel(
condition = "input.moreTabs == 'moretabs'",
tabPanel("Files1", dataTableOutput("Files1"))
)
)
)
)
)
server <- function(input, output) { }
shinyApp(ui, server)
However, I am not successful to use the tab panel dynamically. It shows only one tab, and on checking, its supposed to show the second tab.
You can dynamically create the ui
as per example below.
Example 1: Using RenderUI
rm(list = ls())
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
checkboxGroupInput("Tabs", label = h4("tabpanel"), choices = list("tabs" = "tabs"),selected = NULL),
checkboxGroupInput("MoreTabs", label = h4("moretabpanel"), choices = list("moretabs" = "moretabs"),selected = NULL)
),
dashboardBody(
uiOutput("ui")
)
)
server <- function(input, output) {
output$ui <- renderUI({
check1 <- input$Tabs == "tabs"
check2 <- input$MoreTabs == "moretabs"
if(length(check1)==0){check1 <- F}
if(length(check2)==0){check2 <- F}
if(check1 && check2){
tabBox(title = "intro",id= "ttabs", width = 8, height = "420px",
tabPanel("Files", dataTableOutput("Files")),
tabPanel("Files1", dataTableOutput("Files1"))
)
}
else if(check1){
tabBox(title = "intro",id= "ttabs", width = 8, height = "420px",tabPanel("Files", dataTableOutput("Files")))
}
else{return(NULL)}
})
}
shinyApp(ui, server)
Example 2: Using conditionalPanel
rm(list = ls())
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
checkboxGroupInput("Tabs", label = h4("tabpanel"), choices = list("tabs" = "tabs"),selected = NULL),
checkboxGroupInput("MoreTabs", label = h4("moretabpanel"), choices = list("moretabs" = "moretabs"),selected = NULL)
),
dashboardBody(
conditionalPanel(
condition = "input.MoreTabs == 'moretabs' && input.Tabs == 'tabs'",
tabBox(
title = "intro",
id= "ttabs", width = 8, height = "420px",
tabPanel("Files",value=1, dataTableOutput("Filesa")),
tabPanel("Files1",value=2, dataTableOutput("Files1a"))
)
),
conditionalPanel(
condition = "input.Tabs == 'tabs' && input.MoreTabs != 'moretabs'",
tabBox(
title = "intro",
id= "ttabs", width = 8, height = "420px",
tabPanel("Files",value=3, dataTableOutput("Files"))
))
))
server <- function(input, output) { }
shinyApp(ui, server)