diff --git a/DESCRIPTION b/DESCRIPTION index 833c7a06c5..1e63569e7d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Type: Package Package: teal Title: Exploratory Web Apps for Analyzing Clinical Trials Data -Version: 0.14.0.9011 -Date: 2023-10-12 +Version: 0.14.0.9012 +Date: 2023-10-13 Authors@R: c( person("Dawid", "Kaledkowski", , "dawid.kaledkowski@roche.com", role = c("aut", "cre")), person("Pawel", "Rucki", , "pawel.rucki@roche.com", role = "aut"), diff --git a/NAMESPACE b/NAMESPACE index dee47cf21f..f2ff9676af 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -28,6 +28,7 @@ export(landing_modal) export(module) export(modules) export(new_tdata) +export(report_card_template) export(reporter_previewer_module) export(show_rcode_modal) export(srv_teal_with_splash) diff --git a/NEWS.md b/NEWS.md index a22243fc1e..55545d90bf 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# teal 0.14.0.9011 +# teal 0.14.0.9012 ### Miscellaneous diff --git a/R/utils.R b/R/utils.R index 131161a18a..0c21e1595b 100644 --- a/R/utils.R +++ b/R/utils.R @@ -63,3 +63,34 @@ landing_modal <- function(title = NULL, text = NULL, button = NULL) { confirmButtonText = button ) } + +#' Template Function for `TealReportCard` Creation and Customization +#' +#' This function generates a report card with a title, +#' an optional description, and the option to append the filter state list. +#' +#' @param title (`character(1)`) title of the card (unless overwritten by label) +#' @param label (`character(1)`) label provided by the user when adding the card +#' @param description (`character(1)`) optional additional description +#' @param with_filter (`logical(1)`) flag indicating to add filter state +#' @param filter_panel_api (`FilterPanelAPI`) object with API that allows the generation +#' of the filter state in the report +#' +#' @return (`TealReportCard`) populated with a title, description and filter state +#' +#' @export +report_card_template <- function(title, label, description = NULL, with_filter, filter_panel_api) { + checkmate::assert_string(title) + checkmate::assert_string(label) + checkmate::assert_string(description, null.ok = TRUE) + checkmate::assert_flag(with_filter) + checkmate::assert_class(filter_panel_api, classes = "FilterPanelAPI") + + card <- teal::TealReportCard$new() + title <- if (label == "") title else label + card$set_name(title) + card$append_text(title, "header2") + if (!is.null(description)) card$append_text(description, "header3") + if (with_filter) card$append_fs(filter_panel_api$get_filter_state()) + card +} diff --git a/_pkgdown.yml b/_pkgdown.yml index e0752c788e..9525fbdd7a 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -106,6 +106,7 @@ reference: contents: - reporter_previewer_module - TealReportCard + - report_card_template - title: Functions for Module Developers contents: - tdata diff --git a/man/report_card_template.Rd b/man/report_card_template.Rd new file mode 100644 index 0000000000..1be43cf829 --- /dev/null +++ b/man/report_card_template.Rd @@ -0,0 +1,33 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utils.R +\name{report_card_template} +\alias{report_card_template} +\title{Template Function for \code{TealReportCard} Creation and Customization} +\usage{ +report_card_template( + title, + label, + description = NULL, + with_filter, + filter_panel_api +) +} +\arguments{ +\item{title}{(\code{character(1)}) title of the card (unless overwritten by label)} + +\item{label}{(\code{character(1)}) label provided by the user when adding the card} + +\item{description}{(\code{character(1)}) optional additional description} + +\item{with_filter}{(\code{logical(1)}) flag indicating to add filter state} + +\item{filter_panel_api}{(\code{FilterPanelAPI}) object with API that allows the generation +of the filter state in the report} +} +\value{ +(\code{TealReportCard}) populated with a title, description and filter state +} +\description{ +This function generates a report card with a title, +an optional description, and the option to append the filter state list. +} diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index 319dfe302b..e64f4265cf 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -10,3 +10,29 @@ testthat::test_that("get_teal_bs_theme", { testthat::expect_warning(get_teal_bs_theme(), "the default shiny bootstrap is used") }) }) + +testthat::test_that("report_card_template function returns TealReportCard object with appropriate content and labels", { + fd <- teal.slice::init_filtered_data(list(iris = list(dataset = iris))) + filter_panel_api <- teal.slice::FilterPanelAPI$new(fd) + + card <- shiny::isolate(report_card_template( + title = "Card title", + label = "Card label", + description = "Sample description", + with_filter = TRUE, + filter_panel_api = filter_panel_api + )) + testthat::expect_s3_class(card, c("TealReportCard")) + testthat::expect_equal(card$get_name(), "Card label") + testthat::expect_length(card$get_content(), 4) + + card <- shiny::isolate(report_card_template( + title = "Card title", + label = "", + with_filter = FALSE, + filter_panel_api = filter_panel_api + )) + testthat::expect_s3_class(card, c("TealReportCard")) + testthat::expect_equal(card$get_name(), "Card title") + testthat::expect_length(card$get_content(), 1) +})