diff --git a/DESCRIPTION b/DESCRIPTION index 7e508c44..d95d4671 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,7 @@ Package: clinsight Title: ClinSight Version: 0.1.0.9008 +DevexVersion: 9000 Authors@R: c( person("Leonard Daniƫl", "Samson", , "lsamson@gcp-service.com", role = c("cre", "aut"), comment = c(ORCID = "0000-0002-6252-7639")), diff --git a/NEWS.md b/NEWS.md index f61c66bd..d6de4f11 100644 --- a/NEWS.md +++ b/NEWS.md @@ -13,6 +13,10 @@ - When using the `shinyproxy` deployment configuration, the user name is now expected to be base64 encoded, and will now be base64 encoded by `clinsight` by default, so that the app can also handle non-ASCII signs in user names that are stored in HTTP headers. To display the user name correctly, use base64 encoding in the `application.yml` in ShinyProxy settings (for example: `http-headers.X_SP_USERNAME: "#{T(java.util.Base64).getEncoder().encodeToString(oidcUser.getFullName().getBytes())}"`). +## `devex` changes +- Added `Excel` download button to Queries table & patient listings that need review. +- Added helper function to automatically determine when adding said excel button is appropriate. + # clinsight 0.1.0 ## Changed diff --git a/R/fct_data_helpers.R b/R/fct_data_helpers.R index 30407059..a94e9ea5 100644 --- a/R/fct_data_helpers.R +++ b/R/fct_data_helpers.R @@ -505,6 +505,35 @@ add_missing_columns <- function( data } +#' Configure DT helper +#' +#' Small wrapper that helps handle some messiness preparing the correct `DT` +#' dom, extensions, & options when needed. Specifically, when & how to add an +#' Excel download button. +#' +#' @param data A data frame used for display in a DT table. Number of rows will +#' be assessed +#' @param table_name character string, usually the form name +#' +#' @keywords internal +#' @return list with three named objects: `dom`, `exts`, and `opts` +dt_config <- function(data, table_name = "form") { + default_args<- formals(datatable_custom) + if(nrow(data) > 0 & isTRUE(get_golem_config("allow_listing_download"))) { + dt_dom <- 'Bfti' + dt_exts <- c("Buttons", eval(default_args$extensions)) + dt_opts <- list(buttons=list(list(extend = 'excel', + text = '', + filename = paste("clinsight", gsub(" ", "-", table_name), sep = ".") + ))) + } else { + dt_dom <- default_args$dom |> eval() + dt_exts <- default_args$extensions |> eval() + dt_opts <- default_args$options |> eval() + } + return(list(dom = dt_dom, exts = dt_exts, opts = dt_opts)) +} + #' Custom interactive datatable #' #' Small wrapper around [DT::datatable()]. Will be used to create tables in a diff --git a/R/mod_common_forms.R b/R/mod_common_forms.R index 09f0f833..5551c9a6 100644 --- a/R/mod_common_forms.R +++ b/R/mod_common_forms.R @@ -132,8 +132,16 @@ mod_common_forms_server <- function( )) |> adjust_colnames("^SAE ") if(!input$show_all_data) SAE_data$subject_id <- NULL - datatable_custom(SAE_data, rename_vars = table_names, rownames= FALSE, - title = "Serious Adverse Events", escape = FALSE) + + # determine DT dom / exts / opts + DT <- dt_config(SAE_data, + table_name = paste("SAE", ifelse(input$show_all_data, + "all_patients", r$subject_id), sep = ".")) + datatable_custom( + SAE_data, rename_vars = table_names, rownames= FALSE, + title = "Serious Adverse Events", escape = FALSE, + dom = DT$dom, extensions = DT$exts, options = DT$opts + ) }) output[["common_form_table"]] <- DT::renderDT({ @@ -145,8 +153,14 @@ mod_common_forms_server <- function( dplyr::select(-dplyr::starts_with("SAE")) } if(!input$show_all_data) df$subject_id <- NULL - datatable_custom(df, rename_vars = table_names, rownames= FALSE, - title = form, escape = FALSE) + + # determine DT dom / exts / opts + DT <- dt_config(df, + table_name = paste(form, ifelse(input$show_all_data, + "all_patients", r$subject_id), sep = ".")) + datatable_custom( + df, rename_vars = table_names, rownames= FALSE,title = form, + escape = FALSE, dom = DT$dom, extensions = DT$exts, options = DT$opts) }) }) diff --git a/R/mod_queries.R b/R/mod_queries.R index f5e45da4..89f943d3 100644 --- a/R/mod_queries.R +++ b/R/mod_queries.R @@ -144,11 +144,17 @@ mod_queries_server <- function(id, r, navinfo, all_forms, db_path, table_names){ query_cols <- c("resolved", query_cols) table_title <- "All queries" } + + # determine DT dom / exts / opts + DT <- dt_config(initial_queries()[query_cols], + table_name = paste(ifelse(input$show_resolved, "all", "open"), + "queries", sep = ".")) datatable_custom( initial_queries()[query_cols], table_names, title = table_title, - callback = dblclick_to_form(ns("go_to_form")) + callback = dblclick_to_form(ns("go_to_form")), + dom = DT$dom, extensions = DT$exts, options = DT$opts ) }) diff --git a/R/mod_study_forms.R b/R/mod_study_forms.R index bbf45905..8db7185f 100644 --- a/R/mod_study_forms.R +++ b/R/mod_study_forms.R @@ -223,7 +223,12 @@ mod_study_forms_server <- function( output[["table"]] <- DT::renderDT({ req(table_data_active()) - datatable_custom(table_data_active(), table_names, escape = FALSE) + # determine DT dom / exts / opts + DT <- dt_config(table_data_active(), + table_name = paste(form, ifelse(input$show_all, + "all_patients", r$subject_id), sep = ".")) + datatable_custom(table_data_active(), table_names, escape = FALSE, + dom = DT$dom, extensions = DT$exts, options = DT$opts) }) if(form %in% c("Vital signs", "Vitals adjusted")){ diff --git a/inst/app/www/custom.css b/inst/app/www/custom.css index 5232a222..b69e7f62 100644 --- a/inst/app/www/custom.css +++ b/inst/app/www/custom.css @@ -1,4 +1,9 @@ +.dataTables_wrapper .dt-buttons { + padding-left: 0.75em; + float: right; +} + .bslib-value-box .value-box-area { padding: 0.1rem 0rem 0.1rem 1rem; } diff --git a/inst/golem-config.yml b/inst/golem-config.yml index e1d167ee..b59197d2 100644 --- a/inst/golem-config.yml +++ b/inst/golem-config.yml @@ -11,6 +11,7 @@ default: Medical Monitor: medical_monitor Data Manager: data_manager allow_to_review: [admin, medical_monitor] + allow_listing_download: TRUE dev: golem_wd: !expr golem::pkg_path() test: diff --git a/man/dt_config.Rd b/man/dt_config.Rd new file mode 100644 index 00000000..8278fb92 --- /dev/null +++ b/man/dt_config.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/fct_data_helpers.R +\name{dt_config} +\alias{dt_config} +\title{Configure DT helper} +\usage{ +dt_config(data, table_name = "form") +} +\arguments{ +\item{data}{A data frame used for display in a DT table. Number of rows will +be assessed} + +\item{table_name}{character string, usually the form name} +} +\value{ +list with three named objects: \code{dom}, \code{exts}, and \code{opts} +} +\description{ +Small wrapper that helps handle some messiness preparing the correct \code{DT} +dom, extensions, & options when needed. Specifically, when & how to add an +Excel download button. +} +\keyword{internal} diff --git a/tests/testthat/_snaps/app_feature_01/app-feature-1-002.json b/tests/testthat/_snaps/app_feature_01/app-feature-1-002.json index 2796a847..e24a32ef 100644 --- a/tests/testthat/_snaps/app_feature_01/app-feature-1-002.json +++ b/tests/testthat/_snaps/app_feature_01/app-feature-1-002.json @@ -239,6 +239,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -251,8 +252,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Adverse-events.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Adverse events\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "className": "dt-right", @@ -389,6 +397,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_01/app-feature-1-003.json b/tests/testthat/_snaps/app_feature_01/app-feature-1-003.json index 76c45761..e0fd19bc 100644 --- a/tests/testthat/_snaps/app_feature_01/app-feature-1-003.json +++ b/tests/testthat/_snaps/app_feature_01/app-feature-1-003.json @@ -239,6 +239,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -251,8 +252,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Adverse-events.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Adverse events\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "className": "dt-right", @@ -389,6 +397,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_01/app-feature-1-004.json b/tests/testthat/_snaps/app_feature_01/app-feature-1-004.json index 76db2408..f1c108f7 100644 --- a/tests/testthat/_snaps/app_feature_01/app-feature-1-004.json +++ b/tests/testthat/_snaps/app_feature_01/app-feature-1-004.json @@ -239,6 +239,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -251,8 +252,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Adverse-events.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Adverse events\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "className": "dt-right", @@ -389,6 +397,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", @@ -8267,6 +8309,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -8279,8 +8322,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Vital-signs.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -8417,6 +8467,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_01/app-feature-1-005.json b/tests/testthat/_snaps/app_feature_01/app-feature-1-005.json index e683af83..a97090fb 100644 --- a/tests/testthat/_snaps/app_feature_01/app-feature-1-005.json +++ b/tests/testthat/_snaps/app_feature_01/app-feature-1-005.json @@ -239,6 +239,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -251,8 +252,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Adverse-events.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Adverse events\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "className": "dt-right", @@ -389,6 +397,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", @@ -8268,6 +8310,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -8280,8 +8323,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Vital-signs.NLD_06_893" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -8418,6 +8468,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_03/app-feature-3-002.json b/tests/testthat/_snaps/app_feature_03/app-feature-3-002.json index 3a9093e2..644aea5a 100644 --- a/tests/testthat/_snaps/app_feature_03/app-feature-3-002.json +++ b/tests/testthat/_snaps/app_feature_03/app-feature-3-002.json @@ -693,6 +693,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -705,8 +706,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Adverse-events.BEL_04_772" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Adverse events\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "className": "dt-right", @@ -843,6 +851,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_03/app-feature-3-003.json b/tests/testthat/_snaps/app_feature_03/app-feature-3-003.json index f5d30dd2..5eb712d8 100644 --- a/tests/testthat/_snaps/app_feature_03/app-feature-3-003.json +++ b/tests/testthat/_snaps/app_feature_03/app-feature-3-003.json @@ -6,6 +6,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -18,8 +19,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.open.queries" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Open queries\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -146,6 +154,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_03/app-feature-3-004.json b/tests/testthat/_snaps/app_feature_03/app-feature-3-004.json index ba6db3b3..ce0589f3 100644 --- a/tests/testthat/_snaps/app_feature_03/app-feature-3-004.json +++ b/tests/testthat/_snaps/app_feature_03/app-feature-3-004.json @@ -6,6 +6,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -18,8 +19,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.open.queries" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"Open queries\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -146,6 +154,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/app_feature_03/app-feature-3-005.json b/tests/testthat/_snaps/app_feature_03/app-feature-3-005.json index f5ab8d82..9899ca5d 100644 --- a/tests/testthat/_snaps/app_feature_03/app-feature-3-005.json +++ b/tests/testthat/_snaps/app_feature_03/app-feature-3-005.json @@ -6,6 +6,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -18,8 +19,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.all.queries" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"All queries\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -150,6 +158,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/mod_study_forms/study_forms-001.json b/tests/testthat/_snaps/mod_study_forms/study_forms-001.json index c05b3cb7..00e8a3ca 100644 --- a/tests/testthat/_snaps/mod_study_forms/study_forms-001.json +++ b/tests/testthat/_snaps/mod_study_forms/study_forms-001.json @@ -1240,6 +1240,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -1252,8 +1253,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Vital-signs.NLD_06_755" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -1390,6 +1398,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6", diff --git a/tests/testthat/_snaps/mod_study_forms/study_forms-002.json b/tests/testthat/_snaps/mod_study_forms/study_forms-002.json index c05b3cb7..00e8a3ca 100644 --- a/tests/testthat/_snaps/mod_study_forms/study_forms-002.json +++ b/tests/testthat/_snaps/mod_study_forms/study_forms-002.json @@ -1240,6 +1240,7 @@ "filter": "none", "vertical": false, "extensions": [ + "Buttons", "Scroller", "ColReorder" ], @@ -1252,8 +1253,15 @@ "scrollResize": true, "scrollCollapse": true, "colReorder": true, + "buttons": [ + { + "extend": "excel", + "text": "<\/i>", + "filename": "clinsight.Vital-signs.NLD_06_755" + } + ], "initComplete": "function() {\n$(this.api().table().container()).find('.header').html(\"\")\n}", - "dom": "f<\"header h5\">ti", + "dom": "Bf<\"header h5\">ti", "columnDefs": [ { "orderable": false, @@ -1390,6 +1398,40 @@ "attachment": null, "all_files": true }, + { + "name": "jszip", + "version": "1.13.6", + "src": { + "href": "jszip-1.13.6" + }, + "meta": null, + "script": "jszip.min.js", + "stylesheet": null, + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, + { + "name": "dt-ext-buttons-bootstrap5", + "version": "1.13.6", + "src": { + "href": "dt-ext-buttons-bootstrap5-1.13.6" + }, + "meta": null, + "script": [ + "js/dataTables.buttons.min.js", + "js/buttons.html5.min.js", + "js/buttons.colVis.min.js", + "js/buttons.print.min.js", + "js/buttons.bootstrap5.min.js" + ], + "stylesheet": "css/buttons.bootstrap5.min.css", + "head": null, + "attachment": null, + "package": null, + "all_files": false + }, { "name": "dt-ext-scroller-bootstrap5", "version": "1.13.6",