Вот минимально воспроизводимое приложение Shiny. Когда вы нажимаете «GO TO NEXT SCREEN», он создает новую вкладку в наборе вкладок, используя insertTab
. Но затем, если вы вернетесь на вкладку «Вопросы об опросе», когда вы нажмете «GO К СЛЕДУЮЩЕМУ ЭКРАНУ», она создаст вторую вкладку (что плохо).
Как проверить, есть ли contacttab
существует до того, как я попытаюсь insertTab
? Спасибо за любое предложение. (Я попытался shinyjs::disable
, shinyjs::toggle
и shinyjs::toggleState
безуспешно.)
library(shiny)
library(shinyWidgets)
ui <- shinyUI(fluidPage(
titlePanel("Check to See if Tab Exists"),
sidebarPanel(
h2("My Sidepanel"),
tags$a("Brought to you by Stack Overflow", href="http://stackoverflow.com"), width=3
),
mainPanel(
tabsetPanel(id="maintabset",
tabPanel(title="Survey Questions", value="surveytab", fluid=TRUE,
HTML("<h4><font color='blue'>Stuff on my Survey Tab</font></h4>"),
h4("... more stuff ..."),
actionBttn(inputId="gotonext", label="GO TO NEXT SCREEN", color="success",
style="material-flat", block=TRUE)
) # end tabpanel
) # end tabsetpanel
) #end mainpanel
))
server <- shinyServer(function(input, output, session) {
observeEvent(input$gotonext, {
# I ONLY WANT TO INSERTTAB IF CONTACTTAB DOES NOT EXIST YET
insertTab(inputId = "maintabset",
tabPanel(title="Contact Information", value="contacttab",
textInput("email", label=h4("Email:"), value="Enter your email...")
), #endtabpanel
target="surveytab", position="after",
) # end inserttab
# ... but I always want clicking "GO TO NEXT" button to put focus on contacttab
updateTabsetPanel(session, "maintabset", selected="contacttab")
})
})
shinyApp(ui=ui,server=server)