From c5c3b53eb8cb67fedbe432aba8ac4b952f4fd46f Mon Sep 17 00:00:00 2001 From: frankknoll Date: Sun, 15 Oct 2023 11:55:58 +0200 Subject: [PATCH] starting to make prrByVaccineTable downloadable --- .../js/PageInitializer.js | 4 ++-- .../js/PrrByVaccineTableView.js | 23 +++++++++++++++++-- docs/UIUtils.js | 7 ++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/docs/SymptomsCausedByVaccines/js/PageInitializer.js b/docs/SymptomsCausedByVaccines/js/PageInitializer.js index ecb2e9fbb9d..d503f8f433f 100644 --- a/docs/SymptomsCausedByVaccines/js/PageInitializer.js +++ b/docs/SymptomsCausedByVaccines/js/PageInitializer.js @@ -5,8 +5,8 @@ class PageInitializer { PageInitializer.#configureVaccine(vaccine); } - static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement }) { - const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement); + static #configureSymptom({ symptomSelectElement, prrByVaccineTableElement, downloadPrrByVaccineTableButton }) { + const prrByVaccineTableView = new PrrByVaccineTableView(prrByVaccineTableElement, downloadPrrByVaccineTableButton); PageInitializer.#initializeSelectElement( { selectElement: symptomSelectElement, diff --git a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js index 00b4fa8530d..5aa012c9d00 100644 --- a/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js +++ b/docs/SymptomsCausedByVaccines/js/PrrByVaccineTableView.js @@ -1,15 +1,34 @@ class PrrByVaccineTableView { #prrByVaccineTable; + #prrByVaccine; + #symptom; - constructor(prrByVaccineTableElement) { + constructor(prrByVaccineTableElement, downloadPrrByVaccineTableButton) { this.#prrByVaccineTable = new PrrByVaccineTable(prrByVaccineTableElement); this.#prrByVaccineTable.initialize(); + downloadPrrByVaccineTableButton.addEventListener( + 'click', + () => this.#downloadPrrByVaccine()) } displayPrrByVaccineTable4Symptom(symptom) { PrrByVaccineProvider .getPrrByVaccine(symptom) - .then(prrByVaccine => this.#prrByVaccineTable.display(prrByVaccine)); + .then(prrByVaccine => { + this.#prrByVaccine = prrByVaccine; + this.#symptom = symptom; + this.#prrByVaccineTable.display(prrByVaccine); + }); + } + + #downloadPrrByVaccine() { + UIUtils.downloadUrlAsFilename( + window.URL.createObjectURL( + new Blob( + [Utils.convertDict2CSV(this.#prrByVaccine)], + { type: 'text/csv' })), + this.#symptom + ); } } diff --git a/docs/UIUtils.js b/docs/UIUtils.js index 76050bd0dd0..bc113a0c328 100644 --- a/docs/UIUtils.js +++ b/docs/UIUtils.js @@ -68,4 +68,11 @@ class UIUtils { static isSearchParamYES(urlParams, searchParam) { return UIUtils.getSearchParam(urlParams, searchParam, 'NO').toUpperCase() == 'YES'; } + + static downloadUrlAsFilename(url, filename) { + const a = document.createElement('a'); + a.setAttribute('href', url); + a.setAttribute('download', filename); + a.click(); + } }