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
id
of thetabsetPanel
(ornavlistPanel
ornavbarPage
) into whichtab
will be inserted/removed.- tab
The item to be added (must be created with
tabPanel
, or withnavbarMenu
).- target
If inserting: the
value
of an existingtabPanel
, next to whichtab
will be added. If removing: thevalue
of thetabPanel
that you want to remove. See Details if you want to insert next to/remove an entirenavbarMenu
instead.- position
Should
tab
be added before or after thetarget
tab?- select
Should
tab
be 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)
tab
to the beginning (or end) of an existingnavbarMenu()
(which must itself be part of an existingnavbarPage()
). In this case, this argument should be themenuName
that you gave yournavbarMenu
when you first created it (by default, this is equal to the value of thetitle
argument). Note that you still need to set theinputId
argument to whatever theid
of the parentnavbarPage
is. IfmenuName
is left asNULL
,tab
will be prepended (or appended) to whateverinputId
is.
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
tabPanel
s (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)
}