0

Its quite quick and easy to instantiate a ShinyReForms for a Shiny app by following the example at https://piotrbajger.github.io/shinyreforms/articles/tutorial.html. I cannot though see how to get it working in a Shiny module.

The app below is a smaller version of the example app, presented in a module, and with an extra output which shows the result of the namespaced checkbox.

The ‘submit’ button doesn’t return the expected output though. I’m opining that this is a name space issue, though I can’t see where to wrap an id with something like... ns(“myformid”).

Any suggestions please. Thanks

library(shiny)
library(shinyreforms)

modUI <- function(id) {
  ns <- NS(id)
  tagList(
    uiOutput(ns('form_ui')),
  )
}

modServer <- function(id) {
  moduleServer(
    id,
    function(input, output, session) {

      ns <- session$ns

      myForm <- shinyreforms::ShinyForm$new(
        "myForm",
        submit = "Submit",
        onSuccess = function(self, input, output) {
          yourName <- self$getValue(input, "name_input")
          output$result <- shiny::renderText({
            paste0("Your name is ", yourName, "!")
          })
        },
        onError = function(self, input, output) {
          output$result <- shiny::renderText({
            "Form is invalid!"
          })
        },
        shinyreforms::validatedInput(
          shiny::checkboxInput(ns("checkbox"), label = "I accept!"),
          validators = c(
            shinyreforms::ValidatorRequired()
          )
        )
      )


      myForm$server(input, output)


      output$ot_checkox <- renderUI({

        h4(input$checkbox, style = 'color: blue;')


      })

      output$form_ui <- renderUI({

        tagList(
          shiny::tags$h1("Example ShinyForm!"),
          myForm$ui(),  # <- ShinyForm will be included here!
          uiOutput(ns('ot_checkox')),
          shiny::tags$h4("Result:"),
          shiny::textOutput(ns("result"))
        )

      })

    }
  )
}


ui <- shiny::bootstrapPage(
  shinyreforms::shinyReformsPage(
    shiny::fluidPage(
      modUI('mod_id')
    )
  )
)

server <- function(input, output, session) {

  modServer('mod_id')

}

shinyApp(ui, server)
CallumH
  • 751
  • 1
  • 7
  • 22

0 Answers0