From cdf92a81a312a3a3663a0c7c6b158e3cf6e6a58a Mon Sep 17 00:00:00 2001 From: madeliri Date: Fri, 27 Mar 2026 19:18:03 +0300 Subject: [PATCH] devel: forms in forms --- app.R | 100 ++++++++++++++++++++++++------ configs/schemas/main.xlsx | Bin 11659 -> 11709 bytes configs/schemas/test_inline2.xlsx | Bin 0 -> 11430 bytes modules/utils.R | 96 +++++++++------------------- 4 files changed, 112 insertions(+), 84 deletions(-) create mode 100644 configs/schemas/test_inline2.xlsx diff --git a/app.R b/app.R index b30be99..c19950a 100644 --- a/app.R +++ b/app.R @@ -42,27 +42,39 @@ rmarkdown::find_pandoc(dir = "/opt/homebrew/bin/") if (!rmarkdown::pandoc_available()) warning("Can't find pandoc!") +load_scheme_from_xlsx <- function( + filename, + colnames = c("part", "subgroup", "form_id", "form_label", "form_type") +) { + + readxl::read_xlsx(filename) |> + # fill NA down + tidyr::fill(all_of(colnames), .direction = "down") |> + dplyr::group_by(form_id) |> + tidyr::fill(c(condition, required), .direction = "down") |> + dplyr::ungroup() + +} + # SCHEME_MAIN UNPACK ========================== # load scheme -SCHEME_MAIN <- readxl::read_xlsx(FILE_SCHEME) %>% - # fill NA down - tidyr::fill(c(part, subgroup, form_id, form_label, form_type), .direction = "down") %>% - dplyr::group_by(form_id) %>% - tidyr::fill(c(condition, required), .direction = "down") %>% - dplyr::ungroup() +SCHEME_MAIN <- load_scheme_from_xlsx(FILE_SCHEME) # get list of simple inputs -inputs_simple_list <- SCHEME_MAIN %>% - dplyr::filter(!form_type %in% c("inline_table", "description", "description_header")) %>% - dplyr::distinct(form_id, form_type) %>% +inputs_simple_list <- SCHEME_MAIN |> + dplyr::filter(!form_type %in% c("inline_table", "inline_table2","description", "description_header")) |> + dplyr::distinct(form_id, form_type) |> tibble::deframe() # get list of inputs with inline tables -inputs_tables_list <- SCHEME_MAIN %>% - dplyr::filter(form_type == "inline_table") %>% - dplyr::distinct(form_id) %>% +inputs_tables_list <- SCHEME_MAIN |> + dplyr::filter(form_type == "inline_table") |> + dplyr::distinct(form_id) |> tibble::deframe() +inputs_table_df <- SCHEME_MAIN |> + dplyr::filter(form_type == "inline_table2") |> + dplyr::distinct(form_id, .keep_all = TRUE) # establish connection con <- db$make_db_connection() @@ -160,14 +172,23 @@ inline_tables <- purrr::map( } ) -# get pages list -pages_list <- unique(SCHEME_MAIN$part) - # generate nav panels for each page nav_panels_list <- purrr::map( - .x = pages_list, - .f = utils$make_panels, - main_scheme = SCHEME_MAIN + .x = unique(SCHEME_MAIN$part), + .f = \(page_name) { + + # отделить схему для каждой страницы + this_page_panels_scheme <- SCHEME_MAIN |> + dplyr::filter(part == {{page_name}}) + + this_page_panels <- utils$make_panels(this_page_panels_scheme) + + # add panel wrap to nav_panel + bslib::nav_panel( + title = page_name, + this_page_panels + ) + } ) # UI ======================= @@ -253,6 +274,49 @@ server <- function(input, output) { values <- reactiveValues(data = NULL) rhand_tables <- reactiveValues() + # inline tables 2 ======================== + purrr::walk( + .x = inputs_table_df$form_id, + .f = \(table_name) { + + observeEvent(input[[table_name]], { + + this_inline_table2_info <- inputs_table_df |> + dplyr::filter(form_id == {table_name}) + + inline_table2_file_name <- this_inline_table2_info$choices + + this_inline_table2_scheme <- fs::path(folder_with_schemas, inline_table2_file_name) |> + load_scheme_from_xlsx(colnames = c("form_id", "form_label", "form_type")) + + yay_its_fun <- purrr::pmap( + .l = dplyr::distinct(this_inline_table2_scheme, form_id, form_label, form_type), + .f = utils$render_forms, + main_scheme = this_inline_table2_scheme + ) + + ui_for_inline_table <- card( + height = "800px", + layout_sidebar( + sidebar = selectizeInput( + inputId = "aboba", + label = "key", + choices = c("a", "b") + ), + yay_its_fun + ) + ) + + showModal(modalDialog( + ui_for_inline_table, + # title = modalButton("Dismiss"),, + footer = modalButton("Dismiss"), + size = "l" + )) + + }) + } + ) # VALIDATIONS ============================ # create new validator diff --git a/configs/schemas/main.xlsx b/configs/schemas/main.xlsx index 0ea6bf26066c45eaf6b4624c9b594284f2a1903b..3aa4c49919b098d14470584b4c78026038dbbf9d 100644 GIT binary patch delta 4642 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 T%q1*`r=M&k%tg#6_?P-GPGZSZ delta 4545 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 f1i90rmyRV_XNB$JdaBL?*<00000L(ZJ} diff --git a/configs/schemas/test_inline2.xlsx b/configs/schemas/test_inline2.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..df19e63e80a6a5893837e4feda2ff7d00a3c7823 GIT binary patch literal 11430 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 literal 0 HcmV?d00001 diff --git a/modules/utils.R b/modules/utils.R index 43b2902..28b3912 100644 --- a/modules/utils.R +++ b/modules/utils.R @@ -6,23 +6,33 @@ ) } -# asdasd +# #' @export -make_panels <- function(page_name, main_scheme) { +make_panels <- function(scheme) { - # get info about inputs for current page - page_forms <- main_scheme |> - dplyr::filter(part == {{page_name}}) |> - dplyr::distinct(subgroup, form_id, form_label, form_type) - - # get list of columns - cols_list <- unique(page_forms$subgroup) - - # making cards cards <- purrr::map( - .x = cols_list, - .f = render_cards_with_forms, - main_scheme = main_scheme + .x = unique(scheme$subgroup), + .f = \(sub_group) { + + this_column_cards_scheme <- scheme |> + dplyr::filter(subgroup == {{sub_group}}) + + bslib::card( + bslib::card_header(sub_group, container = htmltools::h5), + full_screen = TRUE, + fill = TRUE, + width = "4000px", + bslib::card_body( + fill = TRUE, + # передаем все аргументы в функцию для создания елементов + purrr::pmap( + .l = dplyr::distinct(this_column_cards_scheme, form_id, form_label, form_type), + .f = render_forms, + main_scheme = scheme + ) + ) + ) + } ) # make page wrap @@ -33,60 +43,8 @@ make_panels <- function(page_name, main_scheme) { # unpack list of cards !!!cards ) - - # add panel wrap to nav_panel - bslib::nav_panel( - title = page_name, - page_wrap - ) } -# functions for making cards -# DO THIS INSTEAD !!! -#' @export -# make_forms_by_scheme <- function(tool_id, main_scheme, ns) { - -# ns <- NS(ns(tool_id)) - -# main_scheme <<- main_scheme -# subgroup_schema <- main_scheme |> -# dplyr::filter(tool_id == {{tool_id}}) - -# purrr::pmap( -# .l = dplyr::distinct(subgroup_schema, form_id, form_label, form_type), -# .f = render_forms, -# schema = subgroup_schema, -# ns = ns -# ) -# } - -# functions for making cards -#' @export -render_cards_with_forms <- function(sub_group, main_scheme) { - - main_scheme <<- main_scheme - subgroups_inputs <- main_scheme |> - dplyr::filter(subgroup == {{sub_group}}) |> - dplyr::distinct(form_id, form_label, form_type) - - bslib::card( - bslib::card_header(sub_group, container = htmltools::h5), - full_screen = TRUE, - fill = TRUE, - width = "4000px", - bslib::card_body( - fill = TRUE, - # передаем все аргументы в функцию для создания елементов - purrr::pmap( - .l = subgroups_inputs, - .f = render_forms, - main_scheme = main_scheme - ) - ) - ) -} - -# UI RELATED ============================ #' @export render_forms <- function( form_id, @@ -95,6 +53,7 @@ render_forms <- function( main_scheme ) { + form <- NULL filterd_line <- dplyr::filter(main_scheme, form_id == {{form_id}}) # check if have condition @@ -225,6 +184,10 @@ render_forms <- function( form <- rhandsontable::rHandsontableOutput(outputId = form_id) } + if (form_type == "inline_table2") { + form <- shiny::actionButton(inputId = form_id, label = label) + } + # description part if (form_type == "description") { if(is.na(form_label)) { @@ -249,6 +212,7 @@ render_forms <- function( ) } + if (is.null(form)) cli::cli_abort("невозможно создать форму типа '{form_type}' (id: '{form_id}') !") form }