diff --git a/public/js/appChart.js b/public/js/appChart.js index fe5aade993914f1cbd4e6f095002c494bc7deb15..16780a0bc138a362d2fc99acea042bebf494e314 100644 --- a/public/js/appChart.js +++ b/public/js/appChart.js @@ -50,12 +50,13 @@ import { getAbbreviationsForSelectedOptionsFromAllDropDownLists, } from "./src_modules/dropDownListHelpers.mjs"; -import { - drawHeatmapBasedOnSelectedOptions, - drawScatterPlotFromChartSelection, - drawLineChartBasedOnSelectedAggregationOptions, - drawColumnChartBasedOnSelectedAggregationOptions, -} from "./src_modules/dropDownListProcessing.mjs"; +import { drawColumnChartBasedOnSelectedAggregationOptions } from "./src_modules/dropDownListChartColumn.mjs"; + +import { drawHeatmapBasedOnSelectedOptions } from "./src_modules/dropDownListChartHeatmap.mjs"; + +import { drawLineChartBasedOnSelectedAggregationOptions } from "./src_modules/dropDownListChartLine.mjs"; + +import { drawScatterPlotFromChartSelection } from "./src_modules/dropDownListChartScatterPlot.mjs"; /** * Use the `vanillaDropDown` library to style the buildings & data points drop down list diff --git a/public/js/src_modules/dropDownListChartColumn.mjs b/public/js/src_modules/dropDownListChartColumn.mjs new file mode 100644 index 0000000000000000000000000000000000000000..01c35b97dfa6e188387d4c628db0ffc2e6428b79 --- /dev/null +++ b/public/js/src_modules/dropDownListChartColumn.mjs @@ -0,0 +1,186 @@ +import { drawColumnChartHighcharts } from "./chartColumn.mjs"; + +import { + calculateAndFormatDailySumObservations, + calculateAndFormatMonthlySumObservations, + calculateAndFormatDailyMaximumObservations, + calculateAndFormatMonthlyMaximumObservations, + calculateAndFormatDailyMinimumObservations, + calculateAndFormatMonthlyMinimumObservations, + calculateAndFormatDailyAverageObservations, + calculateAndFormatMonthlyAverageObservations, +} from "./dropDownListProcessing.mjs"; + +/** + * Draw a column chart based on the selected aggregation options from a drop-down list + * + * @param {String} selectedAggregationType A string representing the selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` + * @param {String} selectedAggregationDuration A string representing the selected aggregation duration. The currently supported strings include `Daily` and `Monthly` + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {undefined} undefined + */ +export const drawColumnChartBasedOnSelectedAggregationOptions = function ( + selectedAggregationTypeArr, + selectedAggregationDuration, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr +) { + if ( + selectedAggregationTypeArr === "Sum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / sum + const [ + formattedObservationsSumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailySumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsSumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Sum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / sum + const [ + formattedObservationsSumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlySumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsSumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Maximum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / maximum + const [ + formattedObservationsMaximumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyMaximumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsMaximumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Maximum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / maximum + const [ + formattedObservationsMaximumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyMaximumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsMaximumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Minimum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / minimum + const [ + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyMinimumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Minimum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / minimum + const [ + formattedObservationsMinimumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyMinimumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsMinimumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Average" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / average + const [ + formattedObservationsAverageDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyAverageObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsAverageDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationTypeArr === "Average" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / average + const [ + formattedObservationsAverageMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyAverageObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawColumnChartHighcharts( + formattedObservationsAverageMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } +}; diff --git a/public/js/src_modules/dropDownListChartHeatmap.mjs b/public/js/src_modules/dropDownListChartHeatmap.mjs new file mode 100644 index 0000000000000000000000000000000000000000..d50ae633891f39400c6d6450feca160b3a034b9b --- /dev/null +++ b/public/js/src_modules/dropDownListChartHeatmap.mjs @@ -0,0 +1,32 @@ +import { + formatSensorThingsApiResponseForHeatMap, + drawHeatMapHighcharts, +} from "./chartHeatmap.mjs"; + +/** + * Draw a heatmap based on the selected options from a drop-down list + * + * @param {Array} observationsComboNestedArr An array that contains non-computed (raw) observations and computed (temperature difference, dT) observations + * @param {Object} extractedFormattedDatastreamProperties An object that contains array(s) of formatted Datastream properties + * @returns {undefined} undefined + */ +export const drawHeatmapBasedOnSelectedOptions = function ( + observationsComboNestedArr, + extractedFormattedDatastreamProperties +) { + // Create formatted array of observations + const formattedObservationsHeatMapNestedArr = observationsComboNestedArr.map( + (observationsArr) => + formatSensorThingsApiResponseForHeatMap(observationsArr) + ); + + // Note: The resulting array is nested and is not suitable for heatmap, + // extract the nested array + const [formattedObservationsHeatMapArr] = + formattedObservationsHeatMapNestedArr; + + drawHeatMapHighcharts( + formattedObservationsHeatMapArr, + extractedFormattedDatastreamProperties + ); +}; diff --git a/public/js/src_modules/dropDownListChartLine.mjs b/public/js/src_modules/dropDownListChartLine.mjs new file mode 100644 index 0000000000000000000000000000000000000000..37e22a8d84c7f46e2c627a36d1af376ffdc76b64 --- /dev/null +++ b/public/js/src_modules/dropDownListChartLine.mjs @@ -0,0 +1,186 @@ +import { drawLineChartHighcharts } from "./chartLine.mjs"; + +import { + calculateAndFormatDailySumObservations, + calculateAndFormatMonthlySumObservations, + calculateAndFormatDailyMaximumObservations, + calculateAndFormatMonthlyMaximumObservations, + calculateAndFormatDailyMinimumObservations, + calculateAndFormatMonthlyMinimumObservations, + calculateAndFormatDailyAverageObservations, + calculateAndFormatMonthlyAverageObservations, +} from "./dropDownListProcessing.mjs"; + +/** + * Draw a line chart based on the selected aggregation options from a drop-down list + * + * @param {String} selectedAggregationType A string representing the selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` + * @param {String} selectedAggregationDuration A string representing the selected aggregation duration. The currently supported strings include `Daily` and `Monthly` + * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations + * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option + * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) + * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties + * @returns {undefined} undefined + */ +export const drawLineChartBasedOnSelectedAggregationOptions = function ( + selectedAggregationType, + selectedAggregationDuration, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr +) { + if ( + selectedAggregationType === "Sum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / sum + const [ + formattedObservationsSumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailySumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsSumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Sum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / sum + const [ + formattedObservationsSumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlySumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsSumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Maximum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / maximum + const [ + formattedObservationsMaximumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyMaximumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsMaximumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Maximum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / maximum + const [ + formattedObservationsMaximumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyMaximumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsMaximumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Minimum" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / minimum + const [ + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyMinimumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsMinimumDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Minimum" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / minimum + const [ + formattedObservationsMinimumMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyMinimumObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsMinimumMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Average" && + selectedAggregationDuration === "Daily" + ) { + // Formatted observations and metadata for chart - daily / average + const [ + formattedObservationsAverageDailyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatDailyAverageObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsAverageDailyNestedArr, + extractedFormattedDatastreamProperties + ); + } else if ( + selectedAggregationType === "Average" && + selectedAggregationDuration === "Monthly" + ) { + // Formatted observations and metadata for chart - monthly / average + const [ + formattedObservationsAverageMonthlyNestedArr, + extractedFormattedDatastreamProperties, + ] = calculateAndFormatMonthlyAverageObservations( + uniqueCalendarDatesNestedArr, + observationsAggregationNestedArr, + selectedSamplingRateAbbrev, + formattedMetadataNestedArr + ); + + drawLineChartHighcharts( + formattedObservationsAverageMonthlyNestedArr, + extractedFormattedDatastreamProperties + ); + } +}; diff --git a/public/js/src_modules/dropDownListChartScatterPlot.mjs b/public/js/src_modules/dropDownListChartScatterPlot.mjs new file mode 100644 index 0000000000000000000000000000000000000000..6138881342a0017661c14d9b7ff15d9eddeea84c --- /dev/null +++ b/public/js/src_modules/dropDownListChartScatterPlot.mjs @@ -0,0 +1,33 @@ +import { + formatSensorThingsApiResponseForScatterPlot, + drawScatterPlotHighcharts, +} from "./chartScatterPlot.mjs"; + +/** + * Draw a scatter plot based on the selected options from a drop-down list + * + * @param {Array} observationsComboNestedArr An array that contains non-computed (raw) observations and computed (temperature difference, dT) observations + * @param {Object} extractedFormattedDatastreamProperties An object that contains array(s) of formatted Datastream properties + * @returns {undefined} undefined + */ +export const drawScatterPlotFromChartSelection = function ( + observationsComboNestedArr, + extractedFormattedDatastreamProperties +) { + // Extract values for x-axis and y-axis + // x-axis values are first element of nested observations array + const [obsXAxisArr] = observationsComboNestedArr.slice(0, 1); + // y-axis values are rest of elements of nested observations array + const obsYAxisNestedArr = observationsComboNestedArr.slice(1); + + // Create formatted array(s) of observations + const formattedObservationsScatterPlotArr = obsYAxisNestedArr.map( + (obsYAxisArr) => + formatSensorThingsApiResponseForScatterPlot(obsXAxisArr, obsYAxisArr) + ); + + drawScatterPlotHighcharts( + formattedObservationsScatterPlotArr, + extractedFormattedDatastreamProperties + ); +}; diff --git a/public/js/src_modules/dropDownListProcessing.mjs b/public/js/src_modules/dropDownListProcessing.mjs index 123db15692211ef5bd3ae1f03bc595156d0232e5..fc97b8615f188b224df7dc07650476543c0b3888 100644 --- a/public/js/src_modules/dropDownListProcessing.mjs +++ b/public/js/src_modules/dropDownListProcessing.mjs @@ -1,21 +1,6 @@ "use strict"; -import { drawLineChartHighcharts } from "./chartLine.mjs"; - -import { - formatSensorThingsApiResponseForHeatMap, - drawHeatMapHighcharts, -} from "./chartHeatmap.mjs"; - -import { - formatSensorThingsApiResponseForScatterPlot, - drawScatterPlotHighcharts, -} from "./chartScatterPlot.mjs"; - -import { - formatAggregationResultForColumnChart, - drawColumnChartHighcharts, -} from "./chartColumn.mjs"; +import { formatAggregationResultForColumnChart } from "./chartColumn.mjs"; import { extractUniqueCalendarMonthsFromCalendarDates } from "./aggregateHelpers.mjs"; @@ -28,63 +13,6 @@ import { import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; -/** - * Draw a heatmap based on the selected options from a drop-down list - * - * @param {Array} observationsComboNestedArr An array that contains non-computed (raw) observations and computed (temperature difference, dT) observations - * @param {Object} extractedFormattedDatastreamProperties An object that contains array(s) of formatted Datastream properties - * @returns {undefined} undefined - */ -const drawHeatmapBasedOnSelectedOptions = function ( - observationsComboNestedArr, - extractedFormattedDatastreamProperties -) { - // Create formatted array(s) for observations - const formattedObservationsHeatMapNestedArr = observationsComboNestedArr.map( - (observationsArr) => - formatSensorThingsApiResponseForHeatMap(observationsArr) - ); - - // Note: The resulting array is nested and is not suitable for heatmap, - // extract the nested array - const [formattedObservationsHeatMapArr] = - formattedObservationsHeatMapNestedArr; - - drawHeatMapHighcharts( - formattedObservationsHeatMapArr, - extractedFormattedDatastreamProperties - ); -}; - -/** - * Draw a scatter plot based on the selected options from a drop-down list - * - * @param {Array} observationsComboNestedArr An array that contains non-computed (raw) observations and computed (temperature difference, dT) observations - * @param {Object} extractedFormattedDatastreamProperties An object that contains array(s) of formatted Datastream properties - * @returns {undefined} undefined - */ -const drawScatterPlotFromChartSelection = function ( - observationsComboNestedArr, - extractedFormattedDatastreamProperties -) { - // Extract values for x-axis and y-axis - // x-axis values are first element of nested observations array - const [obsXAxisArr] = observationsComboNestedArr.slice(0, 1); - // y-axis values are rest of elements of nested observations array - const obsYAxisNestedArr = observationsComboNestedArr.slice(1); - - // Create formatted array(s) for observations - const formattedObservationsScatterPlotArr = obsYAxisNestedArr.map( - (obsYAxisArr) => - formatSensorThingsApiResponseForScatterPlot(obsXAxisArr, obsYAxisArr) - ); - - drawScatterPlotHighcharts( - formattedObservationsScatterPlotArr, - extractedFormattedDatastreamProperties - ); -}; - /** * Calculate the daily sum of observations and format these aggregated observations * @@ -100,7 +28,7 @@ const calculateAndFormatDailySumObservations = function ( selectedSamplingRateAbbrev, formattedMetadataNestedArr ) { - // Calculate sum of values of observations - daily + // Calculate SUM / DAILY of values of observations const observationsSumDailyNestedArr = calculateSumOfObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -109,7 +37,7 @@ const calculateAndFormatDailySumObservations = function ( "daily" ); - // Format the observations - sum / daily + // Format the observations const formattedObservationsSumDailyNestedArr = observationsSumDailyNestedArr.map((obsSumDailyArr, i) => formatAggregationResultForColumnChart( @@ -154,7 +82,7 @@ const calculateAndFormatMonthlySumObservations = function ( extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) ); - // Calculate sum of values of observations - monthly + // Calculate SUM / MONTHLY of values of observations const observationsSumMonthlyNestedArr = calculateSumOfObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -163,7 +91,7 @@ const calculateAndFormatMonthlySumObservations = function ( "monthly" ); - // Format the observations - sum / monthly + // Format the observations const formattedObservationsSumMonthlyNestedArr = observationsSumMonthlyNestedArr.map((obsSumMonthlyArr, i) => formatAggregationResultForColumnChart( @@ -202,7 +130,7 @@ const calculateAndFormatDailyMaximumObservations = function ( selectedSamplingRateAbbrev, formattedMetadataNestedArr ) { - // Calculate minimum of values of observations - daily + // Calculate MAXIMUM / DAILY of values of observations const observationsMaximumDailyNestedArr = calculateMaximumObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -211,7 +139,7 @@ const calculateAndFormatDailyMaximumObservations = function ( "daily" ); - // Format the observations - min / daily + // Format the observations const formattedObservationsMaximumDailyNestedArr = observationsMaximumDailyNestedArr.map((obsMinDailyArr, i) => formatAggregationResultForColumnChart( @@ -256,7 +184,7 @@ const calculateAndFormatMonthlyMaximumObservations = function ( extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) ); - // Calculate minimum of values of observations - monthly + // Calculate MAXIMUM / MONTHLY of values of observations const observationsMaximumMonthlyNestedArr = calculateMaximumObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -265,7 +193,7 @@ const calculateAndFormatMonthlyMaximumObservations = function ( "monthly" ); - // Format the observations - max / monthly + // Format the observations const formattedObservationsMaximumMonthlyNestedArr = observationsMaximumMonthlyNestedArr.map((obsMaxMonthlyArr, i) => formatAggregationResultForColumnChart( @@ -304,7 +232,7 @@ const calculateAndFormatDailyMinimumObservations = function ( selectedSamplingRateAbbrev, formattedMetadataNestedArr ) { - // Calculate minimum of values of observations - daily + // Calculate MINIMUM / DAILY of values of observations const observationsMinimumDailyNestedArr = calculateMinimumObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -313,7 +241,7 @@ const calculateAndFormatDailyMinimumObservations = function ( "daily" ); - // Format the observations - min / daily + // Format the observations const formattedObservationsMinimumDailyNestedArr = observationsMinimumDailyNestedArr.map((obsMinDailyArr, i) => formatAggregationResultForColumnChart( @@ -358,7 +286,7 @@ const calculateAndFormatMonthlyMinimumObservations = function ( extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) ); - // Calculate minimum of values of observations - monthly + // Calculate MINIMUM / MONTHLY of values of observations const observationsMinimumMonthlyNestedArr = calculateMinimumObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -367,7 +295,7 @@ const calculateAndFormatMonthlyMinimumObservations = function ( "monthly" ); - // Format the observations - min / monthly + // Format the observations const formattedObservationsMinimumMonthlyNestedArr = observationsMinimumMonthlyNestedArr.map((obsMinMonthlyArr, i) => formatAggregationResultForColumnChart( @@ -406,7 +334,7 @@ const calculateAndFormatDailyAverageObservations = function ( selectedSamplingRateAbbrev, formattedMetadataNestedArr ) { - // Calculate average of values of observations - daily + // Calculate AVERAGE / DAILY of values of observations const observationsAverageDailyNestedArr = calculateAverageOfObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -415,7 +343,7 @@ const calculateAndFormatDailyAverageObservations = function ( "daily" ); - // Format the observations - average / daily + // Format the observations const formattedObservationsAverageDailyNestedArr = observationsAverageDailyNestedArr.map((obsAverageDailyArr, i) => formatAggregationResultForColumnChart( @@ -460,7 +388,7 @@ const calculateAndFormatMonthlyAverageObservations = function ( extractUniqueCalendarMonthsFromCalendarDates(uniqueCalendarDatesArr) ); - // Calculate average of values of observations - monthly + // Calculate AVERAGE / MONTHLY of values of observations const observationsAverageMonthlyNestedArr = calculateAverageOfObservationValuesWithinInterval( observationsAggregationNestedArr, @@ -469,7 +397,7 @@ const calculateAndFormatMonthlyAverageObservations = function ( "monthly" ); - // Format the observations - average / monthly + // Format the observations const formattedObservationsAverageMonthlyNestedArr = observationsAverageMonthlyNestedArr.map((obsAverageMonthlyArr, i) => formatAggregationResultForColumnChart( @@ -493,357 +421,13 @@ const calculateAndFormatMonthlyAverageObservations = function ( ]; }; -/** - * Draw a line chart based on the selected aggregation options from a drop-down list - * - * @param {String} selectedAggregationType A string representing the selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` - * @param {String} selectedAggregationDuration A string representing the selected aggregation duration. The currently supported strings include `Daily` and `Monthly` - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {undefined} undefined - */ -const drawLineChartBasedOnSelectedAggregationOptions = function ( - selectedAggregationType, - selectedAggregationDuration, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - formattedMetadataNestedArr -) { - if ( - selectedAggregationType === "Sum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / sum - const [ - formattedObservationsSumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailySumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsSumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Sum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / sum - const [ - formattedObservationsSumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlySumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsSumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Maximum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / maximum - const [ - formattedObservationsMaximumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyMaximumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsMaximumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Maximum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / maximum - const [ - formattedObservationsMaximumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyMaximumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsMaximumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Minimum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / minimum - const [ - formattedObservationsMinimumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyMinimumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsMinimumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Minimum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / minimum - const [ - formattedObservationsMinimumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyMinimumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsMinimumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Average" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / average - const [ - formattedObservationsAverageDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyAverageObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsAverageDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationType === "Average" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / average - const [ - formattedObservationsAverageMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyAverageObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawLineChartHighcharts( - formattedObservationsAverageMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } -}; - -/** - * Draw a column chart based on the selected aggregation options from a drop-down list - * - * @param {String} selectedAggregationType A string representing the selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` - * @param {String} selectedAggregationDuration A string representing the selected aggregation duration. The currently supported strings include `Daily` and `Monthly` - * @param {Array} observationsAggregationNestedArr An array made up of sub-array(s) of aggregated observations - * @param {String} selectedSamplingRateAbbrev A string representing the abbreviated form of the selected sampling rate option - * @param {Array} uniqueCalendarDatesNestedArr An array made up of sub-array(s) of unique calendar date(s) string(s) - * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties - * @returns {undefined} undefined - */ -const drawColumnChartBasedOnSelectedAggregationOptions = function ( - selectedAggregationTypeArr, - selectedAggregationDuration, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - formattedMetadataNestedArr -) { - if ( - selectedAggregationTypeArr === "Sum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / sum - const [ - formattedObservationsSumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailySumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsSumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Sum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / sum - const [ - formattedObservationsSumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlySumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsSumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Maximum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / maximum - const [ - formattedObservationsMaximumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyMaximumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsMaximumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Maximum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / maximum - const [ - formattedObservationsMaximumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyMaximumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsMaximumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Minimum" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / minimum - const [ - formattedObservationsMinimumDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyMinimumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsMinimumDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Minimum" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / minimum - const [ - formattedObservationsMinimumMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyMinimumObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsMinimumMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Average" && - selectedAggregationDuration === "Daily" - ) { - // Formatted observations and metadata for chart - daily / average - const [ - formattedObservationsAverageDailyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatDailyAverageObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsAverageDailyNestedArr, - extractedFormattedDatastreamProperties - ); - } else if ( - selectedAggregationTypeArr === "Average" && - selectedAggregationDuration === "Monthly" - ) { - // Formatted observations and metadata for chart - monthly / average - const [ - formattedObservationsAverageMonthlyNestedArr, - extractedFormattedDatastreamProperties, - ] = calculateAndFormatMonthlyAverageObservations( - uniqueCalendarDatesNestedArr, - observationsAggregationNestedArr, - selectedSamplingRateAbbrev, - formattedMetadataNestedArr - ); - - drawColumnChartHighcharts( - formattedObservationsAverageMonthlyNestedArr, - extractedFormattedDatastreamProperties - ); - } -}; - export { - drawHeatmapBasedOnSelectedOptions, - drawScatterPlotFromChartSelection, - drawLineChartBasedOnSelectedAggregationOptions, - drawColumnChartBasedOnSelectedAggregationOptions, + calculateAndFormatDailySumObservations, + calculateAndFormatMonthlySumObservations, + calculateAndFormatDailyMaximumObservations, + calculateAndFormatMonthlyMaximumObservations, + calculateAndFormatDailyMinimumObservations, + calculateAndFormatMonthlyMinimumObservations, + calculateAndFormatDailyAverageObservations, + calculateAndFormatMonthlyAverageObservations, };