Hassan Camil David
Hassan Camil David

Reputation: 31

Shiny actionbutton to set a customized default

In this shiny App (code below), I need that the button labeled 'Customized' returns:

This necessity is a bit similar to the reset button available on the R package 'shinyjs', with the diference of that the reset button returns to the code's default.

library(shiny)
library(shinyjs)

shinyApp(
  ui <- fluidPage(
    
    sidebarPanel(
      fluidRow(
        shinyjs::useShinyjs(),
        id = "panel_vars",
        # Buttons
        uiOutput("varx"),
        uiOutput("vary"),
        numericInput("ptSize", "Point size",
                     min=.1, max=5, value = 2),
        actionButton("p1", 'Reset variables XY'),
        helpText(""),
        actionButton("p2", 'Customized')
      )
    ),
    
    mainPanel(
      plotOutput("plot")
    )
  ),
  
  server <- function(input, output) {
    
    getModel <- reactive({
      names(mtcars)
    })
    
    output$varx <- renderUI({
      selectInput("varsel.x", "Select var X",
                  choices = as.list(getModel()), multiple = F)
    })
    
    output$vary <- renderUI({
      selectInput("varsel.y", "Select var Y",
                  choices = as.list(getModel()), multiple = F)
      
    })
    
    observeEvent(input$p1, {
      shinyjs::reset("panel_vars")
    })
    
    output$plot <- renderPlot({
      
      p <- mtcars %>% ggplot(aes_string(x=input$varsel.x, y=input$varsel.y))+
        geom_point(size=input$ptSize)
      
      p
      
    })
  }
)

Upvotes: 1

Views: 47

Answers (1)

Pork Chop
Pork Chop

Reputation: 29387

You can simply use updateSelectInput and updateNumericInput to do so:

library(shiny)
library(shinyjs)
library(dplyr)
library(ggplot2)

shinyApp(
  ui <- fluidPage(
    
    sidebarPanel(
      fluidRow(
        shinyjs::useShinyjs(),
        id = "panel_vars",
        # Buttons
        uiOutput("varx"),
        uiOutput("vary"),
        numericInput("ptSize", "Point size",
                     min=.1, max=5, value = 2),
        actionButton("p1", 'Reset variables XY'),
        helpText(""),
        actionButton("p2", 'Customized')
      )
    ),
    
    mainPanel(
      plotOutput("plot")
    )
  ),
  
  server <- function(input, output,session) {
    
    getModel <- reactive({
      names(mtcars)
    })
    
    output$varx <- renderUI({
      selectInput("varsel.x", "Select var X",
                  choices = as.list(getModel()), multiple = F)
    })
    
    output$vary <- renderUI({
      selectInput("varsel.y", "Select var Y",
                  choices = as.list(getModel()), multiple = F)
      
    })
    
    observeEvent(input$p1, {
      shinyjs::reset("panel_vars")
    })
    
    output$plot <- renderPlot({
      req(input$varsel.x,input$varsel.y,input$ptSize)
      
      p <- mtcars %>% ggplot(aes_string(x=input$varsel.x, y=input$varsel.y))+
        geom_point(size=input$ptSize)
      
      p
      
    })
    
    observeEvent(input$p2, {
      updateSelectInput(session,'varsel.x',selected = 'disp')
      updateSelectInput(session,'varsel.y',selected = 'drat')
      updateNumericInput(session, "ptSize", value = 1.0)
    })
 
  }
)

enter image description here

Upvotes: 3

Related Questions