Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion inst/shiny/app.R
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ server <- function(input, output, session) {
tab_nca_outputs <- tab_nca_server(
"nca",
tab_data_outputs$pknca_data,
tab_data_outputs$extra_group_vars
tab_data_outputs$extra_group_vars,
tab_data_outputs$settings_override
)

# TLG
Expand Down
7 changes: 4 additions & 3 deletions inst/shiny/modules/tab_data.R
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,12 @@ tab_data_server <- function(id) {
updateTabsetPanel(session, "data_navset", selected = step_labels[idx - 1])
})
#' Load raw ADNCA data
adnca_raw <- data_upload_server("raw_data")
uploaded_data <- data_upload_server("raw_data")

# Call the column mapping module
column_mapping <- data_mapping_server(
id = "column_mapping",
adnca_data = adnca_raw,
adnca_data = uploaded_data$adnca_raw,
trigger = trigger_mapping_submit
)
#' Reactive value for the processed dataset
Expand Down Expand Up @@ -223,7 +223,8 @@ tab_data_server <- function(id) {

list(
pknca_data = pknca_data,
extra_group_vars = extra_group_vars
extra_group_vars = extra_group_vars,
settings_override = uploaded_data$settings_override
)
})
}
60 changes: 51 additions & 9 deletions inst/shiny/modules/tab_data/data_upload.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ data_upload_ui <- function(id) {
div(
class = "upload-container",
id = ns("upload_container"),
p("Upload your PK dataset."),
p("Upload your PK dataset and Settings file (optional)."),
fileInput(
ns("data_upload"),
width = "50%",
Expand All @@ -41,6 +41,7 @@ data_upload_server <- function(id) {

#' Display file loading error if any issues arise
file_loading_error <- reactiveVal(NULL)
settings_override <- reactiveVal(NULL) # Store loaded settings

output$file_loading_message <- renderUI({
if (is.null(file_loading_error())) {
Expand Down Expand Up @@ -71,27 +72,65 @@ data_upload_server <- function(id) {
filenames <- input$data_upload$name
}

# Iterate over files: Read and classify
# Iterate over files: Try reading as Data, then as Settings
read_results <- purrr::map2(paths, filenames, function(path, name) {
tryCatch({
# Attempt to read
data <- read_pk(path)
list(status = "success", data = data, name = name, type = "data")
}, error = function(e) {
# TODO: @Jana, check if settings file is loaded and then create settings override (719)
list(status = "error", message = e$message, name = name)
}, error = function(e_pk) {
# If read_pk fails
# check if settings file is loaded and then create settings override
tryCatch({
# check if error aligns with what we expect for setttings file
if (conditionMessage(e_pk) != "Invalid data format.
Data frame was expected, but received list.") {
return(list(status = "error", msg = conditionMessage(e_pk), name = name))
}

obj <- readRDS(path)
# Check for settings
is_settings <- is.list(obj) && "settings" %in% names(obj)

if (!is_settings) {
stop(conditionMessage(e_pk))
}

list(status = "success", type = "settings", content = obj, name = name)
}, error = function(e_rds) {
list(status = "error", msg = conditionMessage(e_pk), name = name)
})
})
})

# Process results
successful_loads <- purrr::keep(read_results, ~ .x$status == "success")
successful_loads <- purrr::keep(read_results, \(x) x$status == "success")
errors <- purrr::keep(read_results, \(x) x$status == "error") %>%
purrr::map(\(x) paste0(x$name, ": ", x$message))
purrr::map(\(x) paste0(x$name, ": ", x$msg))

# Extract and apply settings if any found
found_settings <- purrr::keep(successful_loads, \(x) x$type == "settings")

if (length(found_settings) > 1) {
# Error: Too many settings files
errors <- append(errors, "Error: Multiple settings files detected.
Please upload only one settings file.")
# Do not apply any settings if ambiguous
settings_override(NULL)

} else if (length(found_settings) == 1) {
# Success: Single settings file
latest <- found_settings[[1]]
settings_override(latest$content)
log_success("Settings successfully loaded from ", latest$name)
showNotification(paste("Settings successfully loaded."), type = "message")
}

loaded_data <- DUMMY_DATA

found_data <- purrr::keep(successful_loads, \(x) x$type == "data")
# Handle Errors
if (length(successful_loads) > 0) {
if (length(found_data) > 0) {
tryCatch({
loaded_data <- successful_loads %>%
purrr::map("data") %>%
Expand Down Expand Up @@ -127,6 +166,9 @@ data_upload_server <- function(id) {
style = list(fontSize = "0.75em")
)

raw_data
list(
adnca_raw = raw_data,
settings_override = settings_override
)
})
}
4 changes: 2 additions & 2 deletions inst/shiny/modules/tab_nca.R
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ tab_nca_ui <- function(id) {
)
}

tab_nca_server <- function(id, pknca_data, extra_group_vars) {
tab_nca_server <- function(id, pknca_data, extra_group_vars, settings_override) {
moduleServer(id, function(input, output, session) {
ns <- session$ns

Expand All @@ -74,7 +74,7 @@ tab_nca_server <- function(id, pknca_data, extra_group_vars) {
adnca_data <- reactive(pknca_data()$conc$data)

# #' NCA Setup module
nca_setup <- setup_server("nca_setup", adnca_data, pknca_data)
nca_setup <- setup_server("nca_setup", adnca_data, pknca_data, settings_override)

processed_pknca_data <- nca_setup$processed_pknca_data
settings <- nca_setup$settings
Expand Down
44 changes: 14 additions & 30 deletions inst/shiny/modules/tab_nca/setup.R
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,9 @@ setup_ui <- function(id) {
nav_panel(
"Settings",
fluidRow(
column(6,
fileInput(
ns("settings_upload"),
width = "100%",
label = "Upload settings",
buttonLabel = list(icon("folder"), "Browse"),
accept = ".rds"
)
),
column(6,
downloadButton(
ns("settings_download"),
label = "Download settings"
)
downloadButton(
ns("settings_download"),
label = "Download settings"
)
),
fluidRow(units_table_ui(ns("units_table"))),
Expand All @@ -53,25 +42,20 @@ setup_ui <- function(id) {
)
}

setup_server <- function(id, data, adnca_data) {
setup_server <- function(id, data, adnca_data, settings_override) {
moduleServer(id, function(input, output, session) {

imported_settings <- reactive({
req(input$settings_upload)
readRDS(input$settings_upload$datapath)
})

settings_override <- reactive(imported_settings()$settings)
manual_slopes_override <- reactive(imported_settings()$slope_rules)
parameters_override <- reactive(imported_settings()$settings$parameter_selections)
general_excl_override <- reactive(imported_settings()$settings$general_exclusions)
imported_settings <- reactive(settings_override()$settings)
imported_slopes <- reactive(settings_override()$slope_rules)
imported_params <- reactive(imported_settings()$parameter_selections)
general_excl_override <- reactive(imported_settings()$general_exclusions)

# Gather all settings from the appropriate module
settings <- settings_server(
"nca_settings",
data,
adnca_data,
settings_override
imported_settings
)

general_exclusions <- general_exclusions_server("general_exclusions", processed_pknca_data)
Expand Down Expand Up @@ -104,7 +88,7 @@ setup_server <- function(id, data, adnca_data) {
parameters_output <- parameter_selection_server(
"nca_setup_parameter",
base_pknca_data,
parameters_override
imported_params
)

final_settings <- reactive({
Expand Down Expand Up @@ -151,9 +135,9 @@ setup_server <- function(id, data, adnca_data) {
session$userData$ratio_table <- reactive(ratio_table())

# Automatically update the units table when settings are uploaded.
observeEvent(settings_override(), {
req(settings_override()$units)
session$userData$units_table(settings_override()$units)
observeEvent(imported_settings(), {
req(imported_settings()$units)
session$userData$units_table(imported_settings()$units)
})

# Parameter unit changes option: Opens a modal message with a units table to edit
Expand Down Expand Up @@ -189,7 +173,7 @@ setup_server <- function(id, data, adnca_data) {
slope_rules <- slope_selector_server(
"slope_selector",
slopes_pknca_data,
manual_slopes_override
imported_slopes
)

# Handle downloading and uploading settings
Expand Down
1 change: 0 additions & 1 deletion inst/shiny/modules/tab_nca/setup/parameter_selection.R
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,6 @@ parameter_selection_server <- function(id, processed_pknca_data, parameter_overr
# Validation checks
if (length(study_type_names) == 0) return(list())
req(all(study_type_names %in% names(df)))

# Convert from wide to long, filter for selected rows,
# and then split the result into a list by study_type.
df %>%
Expand Down
Loading