@opengeoweb/time-series 20.0.0 → 20.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -817,8 +817,16 @@ var createUrl = function createUrl(baseUrl, pathToAdd, queryParameters) {
817
817
  return urlObject.toString();
818
818
  };
819
819
  var supportedOutputFormat = 'CoverageJSON';
820
+ // Stable, order-independent string representation of a parameter's dimensions
821
+ var serializeDimensions = function serializeDimensions(dimensions) {
822
+ return (dimensions != null ? dimensions : []).slice().sort(function (dimA, dimB) {
823
+ return dimA.id.localeCompare(dimB.id);
824
+ }).map(function (dim) {
825
+ return dim.id + ":" + dim.value;
826
+ }).join('|');
827
+ };
820
828
  var getBaseQueryParamArray = function getBaseQueryParamArray(parameter, instance, collection, intervalParam) {
821
- var _instance$extent, _collection$extent;
829
+ var _instance$extent, _collection$extent, _parameter$dimensions;
822
830
  var res = [];
823
831
  res.push(['parameter-name', parameter.propertyName]);
824
832
  if (intervalParam) {
@@ -828,11 +836,11 @@ var getBaseQueryParamArray = function getBaseQueryParamArray(parameter, instance
828
836
  if (crs) {
829
837
  res.push(['crs', crs]);
830
838
  }
831
- if (parameter.dimension) {
832
- if (parameter.dimension.id && parameter.dimension.id !== REFERENCE_TIME_ID && parameter.dimension.value !== '' && parameter.dimension.value !== undefined) {
833
- res.push([parameter.dimension.id, parameter.dimension.value]);
839
+ ((_parameter$dimensions = parameter.dimensions) != null ? _parameter$dimensions : []).forEach(function (dimension) {
840
+ if (dimension.id && dimension.id !== REFERENCE_TIME_ID && dimension.value !== '' && dimension.value !== undefined) {
841
+ res.push([dimension.id, dimension.value]);
834
842
  }
835
- }
843
+ });
836
844
  res.push(['f', supportedOutputFormat]);
837
845
  return res;
838
846
  };
@@ -1064,13 +1072,34 @@ var patchableParameterProperties = {
1064
1072
  opacity: true,
1065
1073
  instanceId: true,
1066
1074
  propertyName: true,
1067
- dimension: true
1075
+ dimensions: true
1068
1076
  };
1069
1077
  var removableParameterPropertiesOnPatch = {
1070
1078
  color: true,
1071
1079
  opacity: true,
1072
1080
  instanceId: true,
1073
- dimension: true
1081
+ dimensions: true
1082
+ };
1083
+ // Upserts each incoming {id, value} entry by id, preserving other stored dimensions
1084
+ var mergeDimensions = function mergeDimensions(existingDimensions, incomingDimensions) {
1085
+ var merged = [].concat(existingDimensions != null ? existingDimensions : []);
1086
+ incomingDimensions.forEach(function (incoming) {
1087
+ var existingIndex = merged.findIndex(function (dim) {
1088
+ return dim.id === incoming.id;
1089
+ });
1090
+ if (existingIndex >= 0) {
1091
+ merged[existingIndex] = incoming;
1092
+ } else {
1093
+ merged.push(incoming);
1094
+ }
1095
+ });
1096
+ return merged;
1097
+ };
1098
+ // Reads a preset parameter's dimensions, falling back to the pre-array `dimension` shape
1099
+ var getNormalizedDimensions = function getNormalizedDimensions(parameter) {
1100
+ var _parameter$dimensions;
1101
+ var legacyDimension = parameter.dimension;
1102
+ return (_parameter$dimensions = parameter.dimensions) != null ? _parameter$dimensions : legacyDimension ? [legacyDimension] : undefined;
1074
1103
  };
1075
1104
  var timeseriesSelectServiceFilterChipsAdapter = createEntityAdapter({
1076
1105
  selectId: function selectId(service) {
@@ -1208,6 +1237,8 @@ var panelSlice = createSlice({
1208
1237
  Object.keys(payloadParameter).forEach(function (propertyName) {
1209
1238
  if (removableParameterPropertiesOnPatch[propertyName] && payloadParameter[propertyName] === undefined && propertyName in payloadParameter) {
1210
1239
  delete patchedParameter[propertyName];
1240
+ } else if (propertyName === 'dimensions' && payloadParameter.dimensions !== undefined) {
1241
+ patchedParameter.dimensions = mergeDimensions(patchedParameter.dimensions, payloadParameter.dimensions);
1211
1242
  } else if (patchableParameterProperties[propertyName] && payloadParameter[propertyName] !== undefined) {
1212
1243
  patchedParameter[propertyName] = payloadParameter[propertyName];
1213
1244
  }
@@ -1665,6 +1696,8 @@ var timeSeriesReducer = function timeSeriesReducer(state, action) {
1665
1696
  draftPreset.plotPreset.parameters.forEach(function (draftParameter) {
1666
1697
  draftParameter.id = generateParameterId();
1667
1698
  draftParameter.opacity = draftParameter.opacity || 70;
1699
+ draftParameter.dimensions = getNormalizedDimensions(draftParameter);
1700
+ delete draftParameter.dimension;
1668
1701
  var serviceFromStore = getServiceById(nextServices, draftParameter.serviceId);
1669
1702
  if (!serviceFromStore) {
1670
1703
  var serviceFromPreset = getServiceById(presetServices, draftParameter.serviceId);
@@ -2318,18 +2351,20 @@ var ParameterColorSelect = function ParameterColorSelect(_ref) {
2318
2351
  };
2319
2352
 
2320
2353
  var ParameterDimensionIdSelect = function ParameterDimensionIdSelect(_ref) {
2321
- var _parameter$dimension, _parameter$dimension2;
2322
2354
  var rowIsEnabled = _ref.rowIsEnabled,
2323
2355
  parameter = _ref.parameter,
2324
2356
  customDimensions = _ref.customDimensions,
2325
2357
  hasReferenceTime = _ref.hasReferenceTime,
2326
2358
  patchParameter = _ref.patchParameter,
2359
+ selectedDimensionId = _ref.selectedDimensionId,
2360
+ setSelectedDimensionId = _ref.setSelectedDimensionId,
2327
2361
  t = _ref.t;
2328
2362
  // Custom dimensions or reference time are not available
2329
2363
  if ((!customDimensions || customDimensions.length === 0) && !hasReferenceTime) {
2330
2364
  return null;
2331
2365
  }
2332
2366
  var defaultDimension = hasReferenceTime ? REFERENCE_TIME_ID : customDimensions[0].id;
2367
+ var activeDimensionId = selectedDimensionId || defaultDimension;
2333
2368
  return jsxs(TooltipSelect, {
2334
2369
  SelectDisplayProps: {
2335
2370
  'aria-label': 'timeseriesManager-dimensionId'
@@ -2337,19 +2372,24 @@ var ParameterDimensionIdSelect = function ParameterDimensionIdSelect(_ref) {
2337
2372
  "data-testid": "parameterDimensioIdSelect",
2338
2373
  isEnabled: rowIsEnabled,
2339
2374
  onChange: function onChange(event) {
2340
- var newParameter = {
2375
+ var _parameter$dimensions, _parameter$dimensions2;
2376
+ var newDimensionId = event.target.value;
2377
+ // Restore any previously entered value for this dimension id instead of resetting it
2378
+ var existingValue = (_parameter$dimensions = (_parameter$dimensions2 = parameter.dimensions) == null || (_parameter$dimensions2 = _parameter$dimensions2.find(function (dim) {
2379
+ return dim.id === newDimensionId;
2380
+ })) == null ? void 0 : _parameter$dimensions2.value) != null ? _parameter$dimensions : '';
2381
+ setSelectedDimensionId(newDimensionId);
2382
+ patchParameter({
2341
2383
  id: parameter.id,
2342
- dimension: {
2343
- id: event.target.value,
2344
- // Select the first value of selected dimension by default
2345
- value: ''
2346
- }
2347
- };
2348
- patchParameter(newParameter);
2384
+ dimensions: [{
2385
+ id: newDimensionId,
2386
+ value: existingValue
2387
+ }]
2388
+ });
2349
2389
  },
2350
- tooltip: t('timeseries-dimension-id') + ": " + (((_parameter$dimension = parameter.dimension) == null ? void 0 : _parameter$dimension.id) || defaultDimension),
2351
- // If parameter has no selected dimension id, choose reference time if it is available, otherwise the first dimension
2352
- value: ((_parameter$dimension2 = parameter.dimension) == null ? void 0 : _parameter$dimension2.id) || defaultDimension,
2390
+ tooltip: t('timeseries-dimension-id') + ": " + activeDimensionId,
2391
+ // If no dimension id selected yet, choose reference time if it is available, otherwise the first dimension
2392
+ value: activeDimensionId,
2353
2393
  children: [jsx(MenuItem, {
2354
2394
  disabled: true,
2355
2395
  children: t('timeseries-dimension-id')
@@ -2369,19 +2409,23 @@ var ParameterDimensionIdSelect = function ParameterDimensionIdSelect(_ref) {
2369
2409
 
2370
2410
  var defaultValue = 'none';
2371
2411
  var ParameterDimensionValueSelect = function ParameterDimensionValueSelect(_ref) {
2372
- var _parameter$dimension3, _parameter$dimension4, _parameter$dimension5, _parameter$dimension6, _parameter$dimension7, _parameter$dimension8, _parameter$dimension9, _selectedDimension$va;
2412
+ var _customDimensions$, _parameter$dimensions, _selectedDimension$va;
2373
2413
  var rowIsEnabled = _ref.rowIsEnabled,
2374
2414
  parameter = _ref.parameter,
2375
2415
  customDimensions = _ref.customDimensions,
2376
2416
  patchParameter = _ref.patchParameter,
2417
+ selectedDimensionId = _ref.selectedDimensionId,
2377
2418
  t = _ref.t;
2419
+ var activeDimensionId = selectedDimensionId || ((_customDimensions$ = customDimensions[0]) == null ? void 0 : _customDimensions$.id);
2378
2420
  var selectedDimension = customDimensions.find(function (dimension) {
2379
- var _parameter$dimension;
2380
- return dimension.id === ((_parameter$dimension = parameter.dimension) == null ? void 0 : _parameter$dimension.id);
2421
+ return dimension.id === activeDimensionId;
2381
2422
  }) || customDimensions[0];
2382
2423
  if (!selectedDimension || !customDimensions || customDimensions.length === 0) {
2383
2424
  return null;
2384
2425
  }
2426
+ var activeValue = (_parameter$dimensions = parameter.dimensions) == null || (_parameter$dimensions = _parameter$dimensions.find(function (dimension) {
2427
+ return dimension.id === activeDimensionId;
2428
+ })) == null ? void 0 : _parameter$dimensions.value;
2385
2429
  return jsxs(TooltipSelect, {
2386
2430
  SelectDisplayProps: {
2387
2431
  'aria-label': 'timeseriesManager-dimensionValue'
@@ -2389,24 +2433,24 @@ var ParameterDimensionValueSelect = function ParameterDimensionValueSelect(_ref)
2389
2433
  "data-testid": "parameterDimensionValueSelect",
2390
2434
  isEnabled: rowIsEnabled,
2391
2435
  onChange: function onChange(event) {
2392
- var _parameter$dimension2;
2436
+ var selectedValue = event.target.value;
2393
2437
  var newParameter = {
2394
2438
  id: parameter.id,
2395
- dimension: {
2396
- id: ((_parameter$dimension2 = parameter.dimension) == null ? void 0 : _parameter$dimension2.id) || customDimensions[0].id,
2397
- value: event.target.value
2398
- }
2439
+ dimensions: [{
2440
+ id: activeDimensionId,
2441
+ value: selectedValue === defaultValue ? '' : selectedValue
2442
+ }]
2399
2443
  };
2400
2444
  patchParameter(newParameter);
2401
2445
  },
2402
- tooltip: t('timeseries-dimension-value') + ": " + (((_parameter$dimension3 = parameter.dimension) == null ? void 0 : _parameter$dimension3.value) !== undefined ? (_parameter$dimension4 = parameter.dimension) == null ? void 0 : _parameter$dimension4.value : ''),
2403
- value: ((_parameter$dimension5 = parameter.dimension) == null ? void 0 : _parameter$dimension5.value) === undefined || ((_parameter$dimension6 = parameter.dimension) == null ? void 0 : _parameter$dimension6.value) === '' ? defaultValue : (_parameter$dimension7 = parameter.dimension) == null ? void 0 : _parameter$dimension7.value,
2446
+ tooltip: t('timeseries-dimension-value') + ": " + (activeValue !== undefined ? activeValue : ''),
2447
+ value: activeValue === undefined || activeValue === '' ? defaultValue : activeValue,
2404
2448
  children: [jsx(MenuItem, {
2405
2449
  disabled: true,
2406
2450
  children: t('timeseries-dimension-value')
2407
- }), (((_parameter$dimension8 = parameter.dimension) == null ? void 0 : _parameter$dimension8.value) === undefined || ((_parameter$dimension9 = parameter.dimension) == null ? void 0 : _parameter$dimension9.value) === '') && jsx(MenuItem, {
2451
+ }), jsx(MenuItem, {
2408
2452
  "data-testid": "timeseries-dimension-value-none",
2409
- value: "none",
2453
+ value: defaultValue,
2410
2454
  children: t('timeseries-dimension-none')
2411
2455
  }, "dimensionvaluemenu-none"), selectedDimension == null || (_selectedDimension$va = selectedDimension.values) == null ? void 0 : _selectedDimension$va.map(function (value) {
2412
2456
  return jsx(MenuItem, {
@@ -2418,6 +2462,7 @@ var ParameterDimensionValueSelect = function ParameterDimensionValueSelect(_ref)
2418
2462
  });
2419
2463
  };
2420
2464
 
2465
+ var defaultInstanceId = 'latest-0';
2421
2466
  var ReferenceTimeSelect = function ReferenceTimeSelect(_ref) {
2422
2467
  var rowIsEnabled = _ref.rowIsEnabled,
2423
2468
  parameter = _ref.parameter,
@@ -2451,7 +2496,7 @@ var ReferenceTimeSelect = function ReferenceTimeSelect(_ref) {
2451
2496
  var _relativeReferenceTim;
2452
2497
  var index = Number((_relativeReferenceTim = relativeReferenceTime[1]) != null ? _relativeReferenceTim : 0);
2453
2498
  if (Number.isInteger(index) && index >= 0 && index < validRefTimes.length) {
2454
- setReferenceTime(parameter.instanceId === 'latest' ? 'latest-0' : parameter.instanceId);
2499
+ setReferenceTime(parameter.instanceId === 'latest' ? defaultInstanceId : parameter.instanceId);
2455
2500
  return;
2456
2501
  }
2457
2502
  }
@@ -2461,13 +2506,12 @@ var ReferenceTimeSelect = function ReferenceTimeSelect(_ref) {
2461
2506
  if (alreadyHasReferenceTime) {
2462
2507
  setReferenceTime(parameter.instanceId);
2463
2508
  } else {
2464
- var initialReferenceTime = refTimeList[0].id;
2465
- setReferenceTime(initialReferenceTime);
2466
- if (parameter.instanceId !== initialReferenceTime) {
2509
+ setReferenceTime(defaultInstanceId);
2510
+ if (parameter.instanceId !== defaultInstanceId) {
2467
2511
  // Update reference time for Echarts Plot
2468
2512
  patchParameter({
2469
2513
  id: parameter.id,
2470
- instanceId: initialReferenceTime
2514
+ instanceId: defaultInstanceId
2471
2515
  });
2472
2516
  }
2473
2517
  }
@@ -2728,8 +2772,7 @@ var combineParametersWithData = function combineParametersWithData(parameters, d
2728
2772
  return parameters.map(function (parameter) {
2729
2773
  // for each parameter, find the corresponding data point
2730
2774
  var dataPoint = data.find(function (item) {
2731
- var _item$dimension, _parameter$dimension;
2732
- return item.propertyName === parameter.propertyName && item.serviceId === parameter.serviceId && item.collectionId === parameter.collectionId && item.instanceId === parameter.instanceId && ((_item$dimension = item.dimension) == null ? void 0 : _item$dimension.value) === ((_parameter$dimension = parameter.dimension) == null ? void 0 : _parameter$dimension.value);
2775
+ return item.propertyName === parameter.propertyName && item.serviceId === parameter.serviceId && item.collectionId === parameter.collectionId && item.instanceId === parameter.instanceId && serializeDimensions(item.dimensions) === serializeDimensions(parameter.dimensions);
2733
2776
  });
2734
2777
  return Object.assign({}, parameter, {
2735
2778
  timestep: (dataPoint == null ? void 0 : dataPoint.timestep) || [],
@@ -3234,7 +3277,7 @@ var useGetPlotsWithData = function useGetPlotsWithData(plotsWithoutData, selecte
3234
3277
  // Construct all queries to be executed
3235
3278
  var queries = useMemo(function () {
3236
3279
  return plotsWithoutData.parameters.map(function (parameter) {
3237
- var _collectionsList, _collection$allInstan, _parameter$dimension;
3280
+ var _collectionsList, _collection$allInstan;
3238
3281
  // Note: service can be undefined
3239
3282
  var service = (_collectionsList = collectionsList[parameter.serviceId + "-" + parameter.collectionId]) == null ? void 0 : _collectionsList.service;
3240
3283
  var collection = collectionDetails == null ? void 0 : collectionDetails.find(function (collection) {
@@ -3249,7 +3292,7 @@ var useGetPlotsWithData = function useGetPlotsWithData(plotsWithoutData, selecte
3249
3292
  // Create here so if new data is advertised by the collection/instance a new request is made
3250
3293
  var intervalParam = constructTimeInterval(collection, instanceInfo, syncgroupTimeState);
3251
3294
  return {
3252
- queryKey: generateTimeSeriesQueryKeys(['get-parameter-data', parameter.id || 'undefined', parameter.plotId, parameter.propertyName, parameter.serviceId, parameter.collectionId, parameter.instanceId || 'undefined', ((_parameter$dimension = parameter.dimension) == null ? void 0 : _parameter$dimension.value) || 'undefined', intervalParam, selectedLocation.lat.toString() || 'undefined', selectedLocation.lon.toString() || 'undefined']),
3295
+ queryKey: generateTimeSeriesQueryKeys(['get-parameter-data', parameter.id || 'undefined', parameter.plotId, parameter.propertyName, parameter.serviceId, parameter.collectionId, parameter.instanceId || 'undefined', serializeDimensions(parameter.dimensions) || 'undefined', intervalParam, selectedLocation.lat.toString() || 'undefined', selectedLocation.lon.toString() || 'undefined']),
3253
3296
  queryFn: function () {
3254
3297
  var _queryFn7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
3255
3298
  var edrResponse;
@@ -3430,7 +3473,7 @@ var useGetLocations = function useGetLocations(options) {
3430
3473
  };
3431
3474
 
3432
3475
  var ParameterDimensionSelect = function ParameterDimensionSelect(_ref) {
3433
- var _collectionDetails$da, _parameter$dimension, _parameter$dimension2, _parameter$dimension3;
3476
+ var _collectionDetails$da;
3434
3477
  var rowIsEnabled = _ref.rowIsEnabled,
3435
3478
  parameter = _ref.parameter,
3436
3479
  patchParameter = _ref.patchParameter,
@@ -3443,6 +3486,10 @@ var ParameterDimensionSelect = function ParameterDimensionSelect(_ref) {
3443
3486
  var _useState = useState([]),
3444
3487
  refTimeList = _useState[0],
3445
3488
  setRefTimeList = _useState[1];
3489
+ // Tracks which dimension id is currently being edited/shown, not persisted (mirrors DimensionSelect.tsx in libs/core)
3490
+ var _useState2 = useState(undefined),
3491
+ selectedDimensionId = _useState2[0],
3492
+ setSelectedDimensionId = _useState2[1];
3446
3493
  var _useGetDetailsForColl = useGetDetailsForCollection(service, collectionId),
3447
3494
  collectionDetails = _useGetDetailsForColl.data;
3448
3495
  // Only do an instances call if instances are supported by the collection
@@ -3476,13 +3523,15 @@ var ParameterDimensionSelect = function ParameterDimensionSelect(_ref) {
3476
3523
  parameter: parameter,
3477
3524
  patchParameter: patchParameter,
3478
3525
  rowIsEnabled: rowIsEnabled,
3526
+ selectedDimensionId: selectedDimensionId,
3527
+ setSelectedDimensionId: setSelectedDimensionId,
3479
3528
  t: t
3480
3529
  })
3481
3530
  }), jsx(Grid, {
3482
3531
  size: "grow",
3483
3532
  children:
3484
- // Show referene time select if no dimension selected yet and reference time is available OR if reference time has been selected
3485
- !((_parameter$dimension = parameter.dimension) != null && _parameter$dimension.id) && hasReferenceTime || (_parameter$dimension2 = parameter.dimension) != null && _parameter$dimension2.id && ((_parameter$dimension3 = parameter.dimension) == null ? void 0 : _parameter$dimension3.id) === REFERENCE_TIME_ID ? jsx(ReferenceTimeSelect, {
3533
+ // Show reference time select if no dimension selected yet and reference time is available OR if reference time has been selected
3534
+ !selectedDimensionId && hasReferenceTime || selectedDimensionId === REFERENCE_TIME_ID ? jsx(ReferenceTimeSelect, {
3486
3535
  parameter: parameter,
3487
3536
  patchParameter: patchParameter,
3488
3537
  refTimeList: refTimeList,
@@ -3493,6 +3542,7 @@ var ParameterDimensionSelect = function ParameterDimensionSelect(_ref) {
3493
3542
  parameter: parameter,
3494
3543
  patchParameter: patchParameter,
3495
3544
  rowIsEnabled: rowIsEnabled,
3545
+ selectedDimensionId: selectedDimensionId,
3496
3546
  t: t
3497
3547
  })
3498
3548
  })]
@@ -4785,10 +4835,8 @@ var ParameterInfoDialogConnect = function ParameterInfoDialogConnect() {
4785
4835
  };
4786
4836
 
4787
4837
  var sortByService$1 = function sortByService(serviceObj) {
4788
- // Need to make a copy as we are not allowed to mutate the original serviceObj and .sort mutates
4789
- var newServiceObj = serviceObj.slice();
4790
- // eslint-disable-next-line no-restricted-syntax
4791
- return newServiceObj.sort(function (serviceA, serviceB) {
4838
+ // .sort mutates, so sort a copy to avoid mutating the original serviceObj
4839
+ return serviceObj.slice().sort(function (serviceA, serviceB) {
4792
4840
  return (serviceA.name ? serviceA.name : serviceA.id).localeCompare(serviceB.name ? serviceB.name : serviceB.id);
4793
4841
  });
4794
4842
  };
@@ -6894,7 +6942,7 @@ var createMockStore = function createMockStore(mockState) {
6894
6942
  * Copyright 2026 - Finnish Meteorological Institute (FMI)
6895
6943
  * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
6896
6944
  * */
6897
- var TIME_SERIES_CONTAINER_BREAKPOINT_PX = '720px';
6945
+ var TIME_SERIES_CONTAINER_BREAKPOINT_PX = '795px';
6898
6946
  var TIME_SERIES_CONTAINER_NAME = 'time-series-container';
6899
6947
 
6900
6948
  var _styled;
@@ -7371,11 +7419,11 @@ var getParameterDisplayName = function getParameterDisplayName(parameter) {
7371
7419
  };
7372
7420
  // Stable unique key: uses id when present, otherwise a composite fallback.
7373
7421
  var getParameterKey$1 = function getParameterKey(parameter) {
7374
- var _parameter$instanceId, _parameter$dimension$, _parameter$dimension, _parameter$dimension$2, _parameter$dimension2;
7422
+ var _parameter$instanceId;
7375
7423
  if (parameter.id) {
7376
7424
  return parameter.id;
7377
7425
  }
7378
- return [parameter.plotId, parameter.propertyName, parameter.collectionId, (_parameter$instanceId = parameter.instanceId) != null ? _parameter$instanceId : '', (_parameter$dimension$ = (_parameter$dimension = parameter.dimension) == null ? void 0 : _parameter$dimension.id) != null ? _parameter$dimension$ : '', (_parameter$dimension$2 = (_parameter$dimension2 = parameter.dimension) == null ? void 0 : _parameter$dimension2.value) != null ? _parameter$dimension$2 : ''].join('|');
7426
+ return [parameter.plotId, parameter.propertyName, parameter.collectionId, (_parameter$instanceId = parameter.instanceId) != null ? _parameter$instanceId : '', serializeDimensions(parameter.dimensions)].join('|');
7379
7427
  };
7380
7428
  var roundDecimalValues = function roundDecimalValues(value) {
7381
7429
  if (isNaN(value) || value === null || value === undefined) {
@@ -8224,7 +8272,7 @@ var useMapPin = function useMapPin(_ref) {
8224
8272
  };
8225
8273
  };
8226
8274
  var TimeSeriesConnect = function TimeSeriesConnect(_ref2) {
8227
- var _linkedMapIds$, _sx;
8275
+ var _linkedMapIds$, _sx, _sx2;
8228
8276
  var panelId = _ref2.panelId;
8229
8277
  var dispatch = useDispatch();
8230
8278
  var _useTimeseriesTransla = useTimeseriesTranslation(),
@@ -8358,62 +8406,64 @@ var TimeSeriesConnect = function TimeSeriesConnect(_ref2) {
8358
8406
  return jsxs(Stack, {
8359
8407
  "data-testid": "TimeSeriesConnect",
8360
8408
  sx: {
8361
- padding: '20px',
8409
+ padding: '12px',
8362
8410
  width: '100%',
8363
8411
  height: '100%',
8364
8412
  backgroundColor: 'geowebColors.background.surfaceApp',
8365
8413
  containerType: 'inline-size',
8366
8414
  containerName: TIME_SERIES_CONTAINER_NAME
8367
8415
  },
8368
- children: [jsxs(Stack, {
8369
- direction: "row",
8370
- spacing: 1,
8371
- sx: {
8372
- maxWidth: '750px',
8373
- marginBottom: '4px',
8374
- marginLeft: '10px'
8375
- },
8376
- children: [jsx(TimeSeriesManagerMapButtonConnect, {
8377
- viewId: panelId
8378
- }), !!serviceListForLocations.length && jsx(LocationSelectButtonConnect, {
8379
- panelId: panelId
8380
- }), jsx(LocationInfoButtonConnect, {
8381
- panelId: panelId,
8382
- t: t
8383
- }), jsx(CustomTooltip, {
8384
- title: isMapPinDisabled ? t('timeseries-unlock-location') : t('timeseries-lock-location'),
8385
- children: jsx("span", {
8386
- children: jsx(TimeSeriesTopRowButton, {
8387
- "data-testid": "toggleLockLocationButton",
8388
- icon: isMapPinDisabled ? jsx(LockLocked, {}) : jsx(LockUnlocked, {}),
8389
- longText: isMapPinDisabled ? t('timeseries-unlock-location') : t('timeseries-lock-location'),
8390
- onClick: function onClick() {
8391
- return toggleDisableMapPin();
8392
- },
8393
- selected: isMapPinDisabled
8394
- })
8395
- })
8396
- }), jsx(TimeSeriesMarkersSwitch, {
8397
- shouldHideMarkers: shouldHideLocationMarkers,
8398
- toggleMarkers: toggleLocationMarkers
8399
- }), jsx(LegendToggleButton, {
8400
- hideTooltipText: t('timeseries-legend-tooltip-hide'),
8401
- isLegendVisible: shouldShowLegend,
8402
- legendLabel: t('timeseries-legend'),
8403
- onToggle: toggleLegend,
8404
- showTooltipText: t('timeseries-legend-tooltip-show'),
8405
- sx: (_sx = {}, _sx["@container " + TIME_SERIES_CONTAINER_NAME + " (width < " + TIME_SERIES_CONTAINER_BREAKPOINT_PX + ")"] = {
8406
- maxWidth: '90px',
8407
- '& .longText': {
8408
- display: 'none'
8409
- },
8410
- '& svg': {
8411
- marginRight: '0 !important'
8412
- }
8416
+ children: [jsx(Box, {
8417
+ children: jsxs(Stack, {
8418
+ direction: "row",
8419
+ spacing: 1,
8420
+ sx: (_sx = {
8421
+ overflowX: 'auto'
8413
8422
  }, _sx["@container " + TIME_SERIES_CONTAINER_NAME + " (min-width: " + TIME_SERIES_CONTAINER_BREAKPOINT_PX + ")"] = {
8414
- width: '130px'
8415
- }, _sx)
8416
- })]
8423
+ overflowX: 'initial'
8424
+ }, _sx),
8425
+ children: [jsx(TimeSeriesManagerMapButtonConnect, {
8426
+ viewId: panelId
8427
+ }), !!serviceListForLocations.length && jsx(LocationSelectButtonConnect, {
8428
+ panelId: panelId
8429
+ }), jsx(LocationInfoButtonConnect, {
8430
+ panelId: panelId,
8431
+ t: t
8432
+ }), jsx(CustomTooltip, {
8433
+ title: isMapPinDisabled ? t('timeseries-unlock-location') : t('timeseries-lock-location'),
8434
+ children: jsx("span", {
8435
+ children: jsx(TimeSeriesTopRowButton, {
8436
+ "data-testid": "toggleLockLocationButton",
8437
+ icon: isMapPinDisabled ? jsx(LockLocked, {}) : jsx(LockUnlocked, {}),
8438
+ longText: isMapPinDisabled ? t('timeseries-unlock-location') : t('timeseries-lock-location'),
8439
+ onClick: function onClick() {
8440
+ return toggleDisableMapPin();
8441
+ },
8442
+ selected: isMapPinDisabled
8443
+ })
8444
+ })
8445
+ }), jsx(TimeSeriesMarkersSwitch, {
8446
+ shouldHideMarkers: shouldHideLocationMarkers,
8447
+ toggleMarkers: toggleLocationMarkers
8448
+ }), jsx(LegendToggleButton, {
8449
+ hideTooltipText: t('timeseries-legend-tooltip-hide'),
8450
+ isLegendVisible: shouldShowLegend,
8451
+ legendLabel: t('timeseries-legend'),
8452
+ onToggle: toggleLegend,
8453
+ showTooltipText: t('timeseries-legend-tooltip-show'),
8454
+ sx: (_sx2 = {}, _sx2["@container " + TIME_SERIES_CONTAINER_NAME + " (width < " + TIME_SERIES_CONTAINER_BREAKPOINT_PX + ")"] = {
8455
+ maxWidth: '90px',
8456
+ '& .longText': {
8457
+ display: 'none'
8458
+ },
8459
+ '& svg': {
8460
+ marginRight: '0 !important'
8461
+ }
8462
+ }, _sx2["@container " + TIME_SERIES_CONTAINER_NAME + " (min-width: " + TIME_SERIES_CONTAINER_BREAKPOINT_PX + ")"] = {
8463
+ width: '130px'
8464
+ }, _sx2)
8465
+ })]
8466
+ })
8417
8467
  }), !!timeSeriesLocation && !!plotPresetState && jsx(Box, {
8418
8468
  sx: {
8419
8469
  overflow: 'auto'
@@ -1,2 +1,2 @@
1
- export declare const TIME_SERIES_CONTAINER_BREAKPOINT_PX = "720px";
1
+ export declare const TIME_SERIES_CONTAINER_BREAKPOINT_PX = "795px";
2
2
  export declare const TIME_SERIES_CONTAINER_NAME = "time-series-container";
@@ -70,12 +70,12 @@ export interface Parameter {
70
70
  collectionId: string;
71
71
  instanceId?: string;
72
72
  instances?: EDRInstance[];
73
- dimension?: {
73
+ dimensions?: {
74
74
  id: string;
75
75
  value: string;
76
- };
76
+ }[];
77
77
  }
78
- export type ParameterForFetching = Pick<Parameter, 'propertyName' | 'serviceId' | 'collectionId' | 'instanceId' | 'dimension'>;
78
+ export type ParameterForFetching = Pick<Parameter, 'propertyName' | 'serviceId' | 'collectionId' | 'instanceId' | 'dimensions'>;
79
79
  export interface ParameterWithData extends Parameter {
80
80
  timestep: Date[];
81
81
  value: number[];
@@ -7,6 +7,8 @@ declare const ParameterDimensionIdSelect: React.FC<{
7
7
  customDimensions: CustomDimension[];
8
8
  hasReferenceTime: boolean;
9
9
  patchParameter: (parameter: Partial<Parameter>) => void;
10
+ selectedDimensionId?: string;
11
+ setSelectedDimensionId: (dimensionId: string) => void;
10
12
  t: TFunction;
11
13
  }>;
12
14
  export default ParameterDimensionIdSelect;
@@ -6,6 +6,7 @@ declare const ParameterDimensionValueSelect: React.FC<{
6
6
  parameter: Parameter;
7
7
  customDimensions: CustomDimension[];
8
8
  patchParameter: (parameter: Partial<Parameter>) => void;
9
+ selectedDimensionId?: string;
9
10
  t: TFunction;
10
11
  }>;
11
12
  export default ParameterDimensionValueSelect;
@@ -1,6 +1,7 @@
1
1
  import type { TFunction } from 'i18next';
2
2
  import React from 'react';
3
3
  import type { EDRInstance, Parameter } from '../../TimeSeries/types';
4
+ export declare const defaultInstanceId = "latest-0";
4
5
  export declare const ReferenceTimeSelect: React.FC<{
5
6
  rowIsEnabled: boolean;
6
7
  parameter: Parameter;
@@ -6,6 +6,10 @@ import type { EDRCollection, EDRInstance, EDRParameter, Parameter, PointerLocati
6
6
  import type { TimeseriesCollectionDetail } from '../components/TimeSeriesSelect/utils';
7
7
  export declare const createUrl: (baseUrl: string, pathToAdd?: string, queryParameters?: [string, string][]) => string;
8
8
  export declare const supportedOutputFormat = "CoverageJSON";
9
+ export declare const serializeDimensions: (dimensions?: {
10
+ id: string;
11
+ value: string;
12
+ }[]) => string;
9
13
  export declare const getBaseQueryParamArray: (parameter: Parameter, instance: EDRInstance, collection: TimeseriesCollectionDetail, intervalParam: string) => [string, string][];
10
14
  export declare const latestInstance: (instances: EDRInstance[]) => EDRInstance | null;
11
15
  export declare const isSupportedInstance: (instances: EDRInstance) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/time-series",
3
- "version": "20.0.0",
3
+ "version": "20.0.1",
4
4
  "description": "GeoWeb time-series library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -21,26 +21,26 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "immer": "^10.0.3",
24
- "@opengeoweb/shared": "20.0.0",
24
+ "@opengeoweb/shared": "20.0.1",
25
25
  "@reduxjs/toolkit": "^2.6.1",
26
26
  "react-redux": "^9.2.0",
27
- "@opengeoweb/webmap": "20.0.0",
28
- "@opengeoweb/webmap-react": "20.0.0",
27
+ "@opengeoweb/webmap": "20.0.1",
28
+ "@opengeoweb/webmap-react": "20.0.1",
29
29
  "lodash": "^4.18.1",
30
- "@opengeoweb/api": "20.0.0",
31
- "@opengeoweb/authentication": "20.0.0",
32
- "@opengeoweb/theme": "20.0.0",
33
- "@opengeoweb/store": "20.0.0",
30
+ "@opengeoweb/api": "20.0.1",
31
+ "@opengeoweb/authentication": "20.0.1",
32
+ "@opengeoweb/theme": "20.0.1",
33
+ "@opengeoweb/store": "20.0.1",
34
34
  "echarts-for-react": "^3.0.6",
35
35
  "echarts": "^6.1.0",
36
36
  "react-sortablejs": "^6.1.4",
37
- "@opengeoweb/snackbar": "20.0.0",
37
+ "@opengeoweb/snackbar": "20.0.1",
38
38
  "react-window": "^2.2.6",
39
39
  "msw": "^2.7.3",
40
40
  "i18next": "^25.0.1",
41
41
  "react-i18next": "^15.1.1",
42
- "@opengeoweb/core": "20.0.0",
43
- "@opengeoweb/form-fields": "20.0.0",
42
+ "@opengeoweb/core": "20.0.1",
43
+ "@opengeoweb/form-fields": "20.0.1",
44
44
  "@mui/material": "^9.0.1",
45
45
  "react-hook-form": "^7.61.1",
46
46
  "uuid": "^11.1.1",