diff --git a/public/js/src_modules/aggregateHelpers.mjs b/public/js/src_modules/aggregateHelpers.mjs index e81f0cbd5d1c7011e782f4a999fb734371a2444f..4f9d780e85df49141fd1dc0d9ccf8de772fb57d3 100644 --- a/public/js/src_modules/aggregateHelpers.mjs +++ b/public/js/src_modules/aggregateHelpers.mjs @@ -354,10 +354,42 @@ const extractUniqueCalendarMonthsFromCalendarDates = function ( return [...uniqueCalendarMonths]; }; +/** + * Format a computed aggregation result to make it suitable for a chart. Currently, only line and column charts are supported + * @param {Array} calendarDatesMonthsStrArr An array of unique calendar dates strings (in "YYYY-MM-DD" fromat) or unique calendar months strings (in "YYYY-MM" format) + * @param {Array} aggregatedValuesArr An array of aggregated values + * @returns {Array} An array of formatted aggregation values suitable for use in a column chart + */ +const formatAggregationResultForChart = function ( + calendarDatesMonthsStrArr, + aggregatedValuesArr +) { + if (!calendarDatesMonthsStrArr || !aggregatedValuesArr) return; + + // Create an array of Unix timestamp strings + const timestampsArr = calendarDatesMonthsStrArr.map((calendarStr) => + new Date(calendarStr).getTime() + ); + + // Combine timestamp and value pairs + // The timestamps array and values array have same lengths, use one for looping + if (timestampsArr.length !== aggregatedValuesArr.length) { + throw new Error( + "The timestamps array and aggregated values array have different lengths" + ); + } else { + return timestampsArr.map((timestamp, i) => [ + timestamp, + aggregatedValuesArr[i], + ]); + } +}; + export { extractObservationsWithinDatesInterval, extractObservationValuesWithinDatesInterval, extractObservationValuesWithinMonthInterval, extractUniqueCalendarDatesFromTimestamp, extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, }; diff --git a/public/js/src_modules/chartColumn.mjs b/public/js/src_modules/chartColumn.mjs index d9717466d55b836e347dc4d8fc536fce9f4cdf7f..646efbc140f194815e8fb9473cb03598bb09f6ed 100644 --- a/public/js/src_modules/chartColumn.mjs +++ b/public/js/src_modules/chartColumn.mjs @@ -9,31 +9,6 @@ import { createTooltipDateString, } from "./chartHelpers.mjs"; -/** - * Format a computed aggregation result to make it suitable for a column chart - * @param {Array} calendarDatesMonthsStrArr An array of unique calendar dates strings (in "YYYY-MM-DD" fromat) or unique calendar months strings (in "YYYY-MM" format) - * @param {Array} aggregatedValuesArr An array of aggregated values - * @returns {Array} An array of formatted aggregation values suitable for use in a column chart - */ -const formatAggregationResultForColumnChart = function ( - calendarDatesMonthsStrArr, - aggregatedValuesArr -) { - if (!calendarDatesMonthsStrArr || !aggregatedValuesArr) return; - - // Create an array of Unix timestamp strings - const timestampsArr = calendarDatesMonthsStrArr.map((calendarStr) => - new Date(calendarStr).getTime() - ); - - // Combine timestamp and value pairs - // The timestamps array and values array have same lengths, use one for looping - return timestampsArr.map((timestamp, i) => [ - timestamp, - aggregatedValuesArr[i], - ]); -}; - /** * Creates an options object for each series drawn in a column chart * @param {Array} formattedAggregatedResultForColumnChart An array of formatted aggregated result array(s) from one or more datastreams @@ -96,12 +71,12 @@ const createYAxisTitleTextColumnChart = function ( /** * Draw a column chart using Highcharts library - * @param {Array} formattedAggResultArraysForColumnChart An array made up of formatted aggregated result array(s) suitable for use in a column chart + * @param {Array} formattedObsArraysForColumnChart An array made up of formatted observation array(s) suitable for use in a column chart. The observations may either be raw or aggregated * @param {Object} extractedFormattedDatastreamProperties An object that contains arrays of formatted Datastream properties * @returns {undefined} undefined */ const drawColumnChartHighcharts = function ( - formattedAggResultArraysForColumnChart, + formattedObsArraysForColumnChart, extractedFormattedDatastreamProperties ) { // Formatted datastream properties @@ -136,7 +111,7 @@ const drawColumnChartHighcharts = function ( // Create the array of series options object(s) const seriesOptionsArr = createSeriesOptionsForColumnChart( - formattedAggResultArraysForColumnChart, + formattedObsArraysForColumnChart, buildingIdsPhenomenonNamesArr ); @@ -213,4 +188,4 @@ const drawColumnChartHighcharts = function ( }); }; -export { formatAggregationResultForColumnChart, drawColumnChartHighcharts }; +export { drawColumnChartHighcharts }; diff --git a/public/js/src_modules/chartHeatmap.mjs b/public/js/src_modules/chartHeatmap.mjs index 87884e0af04ab2f6e1124e33ac437c6a9ff942ab..24e997cd39850fef77526944cde80798bbf44e70 100644 --- a/public/js/src_modules/chartHeatmap.mjs +++ b/public/js/src_modules/chartHeatmap.mjs @@ -57,7 +57,7 @@ const calculateMinMaxValuesForHeatmapColorAxis = function ( /** * Draw a heatmap using Highcharts library - * @param {Array} formattedObsArrayForHeatmap Response from SensorThings API formatted for use in a heatmap + * @param {Array} formattedObsArrayForHeatmap Response from SensorThings API formatted for use in a heatmap. Currently, only raw observations are supported, i.e. no aggregation * @param {Object} extractedFormattedDatastreamProperties An object that contains arrays of formatted Datastream properties * @returns {undefined} undefined */ diff --git a/public/js/src_modules/chartLine.mjs b/public/js/src_modules/chartLine.mjs index f34b8a90a79b2e9415cb63cdb79b91bdcfb0bb1b..8a44bf108d29056b4c7eb4fdde17e40d02f8970a 100644 --- a/public/js/src_modules/chartLine.mjs +++ b/public/js/src_modules/chartLine.mjs @@ -22,15 +22,6 @@ const formatSensorThingsApiResponseForLineOrColumnChart = function (obsArray) { }); }; -/** - * Concatenates metadata properties to create a string for either the title or subtitle of a line chart - * @param {Array} phenomenonNamesArr An array of phenomenon name strings - * @returns {String} A string made up of combined phenomenon names - */ -const createCombinedTextForLineChartTitles = function (phenomenonNamesArr) { - return phenomenonNamesArr.join(", "); -}; - /** * Creates an options object for each series drawn in the line chart * @param {Array} formattedObsArraysForLineChart An array of formatted observation array(s) from one or more datastreams @@ -71,7 +62,7 @@ const createSeriesOptionsForLineChart = function ( /** * Draw a line chart using Highcharts library - * @param {Array} formattedObsArraysForLineChart An array made up of formatted observation array(s) suitable for use in a line chart + * @param {Array} formattedObsArraysForLineChart An array made up of formatted observation array(s) suitable for use in a line chart. The observations may either be raw or aggregated * @param {Object} extractedFormattedDatastreamPropertiesArr An object that contains arrays of formatted Datastream properties * @returns {undefined} undefined */ diff --git a/public/js/src_modules/chartScatterPlot.mjs b/public/js/src_modules/chartScatterPlot.mjs index 0c3cf1eee0d6b137163d966a90b5d2374afdd3d7..ff1119286cccfed9f693f533bc7c13543303b6a4 100644 --- a/public/js/src_modules/chartScatterPlot.mjs +++ b/public/js/src_modules/chartScatterPlot.mjs @@ -209,12 +209,12 @@ const getYAxisUnitOfMeasurementSymbol = function (seriesName) { /** * Draw a scatter plot using Highcharts library - * @param {Array} formattedObsArrayForSeriesOnePlusSeriesTwo Response from SensorThings API formatted for use in a scatter plot + * @param {Array} formattedObsArraysForScatterPlot Response from SensorThings API formatted for use in a scatter plot. Currently, only raw observations are supported, i.e. no aggregation * @param {Object} extractedFormattedDatastreamProperties An object that contains arrays of formatted Datastream properties * @returns {undefined} undefined */ const drawScatterPlotHighcharts = function ( - formattedObsArrayForSeriesOnePlusSeriesTwo, + formattedObsArraysForScatterPlot, extractedFormattedDatastreamProperties ) { // Arrays of datastream properties @@ -227,7 +227,7 @@ const drawScatterPlotHighcharts = function ( // Create the array of series options object(s) const seriesOptionsArr = createSeriesOptionsForScatterPlot( - formattedObsArrayForSeriesOnePlusSeriesTwo, + formattedObsArraysForScatterPlot, phenomenonNamesArr ); diff --git a/public/js/src_modules/dropDownListChartColumn.mjs b/public/js/src_modules/dropDownListChartColumn.mjs index 01c35b97dfa6e188387d4c628db0ffc2e6428b79..eda51d78402bcf3f327baceec17935f1a07352a6 100644 --- a/public/js/src_modules/dropDownListChartColumn.mjs +++ b/public/js/src_modules/dropDownListChartColumn.mjs @@ -1,3 +1,5 @@ +"use strict"; + import { drawColumnChartHighcharts } from "./chartColumn.mjs"; import { diff --git a/public/js/src_modules/dropDownListChartHeatmap.mjs b/public/js/src_modules/dropDownListChartHeatmap.mjs index d50ae633891f39400c6d6450feca160b3a034b9b..cad77602c6c55491a624c9430a4f3a22326338aa 100644 --- a/public/js/src_modules/dropDownListChartHeatmap.mjs +++ b/public/js/src_modules/dropDownListChartHeatmap.mjs @@ -1,3 +1,5 @@ +"use strict"; + import { formatSensorThingsApiResponseForHeatMap, drawHeatMapHighcharts, diff --git a/public/js/src_modules/dropDownListChartLine.mjs b/public/js/src_modules/dropDownListChartLine.mjs index 37e22a8d84c7f46e2c627a36d1af376ffdc76b64..7d10a0d1fc14a4ac5359988105b41751162c0a17 100644 --- a/public/js/src_modules/dropDownListChartLine.mjs +++ b/public/js/src_modules/dropDownListChartLine.mjs @@ -1,3 +1,5 @@ +"use strict"; + import { drawLineChartHighcharts } from "./chartLine.mjs"; import { diff --git a/public/js/src_modules/dropDownListChartScatterPlot.mjs b/public/js/src_modules/dropDownListChartScatterPlot.mjs index 6138881342a0017661c14d9b7ff15d9eddeea84c..9307a48dfd99cc8c016923b8c194b25c33e703a4 100644 --- a/public/js/src_modules/dropDownListChartScatterPlot.mjs +++ b/public/js/src_modules/dropDownListChartScatterPlot.mjs @@ -1,3 +1,5 @@ +"use strict"; + import { formatSensorThingsApiResponseForScatterPlot, drawScatterPlotHighcharts, diff --git a/public/js/src_modules/dropDownListHelpers.mjs b/public/js/src_modules/dropDownListHelpers.mjs index 50ffbb8a267c94d0562e976187a1bb36fb0ef079..bb37a61cfd798d97a079b2723cf287b03189a1e4 100644 --- a/public/js/src_modules/dropDownListHelpers.mjs +++ b/public/js/src_modules/dropDownListHelpers.mjs @@ -279,14 +279,10 @@ const checkIfChartRequiresRawObservations = function ( selectedAggregationType, selectedAggregationDuration ) { - if ( - selectedAggregationType === "None (raw data)" && + return selectedAggregationType === "None (raw data)" && selectedAggregationDuration === undefined - ) { - return true; - } else { - return false; - } + ? true + : false; }; /** diff --git a/public/js/src_modules/dropDownListProcessing.mjs b/public/js/src_modules/dropDownListProcessing.mjs index fc97b8615f188b224df7dc07650476543c0b3888..508a73d008222105b092a6e4c8036153b56de694 100644 --- a/public/js/src_modules/dropDownListProcessing.mjs +++ b/public/js/src_modules/dropDownListProcessing.mjs @@ -1,8 +1,9 @@ "use strict"; -import { formatAggregationResultForColumnChart } from "./chartColumn.mjs"; - -import { extractUniqueCalendarMonthsFromCalendarDates } from "./aggregateHelpers.mjs"; +import { + extractUniqueCalendarMonthsFromCalendarDates, + formatAggregationResultForChart, +} from "./aggregateHelpers.mjs"; import { calculateMinimumObservationValuesWithinInterval, @@ -40,7 +41,7 @@ const calculateAndFormatDailySumObservations = function ( // Format the observations const formattedObservationsSumDailyNestedArr = observationsSumDailyNestedArr.map((obsSumDailyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarDatesNestedArr[i], obsSumDailyArr ) @@ -94,7 +95,7 @@ const calculateAndFormatMonthlySumObservations = function ( // Format the observations const formattedObservationsSumMonthlyNestedArr = observationsSumMonthlyNestedArr.map((obsSumMonthlyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarMonthsNestedArr[i], obsSumMonthlyArr ) @@ -142,7 +143,7 @@ const calculateAndFormatDailyMaximumObservations = function ( // Format the observations const formattedObservationsMaximumDailyNestedArr = observationsMaximumDailyNestedArr.map((obsMinDailyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarDatesNestedArr[i], obsMinDailyArr ) @@ -196,7 +197,7 @@ const calculateAndFormatMonthlyMaximumObservations = function ( // Format the observations const formattedObservationsMaximumMonthlyNestedArr = observationsMaximumMonthlyNestedArr.map((obsMaxMonthlyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarMonthsNestedArr[i], obsMaxMonthlyArr ) @@ -244,7 +245,7 @@ const calculateAndFormatDailyMinimumObservations = function ( // Format the observations const formattedObservationsMinimumDailyNestedArr = observationsMinimumDailyNestedArr.map((obsMinDailyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarDatesNestedArr[i], obsMinDailyArr ) @@ -298,7 +299,7 @@ const calculateAndFormatMonthlyMinimumObservations = function ( // Format the observations const formattedObservationsMinimumMonthlyNestedArr = observationsMinimumMonthlyNestedArr.map((obsMinMonthlyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarMonthsNestedArr[i], obsMinMonthlyArr ) @@ -346,7 +347,7 @@ const calculateAndFormatDailyAverageObservations = function ( // Format the observations const formattedObservationsAverageDailyNestedArr = observationsAverageDailyNestedArr.map((obsAverageDailyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarDatesNestedArr[i], obsAverageDailyArr ) @@ -400,7 +401,7 @@ const calculateAndFormatMonthlyAverageObservations = function ( // Format the observations const formattedObservationsAverageMonthlyNestedArr = observationsAverageMonthlyNestedArr.map((obsAverageMonthlyArr, i) => - formatAggregationResultForColumnChart( + formatAggregationResultForChart( uniqueCalendarMonthsNestedArr[i], obsAverageMonthlyArr )