From 8a0b00dce5b49ab2fa362bcbd29abb0f25576044 Mon Sep 17 00:00:00 2001 From: dylanbenzi Date: Fri, 2 Jan 2026 16:39:07 -0500 Subject: [PATCH] add storm report downloading --- app/dashboard.Rmd | 68 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/app/dashboard.Rmd b/app/dashboard.Rmd index eceaffd..9fa1f0b 100644 --- a/app/dashboard.Rmd +++ b/app/dashboard.Rmd @@ -1,11 +1,12 @@ --- title: "Hurricane Normalization App" runtime: shiny -output: +output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill - theme: + resize_reload: false + theme: version: 4 bootswatch: litera --- @@ -40,6 +41,7 @@ library(billboarder) library(shinyWidgets) library(paletteer) library(shinyjs) +library(quarto) APP_DIR <- getwd() @@ -71,6 +73,7 @@ storm_selection <- reactiveValues( storm_year = NULL, storm_name = NULL, storm_basin = NULL, + hurdatid = NULL ) ``` @@ -177,7 +180,9 @@ observeEvent(input$selectStorm, { storm_selection$storm_basin <- "AL" storm_selection$storm_year <- input$stormYear storm_selection$storm_name <- input$stormName - #storm_selection$is_selected <- TRUE + + hurdatid <- get_hurdat_id(storm_selection) + storm_selection$hurdatid = hurdatid$hurdatid showNotification("Storm selection updated!", type = "message") }) @@ -1443,6 +1448,63 @@ div( ) ``` +Download Report {data-navmenu="Compute"} +=== + +Column {data-width=400} +--- + +### Report Options {} +```{r} +downloadButton("report", "Generate Report") + +output$report <- downloadHandler( + filename = function() { + paste0( + storm_selection$hurdatid, + "_", + storm_selection$storm_name, + "_", + storm_selection$storm_year, + ".pdf" + ) + }, + content = function(file) { + params <- list( + storm_basin = storm_selection$storm_basin, + storm_year = storm_selection$storm_year, + storm_name = storm_selection$storm_name, + hurdat_id = storm_selection$hurdatid + ) + + id <- showNotification( + "Rendering report...", + duration = NULL, + closeButton = FALSE + ) + + on.exit(removeNotification(id), add = TRUE) + + temp_pdf <- file.path(APP_DIR, "storm_report.pdf") + + quarto::quarto_render( + input = file.path(APP_DIR, "storm_report.qmd"), + execute_params = params, + output_format = "pdf" + ) + + file.copy(temp_pdf, file) + } +) +``` + +Column {data-width=600} +--- + +### {.no-padding} +```{r} +``` + Data Export {data-navmenu="Compute"} ===