@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 +150 -100
- package/dist/src/lib/components/TimeSeries/constants.d.ts +1 -1
- package/dist/src/lib/components/TimeSeries/types.d.ts +3 -3
- package/dist/src/lib/components/TimeSeriesManager/TimeSeriesManagerParameterComponents/ParameterDimensionIdSelect.d.ts +2 -0
- package/dist/src/lib/components/TimeSeriesManager/TimeSeriesManagerParameterComponents/ParameterDimensionValueSelect.d.ts +1 -0
- package/dist/src/lib/components/TimeSeriesManager/TimeSeriesManagerParameterComponents/ParameterReferenceTimeSelect.d.ts +1 -0
- package/dist/src/lib/utils/edrUtils.d.ts +4 -0
- package/package.json +11 -11
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
|
-
|
|
832
|
-
if (
|
|
833
|
-
res.push([
|
|
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
|
-
|
|
1075
|
+
dimensions: true
|
|
1068
1076
|
};
|
|
1069
1077
|
var removableParameterPropertiesOnPatch = {
|
|
1070
1078
|
color: true,
|
|
1071
1079
|
opacity: true,
|
|
1072
1080
|
instanceId: true,
|
|
1073
|
-
|
|
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
|
|
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
|
-
|
|
2343
|
-
id:
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
};
|
|
2348
|
-
patchParameter(newParameter);
|
|
2384
|
+
dimensions: [{
|
|
2385
|
+
id: newDimensionId,
|
|
2386
|
+
value: existingValue
|
|
2387
|
+
}]
|
|
2388
|
+
});
|
|
2349
2389
|
},
|
|
2350
|
-
tooltip: t('timeseries-dimension-id') + ": " +
|
|
2351
|
-
// If
|
|
2352
|
-
value:
|
|
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
|
|
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
|
-
|
|
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
|
|
2436
|
+
var selectedValue = event.target.value;
|
|
2393
2437
|
var newParameter = {
|
|
2394
2438
|
id: parameter.id,
|
|
2395
|
-
|
|
2396
|
-
id:
|
|
2397
|
-
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') + ": " + (
|
|
2403
|
-
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
|
-
}),
|
|
2451
|
+
}), jsx(MenuItem, {
|
|
2408
2452
|
"data-testid": "timeseries-dimension-value-none",
|
|
2409
|
-
value:
|
|
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' ?
|
|
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
|
-
|
|
2465
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
|
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', (
|
|
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
|
|
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
|
|
3485
|
-
!
|
|
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
|
-
//
|
|
4789
|
-
|
|
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 = '
|
|
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
|
|
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 : '', (
|
|
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: '
|
|
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: [
|
|
8369
|
-
|
|
8370
|
-
|
|
8371
|
-
|
|
8372
|
-
|
|
8373
|
-
|
|
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
|
-
|
|
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 = "
|
|
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
|
-
|
|
73
|
+
dimensions?: {
|
|
74
74
|
id: string;
|
|
75
75
|
value: string;
|
|
76
|
-
};
|
|
76
|
+
}[];
|
|
77
77
|
}
|
|
78
|
-
export type ParameterForFetching = Pick<Parameter, 'propertyName' | 'serviceId' | 'collectionId' | 'instanceId' | '
|
|
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.
|
|
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.
|
|
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.
|
|
28
|
-
"@opengeoweb/webmap-react": "20.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.
|
|
31
|
-
"@opengeoweb/authentication": "20.0.
|
|
32
|
-
"@opengeoweb/theme": "20.0.
|
|
33
|
-
"@opengeoweb/store": "20.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.
|
|
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.
|
|
43
|
-
"@opengeoweb/form-fields": "20.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",
|