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 thetabsetPanel(ornavlistPanelornavbarPage) into whichtabwill be inserted/removed.- tab
The item to be added (must be created with
tabPanel, or withnavbarMenu).- target
If inserting: the
valueof an existingtabPanel, next to whichtabwill be added. If removing: thevalueof thetabPanelthat you want to remove. See Details if you want to insert next to/remove an entirenavbarMenuinstead.- position
Should
tabbe added before or after thetargettab?- select
Should
tabbe selected upon being inserted?- session
The shiny session within which to call this function.
This argument should only be used when you want to prepend (or append)
tabto the beginning (or end) of an existingnavbarMenu()(which must itself be part of an existingnavbarPage()). In this case, this argument should be themenuNamethat you gave yournavbarMenuwhen you first created it (by default, this is equal to the value of thetitleargument). Note that you still need to set theinputIdargument to whatever theidof the parentnavbarPageis. IfmenuNameis left asNULL,tabwill be prepended (or appended) to whateverinputIdis.
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)
}