-
-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature Request]: Option to not show module_add #330
Labels
Comments
This was referenced Jun 21, 2023
kartikeyakirar
added a commit
that referenced
this issue
Jun 21, 2023
this fixes #330 In this pull request (PR), the module_add parameter is introduced in teal.slice::filter_settings(). This addition conceals the module that handles the display of dropdowns containing variables used to add a filter from filteredData.R. ### testing module ``` funny_module <- function (label = "Filter states", datanames = "all") { checkmate::assert_string(label) module( label = label, filters = datanames, ui = function(id, ...) { ns <- NS(id) div( h2("The following filter calls are generated:"), verbatimTextOutput(ns("filter_states")), verbatimTextOutput(ns("filter_calls")), actionButton(ns("reset"), "reset_to_default") ) }, server = function(input, output, session, data, filter_panel_api) { checkmate::assert_class(data, "tdata") observeEvent(input$reset, set_filter_state(filter_panel_api, default_filters)) output$filter_states <- renderPrint({ logger::log_trace("rendering text1") filter_panel_api %>% get_filter_state() }) output$filter_calls <- renderText({ logger::log_trace("rendering text2") attr(data, "code")() }) } ) } ``` ### CDISC example ``` options(teal.log_level = "TRACE", teal.show_js_log = TRUE) #options("teal.bs_theme" = bslib::bs_theme(version = 4)) #options(shiny.trace = TRUE) devtools::load_all("teal.slice") library(teal) library(scda) ADSL <- synthetic_cdisc_data("latest")$adsl ADSL$empty <- NA ADSL$logical1 <- FALSE ADSL$logical <- sample(c(TRUE, FALSE), size = nrow(ADSL), replace = TRUE) ADSL$numeric <- rnorm(nrow(ADSL)) ADSL$categorical2 <- sample(letters[1:10], size = nrow(ADSL), replace = TRUE) ADSL$categorical <- sample(letters[1:3], size = nrow(ADSL), replace = TRUE, prob = c(.1, .3, .6)) ADSL$date <- Sys.Date() + seq_len(nrow(ADSL)) ADSL$date2 <- rep(Sys.Date() + 1:3, length.out = nrow(ADSL)) ADSL$datetime <- Sys.time() + seq_len(nrow(ADSL)) * 3600 * 12 ADSL$datetime2 <- rep(Sys.time() + 1:3 * 43200, length.out = nrow(ADSL)) ADSL$numeric[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$numeric[sample(1:nrow(ADSL), size = 10)] <- Inf ADSL$logical[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$date[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$datetime[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$categorical2[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$categorical[sample(1:nrow(ADSL), size = 10)] <- NA ADTTE <- synthetic_cdisc_data("latest")$adtte ADRS <- synthetic_cdisc_data("latest")$adrs ADTTE$numeric <- rnorm(nrow(ADTTE)) ADTTE$numeric[sample(1:nrow(ADTTE), size = 10,)] <- NA default_filters <- filter_settings( filter_var(dataname = "ADSL", varname = "categorical", selected = c("a", "b"), disabled = TRUE), filter_var(dataname = "ADSL", varname = "categorical2", selected = c("a", "b"), disabled = TRUE), filter_var(dataname = "ADSL", varname = "numeric", selected = c(0, 140), keep_na = TRUE, keep_inf = TRUE, disabled = TRUE), filter_var(dataname = "ADSL", varname = "logical", selected = c(T), keep_na = TRUE, keep_inf = TRUE, disabled = TRUE), filter_var(dataname = "ADSL", varname = "datetime", disabled = TRUE), filter_var(dataname = "ADSL", varname = "date2", disabled = TRUE), filter_expr(id = "AF", title = "ADULT FEMALE", dataname = "ADSL", expr = "SEX %in% 'F' & AGE >= 18L", disabled = TRUE), filter_expr(id = "SE", title = "Safety-Evaluable", dataname = "ADSL", expr = "SAFFL == 'Y'", disabled = TRUE), filter_var(dataname = "ADSL", varname = "COUNTRY", selected = c("USA", "CAN", "JPN"), fixed = T, disabled = TRUE), count_type = "all", #include_varnames = list(ADSL = c("SEX", "categorical2", "numeric", "logical", "date", "datetime", "date2", "datetime2", "COUNTRY")), exclude_varnames = list( ADTTE = intersect(colnames(ADSL), colnames(ADTTE)), ADRS = colnames(ADSL) ), module_add = FALSE ) data <- cdisc_data( cdisc_dataset("ADSL", ADSL), cdisc_dataset("ADTTE", ADTTE), cdisc_dataset("ADRS", ADRS) ) app <- init( data = data, modules = list( tm_data_table( variables_selected = list(ADSL = c("STUDYID", "USUBJID", "SUBJID", "SITEID", "AGE", "SEX")), dt_args = list(caption = "ADSL Table Caption") ), funny_module() ), filter = default_filters ) runApp(app) ``` --------- Signed-off-by: kartikeya kirar <kirar.kartikeya1@gmail.com> Co-authored-by: kartikeya <kartikeya.kirar@unicle.life> Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Dawid Kałędkowski <6959016+gogonzo@users.noreply.github.com> Co-authored-by: 27856297+dependabot-preview[bot]@users.noreply.github.com <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: Aleksander Chlebowski <114988527+chlebowa@users.noreply.github.com>
kartikeyakirar
added a commit
to insightsengineering/teal
that referenced
this issue
Jun 21, 2023
this fixes insightsengineering/teal.slice#330 Here in this PR , parameter module_add is being added to teal::teal_filters() which passes parameter value to teal.slice::filter_settings() function. Testing code: ``` options(teal.log_level = "TRACE", teal.show_js_log = TRUE) # options("teal.bs_theme" = bslib::bs_theme(version = 5)) # options(shiny.trace = TRUE) # todo: change groupCheckbox to include locked (not able to interact with) # change groupCheckbox to have some colors (instead of grey) # todo: available filter should present information about selected values (for example tooltip) library(shiny) library(scda) library(scda.2022) library(teal.data) library(teal.transform) library(teal.modules.general) pkgload::load_all() funny_module <- function (label = "Filter states", datanames = "all") { checkmate::assert_string(label) module( label = label, filters = datanames, ui = function(id, ...) { ns <- NS(id) div( h2("The following filter calls are generated:"), verbatimTextOutput(ns("filter_states")), verbatimTextOutput(ns("filter_calls")), actionButton(ns("reset"), "reset_to_default") ) }, server = function(input, output, session, data, filter_panel_api) { checkmate::assert_class(data, "tdata") observeEvent(input$reset, set_filter_state(filter_panel_api, default_filters)) output$filter_states <- renderPrint({ logger::log_trace("rendering text1") filter_panel_api %>% get_filter_state() }) output$filter_calls <- renderText({ logger::log_trace("rendering text2") attr(data, "code")() }) } ) } ADSL <- synthetic_cdisc_data("latest")$adsl ADSL$empty <- NA ADSL$logical1 <- FALSE ADSL$logical <- sample(c(TRUE, FALSE), size = nrow(ADSL), replace = TRUE) ADSL$numeric <- rnorm(nrow(ADSL)) ADSL$categorical2 <- sample(letters[1:10], size = nrow(ADSL), replace = TRUE) ADSL$categorical <- sample(letters[1:3], size = nrow(ADSL), replace = TRUE, prob = c(.1, .3, .6)) ADSL$date <- Sys.Date() + seq_len(nrow(ADSL)) ADSL$date2 <- rep(Sys.Date() + 1:3, length.out = nrow(ADSL)) ADSL$datetime <- Sys.time() + seq_len(nrow(ADSL)) * 3600 * 12 ADSL$datetime2 <- rep(Sys.time() + 1:3 * 43200, length.out = nrow(ADSL)) ADSL$numeric[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$numeric[sample(1:nrow(ADSL), size = 10)] <- Inf ADSL$logical[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$date[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$datetime[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$categorical2[sample(1:nrow(ADSL), size = 10)] <- NA ADSL$categorical[sample(1:nrow(ADSL), size = 10)] <- NA ADTTE <- synthetic_cdisc_data("latest")$adtte ADRS <- synthetic_cdisc_data("latest")$adrs ADTTE$numeric <- rnorm(nrow(ADTTE)) ADTTE$numeric[sample(1:nrow(ADTTE), size = 10,)] <- NA default_filters <- teal::teal_filters( filter_var(dataname = "ADSL", varname = "categorical", selected = c("a", "b"), id = "categorical", locked = TRUE), filter_var(dataname = "ADSL", varname = "categorical2", selected = c("a", "b"), locked = TRUE), filter_var(dataname = "ADSL", varname = "numeric", selected = c(0, 140), keep_na = TRUE, keep_inf = TRUE), filter_var(dataname = "ADSL", varname = "logical", selected = c(T), keep_na = TRUE, keep_inf = TRUE), filter_var(dataname = "ADSL", varname = "datetime"), filter_var(dataname = "ADSL", varname = "date2"), filter_expr(id = "AF", title = "ADULT FEMALE", dataname = "ADSL", expr = "SEX %in% 'F' & AGE >= 18L"), filter_expr(id = "SE", title = "Safety-Evaluable", dataname = "ADSL", expr = "SAFFL == 'Y'"), filter_var(dataname = "ADSL", varname = "COUNTRY", selected = c("USA", "CAN", "JPN"), fixed = TRUE), count_type = "all", include_varnames = list(ADSL = c("SEX", "categorical", "categorical2", "numeric", "logical", "date", "datetime", "date2", "datetime2", "COUNTRY")), exclude_varnames = list( ADTTE = intersect(colnames(ADSL), colnames(ADTTE)), ADRS = colnames(ADSL) ), mapping = list( `table` = "categorical" ), module_specific = TRUE, module_add = FALSE # set it to true for seeing filter add module ) app <- init( data = cdisc_data( cdisc_dataset("ADSL", ADSL), cdisc_dataset("ADTTE", ADTTE), cdisc_dataset("ADRS", ADRS) ), modules = modules( tm_data_table( "table", variables_selected = list(ADSL = c("STUDYID", "USUBJID", "SUBJID", "SITEID", "AGE", "SEX")), dt_args = list(caption = "ADSL Table Caption") ), modules( label = "tab1", funny_module("funny", datanames = NULL), funny_module("funny2", datanames = "ADTTE") # will limit datanames to ADTTE and ADSL (parent) ) ), filter = default_filters ) runApp(app) ``` Co-authored-by: kartikeya <kartikeya.kirar@unicle.life>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Feature description
We need an argument in
filter_settings
to disableAdd filter variable
module.. Imagine aplications where filters are pre-specified where user shouldn't add any new filter (except those specified before by app developer).I'm not sure about the argument name, I propose
filter_settings(..., module_add = TRUE)
which by default will show the module.The text was updated successfully, but these errors were encountered: