R: Dynamically insert/remove a tabPanel

insertTab {shiny} | R Documentation

## Dynamically insert/remove a tabPanel

### Description

Dynamically insert or remove a `tabPanel` (or a `navbarMenu`) from an existing `tabsetPanel`, `navlistPanel` or `navbarPage`.

### Usage

    insertTab(inputId, tab, target, position = c("before", "after"),
      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 the `tabsetPanel` (or `navlistPanel` or `navbarPage`) into which `tab` will be inserted/removed.
`tab` | The item to be added (must be created with `tabPanel`, or with `navbarMenu`).
`target` | 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.
`position` | Should `tab` be added before or after the `target` 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 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.

### 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

`showTab`

### 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)

    }

[Package shiny version 1.1.0 Index]