% 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()}} }