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())
The id
of the tabsetPanel
(or
navlistPanel
or navbarPage
) into which tab
will
be inserted/removed.
The item to be added (must be created with tabPanel
,
or with navbarMenu
).
If inserting: the value
of an existing
tabPanel
, next to which tab
will be added.
If removing: the value
of the tabPanel
that
you want to remove. See Details if you want to insert next to/remove
an entire navbarMenu
instead.
Should tab
be added before or after the
target
tab?
Should tab
be selected upon being inserted?
The shiny session within which to call this function.
This argument should only be used when you want to
prepend (or append) tab
to 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 menuName
that you gave your navbarMenu
when you first created it (by default, this is equal to the value
of the title
argument). Note that you still need to set the
inputId
argument to whatever the id
of the parent
navbarPage
is. If menuName
is left as NULL
,
tab
will be prepended (or appended) to whatever
inputId
is.
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).
## 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)
}