Skip to content
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

198 extension to Include user's card labels when generating the report #933

Merged
merged 11 commits into from
Oct 13, 2023
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ S3method(ui_nested_tabs,teal_modules)
export("%>%")
export(TealReportCard)
export(as.teal_slices)
export(card_template)
export(example_module)
export(get_code_tdata)
export(get_join_keys)
Expand Down
35 changes: 35 additions & 0 deletions R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,38 @@ include_parent_datanames <- function(dataname, join_keys) {

return(unique(c(parents, dataname)))
}

#' Template function to generate reporter card.
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
#'
#' 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
card_template <- function(title, label, description = NULL, with_filter, filter_panel_api) {
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
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")
}
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
if (with_filter) {
card$append_fs(filter_panel_api$get_filter_state())
}
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
card
}
1 change: 1 addition & 0 deletions _pkgdown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ reference:
contents:
- reporter_previewer_module
- TealReportCard
- card_template
- title: Functions for Module Developers
contents:
- tdata
Expand Down
27 changes: 27 additions & 0 deletions man/card_template.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions tests/testthat/test-utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,25 @@ testthat::test_that("get_teal_bs_theme", {
testthat::expect_warning(get_teal_bs_theme(), "the default shiny bootstrap is used")
})
})

testthat::test_that("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(card_template(title = "Card title",
label ="Card label",
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
description = "Sample description",
with_filter = TRUE,
filter_panel_api = filter_panel_api))
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
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(card_template(title = "Card title",
label = "",
kartikeyakirar marked this conversation as resolved.
Show resolved Hide resolved
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)
})
Loading