diff --git a/docs/BarChartDescriptionsProvider.js b/docs/BarChartDescriptionsProvider.js deleted file mode 100644 index eb63b7b5506..00000000000 --- a/docs/BarChartDescriptionsProvider.js +++ /dev/null @@ -1,6 +0,0 @@ -class BarChartDescriptionsProvider { - - static getBarChartDescriptions() { - return fetch('data/barChartDescriptionTable.json').then(response => response.json()); - } -} \ No newline at end of file diff --git a/docs/BatchCodeTableInitializer.js b/docs/BatchCodeTableInitializer.js index 922fed3fc1d..4c7781fe69d 100644 --- a/docs/BatchCodeTableInitializer.js +++ b/docs/BatchCodeTableInitializer.js @@ -1,28 +1,32 @@ class BatchCodeTableInitializer { - #batchCodeTableElement; - #batchCodeTable; - #columnSearch; - #barChartDescriptions; - - constructor(batchCodeTableElement) { - this.#batchCodeTableElement = batchCodeTableElement; - } - - initialize() { - this.#batchCodeTable = this.#createEmptyBatchCodeTable(); - this.#columnSearch = new ColumnSearch(this.#batchCodeTable.column(this.#getColumnIndex('Company'))); - this.#displayCountry(); - BarChartDescriptionsProvider - .getBarChartDescriptions() + initialize({ batchCodeTableElement, showCountries }) { + // FK-TODO: show "Loading.." message or spinning wheel. + this.#loadBarChartDescriptions(showCountries) .then(barChartDescriptions => { - this.#barChartDescriptions = barChartDescriptions; - + const batchCodeTable = this.#createEmptyBatchCodeTable(batchCodeTableElement, showCountries, barChartDescriptions); + this.#setVisibilityOfCountriesColumn(batchCodeTable, showCountries); + fetch('data/batchCodeTables/Global.json') + .then(response => response.json()) + .then(json => { + this.#addCountriesColumn(json); + return json; + }) + .then(json => { + this.#setTableRows(batchCodeTable, json.data); + this.#makeCompanyColumnFilterable(batchCodeTable); + }); }); } - #createEmptyBatchCodeTable() { - return this.#batchCodeTableElement.DataTable( + #loadBarChartDescriptions(shallLoad) { + return shallLoad ? + fetch('data/barChartDescriptionTable.json').then(response => response.json()) : + Promise.resolve({}); + } + + #createEmptyBatchCodeTable(batchCodeTableElement, showCountries, barChartDescriptions) { + return batchCodeTableElement.DataTable( { language: { @@ -63,7 +67,10 @@ class BatchCodeTableInitializer { const numberInPercent = parseFloat(data); return !isNaN(numberInPercent) ? numberInPercent.toFixed(2) + "%" : ''; }, - targets: [this.#getColumnIndex('Severe reports'), this.#getColumnIndex('Lethality')] + targets: [ + this.#getColumnIndex('Severe reports'), + this.#getColumnIndex('Lethality') + ] }, { width: "1000px", @@ -71,11 +78,11 @@ class BatchCodeTableInitializer { return null; }, createdCell: (cell, cellData, row, rowIndex, colIndex) => { - const batchcode = row[this.#getColumnIndex('Batch')]; - if (batchcode in this.#barChartDescriptions) { - const barChartDescription = this.#barChartDescriptions[batchcode]; - barChartDescription['batchcode'] = batchcode; - new BatchcodeByCountryBarChartView(cell).displayBatchcodeByCountryBarChart(barChartDescription); + if (showCountries) { + this.#displayBatchcodeByCountryBarChart( + row[this.#getColumnIndex('Batch')], + barChartDescriptions, + cell); } }, className: "dt-head-center", @@ -85,6 +92,7 @@ class BatchCodeTableInitializer { }); } + #getColumnIndex(columnName) { switch (columnName) { case 'Batch': @@ -108,35 +116,34 @@ class BatchCodeTableInitializer { } } - // FK-TODO: rename - #displayCountry() { - // FK-TODO: show "Loading.." message or spinning wheel. - BarChartDescriptionsProvider - .getBarChartDescriptions() - .then(barChartDescriptions => { - this.#barChartDescriptions = barChartDescriptions; - fetch('data/batchCodeTables/Global.json') - .then(response => response.json()) - .then(json => { - this.#_addCountriesColumn(json); - return json; - }) - .then(json => { - this.#setTableRows(json.data); - this.#columnSearch.columnContentUpdated(); - }); - }) + #displayBatchcodeByCountryBarChart(batchcode, barChartDescriptions, uiContainer) { + if (batchcode in barChartDescriptions) { + const barChartDescription = barChartDescriptions[batchcode]; + barChartDescription['batchcode'] = batchcode; + new BatchcodeByCountryBarChartView(uiContainer).displayBatchcodeByCountryBarChart(barChartDescription); + } } - #_addCountriesColumn(json) { + #setVisibilityOfCountriesColumn(batchCodeTable, showCountries) { + batchCodeTable + .column(this.#getColumnIndex('Countries')) + .visible(showCountries); + } + + #addCountriesColumn(json) { json.columns.push('Countries'); json.data.forEach(row => row.push(null)); } - #setTableRows(rows) { - this.#batchCodeTable + #setTableRows(batchCodeTable, rows) { + batchCodeTable .clear() .rows.add(rows) .draw(); } + + #makeCompanyColumnFilterable(batchCodeTable) { + const companyColumnFilter = new ColumnSearch(batchCodeTable.column(this.#getColumnIndex('Company'))); + companyColumnFilter.columnContentUpdated(); + } } diff --git a/docs/ColumnSearch.js b/docs/ColumnSearch.js index 3d445445e2e..9aac8a30242 100644 --- a/docs/ColumnSearch.js +++ b/docs/ColumnSearch.js @@ -1,4 +1,5 @@ // adapted from https://datatables.net/examples/api/multi_filter_select.html +// FK-TODO: rename to ColumnFilter class ColumnSearch { #column; diff --git a/docs/UIUtils.js b/docs/UIUtils.js index 4f818ff1530..f8ef25f6425 100644 --- a/docs/UIUtils.js +++ b/docs/UIUtils.js @@ -26,14 +26,14 @@ class UIUtils { } static getYLabelWithPercent(context) { - return UIUtils._getLabelWithPercent(context, context.parsed.y); + return UIUtils.#getLabelWithPercent(context, context.parsed.y); } static getXLabelWithPercent(context) { - return UIUtils._getLabelWithPercent(context, context.parsed.x); + return UIUtils.#getLabelWithPercent(context, context.parsed.x); } - static _getLabelWithPercent(context, value) { + static #getLabelWithPercent(context, value) { let label = context.dataset.label || ''; if (label) { diff --git a/docs/batchCodeTable.js b/docs/batchCodeTable.js deleted file mode 100644 index a57399331c3..00000000000 --- a/docs/batchCodeTable.js +++ /dev/null @@ -1,184 +0,0 @@ -class BatchCodeTableInitializer { - - #heading; - #countrySelect; - #batchCodeTableElement; - #batchCodeTable; - #columnSearch; - #barChartDescriptions; - - constructor({ heading, countrySelect, batchCodeTableElement }) { - this.#heading = heading; - this.#countrySelect = countrySelect; - this.#batchCodeTableElement = batchCodeTableElement; - } - - initialize() { - this.#batchCodeTable = this.#createEmptyBatchCodeTable(); - this.#columnSearch = new ColumnSearch(this.#batchCodeTable.column(this.#getColumnIndex('Company'))); - this.#countrySelect.addEventListener('change', event => this.#displayCountry()); - this.#displayCountry(); - this.#initializeHistogramView(); - } - - #getCountry() { - return UIUtils.getSelectedOption(this.#countrySelect).value; - } - - #createEmptyBatchCodeTable() { - return this.#batchCodeTableElement.DataTable( - { - initComplete: function () { - $('.dataTables_filter').append(' (press return key)'); - }, - language: - { - searchPlaceholder: "Enter Batch Code" - }, - search: - { - return: true - }, - processing: true, - deferRender: true, - order: [[this.#getColumnIndex('Adverse Reaction Reports'), "desc"]], - columnDefs: - [ - { - className: 'dt-control', - orderable: false, - data: null, - defaultContent: '', - targets: this.#getColumnIndex('control') - }, - { - searchable: false, - targets: [ - this.#getColumnIndex('Adverse Reaction Reports'), - this.#getColumnIndex('Deaths'), - this.#getColumnIndex('Disabilities'), - this.#getColumnIndex('Life Threatening Illnesses'), - this.#getColumnIndex('Countries'), - this.#getColumnIndex('Severe reports'), - this.#getColumnIndex('Lethality') - ] - }, - { - orderable: false, - targets: [this.#getColumnIndex('Countries'), this.#getColumnIndex('Company')] - }, - { - render: data => { - const numberInPercent = parseFloat(data); - return !isNaN(numberInPercent) ? numberInPercent.toFixed(2) + "%" : ''; - }, - targets: [this.#getColumnIndex('Severe reports'), this.#getColumnIndex('Lethality')] - }, - { - width: "1000px", - render: function (data, type, row, meta) { - return null; - }, - createdCell: (cell, cellData, row, rowIndex, colIndex) => { - const batchcode = row[this.#getColumnIndex('Batch')]; - if (batchcode in this.#barChartDescriptions) { - const barChartDescription = this.#barChartDescriptions[batchcode]; - barChartDescription['batchcode'] = batchcode; - new BatchcodeByCountryBarChartView(cell).displayBatchcodeByCountryBarChart(barChartDescription); - } - }, - className: "dt-head-center", - targets: [this.#getColumnIndex('Countries')] - } - ] - }); - } - - #getColumnIndex(columnName) { - switch (columnName) { - case 'control': - return 0; - case 'Batch': - return 1; - case 'Adverse Reaction Reports': - return 2; - case 'Deaths': - return 3; - case 'Disabilities': - return 4; - case 'Life Threatening Illnesses': - return 5; - case 'Company': - return 6; - case 'Countries': - return 7; - case 'Severe reports': - return 8; - case 'Lethality': - return 9; - } - } - - #displayCountry() { - this.#heading.textContent = this.#getCountry() == 'Global' ? 'Global Batch Codes' : `Batch Codes for ${this.#getCountry()}`; - // FK-TODO: show "Loading.." message or spinning wheel. - BarChartDescriptionsProvider - .getBarChartDescriptions() - .then(barChartDescriptions => { - this.#barChartDescriptions = barChartDescriptions; - fetch(`data/batchCodeTables/${this.#getCountry()}.json`) - .then(response => response.json()) - .then(json => { - this.#_addEmptyControlColumn(json); - return json; - }) - .then(json => { - this.#setTableRows(json.data); - this.#columnSearch.columnContentUpdated(); - this.#selectInput(); - }); - }) - } - - #_addEmptyControlColumn(json) { - json.columns.unshift('control'); - json.data.forEach(row => row.unshift(null)); - } - - #setTableRows(rows) { - this.#batchCodeTable - .clear() - .rows.add(rows) - .draw(); - } - - #selectInput() { - const input = document.querySelector(".dataTables_filter input"); - input.focus(); - input.select(); - } - - #initializeHistogramView() { - const thisClassInstance = this; - $(`#${this.#batchCodeTableElement[0].id} tbody`) - .on( - 'click', - 'td.dt-control', - function () { - const tr = $(this).closest('tr'); - const row = thisClassInstance.#batchCodeTable.row(tr); - if (row.child.isShown()) { - row.child.hide(); - tr.removeClass('shown'); - } else { - const histogramViewContainer = document.createElement("div"); - const batchcodeByCountryBarChartContainer = document.createElement("div"); - row.child([histogramViewContainer, batchcodeByCountryBarChartContainer]).show(); - tr.addClass('shown'); - const batchcode = row.data()[thisClassInstance.#getColumnIndex('Batch')]; - new HistogramView(histogramViewContainer).displayHistogramView(thisClassInstance.#getCountry(), batchcode); - new BatchcodeByCountryBarChartView(batchcodeByCountryBarChartContainer).displayBatchcodeByCountryBarChart(batchcode); - } - }); - } -} diff --git a/docs/batchCodes.html b/docs/batchCodes.html index a3da9090d38..853c1437129 100644 --- a/docs/batchCodes.html +++ b/docs/batchCodes.html @@ -33,13 +33,15 @@ -