## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
library(shinyCohortBuilder)

## ----eval = FALSE-------------------------------------------------------------
# .render_filters.default <- function(source, cohort, step_id, ns, ...) {
#   step <- cohort$get_step(step_id)
#   shiny::tagList(
#     shiny::htmlOutput(ns(paste0(step_id, "-stats")), class = "scb_data_stats"),
#     step$filters |>
#       purrr::map(~ .render_filter(.x, step_id, cohort, ns = ns)) |>
#       shiny::div(class = "cb_filters", `data-step_id` = step_id)
#   )
# }

## ----eval = FALSE-------------------------------------------------------------
# .render_filters.tblist <- function(source, cohort, step_id, ns, ...) {
#   step <- cohort$get_step(step_id)
# 
#   group_filters(cohort$get_source(), step$filters) |>
#     purrr::imap(~ dataset_filters(.x, .y, step_id, cohort, ns = ns)) |>
#     shiny::div(class = "cb_filters", `data-step_id` = step_id)
# }

## ----eval = FALSE-------------------------------------------------------------
# render_filters.db <- function(source, cohort, step_id, ns) {
#   step <- cohort$get_step(step_id)
# 
#   group_filters_db(cohort$get_source(), step$filters) |>
#     purrr::imap(~ dataset_filters_db(.x, .y, step_id, cohort, ns = ns)) |>
#     div(class = "cb_filters", `data-step_id` = step_id)
# }

## ----eval = FALSE-------------------------------------------------------------
# .update_data_stats.default <- function(source, step_id, cohort, session, ...) {
#   ns <- session$ns
#   stats <- cohort$attributes$stats
# 
#   session$output[[paste0(step_id, "-stats")]] <- shiny::renderUI({
#     previous <- cohort$get_stats(step_id, state = "pre")$n_rows
#     if (!previous > 0) {
#       return("No data selected in previous step.")
#     }
#     current <- cohort$get_stats(step_id, state = "post")$n_rows
#     .pre_post_stats(current, previous, percent = TRUE, stats = stats)
#   })
# }

## ----eval = FALSE-------------------------------------------------------------
# .update_data_stats.tblist <- function(source, step_id, cohort, session, ...) {
#   stats <- cohort$attributes$stats
#   step <- cohort$get_step(step_id)
# 
#   dataset_names <- names(cohort$get_source()$attributes$datasets)
#   data_filters <- purrr::map_chr(step$filters, get_filter_dataset)
#   dataset_names <- intersect(dataset_names, data_filters)
# 
#   dataset_names |> purrr::walk(
#     ~ .sendOutput(
#       paste0(step_id, "-stats_", .x),
#       shiny::renderUI({
#         previous <- cohort$get_stats(step_id, state = "pre")[[.x]]$n_rows
#         if (!previous > 0) {
#           return("No data selected in previous step.")
#         }
#         current <- cohort$get_stats(step_id, state = "post")[[.x]]$n_rows
#         .pre_post_stats(current, previous, percent = TRUE, stats = stats)
#       }),
#       session
#     )
#   )
# }

## ----eval = FALSE-------------------------------------------------------------
# update_data_stats.db <- function(source, step_id, cohort, session) {
#   stats <- cohort$attributes$stats
# 
#   dataset_names <- source$attributes$tables
#   dataset_names |> purrr::walk(
#     ~ shinyCohortBuilder::sendOutput(
#       paste0(step_id, "-stats_", .x),
#       shiny::renderUI({
#         previous <- cohort$get_stats(step_id, state = "pre")[[.x]]$n_rows
#         if (!previous > 0) {
#           return("No data selected in previous step.")
#         }
#         current <- cohort$get_stats(step_id, state = "post")[[.x]]$n_rows
#         shinyCohortBuilder::pre_post_stats(current, previous, percent = TRUE, stats = stats)
#       })
#     )
#   )
# }

## ----eval = FALSE-------------------------------------------------------------
# autofilter.tblist <- function(source, attach_as = c("step", "meta"), ...) {
#   attach_as <- rlang::arg_match(attach_as)
#   step_rule <- source$dtconn |>
#     purrr::imap(~filter_rules(.x, .y)) |>
#     unlist(recursive = FALSE) |>
#     purrr::map(~do.call(cohortBuilder::filter, .)) |>
#     unname()
# 
#   if (identical(attach_as, "meta")) {
#     source$available_filters <- step_rule
#   } else {
#     source |>
#       cohortBuilder::add_step(do.call(cohortBuilder::step, step_rule))
#   }
# 
#   return(source)
# }

## ----eval = FALSE-------------------------------------------------------------
# .available_filters_choices.tblist <- function(source, cohort, ...) {
# 
#   available_filters <- cohort$attributes$available_filters
# 
#   choices <- purrr::map(available_filters, function(x) {
#     tibble::tibble(
#       name = as.character(
#         shiny::div(
#           `data-tooltip-z-index` = 9999,
#           `data-tooltip` = x$get_params("description"),
#           `data-tooltip-position` = "top right",
#           `data-tooltip-allow-html` = "true",
#           x$name
#         )
#       ),
#       id = x$id,
#       dataset = x$get_params("dataset")
#     )
#   }) |> dplyr::bind_rows()
# 
#   shinyWidgets::prepare_choices(choices, name, id, dataset)
# }

## ----eval = FALSE-------------------------------------------------------------
# .step_attrition.default <- function(source, id, cohort, session, ...) {
#   ns <- session$ns
# 
#   list(
#     render = shiny::renderPlot({
#       cohort$show_attrition()
#     }),
#     output = shiny::plotOutput(id)
#   )
# }

## ----eval = FALSE-------------------------------------------------------------
# .step_attrition.tblist <- function(source, id, cohort, session, ...) {
#   ns <- session$ns
#   choices <- names(source$attributes$datasets)
# 
#   list(
#     render = shiny::renderPlot({
#       cohort$show_attrition(dataset = session$input$attrition_input)
#     }),
#     output = shiny::tagList(
#       shiny::selectInput(ns("attrition_input"), "Choose dataset", choices),
#       shiny::plotOutput(id)
#     )
#   )
# }

