scenes

Lifecycle: experimental CRAN status Codecov test coverage R-CMD-check

The goal of {scenes} is to make it easy to switch a {shiny} app between alternative UIs. It was designed to abstract the login-wrapper concept implemented in {shinyslack}.

Installation

Install the released version of {scenes} from CRAN:

install.packages("scenes")

Or install the development version of scenes from GitHub with:

# install.packages("remotes")
remotes::install_github("r4ds/scenes")

Use Cases

You can see a demonstration of {scenes} here.

Some examples of how you might use {scenes} to switch between different UIs in a Shiny app:

The Login Wrapper example might look like this:

library(shiny)
library(scenes)

# Define the different scenes for the app
login_ui <- fluidPage(
  textInput("username", "Username"),
  passwordInput("password", "Password"),
  actionButton("login", "Login")
)

main_ui <- fluidPage(
  h1("Welcome"),
  textOutput("username")
)

# Use the `set_scene()` function to define the different scenes, and
# `change_scene()` to switch between them.
ui <- change_scene(
  set_scene(
    main_ui,
    req_has_cookie(
      "validate_login",
      validation_fn = my_validation_fn
    )
  ),
  fall_through = login_ui
)

server <- function(input, output, session) {
  observeEvent(input$login, {
    use_cookies_package_to_save_cookie_fn(input$username, input$password)
  })

  output$username <- renderText({
    input$username
  })
}

shinyApp(ui = ui, server = server)

See {shinyslack} for a fully implemented example.

Similar Packages

Other packages have implemented features in this domain.

Code of Conduct

Please note that the scenes project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.