mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-14 01:18:07 -05:00
* Follow up to #3404: change insertTab()'s default position so that default behavior doesn't change * Update news * Document (GitHub Actions) Co-authored-by: cpsievert <cpsievert@users.noreply.github.com>
165 lines
4.9 KiB
R
165 lines
4.9 KiB
R
% Generated by roxygen2: do not edit by hand
|
|
% Please edit documentation in R/insert-tab.R
|
|
\name{insertTab}
|
|
\alias{insertTab}
|
|
\alias{prependTab}
|
|
\alias{appendTab}
|
|
\alias{removeTab}
|
|
\title{Dynamically insert/remove a tabPanel}
|
|
\usage{
|
|
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{
|
|
\item{inputId}{The \code{id} of the \code{tabsetPanel} (or
|
|
\code{navlistPanel} or \code{navbarPage}) into which \code{tab} will
|
|
be inserted/removed.}
|
|
|
|
\item{tab}{The item to be added (must be created with \code{tabPanel},
|
|
or with \code{navbarMenu}).}
|
|
|
|
\item{target}{If inserting: the \code{value} of an existing
|
|
\code{tabPanel}, next to which \code{tab} will be added.
|
|
If removing: the \code{value} of the \code{tabPanel} that
|
|
you want to remove. See Details if you want to insert next to/remove
|
|
an entire \code{navbarMenu} instead.}
|
|
|
|
\item{position}{Should \code{tab} be added before or after the
|
|
\code{target} tab?}
|
|
|
|
\item{select}{Should \code{tab} be selected upon being inserted?}
|
|
|
|
\item{session}{The shiny session within which to call this function.}
|
|
|
|
\item{menuName}{This argument should only be used when you want to
|
|
prepend (or append) \code{tab} to the beginning (or end) of an
|
|
existing \code{\link[=navbarMenu]{navbarMenu()}} (which must itself be part of
|
|
an existing \code{\link[=navbarPage]{navbarPage()}}). In this case, this argument
|
|
should be the \code{menuName} that you gave your \code{navbarMenu}
|
|
when you first created it (by default, this is equal to the value
|
|
of the \code{title} argument). Note that you still need to set the
|
|
\code{inputId} argument to whatever the \code{id} of the parent
|
|
\code{navbarPage} is. If \code{menuName} is left as \code{NULL},
|
|
\code{tab} will be prepended (or appended) to whatever
|
|
\code{inputId} is.}
|
|
}
|
|
\description{
|
|
Dynamically insert or remove a \code{\link[=tabPanel]{tabPanel()}} (or a
|
|
\code{\link[=navbarMenu]{navbarMenu()}}) from an existing \code{\link[=tabsetPanel]{tabsetPanel()}},
|
|
\code{\link[=navlistPanel]{navlistPanel()}} or \code{\link[=navbarPage]{navbarPage()}}.
|
|
}
|
|
\details{
|
|
When you want to insert a new tab before or after an existing tab, you
|
|
should use \code{insertTab}. When you want to prepend a tab (i.e. add a
|
|
tab to the beginning of the \code{tabsetPanel}), use \code{prependTab}.
|
|
When you want to append a tab (i.e. add a tab to the end of the
|
|
\code{tabsetPanel}), use \code{appendTab}.
|
|
|
|
For \code{navbarPage}, you can insert/remove conventional
|
|
\code{tabPanel}s (whether at the top level or nested inside a
|
|
\code{navbarMenu}), as well as an entire \code{\link[=navbarMenu]{navbarMenu()}}.
|
|
For the latter case, \code{target} should be the \code{menuName} that
|
|
you gave your \code{navbarMenu} when you first created it (by default,
|
|
this is equal to the value of the \code{title} argument).
|
|
}
|
|
\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)
|
|
|
|
}
|
|
}
|
|
\seealso{
|
|
\code{\link[=showTab]{showTab()}}
|
|
}
|