I need to block the user from accessing to other tabs until certain actions are fulfilled.
In this reproducible example, I want to block the user to access the Tab 2
until he pressed the button.
This is how the app looks:
Here's the code for the app:
library(shiny)
ui <- shinyUI(navbarPage("",
tabPanel(h1("Tab1"), value = "nav1",
mainPanel(
br(),
h2("The user must press this button to access the other tab."),
br(),
shiny::actionButton('button', 'press the button')
)
),
tabPanel(h1("Tab2"),
value = "nav2",
h3('Block access until user presses button')
)
)
)
server <- shinyServer(function(input, output) {
})
# Run the application
shinyApp(ui = ui, server = server)
I would like the user to be able to see that Tab2 exists, but make it unclickable until they press the button.
Any ideas?
conditionalPanel
is a better solution but users can still click the tab button, just give them an empty page.Here is an even better solution, let's use some js to disable the tab button unless users click the action button. Users can see the tab button but it's gray and unclickable on start:
library(shiny)
ui <- shinyUI(navbarPage(
"",
tabPanel(
h1("Tab1"),
value = "nav1",
mainPanel(
br(),
h2("The user must press this button to access the other tab."),
br(),
shiny::actionButton('button', 'press the button', onclick = "$(tab).removeClass('disabled')")
)
),
tabPanel(
h1("Tab2"),
value = "nav2",
uiOutput("tab2contents")
),
tags$script(
'
var tab = $(\'a[data-value="nav2"]\').parent().addClass("disabled");
$(function(){
$(tab.parent()).on("click", "li.disabled", function(e) {
e.preventDefault();
return false;
});
});
'
)
))
server <- shinyServer(function(input, output) {
})
# Run the application
shinyApp(ui = ui, server = server)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With