Я создаю приложение, в котором несколько вкладок отображаются на вкладке. Я хотел бы, чтобы пользователь мог создавать идентичную вкладку (с тем же макетом), нажав на вкладку, посвященную ему (это будет более понятно с примером). Следовательно, один пользователь может потенциально создать бесконечное количество одинаковых вкладок. Однако имя, данное входам, должно немного измениться (например, select1
, select2
, et c.), Чтобы эти вновь созданные входы можно было использовать реактивно. Кроме того, вкладки должны называться по количеству кликов. Я знаю, как сделать эту последнюю часть благодаря этому ответу .
Что касается первой части, я попытался использовать модули, поскольку они нацелены на то, чтобы собрать некоторый код в одну функцию, чтобы довольно легко генерировать входные данные. Тем не менее, в приведенном ниже примере приложение можно запустить, но нажатие на вкладку «Больше» не имеет никакого эффекта, тогда как оно должно создать новую вкладку с тем же макетом, что и первая вкладка:
library(shiny)
library(shinyWidgets)
addTab_server <- function(input, output, session, count){
ns <- session$ns
observeEvent(input$tabs, {
if (input$tabs == "More"){
count(count()+1)
name <- paste0("Name ", count())
insertTab(inputId = "tabs",
tabPanel(title = name,
selectInput(ns("select"),
"Choose",
choices = colnames(mtcars))
),
target = "More",
position = "before",
select = TRUE)
}
else {}
})
}
ui <- navbarPage(position = "static-top",
title = "foo",
id = "tabs",
tabPanel(title = "Name 1",
fluidRow(
selectInput("select1",
"Choose",
choices = colnames(mtcars))
)),
tabPanel(title = "More",
icon = icon("plus"),
fluidRow()
)
)
server <- function(input, output) {
callModule(addTab_server, "try", count = reactiveVal(1))
}
shinyApp(ui = ui, server = server)
Кто-нибудь знаете, как это сделать?