diff --git a/.gitignore b/.gitignore index 67045665db202cf951f839a5f3e73efdcfd45021..f600fad880dc0ab76ec8e7a4cc0fa58271e5c5c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Our custom config file +config.mjs + # Logs logs *.log diff --git a/public/js/appCesium.js b/public/js/appCesium.js index 709aae58eefa7a3df531548bdc69df5c18275b04..c32da2298dd25602b5be478336b3f2f39c52886e 100644 --- a/public/js/appCesium.js +++ b/public/js/appCesium.js @@ -1,7 +1,8 @@ "use strict"; -Cesium.Ion.defaultAccessToken = - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyODgxYzJlNi1kNDZiLTQ3ZmQtYmUxYy0yMWI0OGM3NDA5MzAiLCJpZCI6NDczOSwic2NvcGVzIjpbImFzciIsImdjIl0sImlhdCI6MTU0MTUyMzU0MX0.shj2hM3pvsvcmE_wMb2aBDuk_cKWmFmbolltInGImwU"; +import { CESIUM_ION_ACCESS_TOKEN } from "./config.mjs"; + +Cesium.Ion.defaultAccessToken = CESIUM_ION_ACCESS_TOKEN; // Flag to determine models that will be loaded // Set to `true` or `false` diff --git a/public/js/appChart.js b/public/js/appChart.js index 24f546851cdb1d63e33a9f77d1c9b321f8629cc1..de1a5cf09344c929bda931cc28306ef5e7b6bd41 100644 --- a/public/js/appChart.js +++ b/public/js/appChart.js @@ -1,9 +1,8 @@ "use strict"; -import { - BASE_URL, - QUERY_PARAMS_COMBINED, -} from "./src_modules/baseUrlPlusQueryParams.mjs"; +import { SENSORTHINGS_API_BASE_URL } from "./config.mjs"; + +import { QUERY_PARAMS_COMBINED } from "./src_modules/baseUrlPlusQueryParams.mjs"; import { calculateVorlaufMinusRuecklaufTemperature } from "./src_modules/calculateTemperatureDiff.mjs"; @@ -17,12 +16,6 @@ import { extractPropertiesFromFormattedDatastreamMetadata, } from "./src_modules/fetchedDataProcessing.mjs"; -import { formatSensorThingsApiResponseForLineOrColumnChart } from "./src_modules/chartHelpers.mjs"; - -import { drawLineChartHighcharts } from "./src_modules/chartLine.mjs"; - -import { drawColumnChartHighcharts } from "./src_modules/chartColumn.mjs"; - import { showLoadingSpinner, hideLoadingSpinner, @@ -30,7 +23,7 @@ import { enableDrawChartButton, } from "./src_modules/loadingIndicator.mjs"; -import { vanillaSelectBox } from "./thirdparty/vanillaSelectBox.mjs"; +import { styleAllDropDownLists } from "./src_modules/dropDownListStyling.mjs"; import { extractObservationsWithinDatesInterval, @@ -49,73 +42,13 @@ import { getAbbreviationsForSelectedOptionsFromAllDropDownLists, } from "./src_modules/dropDownListHelpers.mjs"; -import { drawColumnChartBasedOnSelectedAggregationOptions } from "./src_modules/dropDownListChartColumn.mjs"; +import { drawColumnChartBasedOnSelectedOptions } 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 - * - * @returns {undefined} - */ -const styleBuildingsDataPointsDropDown = function () { - // Create our dropdown list using `vanillaSelectBox`; supports the selection of multiple options - new vanillaSelectBox("#drop-down--bldg-data-point", { - "disableSelectAll": true, - "maxSelect": 5, - "placeHolder": "--Select--", - "search": false, - }); -}; - -/** - * Use the `vanillaDropDown` library to style the aggregation type drop down list - * - * @returns {undefined} - */ -const styleAggregationDropDown = function () { - // Create our dropdown list using `vanillaSelectBox` - new vanillaSelectBox("#drop-down--aggregation-type", { - "disableSelectAll": true, - "maxSelect": 1, - "placeHolder": "--Select--", - "search": false, - }); -}; - -/** - * Use the `vanillaDropDown` library to style the third sampling rate down list - * - * @returns {undefined} - */ -const styleSamplingRateDropDown = function () { - // Create our dropdown list using `vanillaSelectBox` - new vanillaSelectBox("#drop-down--sampling-rate", { - "disableSelectAll": true, - "maxSelect": 1, - "placeHolder": "--Select--", - "search": false, - }); -}; +import { drawLineChartBasedOnSelectedOptions } from "./src_modules/dropDownListChartLine.mjs"; -/** - * Use the `vanillaDropDown` library to style the chart type drop down list - * - * @returns {undefined} - */ -const styleChartTypeDropDown = function () { - // Create our dropdown list using `vanillaSelectBox` - new vanillaSelectBox("#drop-down--chart-type", { - "disableSelectAll": true, - "maxSelect": 1, - "placeHolder": "--Select--", - "search": false, - }); -}; +import { drawScatterPlotBasedOnSelectedOptions } from "./src_modules/dropDownListChartScatterPlot.mjs"; /** * Callback function that wraps the logic of populating the linked drop down lists. @@ -124,10 +57,7 @@ const styleChartTypeDropDown = function () { * @returns {undefined} */ const afterDocumentLoads = function () { - styleBuildingsDataPointsDropDown(); - styleAggregationDropDown(); - styleSamplingRateDropDown(); - styleChartTypeDropDown(); + styleAllDropDownLists(); }; /** @@ -140,33 +70,34 @@ const afterDocumentLoads = function () { */ const drawChartUsingSelectedOptions = async function () { try { - const selectedOptionsAllDropDownLists = - getSelectedOptionsFromAllDropDownLists(); - // Note: The chart type amd aggregation type + duration are the first and // third elements respectively, we have ignored the second and fourth elements const [selectedChartTypeArr, , selectedAggregationTypeDurationArr] = - selectedOptionsAllDropDownLists; + getSelectedOptionsFromAllDropDownLists(); - // Create an array of aggregation type and duration - const selectedAggregationTypeDurationSplitNestedArr = + // Note: the resulting array is nested, it only has one sub-array + // Separate the aggregation type and the aggregation duration strings + const [[selectedAggregationType, selectedAggregationDuration]] = splitMultipleOptionsTextDelimitedBySlash( selectedAggregationTypeDurationArr ); - // Separate the aggregation type and the aggregation duration strings - const [selectedAggregationTypeDurationSplitArr] = - selectedAggregationTypeDurationSplitNestedArr; - - const [selectedAggregationType, selectedAggregationDuration] = - selectedAggregationTypeDurationSplitArr; - // Array of building(s) + data point(s) + sampling rate const selectedBuildingsDataPointsSamplingRateAbbrevNestedArr = getAbbreviationsForSelectedOptionsFromAllDropDownLists( - selectedOptionsAllDropDownLists + getSelectedOptionsFromAllDropDownLists() ); + // The formatted abbreviations array is nested, we are interested in the first sub-array + // We assume that all the phenomena have the same sampling rate + // Extract the formatted sampling rate string - used by ALL chart types + const [[, , selectedSamplingRateAbbrev]] = + selectedBuildingsDataPointsSamplingRateAbbrevNestedArr; + + // User-specified start date and end date for aggregation - used by MULTIPLE chart types + const AGGREGATION_START_DATE = "2020-01-01"; + const AGGREGATION_STOP_DATE = "2020-12-31"; + // The values of these references is either equal to `true` or an error will be thrown // We would like the errors to be thrown at this point before we begin performing any asynchronous tasks const selectedAggregationOptionsAreValid = @@ -209,81 +140,58 @@ const drawChartUsingSelectedOptions = async function () { // Disable the 'draw chart' button disableDrawChartButton(); - // Fetch the observations + metadata / raw observations - const observationsRawPlusMetadataArr = + // Fetch and extract the observations + metadata / raw observations + const [observationsRawNestedArr, metadataRawNestedArr] = selectedBuildingsDataPointsSamplingRateAbbrevRawObsArr.length === 0 ? [[], []] : await getMetadataPlusObservationsFromSingleOrMultipleDatastreams( - BASE_URL, + SENSORTHINGS_API_BASE_URL, QUERY_PARAMS_COMBINED, selectedBuildingsDataPointsSamplingRateAbbrevRawObsArr ); - // Fetch the observations + metadata / temperature difference (dT) - const observationsTempDiffPlusMetadataArr = + // Fetch and extract the observations + metadata / temperature difference (dT) + const [observationsTempDiffNestedArr, metadataTempDiffNestedArr] = selectedBuildingsDataPointsSamplingRateAbbrevTempDiffArr.length === 0 ? [[], []] : await calculateVorlaufMinusRuecklaufTemperature( - BASE_URL, + SENSORTHINGS_API_BASE_URL, QUERY_PARAMS_COMBINED, extractBuildingPlusSamplingRate( selectedBuildingsDataPointsSamplingRateAbbrevTempDiffArr ) ); - // Extract the combined arrays for observations and metadata / raw observations - const [observationsRawNestedArr, metadataRawNestedArr] = - observationsRawPlusMetadataArr; - - // Extract the combined arrays for observations and metadata / temperature difference (dT) - const [observationsTempDiffNestedArr, metadataTempDiffNestedArr] = - observationsTempDiffPlusMetadataArr; - - // Create a combined array of observations and metadata - const observationsPlusMetadataCombined = [ + // Create and extract the combined observations and metadata + const [observationsCombinedNestedArr, metadataCombinedNestedArr] = [ [...observationsRawNestedArr, ...observationsTempDiffNestedArr], [...metadataRawNestedArr, ...metadataTempDiffNestedArr], ]; - const [observationsComboNestedArr, metadataComboNestedArr] = - observationsPlusMetadataCombined; - // Create formatted array(s) for metadata - used by ALL chart types - const formattedMetadataNestedArr = metadataComboNestedArr.map( + const formattedMetadataNestedArr = metadataCombinedNestedArr.map( (metadataObj) => formatDatastreamMetadataForChart(metadataObj) ); // Extract the formatted metadata properties for the raw observations - used by ALL chart types - const rawObservationsExtractedFormattedDatastreamProperties = + const rawObsExtractedFormattedDatastreamProperties = extractPropertiesFromFormattedDatastreamMetadata( formattedMetadataNestedArr, false ); - // The formatted abbreviations array is nested - const [selectedBuildingsDataPointsSamplingRateAbbrevArr] = - selectedBuildingsDataPointsSamplingRateAbbrevNestedArr; - - // Extract the formatted sampling rate string - used by ALL chart types - const [, , selectedSamplingRateAbbrev] = - selectedBuildingsDataPointsSamplingRateAbbrevArr; - - // User-specified start date and end date for aggregation - used by MULTIPLE chart types - const aggregationStartDate = "2020-01-01"; - const aggregationEndDate = "2020-12-31"; - // Create final array of observations- used by MULTIPLE chart types // If we are performing aggregation, it was envisioned that the user would // select observations that fall within a start and end date const observationsComboNestedFinalArr = selectedAggregationType === "None (raw data)" - ? observationsComboNestedArr - : observationsComboNestedArr.map((observationsArr) => + ? observationsCombinedNestedArr + : observationsCombinedNestedArr.map((observationsArr) => extractObservationsWithinDatesInterval( observationsArr, selectedSamplingRateAbbrev, - aggregationStartDate, - aggregationEndDate + AGGREGATION_START_DATE, + AGGREGATION_STOP_DATE ) ); @@ -295,7 +203,6 @@ const drawChartUsingSelectedOptions = async function () { for (const selectedChartType of selectedChartTypeArr) { switch (selectedChartType) { - // We are interested in raw observations ONLY case "Heatmap": if ( selectedAggregationOptionsAreValid && @@ -303,82 +210,43 @@ const drawChartUsingSelectedOptions = async function () { ) { drawHeatmapBasedOnSelectedOptions( observationsComboNestedFinalArr, - rawObservationsExtractedFormattedDatastreamProperties + rawObsExtractedFormattedDatastreamProperties ); } break; - // We are interested in raw observations ONLY case "Scatter Plot": if ( selectedAggregationOptionsAreValid && selectedBuildingDataPointsOptionsAreValid ) { - drawScatterPlotFromChartSelection( + drawScatterPlotBasedOnSelectedOptions( observationsComboNestedFinalArr, - rawObservationsExtractedFormattedDatastreamProperties + rawObsExtractedFormattedDatastreamProperties ); } break; - // We are interested in BOTH raw observations and aggregated observations case "Line": - // Raw observations - if (selectedAggregationType === "None (raw data)") { - // Create formatted array(s) for observations - const formattedRawObservationsLineChartNestedArr = - observationsComboNestedFinalArr.map((observationsArr) => - formatSensorThingsApiResponseForLineOrColumnChart( - observationsArr - ) - ); - - drawLineChartHighcharts( - formattedRawObservationsLineChartNestedArr, - rawObservationsExtractedFormattedDatastreamProperties - ); - } - // Aggregated observations - else { - drawLineChartBasedOnSelectedAggregationOptions( - selectedAggregationType, - selectedAggregationDuration, - observationsComboNestedFinalArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - formattedMetadataNestedArr - ); - } + drawLineChartBasedOnSelectedOptions( + selectedAggregationType, + selectedAggregationDuration, + observationsComboNestedFinalArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr + ); break; - // We are interested in BOTH raw observations and aggregated observations case "Column": - // Raw observations - if (selectedAggregationType === "None (raw data)") { - // Create formatted array(s) for observations - const formattedRawObservationsColumnChartNestedArr = - observationsComboNestedFinalArr.map((observationsArr) => - formatSensorThingsApiResponseForLineOrColumnChart( - observationsArr - ) - ); - - drawColumnChartHighcharts( - formattedRawObservationsColumnChartNestedArr, - rawObservationsExtractedFormattedDatastreamProperties - ); - } - // Aggregated observations - else { - drawColumnChartBasedOnSelectedAggregationOptions( - selectedAggregationType, - selectedAggregationDuration, - observationsComboNestedFinalArr, - selectedSamplingRateAbbrev, - uniqueCalendarDatesNestedArr, - formattedMetadataNestedArr - ); - } + drawColumnChartBasedOnSelectedOptions( + selectedAggregationType, + selectedAggregationDuration, + observationsComboNestedFinalArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr + ); break; default: diff --git a/public/js/src_modules/baseUrlPlusQueryParams.mjs b/public/js/src_modules/baseUrlPlusQueryParams.mjs index 4c2b8b6621965682ff98d18ef333a9249d401357..93207d279ad262d9653a4d6bab4eca541d680570 100644 --- a/public/js/src_modules/baseUrlPlusQueryParams.mjs +++ b/public/js/src_modules/baseUrlPlusQueryParams.mjs @@ -1,7 +1,5 @@ "use strict"; -const BASE_URL = "http://193.196.39.91:8080/frost-icity-tp31/v1.1"; - /** * Create a temporal filter string for the fetched Observations * @param {String} dateStart Start date in YYYY-MM-DD format @@ -33,9 +31,7 @@ const createUrlParametersForGetRequest = function (dateStart, dateStop) { }; }; -const QUERY_PARAMS_COMBINED = createUrlParametersForGetRequest( +export const QUERY_PARAMS_COMBINED = createUrlParametersForGetRequest( "2020-01-01", "2021-01-01" ); - -export { BASE_URL, QUERY_PARAMS_COMBINED }; diff --git a/public/js/src_modules/dropDownListChartColumn.mjs b/public/js/src_modules/dropDownListChartColumn.mjs index 7c2aeee80ad43a592c9d9a2bbf56c39f05547251..78bf21d68719ae008868a02075ab78c31c823914 100644 --- a/public/js/src_modules/dropDownListChartColumn.mjs +++ b/public/js/src_modules/dropDownListChartColumn.mjs @@ -1,5 +1,9 @@ "use strict"; +import { formatSensorThingsApiResponseForLineOrColumnChart } from "./chartHelpers.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + import { drawColumnChartHighcharts } from "./chartColumn.mjs"; import { @@ -33,7 +37,7 @@ import { * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties * @returns {undefined} undefined */ -export const drawColumnChartBasedOnSelectedAggregationOptions = function ( +const drawColumnChartBasedOnSelectedAggregationOptions = function ( selectedAggregationType, selectedAggregationDuration, observationsNestedArr, @@ -157,3 +161,56 @@ export const drawColumnChartBasedOnSelectedAggregationOptions = function ( ); } }; + +/** + * Draw a column chart based on the selected options from a drop-down list. + * This chart type supports both raw observations and aggregated observations + * + * @param {String} selectedAggregationType The selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` + * @param {String} selectedAggregationDuration The selected aggregation duration. The currently supported strings include `Daily` and `Monthly` + * @param {Array} observationsNestedArr An array made up of sub-array(s) of observations + * @param {String} selectedSamplingRateAbbrev 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 drawColumnChartBasedOnSelectedOptions = function ( + selectedAggregationType, + selectedAggregationDuration, + observationsNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr +) { + // Case 1: Raw observations + if (selectedAggregationType === "None (raw data)") { + // Create formatted array(s) for observations + const formattedRawObservationsColumnChartNestedArr = + observationsNestedArr.map((observationsArr) => + formatSensorThingsApiResponseForLineOrColumnChart(observationsArr) + ); + + // Extract formatted metadata properties + const rawObsExtractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + false + ); + + drawColumnChartHighcharts( + formattedRawObservationsColumnChartNestedArr, + rawObsExtractedFormattedDatastreamProperties + ); + } + // Case 2: Aggregated observations + else { + drawColumnChartBasedOnSelectedAggregationOptions( + selectedAggregationType, + selectedAggregationDuration, + observationsNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr + ); + } +}; diff --git a/public/js/src_modules/dropDownListChartHeatmap.mjs b/public/js/src_modules/dropDownListChartHeatmap.mjs index cad77602c6c55491a624c9430a4f3a22326338aa..d5ee1b6cb068ebc6f9e1ec43e890d5259c8c6977 100644 --- a/public/js/src_modules/dropDownListChartHeatmap.mjs +++ b/public/js/src_modules/dropDownListChartHeatmap.mjs @@ -6,7 +6,8 @@ import { } from "./chartHeatmap.mjs"; /** - * Draw a heatmap based on the selected options from a drop-down list + * Draw a heatmap based on the selected options from a drop-down list. + * Currently, this chart type only supports raw observations * * @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 diff --git a/public/js/src_modules/dropDownListChartLine.mjs b/public/js/src_modules/dropDownListChartLine.mjs index 494e466c718cdd041267ee95b4ae31fca1d50b18..6f182f204748cb8da983f9f3cd3c04cf722bf897 100644 --- a/public/js/src_modules/dropDownListChartLine.mjs +++ b/public/js/src_modules/dropDownListChartLine.mjs @@ -1,5 +1,9 @@ "use strict"; +import { formatSensorThingsApiResponseForLineOrColumnChart } from "./chartHelpers.mjs"; + +import { extractPropertiesFromFormattedDatastreamMetadata } from "./fetchedDataProcessing.mjs"; + import { drawLineChartHighcharts } from "./chartLine.mjs"; import { @@ -33,7 +37,7 @@ import { * @param {Array} formattedMetadataNestedArr An array of sub-arrays of formatted metadata properties * @returns {undefined} undefined */ -export const drawLineChartBasedOnSelectedAggregationOptions = function ( +const drawLineChartBasedOnSelectedAggregationOptions = function ( selectedAggregationType, selectedAggregationDuration, observationsNestedArr, @@ -157,3 +161,56 @@ export const drawLineChartBasedOnSelectedAggregationOptions = function ( ); } }; + +/** + * Draw a line chart based on the selected options from a drop-down list. + * This chart type supports both raw observations and aggregated observations + * + * @param {String} selectedAggregationType The selected aggregation type. The currently supported strings include `Sum`, `Maximum`, `Minimum` and `Average` + * @param {String} selectedAggregationDuration The selected aggregation duration. The currently supported strings include `Daily` and `Monthly` + * @param {Array} observationsNestedArr An array made up of sub-array(s) of observations + * @param {String} selectedSamplingRateAbbrev 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 drawLineChartBasedOnSelectedOptions = function ( + selectedAggregationType, + selectedAggregationDuration, + observationsNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr +) { + // Raw observations + if (selectedAggregationType === "None (raw data)") { + // Create formatted array(s) for observations + const formattedRawObservationsLineChartNestedArr = + observationsNestedArr.map((observationsArr) => + formatSensorThingsApiResponseForLineOrColumnChart(observationsArr) + ); + + // Extract formatted metadata properties + const rawObsExtractedFormattedDatastreamProperties = + extractPropertiesFromFormattedDatastreamMetadata( + formattedMetadataNestedArr, + false + ); + + drawLineChartHighcharts( + formattedRawObservationsLineChartNestedArr, + rawObsExtractedFormattedDatastreamProperties + ); + } + // Aggregated observations + else { + drawLineChartBasedOnSelectedAggregationOptions( + selectedAggregationType, + selectedAggregationDuration, + observationsNestedArr, + selectedSamplingRateAbbrev, + uniqueCalendarDatesNestedArr, + formattedMetadataNestedArr + ); + } +}; diff --git a/public/js/src_modules/dropDownListChartScatterPlot.mjs b/public/js/src_modules/dropDownListChartScatterPlot.mjs index 9307a48dfd99cc8c016923b8c194b25c33e703a4..1f42d2fb8df7d56dc9d01aac856667b47e5a7623 100644 --- a/public/js/src_modules/dropDownListChartScatterPlot.mjs +++ b/public/js/src_modules/dropDownListChartScatterPlot.mjs @@ -6,13 +6,14 @@ import { } from "./chartScatterPlot.mjs"; /** - * Draw a scatter plot based on the selected options from a drop-down list + * Draw a scatter plot based on the selected options from a drop-down list. + * Currently, this chart type only supports raw observations * * @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 ( +export const drawScatterPlotBasedOnSelectedOptions = function ( observationsComboNestedArr, extractedFormattedDatastreamProperties ) { diff --git a/public/js/src_modules/dropDownListStyling.mjs b/public/js/src_modules/dropDownListStyling.mjs new file mode 100644 index 0000000000000000000000000000000000000000..acc028414a6d63a683a09a51377a226adcc96ddc --- /dev/null +++ b/public/js/src_modules/dropDownListStyling.mjs @@ -0,0 +1,53 @@ +"use strict"; + +import { vanillaSelectBox } from "../thirdparty/vanillaSelectBox.mjs"; + +/** + * Use the `vanillaDropDown` library to style the buildings & data points drop down list + * + * @returns {undefined} + */ +const styleBuildingsDataPointsDropDown = function () { + // Create our dropdown list using `vanillaSelectBox`; supports the selection of multiple options + new vanillaSelectBox("#drop-down--bldg-data-point", { + disableSelectAll: true, + maxSelect: 5, + placeHolder: "--Select--", + search: false, + }); +}; + +/** + * Use the `vanillaDropDown` library to style the chart type, + * aggregation type and sampling rates drop down lists + * + * @returns {undefined} undefined + */ +const styleOtherDropDownLists = function () { + // Array of CSS selector strings + const cssSelectorStringsArr = [ + "#drop-down--chart-type", + "#drop-down--aggregation-type", + "#drop-down--sampling-rate", + ]; + + // Create our dropdown lists using `vanillaSelectBox` + cssSelectorStringsArr.forEach((cssSelectorString) => { + new vanillaSelectBox(cssSelectorString, { + disableSelectAll: true, + maxSelect: 1, + placeHolder: "--Select--", + search: false, + }); + }); +}; + +/** + * Use the `vanillaDropDown` library to style all the drop down lists + * + * @returns {undefined} undefined + */ +export const styleAllDropDownLists = function () { + styleBuildingsDataPointsDropDown(); + styleOtherDropDownLists(); +};