Dynamically insert/remove a tabPanel — insertTab
R/insert-tab.R
  Description
Dynamically insert or remove a tabPanel() (or a
navbarMenu()) from an existing tabsetPanel(),
navlistPanel() or navbarPage().
insertTab(
  inputId,
  tab,
  target = NULL,
  position = c("after", "before"),
  select = FALSE,
  session = getDefaultReactiveDomain()
)
prependTab(
  inputId,
  tab,
  select = FALSE,
  menuName = NULL,
  session = getDefaultReactiveDomain()
)
appendTab(
  inputId,
  tab,
  select = FALSE,
  menuName = NULL,
  session = getDefaultReactiveDomain()
)
removeTab(inputId, target, session = getDefaultReactiveDomain())Arguments
- inputId
- The - idof the- tabsetPanel(or- navlistPanelor- navbarPage) into which- tabwill be inserted/removed.
- tab
- The item to be added (must be created with - tabPanel, or with- navbarMenu).
- target
- If inserting: the - valueof an existing- tabPanel, next to which- tabwill be added. If removing: the- valueof the- tabPanelthat you want to remove. See Details if you want to insert next to/remove an entire- navbarMenuinstead.
- position
- Should - tabbe added before or after the- targettab?
- select
- Should - tabbe selected upon being inserted?
- session
- The shiny session within which to call this function. 
- menuName
- This argument should only be used when you want to prepend (or append) - tabto the beginning (or end) of an existing- navbarMenu()(which must itself be part of an existing- navbarPage()). In this case, this argument should be the- menuNamethat you gave your- navbarMenuwhen you first created it (by default, this is equal to the value of the- titleargument). Note that you still need to set the- inputIdargument to whatever the- idof the parent- navbarPageis. If- menuNameis left as- NULL,- tabwill be prepended (or appended) to whatever- inputIdis.
Details
When you want to insert a new tab before or after an existing tab, you
should use insertTab. When you want to prepend a tab (i.e. add a
tab to the beginning of the tabsetPanel), use prependTab.
When you want to append a tab (i.e. add a tab to the end of the
tabsetPanel), use appendTab.
For navbarPage, you can insert/remove conventional
tabPanels (whether at the top level or nested inside a
navbarMenu), as well as an entire navbarMenu().
For the latter case, target should be the menuName that
you gave your navbarMenu when you first created it (by default,
this is equal to the value of the title argument).
See also
Examples
## Only run this example in interactive R sessions
if (interactive()) {
# example app for inserting/removing a tab
ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      actionButton("add", "Add 'Dynamic' tab"),
      actionButton("remove", "Remove 'Foo' tab")
    ),
    mainPanel(
      tabsetPanel(id = "tabs",
        tabPanel("Hello", "This is the hello tab"),
        tabPanel("Foo", "This is the foo tab"),
        tabPanel("Bar", "This is the bar tab")
      )
    )
  )
)
server <- function(input, output, session) {
  observeEvent(input$add, {
    insertTab(inputId = "tabs",
      tabPanel("Dynamic", "This a dynamically-added tab"),
      target = "Bar"
    )
  })
  observeEvent(input$remove, {
    removeTab(inputId = "tabs", target = "Foo")
  })
}
shinyApp(ui, server)
# example app for prepending/appending a navbarMenu
ui <- navbarPage("Navbar page", id = "tabs",
  tabPanel("Home",
    actionButton("prepend", "Prepend a navbarMenu"),
    actionButton("append", "Append a navbarMenu")
  )
)
server <- function(input, output, session) {
  observeEvent(input$prepend, {
    id <- paste0("Dropdown", input$prepend, "p")
    prependTab(inputId = "tabs",
      navbarMenu(id,
        tabPanel("Drop1", paste("Drop1 page from", id)),
        tabPanel("Drop2", paste("Drop2 page from", id)),
        "------",
        "Header",
        tabPanel("Drop3", paste("Drop3 page from", id))
      )
    )
  })
  observeEvent(input$append, {
    id <- paste0("Dropdown", input$append, "a")
    appendTab(inputId = "tabs",
      navbarMenu(id,
        tabPanel("Drop1", paste("Drop1 page from", id)),
        tabPanel("Drop2", paste("Drop2 page from", id)),
        "------",
        "Header",
        tabPanel("Drop3", paste("Drop3 page from", id))
      )
    )
  })
}
shinyApp(ui, server)
}