In this example (https://yuchenw.shinyapps.io/shinystore_de/), I have designed a simple app with two selectizeInput
. The choices of the second selectizeInput
depends on the selected results of the first selectizeInput
. My goal is to design an app that uses the shinyStore
package (https://github.com/trestletech/shinyStore) to save the selected values using the local storage. Next time when users open the app using the same web browser, I hope the values remain.
However, the current is not working. In the following example, I first selected 2
for the first selectizeInput
, and then selected f
for the second selectizeInput
.
I then clicked the Save
button, copied the URL, and pasted it in a new web browser. The selected values for the first selectizeInput
is 2
as expected, but the selectizeInput
did not show f
.
My guess is I used updateSelectizeInput
twice for the second selectizeInput
, which leads to confusion. Please see my code as follows and let me know if you have any insights.
Update
Here is a follow-up question (shinyStore cannot restore the selected values of the selectizeInput if the choices are depends on another input and server = TRUE) I asked, which uses server = TRUE
for the updateSelectizeInput
and the same strategy is not working.
# Load packages
library(shiny)
library(shinyStore)
ui <- fluidPage(
headerPanel("shinyStore Example"),
sidebarLayout(
sidebarPanel = sidebarPanel(
initStore("store", "shinyStore-ex1"),
selectizeInput(inputId = "Select1", label = "Select A Number",
choices = as.character(1:3),
selected = "1",
options = list(
placeholder = 'Please select a number',
onInitialize = I('function() { this.setValue(""); }'),
create = TRUE
))
),
mainPanel = mainPanel(
fluidRow(
selectizeInput(inputId = "Select2",
label = "Select A Letter",
choices = character(0),
options = list(
placeholder = 'Please select a number in the sidebar first',
onInitialize = I('function() { this.setValue(""); }'),
create = TRUE
)),
actionButton("save", "Save", icon("save")),
actionButton("clear", "Clear", icon("stop"))
)
)
)
)
server <- function(input, output, session) {
dat <- data.frame(
Number = as.character(rep(1:3, each = 3)),
Letter = letters[1:9]
)
observeEvent(input$Select1, {
updateSelectizeInput(session, inputId = "Select2",
choices = dat$Letter[dat$Number %in% input$Select1])
})
observe({
if (input$save <= 0){
updateSelectizeInput(session, inputId = "Select1", selected = isolate(input$store)$Select1)
updateSelectizeInput(session, inputId = "Select2", selected = isolate(input$store)$Select2)
}
updateStore(session, name = "Select1", isolate(input$Select1))
updateStore(session, name = "Select2", isolate(input$Select2))
})
observe({
if (input$clear > 0){
updateSelectizeInput(session, inputId = "Select1",
options = list(
placeholder = 'Please select a number in the sidebar first',
onInitialize = I('function() { this.setValue(""); }'),
create = TRUE
))
updateSelectizeInput(session, inputId = "Select2",
choices = character(0),
options = list(
placeholder = 'Please select a number',
onInitialize = I('function() { this.setValue(""); }'),
create = TRUE
))
updateStore(session, name = "Select1", NULL)
updateStore(session, name = "Select2", NULL)
}
})
}
shinyApp(ui, server)