From e4a61f57fd8a937625234bc3a10f9b789a8a8c44 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 19 Mar 2024 20:17:43 +0530 Subject: [PATCH 1/3] fix: trigger the reactivity on input$vals when input$col is changed --- R/data_extract_filter_module.R | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/R/data_extract_filter_module.R b/R/data_extract_filter_module.R index 3498d8f2..3f65ae6a 100644 --- a/R/data_extract_filter_module.R +++ b/R/data_extract_filter_module.R @@ -61,9 +61,8 @@ data_extract_filter_srv <- function(id, datasets, filter) { ) }) - output$html_vals_container <- renderUI({ + vals_options <- reactive({ req(input$col) - choices <- value_choices( data = datasets[[filter$dataname]](), var_choices = input$col, @@ -77,16 +76,37 @@ data_extract_filter_srv <- function(id, datasets, filter) { } else { choices[1L] } + list(choices = choices, selected = selected) + }) + output$html_vals_container <- renderUI({ teal.widgets::optionalSelectInput( inputId = ns("vals"), label = filter$label, - choices = choices, - selected = selected, + choices = vals_options()$choices, + selected = vals_options()$selected, multiple = filter$multiple, fixed = filter$fixed ) }) + + # Since we want the input$vals to depend on input$col for downstream calculations, + # we trigger reactivity by reassigning them. Otherwise, when input$col is changed without + # a change in input$val, the downstream computations will not be triggered. + observeEvent(input$col, { + teal.widgets::updateOptionalSelectInput( + session = session, + inputId = "vals", + choices = "", + selected = "" + ) + teal.widgets::updateOptionalSelectInput( + session = session, + inputId = "vals", + choices = vals_options()$choices, + selected = vals_options()$selected + ) + }) } ) } From 55add9be8f1ed91e87782e8c4dbc7b069f6f2d18 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 19 Mar 2024 20:40:11 +0530 Subject: [PATCH 2/3] feat: restoring the state from the bookmark --- R/data_extract_filter_module.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/data_extract_filter_module.R b/R/data_extract_filter_module.R index 3f65ae6a..1d060249 100644 --- a/R/data_extract_filter_module.R +++ b/R/data_extract_filter_module.R @@ -72,9 +72,9 @@ data_extract_filter_srv <- function(id, datasets, filter) { selected <- if (!is.null(filter$selected)) { filter$selected } else if (filter$multiple) { - choices + restoreInput(ns("vals"), choices) } else { - choices[1L] + restoreInput(ns("vals"), choices[1L]) } list(choices = choices, selected = selected) }) From 7803e1879b6eed0cebcf46fbea49896925d16106 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 19 Mar 2024 21:23:41 +0530 Subject: [PATCH 3/3] chore: simplify calls as suggested by @chlebowa --- R/data_extract_filter_module.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/data_extract_filter_module.R b/R/data_extract_filter_module.R index 1d060249..07e66a74 100644 --- a/R/data_extract_filter_module.R +++ b/R/data_extract_filter_module.R @@ -72,10 +72,11 @@ data_extract_filter_srv <- function(id, datasets, filter) { selected <- if (!is.null(filter$selected)) { filter$selected } else if (filter$multiple) { - restoreInput(ns("vals"), choices) + choices } else { - restoreInput(ns("vals"), choices[1L]) + choices[1L] } + selected <- restoreInput(ns("vals"), selected) list(choices = choices, selected = selected) })