The goal is to have a shiny module ui1.R that loads a second module ui2.R when the button confirm is clicked. I think the issue is that is.null(input$confirm) is always invalidated. What I need instead, is to invalidate the expression only once confirm is clicked. The question is very close to Starting Shiny app after password input, but I am trying to modularize the solution.
ui.R
library(shiny) library(shinyjs) htmlOutput("page") server.R
rm(list = ls()) library(shiny) library(dplyr) library(shinyjs) Logged <- FALSE shinyServer(function(input, output) { source('ui1.R') #login page source('ui2.R') observeEvent(!is.null(input$confirm), { Logged <<- T }) observe({ if (Logged == FALSE) { output$page <- renderUI({ ui1Output('ui1Output') }) output$lsuId <- renderText({ input$lsuId }) } if (Logged == TRUE) { output$page <- renderUI({ ui2 }) } }) callModule(ui1,'ui1') }) ui1.R
library(shinyjs) ui1Output <- function(id, label = "ui1") { ns <- NS(id) shinyUI(fluidPage( useShinyjs(), titlePanel("Form"), div(textInput(ns("lsuId"), "This has to be filled", ""), actionButton(ns("confirm"), "Submit", class = "btn-primary") ) )) } ui1 <- function(input, output, session) { observe({ LSUID <- reactive({ input$lsuId }) shinyjs::toggleState(id = "confirm", condition = LSUID()) }) } ui2.R
ui2<- shinyUI(fluidPage( div("well done!") )) global.R
source('ui1.R') #login page source('ui2.R')