@opengeoweb/warnings 15.1.0 → 15.3.0

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.
Files changed (64) hide show
  1. package/index.esm.js +1400 -592
  2. package/package.json +13 -14
  3. package/src/index.d.ts +2 -1
  4. package/src/lib/api/api-utils.d.ts +1 -1
  5. package/src/lib/api/aviation-api/hooks.d.ts +1 -1
  6. package/src/lib/api/warning-api/api.d.ts +1 -1
  7. package/src/lib/api/warning-api/hooks.d.ts +1 -1
  8. package/src/lib/components/AreaObjectLoader/AreaObjectLoader.d.ts +1 -1
  9. package/src/lib/components/AreaObjectLoader/AreasObjects.d.ts +1 -1
  10. package/src/lib/components/FilterList/filter-hooks.d.ts +1 -1
  11. package/src/lib/components/FilterList/filter-utils.d.ts +1 -1
  12. package/src/lib/components/MaritimeWarningsForm/utils.d.ts +1 -1
  13. package/src/lib/components/PublicWarningList/NewWarningButton/NewWarningButton.d.ts +1 -1
  14. package/src/lib/components/PublicWarningList/PublicWarningList.d.ts +1 -1
  15. package/src/lib/components/PublicWarningList/WarningListColumnContent.d.ts +1 -1
  16. package/src/lib/components/PublicWarningList/WarningListItem.d.ts +1 -1
  17. package/src/lib/components/PublicWarningList/WarningListItemMenu.d.ts +2 -2
  18. package/src/lib/components/PublicWarningList/WarningListItemSeperator.d.ts +1 -1
  19. package/src/lib/components/PublicWarningsForm/LevelField/LevelField.d.ts +1 -1
  20. package/src/lib/components/PublicWarningsForm/PhenomenonField/PhenomenonField.d.ts +1 -1
  21. package/src/lib/components/PublicWarningsForm/PublicWarningsForm.d.ts +2 -2
  22. package/src/lib/components/PublicWarningsForm/PublicWarningsFormConnect.d.ts +1 -1
  23. package/src/lib/components/PublicWarningsFormDialog/AviationWarningCancelDialogContent.d.ts +1 -1
  24. package/src/lib/components/PublicWarningsFormDialog/PublicWarningsFormDialog.d.ts +1 -1
  25. package/src/lib/components/WarningsMapView/WarningsMapView.d.ts +1 -0
  26. package/src/lib/components/WarningsTimeline/WarningBlock.d.ts +10 -0
  27. package/src/lib/components/WarningsTimeline/WarningsTimeline.d.ts +6 -0
  28. package/src/lib/components/WarningsTimeline/WarningsTimeline.stories.d.ts +12 -0
  29. package/src/lib/components/WarningsTimeline/WarningsTimelineConnect.d.ts +5 -0
  30. package/src/lib/components/WarningsTimeline/index.d.ts +4 -0
  31. package/src/lib/components/WarningsTimeline/warningBlockColors.d.ts +16 -0
  32. package/src/lib/components/WarningsTimeline/warningsTimelineUtils.d.ts +15 -0
  33. package/src/lib/components/WarningsTimeline/warningsTimelineUtils.spec.d.ts +1 -0
  34. package/src/lib/store/index.d.ts +2 -2
  35. package/src/lib/store/store.d.ts +2 -2
  36. package/src/lib/store/types.d.ts +4 -4
  37. package/src/lib/store/warningsFilters/index.d.ts +1 -0
  38. package/src/lib/store/warningsFilters/reducer.d.ts +11 -0
  39. package/src/lib/store/warningsFilters/selectors.d.ts +62 -0
  40. package/src/lib/store/warningsFilters/selectors.spec.d.ts +1 -0
  41. package/src/lib/store/warningsFilters/types.d.ts +7 -0
  42. package/src/lib/store/warningsForm/index.d.ts +2 -0
  43. package/src/lib/store/warningsForm/listener.d.ts +2 -0
  44. package/src/lib/store/{publicWarningForm → warningsForm}/reducer.d.ts +2 -2
  45. package/src/lib/store/warningsForm/reducer.spec.d.ts +1 -0
  46. package/src/lib/store/{publicWarningForm → warningsForm}/selectors.d.ts +1 -43
  47. package/src/lib/store/warningsForm/selectors.spec.d.ts +1 -0
  48. package/src/lib/storybookUtils/testUtils.d.ts +1 -1
  49. package/src/lib/utils/fakeApi/index.d.ts +1 -1
  50. package/src/lib/utils/sig-airmet-util.d.ts +2 -2
  51. package/src/lib/utils/warningUtils.d.ts +2 -2
  52. package/src/lib/store/publicWarningForm/index.d.ts +0 -2
  53. package/src/lib/store/publicWarningForm/listener.d.ts +0 -2
  54. package/src/lib/store/publicWarnings/index.d.ts +0 -2
  55. package/src/lib/store/publicWarnings/listener.d.ts +0 -3
  56. package/src/lib/store/publicWarnings/reducer.d.ts +0 -13
  57. package/src/lib/store/publicWarnings/selectors.d.ts +0 -166
  58. package/src/lib/store/publicWarnings/types.d.ts +0 -19
  59. /package/src/lib/{store/publicWarningForm/reducer.spec.d.ts → api/api-utils.spec.d.ts} +0 -0
  60. /package/src/lib/{store/publicWarningForm/selectors.spec.d.ts → components/WarningsTimeline/WarningsTimeline.spec.d.ts} +0 -0
  61. /package/src/lib/{store/publicWarnings/listener.spec.d.ts → components/WarningsTimeline/WarningsTimelineConnect.spec.d.ts} +0 -0
  62. /package/src/lib/{store/publicWarnings/selectors.spec.d.ts → components/WarningsTimeline/warningBlockColors.spec.d.ts} +0 -0
  63. /package/src/lib/store/{publicWarningForm → warningsForm}/types.d.ts +0 -0
  64. /package/src/lib/store/{publicWarningForm → warningsForm}/utils.d.ts +0 -0
package/index.esm.js CHANGED
@@ -1,30 +1,33 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
- import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, mapListener, layersListener, drawingToolListener, syncGroupsListener, openlayersListener, syncGroupsReducer, drawingToolReducer, uiReducer, layerReducer, mapReducer, useSetupDialog, genericSelectors, useUpdateSharedData, genericActions, selectorMemoizationOptions } from '@opengeoweb/store';
3
+ import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, layerActions, drawingToolActions, mapListener, layersListener, drawingToolListener, syncGroupsListener, openlayersListener, syncGroupsReducer, drawingToolReducer, uiReducer, layerReducer, mapReducer, useSetupDialog, genericSelectors, useUpdateSharedData, genericActions, selectorMemoizationOptions } from '@opengeoweb/store';
4
4
  import { Polygons, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, SevereMountainWaves, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, ExitDomain, Share, Edit, Delete, DrawPolygon, Visibility, Add, breakpoints, DragHandle, Info, ArrowUpCompact, ArrowDownCompact, Copy, Update, Cancel, Success, Expire, Remove, Options, ChevronDown, ChevronUp, Close, Clock } from '@opengeoweb/theme';
5
- import { WEBMAP_REACT_NAMESPACE, defaultPolygon, getDrawModeIdFromSelectionType, currentlySupportedDrawModes, emptyGeoJSON, MapControlButton, defaultSmoothLine, defaultLineString, defaultFreehandLine, defaultOval, defaultCircle, defaultBox, defaultSquare, defaultLocation, defaultPoint, defaultDelete, getIcon, rewindGeometry, getGeoJSONPropertyValue, defaultLayers, viewUtils, OpenLayersMapView, MapControls, OpenLayersZoomControl, OpenLayersLayer, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle, DEFAULT_GEOJSON_STYLE_FILL_OPACITY, FEATURE_DRAW_FILL_COLOR, FEATURE_DRAW_SECONDARY_FILL_COLOR, FEATURE_DRAW_STROKE_COLOR } from '@opengeoweb/webmap-react';
5
+ import { WEBMAP_REACT_NAMESPACE, defaultPolygon, emptyGeoJSON, MapControlButton, defaultSmoothLine, defaultLineString, defaultFreehandLine, defaultOval, defaultCircle, defaultRotatableBox, defaultSquare, defaultLocation, defaultPoint, defaultDelete, getDrawModeIdFromSelectionType, getIcon, rewindGeometry, getGeoJSONPropertyValue, currentlySupportedDrawModes, defaultLayers, viewUtils, OpenLayersMapView, MapControls, OpenLayersZoomControl, OpenLayersLayer, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle, DEFAULT_GEOJSON_STYLE_FILL_OPACITY, FEATURE_DRAW_FILL_COLOR, FEATURE_DRAW_SECONDARY_FILL_COLOR, FEATURE_DRAW_STROKE_COLOR } from '@opengeoweb/webmap-react';
6
6
  import { SHARED_NAMESPACE, useConfirmationDialog, sessionStorageProvider, dateUtils, ConfirmationDialog, AlertBanner, ToggleMenu, calculateStartSize, ToolContainerDraggable, CustomIconButton, usePrevious, usePreventBrowserClose, CustomTooltip, Avatar, getInitials, SwitchButton, Filter, CustomToggleButton, FilterChip, TooltipSelect, LastUpdateTime, StatusTag, FilterOption, getAxiosErrorMessage, CustomDialog, ConfirmationButtons, ErrorBoundary } from '@opengeoweb/shared';
7
7
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, current, combineReducers, configureStore } from '@reduxjs/toolkit';
8
8
  import { t } from 'i18next';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import { defaultBbox } from '@opengeoweb/core';
11
- import { FORM_FIELDS_NAMESPACE, useDraftFormHelpers, ReactHookFormSelect, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, errorMessages, isEmpty, ReactHookFormDateTime, isXHoursAfter, isXHoursBefore } from '@opengeoweb/form-fields';
11
+ import { FORM_FIELDS_NAMESPACE, useDraftFormHelpers, ReactHookFormSelect, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, errorMessages, isEmpty as isEmpty$1, ReactHookFormDateTime, isXHoursAfter, isXHoursBefore } from '@opengeoweb/form-fields';
12
12
  import { SA_NAMESPACE, isInstanceOfCancelSigmet, getDefaultValidFromValue, isInstanceOfCancelAirmet, getDefaultValidUntilValue, useShortTestHelpers, ProductAction, SigmetForm, AirmetForm, isVAPhenomenon, getConfirmationDialogCancelLabel, getConfirmationDialogButtonLabel, getConfirmationDialogContent, getConfirmationDialogTitle, CancelSigmetVolcanicMovements, createAirmetPostParameter, createSigmetPostParameter, prepareCancelSigmet, getProductFormMode, findSequenceNumber, getSequenceStyling } from '@opengeoweb/sigmet-airmet';
13
13
  import { LayerType, generateMapId } from '@opengeoweb/webmap';
14
- import React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';
14
+ import React, { useRef, useState, useEffect, useMemo, useCallback } from 'react';
15
15
  import { useAuthenticationContext as useAuthenticationContext$1 } from '@opengeoweb/authentication';
16
- import { MenuItem, Grid, Box, Typography, styled, ListItem, Paper, ListItemButton, Stack, LinearProgress, Button, FormHelperText, Card, CardContent, Tabs, Tab, useTheme, FormControl, CircularProgress, Menu, ListItemText, DialogTitle, DialogContent, Switch, RadioGroup, FormControlLabel, Radio, InputAdornment, Collapse } from '@mui/material';
16
+ import { MenuItem, Grid, Box, Typography, styled, ListItem, Paper, ListItemButton, Stack, LinearProgress, Button, FormHelperText, Card, CardContent, Tabs, Tab, useTheme, FormControl, CircularProgress, Menu, ListItemText, DialogTitle, DialogContent, Switch, RadioGroup, FormControlLabel, Radio, InputAdornment, Collapse, Tooltip } from '@mui/material';
17
17
  import { useQueryClient, useMutation, queryOptions, QueryClient, useQuery } from '@tanstack/react-query';
18
18
  import { getHeaders, handleResponse, AirmetPhenomena, SigmetPhenomena, useAuthQuery, useAuthenticationContext, optimisticUpdate, ProductStatus } from '@opengeoweb/api';
19
19
  import { snackbarListener, snackbarReducer, snackbarActions, snackbarTypes } from '@opengeoweb/snackbar';
20
- import AutoSizer from 'react-virtualized-auto-sizer';
21
- import { VariableSizeList } from 'react-window';
20
+ import { List, useListRef } from 'react-window';
22
21
  import { isEqual, cloneDeep, clamp, concat, groupBy, pick } from 'lodash';
23
22
  import { useFormContext, useForm, FormProvider } from 'react-hook-form';
23
+ import { isEmpty, createEmpty, extend } from 'ol/extent';
24
+ import GeoJSON from 'ol/format/GeoJSON';
24
25
  import { ReactSortable } from 'react-sortablejs';
25
26
  import { LocalizationProvider } from '@mui/x-date-pickers';
26
27
  import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
27
28
  import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
29
+ import Box$1 from '@mui/material/Box';
30
+ import Tooltip$1 from '@mui/material/Tooltip';
28
31
 
29
32
  var en = {
30
33
  "drawing-tool-form-tools": "Tools",
@@ -85,6 +88,11 @@ var en = {
85
88
  "warning-level-moderate": "Moderate",
86
89
  "warning-level-severe": "Severe",
87
90
  "warning-level-extreme": "Extreme",
91
+ "warning-level-letter-moderate": "M",
92
+ "warning-level-letter-severe": "S",
93
+ "warning-level-letter-extreme": "E",
94
+ "warning-level-letter-SIG": "SIG",
95
+ "warning-level-letter-AIR": "AIR",
88
96
  "warning-level-SIG": "Sigmet",
89
97
  "warning-level-AIR": "Airmet",
90
98
  "warning-phenomenon": "Phenomenon",
@@ -348,6 +356,11 @@ var nl = {
348
356
  "warning-level-moderate": "Gematigd",
349
357
  "warning-level-severe": "Ernstig",
350
358
  "warning-level-extreme": "Extreem",
359
+ "warning-level-letter-moderate": "G",
360
+ "warning-level-letter-severe": "E",
361
+ "warning-level-letter-extreme": "X",
362
+ "warning-level-letter-SIG": "SIG",
363
+ "warning-level-letter-AIR": "AIR",
351
364
  "warning-phenomenon": "Fenomeen",
352
365
  "warning-phenomenon-wind": "Windstoten",
353
366
  "warning-phenomenon-fog": "Dichte mist",
@@ -568,6 +581,11 @@ var fi = {
568
581
  "warning-level-moderate": "Kohtalainen",
569
582
  "warning-level-severe": "Vakava",
570
583
  "warning-level-extreme": "Äärimmäinen",
584
+ "warning-level-letter-moderate": "K",
585
+ "warning-level-letter-severe": "V",
586
+ "warning-level-letter-extreme": "Ä",
587
+ "warning-level-letter-SIG": "SIG",
588
+ "warning-level-letter-AIR": "AIR",
571
589
  "warning-phenomenon": "Sääilmiö",
572
590
  "warning-phenomenon-wind": "Tuuli",
573
591
  "warning-phenomenon-fog": "Sumu",
@@ -740,6 +758,11 @@ var no = {
740
758
  "warning-level-moderate": "Moderat",
741
759
  "warning-level-severe": "Stor",
742
760
  "warning-level-extreme": "Ekstrem",
761
+ "warning-level-letter-moderate": "M",
762
+ "warning-level-letter-severe": "S",
763
+ "warning-level-letter-extreme": "E",
764
+ "warning-level-letter-SIG": "SIG",
765
+ "warning-level-letter-AIR": "AIR",
743
766
  "warning-phenomenon": "Fenomen",
744
767
  "warning-phenomenon-wind": "Vind",
745
768
  "warning-phenomenon-fog": "Tåke",
@@ -884,6 +907,11 @@ var areaObjectLoaderType = uiTypes.DialogTypes.AreaObjectLoader;
884
907
  function _OverloadYield(e, d) {
885
908
  this.v = e, this.k = d;
886
909
  }
910
+ function _arrayLikeToArray(r, a) {
911
+ (null == a || a > r.length) && (a = r.length);
912
+ for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
913
+ return n;
914
+ }
887
915
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
888
916
  try {
889
917
  var i = n[a](c),
@@ -909,6 +937,23 @@ function _asyncToGenerator(n) {
909
937
  });
910
938
  };
911
939
  }
940
+ function _createForOfIteratorHelperLoose(r, e) {
941
+ var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
942
+ if (t) return (t = t.call(r)).next.bind(t);
943
+ if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e) {
944
+ t && (r = t);
945
+ var o = 0;
946
+ return function () {
947
+ return o >= r.length ? {
948
+ done: true
949
+ } : {
950
+ done: false,
951
+ value: r[o++]
952
+ };
953
+ };
954
+ }
955
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
956
+ }
912
957
  function _objectWithoutPropertiesLoose(r, e) {
913
958
  if (null == r) return {};
914
959
  var t = {};
@@ -1093,6 +1138,13 @@ function _regeneratorValues(e) {
1093
1138
  }
1094
1139
  throw new TypeError(typeof e + " is not iterable");
1095
1140
  }
1141
+ function _unsupportedIterableToArray(r, a) {
1142
+ if (r) {
1143
+ if ("string" == typeof r) return _arrayLikeToArray(r, a);
1144
+ var t = {}.toString.call(r).slice(8, -1);
1145
+ return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
1146
+ }
1147
+ }
1096
1148
  function _regeneratorRuntime() {
1097
1149
 
1098
1150
  var r = _regenerator(),
@@ -1490,6 +1542,9 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1490
1542
  var isFormDirty = useSelector(function (store) {
1491
1543
  return getWarningFormDirty(store, drawingDialogType);
1492
1544
  });
1545
+ var isDrawLayerSelectable = useSelector(function (store) {
1546
+ return layerSelectors.getIsLayerSelectable(store, currentDrawLayerId);
1547
+ });
1493
1548
  // object selectors
1494
1549
  var _useDialogOptions2 = useDialogOptions({
1495
1550
  dialogType: objectDialogType
@@ -1536,6 +1591,12 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1536
1591
  }
1537
1592
  closeDrawDialog(true);
1538
1593
  case 9:
1594
+ // make drawLayer not selectable
1595
+ if (isDrawLayerSelectable) {
1596
+ dispatch(layerActions.toggleSelectableFeatures({
1597
+ layerId: currentDrawLayerId
1598
+ }));
1599
+ }
1539
1600
  // open object dialog
1540
1601
  dispatch(uiActions.setActiveMapIdForDialog({
1541
1602
  type: objectDialogType,
@@ -1553,7 +1614,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1553
1614
  // remove current shape
1554
1615
  clearGeoJSON(objectDialogLayerId);
1555
1616
  }
1556
- case 11:
1617
+ case 12:
1557
1618
  case "end":
1558
1619
  return _context2.stop();
1559
1620
  }
@@ -1571,6 +1632,12 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1571
1632
  var shouldResetShape = newGeoJSON === undefined;
1572
1633
  closeObjectDialog(shouldResetShape);
1573
1634
  }
1635
+ // make drawLayer selectable
1636
+ if (!isDrawLayerSelectable) {
1637
+ dispatch(layerActions.toggleSelectableFeatures({
1638
+ layerId: currentDrawLayerId
1639
+ }));
1640
+ }
1574
1641
  // open draw dialog
1575
1642
  dispatch(uiActions.setActiveMapIdForDialog({
1576
1643
  type: drawingDialogType,
@@ -1615,18 +1682,10 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1615
1682
  }));
1616
1683
  }
1617
1684
  if (newGeoJSON) {
1618
- var _newGeoJSON$features$;
1619
1685
  dispatch(layerActions.layerChangeGeojson({
1620
1686
  layerId: currentDrawLayerId,
1621
1687
  geojson: newGeoJSON
1622
1688
  }));
1623
- // select correct drawTool for selected object
1624
- var type = (_newGeoJSON$features$ = newGeoJSON.features[0].properties) == null ? void 0 : _newGeoJSON$features$.selectionType;
1625
- var drawModeId = getDrawModeIdFromSelectionType(type, currentlySupportedDrawModes);
1626
- dispatch(drawingToolActions.changeDrawToolMode({
1627
- drawToolId: drawingDialogType,
1628
- drawModeId: drawModeId
1629
- }));
1630
1689
  }
1631
1690
  };
1632
1691
  var _useCloseDrawDialog = useCloseDrawDialog({
@@ -2232,7 +2291,7 @@ var TAKEOVER_MESSAGE = 'You are no longer the editor of this warning';
2232
2291
  var initialState$2 = {};
2233
2292
  var slice$1 = createSlice({
2234
2293
  initialState: initialState$2,
2235
- name: 'publicWarningForm',
2294
+ name: 'warningsForm',
2236
2295
  reducers: {
2237
2296
  setFormValues: function setFormValues(draft, action) {
2238
2297
  var _action$payload = action.payload,
@@ -2352,12 +2411,12 @@ var slice$1 = createSlice({
2352
2411
  });
2353
2412
  }
2354
2413
  });
2355
- var publicWarningFormReducer = slice$1.reducer,
2356
- publicWarningFormActions = slice$1.actions;
2414
+ var warningsFormReducer = slice$1.reducer,
2415
+ warningsFormActions = slice$1.actions;
2357
2416
 
2358
- var publicWarningFormListener = createListenerMiddleware();
2359
- publicWarningFormListener.startListening({
2360
- actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
2417
+ var warningsFormListener = createListenerMiddleware();
2418
+ warningsFormListener.startListening({
2419
+ actionCreator: warningsFormActions.openPublicWarningFormDialog,
2361
2420
  effect: function () {
2362
2421
  var _effect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
2363
2422
  var payload, panelId;
@@ -2384,7 +2443,7 @@ publicWarningFormListener.startListening({
2384
2443
  return effect;
2385
2444
  }()
2386
2445
  });
2387
- publicWarningFormListener.startListening({
2446
+ warningsFormListener.startListening({
2388
2447
  actionCreator: uiActions.setToggleOpenDialog,
2389
2448
  effect: function () {
2390
2449
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2, listenerApi) {
@@ -2429,54 +2488,24 @@ publicWarningFormListener.startListening({
2429
2488
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
2430
2489
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2431
2490
  * */
2432
- var publicWarningsAdapter = createEntityAdapter({
2433
- selectId: function selectId(warning) {
2434
- return warning.id;
2435
- }
2436
- });
2437
- var initialState$1 = {
2438
- warnings: publicWarningsAdapter.getInitialState(),
2439
- isLoading: true,
2440
- lastUpdatedTime: '',
2441
- filterState: {}
2442
- };
2491
+ var initialState$1 = {};
2443
2492
  var slice = createSlice({
2444
2493
  initialState: initialState$1,
2445
- name: 'publicWarnings',
2494
+ name: 'warningsFilters',
2446
2495
  reducers: {
2447
2496
  setWarningFilters: function setWarningFilters(draft, action) {
2448
2497
  var _action$payload = action.payload,
2449
2498
  filterState = _action$payload.filterState,
2450
2499
  panelId = _action$payload.panelId;
2451
2500
  if (panelId) {
2452
- var _current;
2453
- var currentFilterState = ((_current = current(draft)) == null ? void 0 : _current.filterState[panelId]) || initialFilters;
2454
- draft.filterState[panelId] = Object.assign({}, currentFilterState, filterState);
2501
+ var currentFilterState = current(draft)[panelId] || initialFilters;
2502
+ draft[panelId] = Object.assign({}, currentFilterState, filterState);
2455
2503
  }
2456
2504
  }
2457
2505
  }
2458
2506
  });
2459
- var publicWarningsReducer = slice.reducer,
2460
- publicWarningActions = slice.actions;
2461
-
2462
- /* *
2463
- * Licensed under the Apache License, Version 2.0 (the "License");
2464
- * you may not use this file except in compliance with the License.
2465
- * You may obtain a copy of the License at
2466
- *
2467
- * http://www.apache.org/licenses/LICENSE-2.0
2468
- *
2469
- * Unless required by applicable law or agreed to in writing, software
2470
- * distributed under the License is distributed on an "AS IS" BASIS,
2471
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2472
- * See the License for the specific language governing permissions and
2473
- * limitations under the License.
2474
- *
2475
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2476
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
2477
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2478
- * */
2479
- var publicWarningsListener = createListenerMiddleware();
2507
+ var warningsFiltersReducer = slice.reducer,
2508
+ warningsFiltersActions = slice.actions;
2480
2509
 
2481
2510
  /* *
2482
2511
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2501,12 +2530,12 @@ var warningsReducersMap = {
2501
2530
  ui: uiReducer,
2502
2531
  drawingtools: drawingToolReducer,
2503
2532
  drawings: warningsDrawingsReducer,
2504
- publicWarningForm: publicWarningFormReducer,
2505
- publicWarnings: publicWarningsReducer,
2533
+ warningsForm: warningsFormReducer,
2534
+ warningsFilters: warningsFiltersReducer,
2506
2535
  snackbar: snackbarReducer,
2507
2536
  syncGroups: syncGroupsReducer
2508
2537
  };
2509
- var warningsMiddlewares = [mapListener.middleware, layersListener.middleware, drawingToolListener.middleware, publicWarningsListener.middleware, publicWarningFormListener.middleware, snackbarListener.middleware, syncGroupsListener.middleware, openlayersListener.middleware];
2538
+ var warningsMiddlewares = [mapListener.middleware, layersListener.middleware, drawingToolListener.middleware, warningsFormListener.middleware, snackbarListener.middleware, syncGroupsListener.middleware, openlayersListener.middleware];
2510
2539
  var warningsRootReducer = combineReducers(warningsReducersMap);
2511
2540
  var createMockStore = function createMockStore(mockState) {
2512
2541
  return configureStore({
@@ -2989,7 +3018,7 @@ var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
2989
3018
  }
2990
3019
  throw new Error('Authentication context not found');
2991
3020
  case 3:
2992
- dispatch(publicWarningFormActions.removeFormError());
3021
+ dispatch(warningsFormActions.removeFormError());
2993
3022
  return _context2.abrupt("return", updatePublicWarningEditor(id, isEditor, auth, force));
2994
3023
  case 5:
2995
3024
  case "end":
@@ -3009,7 +3038,7 @@ var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
3009
3038
  });
3010
3039
  }, function (error) {
3011
3040
  if (error.cause !== 409) {
3012
- dispatch(publicWarningFormActions.setFormError({
3041
+ dispatch(warningsFormActions.setFormError({
3013
3042
  message: error.message
3014
3043
  }));
3015
3044
  }
@@ -3057,7 +3086,7 @@ var useMutateWarning = function useMutateWarning(snackBarMessage) {
3057
3086
  }
3058
3087
  throw new Error('Authentication context not found');
3059
3088
  case 3:
3060
- dispatch(publicWarningFormActions.removeFormError());
3089
+ dispatch(warningsFormActions.removeFormError());
3061
3090
  if (!id) {
3062
3091
  _context4.next = 6;
3063
3092
  break;
@@ -3081,7 +3110,7 @@ var useMutateWarning = function useMutateWarning(snackBarMessage) {
3081
3110
  queryKey: ['public-warning-list'],
3082
3111
  exact: false
3083
3112
  });
3084
- dispatch(publicWarningFormActions.setFormError({
3113
+ dispatch(warningsFormActions.setFormError({
3085
3114
  message: error.message
3086
3115
  }));
3087
3116
  },
@@ -3110,7 +3139,7 @@ var useMutateWarning = function useMutateWarning(snackBarMessage) {
3110
3139
  domain: 'public'
3111
3140
  })
3112
3141
  });
3113
- dispatch(publicWarningFormActions.openPublicWarningFormDialog({
3142
+ dispatch(warningsFormActions.openPublicWarningFormDialog({
3114
3143
  warning: newWarning,
3115
3144
  formState: '',
3116
3145
  panelId: variables.panelId
@@ -3544,6 +3573,145 @@ var ConfirmDeleteDialog = function ConfirmDeleteDialog(_ref) {
3544
3573
  * */
3545
3574
  var DATE_FORMAT_HEADER = 'EEEE, MMMM dd';
3546
3575
 
3576
+ var RowComponent$2 = function RowComponent(_ref) {
3577
+ var _buttonSx;
3578
+ var index = _ref.index,
3579
+ style = _ref.style,
3580
+ listInclHeaders = _ref.listInclHeaders,
3581
+ headerList = _ref.headerList,
3582
+ objects = _ref.objects,
3583
+ onClickObject = _ref.onClickObject,
3584
+ onClickEdit = _ref.onClickEdit,
3585
+ onClickDelete = _ref.onClickDelete,
3586
+ onClickShare = _ref.onClickShare,
3587
+ activeObject = _ref.activeObject,
3588
+ t = _ref.t;
3589
+ var listItem = listInclHeaders[index];
3590
+ if (!listItem.isObject) {
3591
+ var header = headerList[listItem.index];
3592
+ return jsx(Typography, {
3593
+ style: style,
3594
+ sx: {
3595
+ paddingLeft: 2.5,
3596
+ paddingBottom: 0.5,
3597
+ paddingTop: 1,
3598
+ opacity: 0.67,
3599
+ lineHeight: '16px',
3600
+ overflow: 'hidden',
3601
+ whiteSpace: 'nowrap',
3602
+ textOverflow: 'ellipsis'
3603
+ },
3604
+ variant: "caption",
3605
+ children: header
3606
+ }, listItem.index);
3607
+ }
3608
+ var object = objects[listItem.index];
3609
+ return jsx(ContainerDiv$1, {
3610
+ children: jsx(ListItem, {
3611
+ disablePadding: true,
3612
+ secondaryAction: jsxs(Grid, {
3613
+ container: true,
3614
+ rowSpacing: 1,
3615
+ children: [jsx(Grid, {
3616
+ className: "objectActions",
3617
+ children: jsx(ToggleMenu, {
3618
+ "aria-label": t('object-manager-button-share'),
3619
+ buttonIcon: jsx(Share, {}),
3620
+ buttonSx: (_buttonSx = {
3621
+ // position the share button for scope global
3622
+ marginBottom: object.scope === 'user' ? 0 : 4
3623
+ }, _buttonSx["@container objectList (min-width: " + BREAKPOINT$1 + "px)"] = {
3624
+ marginBottom: 0,
3625
+ marginRight: object.scope === 'user' ? 1 : 4
3626
+ }, _buttonSx),
3627
+ menuItems: [{
3628
+ text: BUTTON_AIRMET$1,
3629
+ action: function action() {},
3630
+ icon: jsx(ExitDomain, {}),
3631
+ isDisabled: true
3632
+ }, {
3633
+ text: BUTTON_SIGMET$1,
3634
+ action: function action() {},
3635
+ icon: jsx(ExitDomain, {}),
3636
+ isDisabled: true
3637
+ }, {
3638
+ text: t('public-warning-title').toUpperCase(),
3639
+ action: function action() {
3640
+ onClickShare(object);
3641
+ },
3642
+ icon: jsx(ExitDomain, {})
3643
+ }],
3644
+ menuPosition: "bottom",
3645
+ menuTitle: t('object-manager-share-menu'),
3646
+ tooltipTitle: t('object-manager-button-share')
3647
+ })
3648
+ }), object.scope === 'user' && jsx(Grid, {
3649
+ className: "objectActions",
3650
+ children: jsx(ToggleMenu, {
3651
+ "aria-label": "Options",
3652
+ menuItems: [{
3653
+ text: t('object-manager-button-edit'),
3654
+ action: function action() {
3655
+ onClickEdit(object.id);
3656
+ },
3657
+ icon: jsx(Edit, {})
3658
+ }, {
3659
+ text: t('object-manager-button-delete'),
3660
+ action: function action() {
3661
+ onClickDelete(object.id);
3662
+ },
3663
+ icon: jsx(Delete, {})
3664
+ }],
3665
+ menuPosition: "bottom",
3666
+ menuTitle: t('object-manager-options-menu'),
3667
+ tooltipTitle: t('object-manager-options-menu')
3668
+ })
3669
+ })]
3670
+ }),
3671
+ style: style,
3672
+ children: jsx(Paper, {
3673
+ elevation: 0,
3674
+ sx: {
3675
+ width: '100%',
3676
+ margin: 0.25,
3677
+ backgroundColor: 'geowebColors.background.surface',
3678
+ border: 'solid 1px',
3679
+ borderColor: 'geowebColors.cards.cardContainerBorder'
3680
+ },
3681
+ children: jsx(ListItemButton, {
3682
+ onClick: function onClick() {
3683
+ onClickObject(object);
3684
+ },
3685
+ selected: activeObject === object.id,
3686
+ sx: {
3687
+ padding: 1,
3688
+ height: '44px'
3689
+ },
3690
+ children: jsxs(Stack, {
3691
+ children: [jsx(Typography, {
3692
+ sx: {
3693
+ lineHeight: '16px',
3694
+ maxHeight: '32px',
3695
+ overflow: 'hidden'
3696
+ },
3697
+ variant: "caption",
3698
+ children: object.objectName
3699
+ }), jsxs(Typography, {
3700
+ sx: {
3701
+ opacity: 0.67,
3702
+ lineHeight: '16px',
3703
+ maxHeight: '32px',
3704
+ overflow: 'hidden'
3705
+ },
3706
+ variant: "caption",
3707
+ children: [object.scope === 'global' && 'Global: ', dateUtils.dateToString(dateUtils.utc(object.lastUpdatedTime), dateUtils.DATE_FORMAT_DATEPICKER) + " UTC"]
3708
+ })]
3709
+ })
3710
+ })
3711
+ })
3712
+ }, object.id)
3713
+ });
3714
+ };
3547
3715
  var DEFAULT_ADD_BUTTON_HEIGHT = 80;
3548
3716
  var OBJECT_ITEM_SIZE$1 = 50;
3549
3717
  var OBJECT_ITEM_SIZE_SMALL_WIDTH$1 = 72;
@@ -3578,8 +3746,8 @@ var getListInclHeaders$1 = function getListInclHeaders(objects) {
3578
3746
  };
3579
3747
  };
3580
3748
  var ContainerDiv$1 = styled('div')(function () {
3581
- var _ref;
3582
- return _ref = {
3749
+ var _ref2;
3750
+ return _ref2 = {
3583
3751
  '.objectActions': {
3584
3752
  width: '100%',
3585
3753
  minWidth: '100%'
@@ -3600,7 +3768,7 @@ var ContainerDiv$1 = styled('div')(function () {
3600
3768
  overflowWrap: 'anywhere',
3601
3769
  overflow: 'hidden'
3602
3770
  }
3603
- }, _ref["@container objectList (min-width: " + BREAKPOINT$1 + "px)"] = {
3771
+ }, _ref2["@container objectList (min-width: " + BREAKPOINT$1 + "px)"] = {
3604
3772
  '.objectActions': {
3605
3773
  width: '50%',
3606
3774
  minWidth: '50%'
@@ -3611,20 +3779,19 @@ var ContainerDiv$1 = styled('div')(function () {
3611
3779
  '& .MuiStack-root': {
3612
3780
  paddingRight: '64px'
3613
3781
  }
3614
- }, _ref;
3782
+ }, _ref2;
3615
3783
  });
3616
- var Objects = function Objects(_ref2) {
3617
- var objects = _ref2.objects,
3618
- onClickObject = _ref2.onClickObject,
3619
- onClickEdit = _ref2.onClickEdit,
3620
- onClickDelete = _ref2.onClickDelete,
3621
- onClickShare = _ref2.onClickShare,
3622
- activeObject = _ref2.activeObject,
3623
- _ref2$isLoading = _ref2.isLoading,
3624
- isLoading = _ref2$isLoading === void 0 ? false : _ref2$isLoading;
3784
+ var Objects = function Objects(_ref3) {
3785
+ var objects = _ref3.objects,
3786
+ onClickObject = _ref3.onClickObject,
3787
+ onClickEdit = _ref3.onClickEdit,
3788
+ onClickDelete = _ref3.onClickDelete,
3789
+ onClickShare = _ref3.onClickShare,
3790
+ activeObject = _ref3.activeObject,
3791
+ _ref3$isLoading = _ref3.isLoading,
3792
+ isLoading = _ref3$isLoading === void 0 ? false : _ref3$isLoading;
3625
3793
  var _useWarningsTranslati = useWarningsTranslation(),
3626
3794
  t = _useWarningsTranslati.t;
3627
- var listRef = React.useRef(null);
3628
3795
  var _getListInclHeaders = getListInclHeaders$1(objects || []),
3629
3796
  listInclHeaders = _getListInclHeaders.listInclHeaders,
3630
3797
  headerList = _getListInclHeaders.headerList;
@@ -3635,178 +3802,51 @@ var Objects = function Objects(_ref2) {
3635
3802
  }
3636
3803
  return HEADER_ITEM_SIZE$1;
3637
3804
  };
3805
+ var ref = useRef(null);
3806
+ var _React$useState = React.useState(0),
3807
+ width = _React$useState[0],
3808
+ setWidth = _React$useState[1];
3638
3809
  React.useEffect(function () {
3639
- if (listRef.current !== null) {
3640
- listRef.current.resetAfterIndex(0, true);
3641
- }
3642
- }, [objects]);
3643
- return jsx(AutoSizer, {
3644
- onResize: function onResize() {
3645
- if (listRef.current !== null) {
3646
- listRef.current.resetAfterIndex(0, true);
3647
- }
3810
+ var _ref$current;
3811
+ setWidth(((_ref$current = ref.current) == null ? void 0 : _ref$current.clientWidth) || 0);
3812
+ }, [ref]);
3813
+ return jsx(Box, {
3814
+ ref: ref,
3815
+ sx: {
3816
+ height: '100%',
3817
+ width: '100%'
3648
3818
  },
3649
- children: function children(_ref3) {
3650
- var _ref3$height = _ref3.height,
3651
- height = _ref3$height === void 0 ? 0 : _ref3$height,
3652
- _ref3$width = _ref3.width,
3653
- width = _ref3$width === void 0 ? 0 : _ref3$width;
3654
- return jsx(Box, {
3655
- sx: {
3656
- width: width
3657
- },
3658
- children: !isLoading && objects.length === 0 ? jsx(Typography, {
3659
- sx: {
3660
- paddingLeft: '16px',
3661
- paddingTop: '8px'
3662
- },
3663
- variant: "body1",
3664
- children: t('object-manager-no-objects')
3665
- }) : jsx(VariableSizeList, {
3666
- height: height - DEFAULT_ADD_BUTTON_HEIGHT,
3667
- itemCount: listInclHeaders.length,
3668
- itemSize: function itemSize(index) {
3669
- return getItemSize(width, index);
3670
- },
3671
- ref: listRef,
3672
- style: {
3673
- containerType: 'inline-size',
3674
- containerName: 'objectList'
3675
- },
3676
- width: width,
3677
- children: function children(_ref4) {
3678
- var _buttonSx;
3679
- var index = _ref4.index,
3680
- style = _ref4.style;
3681
- var listItem = listInclHeaders[index];
3682
- if (!listItem.isObject) {
3683
- var header = headerList[listItem.index];
3684
- return jsx(Typography, {
3685
- style: style,
3686
- sx: {
3687
- paddingLeft: 2.5,
3688
- paddingBottom: 0.5,
3689
- paddingTop: 1,
3690
- opacity: 0.67,
3691
- lineHeight: '16px',
3692
- overflow: 'hidden',
3693
- whiteSpace: 'nowrap',
3694
- textOverflow: 'ellipsis'
3695
- },
3696
- variant: "caption",
3697
- children: header
3698
- }, listItem.index);
3699
- }
3700
- var object = objects[listItem.index];
3701
- return jsx(ContainerDiv$1, {
3702
- children: jsx(ListItem, {
3703
- disablePadding: true,
3704
- secondaryAction: jsxs(Grid, {
3705
- container: true,
3706
- rowSpacing: 1,
3707
- children: [jsx(Grid, {
3708
- className: "objectActions",
3709
- children: jsx(ToggleMenu, {
3710
- "aria-label": t('object-manager-button-share'),
3711
- buttonIcon: jsx(Share, {}),
3712
- buttonSx: (_buttonSx = {
3713
- // position the share button for scope global
3714
- marginBottom: object.scope === 'user' ? 0 : 4
3715
- }, _buttonSx["@container objectList (min-width: " + BREAKPOINT$1 + "px)"] = {
3716
- marginBottom: 0,
3717
- marginRight: object.scope === 'user' ? 1 : 4
3718
- }, _buttonSx),
3719
- menuItems: [{
3720
- text: BUTTON_AIRMET$1,
3721
- action: function action() {},
3722
- icon: jsx(ExitDomain, {}),
3723
- isDisabled: true
3724
- }, {
3725
- text: BUTTON_SIGMET$1,
3726
- action: function action() {},
3727
- icon: jsx(ExitDomain, {}),
3728
- isDisabled: true
3729
- }, {
3730
- text: t('public-warning-title').toUpperCase(),
3731
- action: function action() {
3732
- onClickShare(object);
3733
- },
3734
- icon: jsx(ExitDomain, {})
3735
- }],
3736
- menuPosition: "bottom",
3737
- menuTitle: t('object-manager-share-menu'),
3738
- tooltipTitle: t('object-manager-button-share')
3739
- })
3740
- }), object.scope === 'user' && jsx(Grid, {
3741
- className: "objectActions",
3742
- children: jsx(ToggleMenu, {
3743
- "aria-label": "Options",
3744
- menuItems: [{
3745
- text: t('object-manager-button-edit'),
3746
- action: function action() {
3747
- onClickEdit(object.id);
3748
- },
3749
- icon: jsx(Edit, {})
3750
- }, {
3751
- text: t('object-manager-button-delete'),
3752
- action: function action() {
3753
- onClickDelete(object.id);
3754
- },
3755
- icon: jsx(Delete, {})
3756
- }],
3757
- menuPosition: "bottom",
3758
- menuTitle: t('object-manager-options-menu'),
3759
- tooltipTitle: t('object-manager-options-menu')
3760
- })
3761
- })]
3762
- }),
3763
- style: style,
3764
- children: jsx(Paper, {
3765
- elevation: 0,
3766
- sx: {
3767
- width: '100%',
3768
- margin: 0.25,
3769
- backgroundColor: 'geowebColors.background.surface',
3770
- border: 'solid 1px',
3771
- borderColor: 'geowebColors.cards.cardContainerBorder'
3772
- },
3773
- children: jsx(ListItemButton, {
3774
- onClick: function onClick() {
3775
- onClickObject(object);
3776
- },
3777
- selected: activeObject === object.id,
3778
- sx: {
3779
- padding: 1,
3780
- height: '44px'
3781
- },
3782
- children: jsxs(Stack, {
3783
- children: [jsx(Typography, {
3784
- sx: {
3785
- lineHeight: '16px',
3786
- maxHeight: '32px',
3787
- overflow: 'hidden'
3788
- },
3789
- variant: "caption",
3790
- children: object.objectName
3791
- }), jsxs(Typography, {
3792
- sx: {
3793
- opacity: 0.67,
3794
- lineHeight: '16px',
3795
- maxHeight: '32px',
3796
- overflow: 'hidden'
3797
- },
3798
- variant: "caption",
3799
- children: [object.scope === 'global' && 'Global: ', dateUtils.dateToString(dateUtils.utc(object.lastUpdatedTime), dateUtils.DATE_FORMAT_DATEPICKER) + " UTC"]
3800
- })]
3801
- })
3802
- })
3803
- })
3804
- }, object.id)
3805
- });
3806
- }
3807
- })
3808
- });
3809
- }
3819
+ children: !isLoading && objects.length === 0 ? jsx(Typography, {
3820
+ sx: {
3821
+ paddingLeft: '16px',
3822
+ paddingTop: '8px'
3823
+ },
3824
+ variant: "body1",
3825
+ children: t('object-manager-no-objects')
3826
+ }) : jsx(List, {
3827
+ rowComponent: RowComponent$2,
3828
+ rowCount: listInclHeaders.length,
3829
+ rowHeight: function rowHeight(index) {
3830
+ return getItemSize(width, index);
3831
+ },
3832
+ rowProps: {
3833
+ listInclHeaders: listInclHeaders,
3834
+ headerList: headerList,
3835
+ objects: objects,
3836
+ onClickObject: onClickObject,
3837
+ onClickEdit: onClickEdit,
3838
+ onClickDelete: onClickDelete,
3839
+ onClickShare: onClickShare,
3840
+ activeObject: activeObject,
3841
+ t: t
3842
+ },
3843
+ style: {
3844
+ width: width,
3845
+ height: "calc(100% - " + DEFAULT_ADD_BUTTON_HEIGHT + "px)",
3846
+ containerType: 'inline-size',
3847
+ containerName: 'objectList'
3848
+ }
3849
+ })
3810
3850
  });
3811
3851
  };
3812
3852
 
@@ -4007,7 +4047,9 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
4007
4047
  dispatch(layerActions.addLayer({
4008
4048
  mapId: mapId,
4009
4049
  layer: {
4010
- geojson: drawing.geoJSON
4050
+ geojson: drawing.geoJSON,
4051
+ isSelectable: false,
4052
+ isInEditMode: false
4011
4053
  },
4012
4054
  layerId: geoJSONLayerId,
4013
4055
  origin: 'warnings-lib'
@@ -4060,7 +4102,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
4060
4102
  setSelectedDrawingId(drawingId);
4061
4103
  };
4062
4104
  useEffect(function () {
4063
- if (!selectedDrawingId || !drawingDetails || drawingDetails.id !== selectedDrawingId || isFetchingDetails) {
4105
+ if (!selectedDrawingId || !drawingDetails || (drawingDetails == null ? void 0 : drawingDetails.id) !== selectedDrawingId || isFetchingDetails) {
4064
4106
  return;
4065
4107
  }
4066
4108
  dispatch(warningsDrawingsActions.setDrawValues({
@@ -4087,7 +4129,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
4087
4129
  closeObjectDialog();
4088
4130
  };
4089
4131
  var onShareObject = function onShareObject(object) {
4090
- dispatch(publicWarningFormActions.openPublicWarningFormDialog({
4132
+ dispatch(warningsFormActions.openPublicWarningFormDialog({
4091
4133
  object: object,
4092
4134
  warning: {
4093
4135
  warningDetail: {
@@ -4290,7 +4332,7 @@ var drawToolConfig = [{
4290
4332
  secondaryMode: defaultOval
4291
4333
  }, {
4292
4334
  primaryMode: defaultSquare,
4293
- secondaryMode: defaultBox
4335
+ secondaryMode: defaultRotatableBox
4294
4336
  }, {
4295
4337
  primaryMode: defaultPoint,
4296
4338
  secondaryMode: defaultLocation
@@ -4825,7 +4867,8 @@ var DrawingToolConnect = function DrawingToolConnect(_ref) {
4825
4867
  var defaultDrawModes = translateDrawModes(currentlySupportedDrawModes, t);
4826
4868
  dispatch(drawingToolActions.registerDrawTool({
4827
4869
  drawToolId: drawingDialogType,
4828
- defaultDrawModes: defaultDrawModes
4870
+ defaultDrawModes: defaultDrawModes,
4871
+ shouldAllowMultipleShapes: true
4829
4872
  }));
4830
4873
  return function () {
4831
4874
  dispatch(drawingToolActions.unregisterDrawTool({
@@ -6117,7 +6160,7 @@ var usePostSigmet = function usePostSigmet() {
6117
6160
  }
6118
6161
  throw new Error('Authentication context not found');
6119
6162
  case 2:
6120
- dispatch(publicWarningFormActions.removeFormError());
6163
+ dispatch(warningsFormActions.removeFormError());
6121
6164
  return _context7.abrupt("return", postSigmet(auth, formData));
6122
6165
  case 4:
6123
6166
  case "end":
@@ -6132,10 +6175,10 @@ var usePostSigmet = function usePostSigmet() {
6132
6175
  }(),
6133
6176
  onError: function onError(error) {
6134
6177
  if (error.cause === 409) {
6135
- dispatch(publicWarningFormActions.setFormValues({
6178
+ dispatch(warningsFormActions.setFormValues({
6136
6179
  formState: 'edit'
6137
6180
  }));
6138
- dispatch(publicWarningFormActions.setFormError({
6181
+ dispatch(warningsFormActions.setFormError({
6139
6182
  severity: 'warning',
6140
6183
  message: t('aviation-post-conflict-title', {
6141
6184
  warningType: 'SIGMET'
@@ -6150,7 +6193,7 @@ var usePostSigmet = function usePostSigmet() {
6150
6193
  queryKey: ['sigmet']
6151
6194
  });
6152
6195
  var formattedError = humanizeApiErrorMessage(error);
6153
- dispatch(publicWarningFormActions.setFormError({
6196
+ dispatch(warningsFormActions.setFormError({
6154
6197
  message: "Failed to save SIGMET: " + formattedError
6155
6198
  }));
6156
6199
  },
@@ -6210,7 +6253,7 @@ var usePostAirmet = function usePostAirmet() {
6210
6253
  }
6211
6254
  throw new Error('Authentication context not found');
6212
6255
  case 2:
6213
- dispatch(publicWarningFormActions.removeFormError());
6256
+ dispatch(warningsFormActions.removeFormError());
6214
6257
  return _context9.abrupt("return", postAirmet(auth, formData));
6215
6258
  case 4:
6216
6259
  case "end":
@@ -6225,10 +6268,10 @@ var usePostAirmet = function usePostAirmet() {
6225
6268
  }(),
6226
6269
  onError: function onError(error) {
6227
6270
  if (error.cause === 409) {
6228
- dispatch(publicWarningFormActions.setFormValues({
6271
+ dispatch(warningsFormActions.setFormValues({
6229
6272
  formState: 'edit'
6230
6273
  }));
6231
- dispatch(publicWarningFormActions.setFormError({
6274
+ dispatch(warningsFormActions.setFormError({
6232
6275
  severity: 'warning',
6233
6276
  message: t('aviation-post-conflict-title', {
6234
6277
  warningType: 'AIRMET'
@@ -6243,7 +6286,7 @@ var usePostAirmet = function usePostAirmet() {
6243
6286
  queryKey: ['airmet']
6244
6287
  });
6245
6288
  var formattedError = humanizeApiErrorMessage(error);
6246
- dispatch(publicWarningFormActions.setFormError({
6289
+ dispatch(warningsFormActions.setFormError({
6247
6290
  message: "Failed to save AIRMET: " + formattedError
6248
6291
  }));
6249
6292
  },
@@ -6296,17 +6339,24 @@ var usePostAirmet = function usePostAirmet() {
6296
6339
  * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
6297
6340
  * */
6298
6341
  var useWarnings = function useWarnings(disabled, timeFilter) {
6299
- var _usePublicWarnings = usePublicWarnings(disabled, timeFilter),
6342
+ var config = sessionStorageProvider.getConfig();
6343
+ var hasPublicWarningsBaseUrl = Boolean(config.GW_DRAWINGS_BASE_URL);
6344
+ var hasAirmetBaseUrl = Boolean(config.GW_AIRMET_BASE_URL);
6345
+ var hasSigmetBaseUrl = Boolean(config.GW_SIGMET_BASE_URL);
6346
+ var isPublicWarningsDisabled = disabled || !hasPublicWarningsBaseUrl;
6347
+ var isAirmetDisabled = disabled || !hasAirmetBaseUrl;
6348
+ var isSigmetDisabled = disabled || !hasSigmetBaseUrl;
6349
+ var _usePublicWarnings = usePublicWarnings(isPublicWarningsDisabled, timeFilter),
6300
6350
  publicWarnings = _usePublicWarnings.data,
6301
6351
  refetchPublicWarnings = _usePublicWarnings.refetch,
6302
6352
  isFetchingPublicWarnings = _usePublicWarnings.isFetching,
6303
6353
  publicWarningsError = _usePublicWarnings.error,
6304
6354
  dataUpdatedAt = _usePublicWarnings.dataUpdatedAt;
6305
- var _useAirmetList = useAirmetList(disabled, timeFilter),
6355
+ var _useAirmetList = useAirmetList(isAirmetDisabled, timeFilter),
6306
6356
  airmetWarnings = _useAirmetList.data,
6307
6357
  refetchAirmet = _useAirmetList.refetch,
6308
6358
  isFetchingAirmet = _useAirmetList.isFetching;
6309
- var _useSigmetList = useSigmetList(disabled, timeFilter),
6359
+ var _useSigmetList = useSigmetList(isSigmetDisabled, timeFilter),
6310
6360
  sigmetWarnings = _useSigmetList.data,
6311
6361
  refetchSigmet = _useSigmetList.refetch,
6312
6362
  isFetchingSigmet = _useSigmetList.isFetching;
@@ -6320,9 +6370,15 @@ var useWarnings = function useWarnings(disabled, timeFilter) {
6320
6370
  return concat(publicWarnings || [], transformedSigmets, transformedAirmets);
6321
6371
  }, [sigmetWarnings, airmetWarnings, publicWarnings]);
6322
6372
  var refetchWarnings = function refetchWarnings() {
6323
- void refetchPublicWarnings();
6324
- void refetchAirmet();
6325
- void refetchSigmet();
6373
+ if (hasPublicWarningsBaseUrl) {
6374
+ void refetchPublicWarnings();
6375
+ }
6376
+ if (hasAirmetBaseUrl) {
6377
+ void refetchAirmet();
6378
+ }
6379
+ if (hasSigmetBaseUrl) {
6380
+ void refetchSigmet();
6381
+ }
6326
6382
  };
6327
6383
  var isFetching = isFetchingPublicWarnings || isFetchingAirmet || isFetchingSigmet;
6328
6384
  return {
@@ -6378,47 +6434,41 @@ function useAutoRefetchOnExpiry(combinedWarnings, refetchWarnings) {
6378
6434
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
6379
6435
  * */
6380
6436
  var EMPTY_WARNING_FORM_STATE = {};
6381
- var selectPublicWarningState = function selectPublicWarningState(store) {
6382
- if (store != null && store.publicWarningForm) {
6383
- return store.publicWarningForm;
6437
+ var selectWarningsFormState = function selectWarningsFormState(store) {
6438
+ if (store != null && store.warningsForm) {
6439
+ return store.warningsForm;
6384
6440
  }
6385
6441
  return EMPTY_WARNING_FORM_STATE;
6386
6442
  };
6387
- createSelector(selectPublicWarningState, function (publicWarningStore) {
6388
- return publicWarningStore.object;
6443
+ var getPublicWarning = createSelector(selectWarningsFormState, function (store) {
6444
+ return store == null ? void 0 : store.warning;
6389
6445
  });
6390
- var getPublicWarning = createSelector(selectPublicWarningState, function (publicWarningStore) {
6391
- return publicWarningStore == null ? void 0 : publicWarningStore.warning;
6446
+ var getPublicWarningStatus = createSelector(selectWarningsFormState, function (store) {
6447
+ var _store$warning;
6448
+ return store == null || (_store$warning = store.warning) == null ? void 0 : _store$warning.status;
6392
6449
  });
6393
- var getPublicWarningStatus = createSelector(selectPublicWarningState, function (publicWarningStore) {
6394
- var _publicWarningStore$w;
6395
- return publicWarningStore == null || (_publicWarningStore$w = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w.status;
6450
+ var getPublicWarningId = createSelector(selectWarningsFormState, function (store) {
6451
+ var _store$warning2;
6452
+ return store == null || (_store$warning2 = store.warning) == null ? void 0 : _store$warning2.warningDetail.id;
6396
6453
  });
6397
- var getPublicWarningId = createSelector(selectPublicWarningState, function (publicWarningStore) {
6398
- var _publicWarningStore$w2;
6399
- return publicWarningStore == null || (_publicWarningStore$w2 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w2.warningDetail.id;
6454
+ var getPublicWarningAreas = createSelector(selectWarningsFormState, function (store) {
6455
+ var _store$warning3;
6456
+ return (store == null || (_store$warning3 = store.warning) == null ? void 0 : _store$warning3.warningDetail.areas) || [];
6400
6457
  });
6401
- var getPublicWarningAreas = createSelector(selectPublicWarningState, function (publicWarningStore) {
6402
- var _publicWarningStore$w3;
6403
- return (publicWarningStore == null || (_publicWarningStore$w3 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w3.warningDetail.areas) || [];
6458
+ var getPublicWarningFormState = createSelector(selectWarningsFormState, function (store) {
6459
+ return (store == null ? void 0 : store.formState) || '';
6404
6460
  });
6405
- var getPublicWarningFormState = createSelector(selectPublicWarningState, function (publicWarningStore) {
6406
- return (publicWarningStore == null ? void 0 : publicWarningStore.formState) || '';
6461
+ var getSelectedWarningId = createSelector(selectWarningsFormState, function (store) {
6462
+ return (store == null ? void 0 : store.selectedWarningId) || '';
6407
6463
  });
6408
- createSelector(selectPublicWarningState, function (publicWarningStore) {
6409
- return publicWarningStore == null ? void 0 : publicWarningStore.error;
6464
+ var getSelectedPublicIsFormDirty = createSelector(selectWarningsFormState, function (store) {
6465
+ return (store == null ? void 0 : store.isFormDirty) || false;
6410
6466
  });
6411
- var getSelectedWarningId = createSelector(selectPublicWarningState, function (publicWarningStore) {
6412
- return (publicWarningStore == null ? void 0 : publicWarningStore.selectedWarningId) || '';
6467
+ var getWarningType = createSelector(selectWarningsFormState, function (store) {
6468
+ return store == null ? void 0 : store.warningType;
6413
6469
  });
6414
- var getSelectedPublicIsFormDirty = createSelector(selectPublicWarningState, function (publicWarningStore) {
6415
- return (publicWarningStore == null ? void 0 : publicWarningStore.isFormDirty) || false;
6416
- });
6417
- var getWarningType = createSelector(selectPublicWarningState, function (publicWarningStore) {
6418
- return publicWarningStore == null ? void 0 : publicWarningStore.warningType;
6419
- });
6420
- var getPublicWarningPanelId = createSelector(selectPublicWarningState, function (publicWarningStore) {
6421
- return (publicWarningStore == null ? void 0 : publicWarningStore.panelId) || '';
6470
+ var getPublicWarningPanelId = createSelector(selectWarningsFormState, function (store) {
6471
+ return (store == null ? void 0 : store.panelId) || '';
6422
6472
  });
6423
6473
 
6424
6474
  var AreaObjectFilter = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
@@ -6451,6 +6501,80 @@ var AreaObjectFilter = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
6451
6501
  });
6452
6502
  });
6453
6503
 
6504
+ var RowComponent$1 = function RowComponent(_ref) {
6505
+ var index = _ref.index,
6506
+ style = _ref.style,
6507
+ items = _ref.items,
6508
+ selectedAreas = _ref.selectedAreas,
6509
+ onAddArea = _ref.onAddArea,
6510
+ onRemoveArea = _ref.onRemoveArea,
6511
+ isChangeAreaDisabled = _ref.isChangeAreaDisabled,
6512
+ shouldDisableRemoveWarning = _ref.shouldDisableRemoveWarning,
6513
+ t = _ref.t;
6514
+ var listItem = items[index];
6515
+ if (typeof listItem === 'string') {
6516
+ return jsx(Typography, {
6517
+ style: style,
6518
+ sx: {
6519
+ paddingLeft: 2.5,
6520
+ paddingBottom: 0.5,
6521
+ paddingTop: 1,
6522
+ opacity: 0.67,
6523
+ lineHeight: '16px',
6524
+ overflow: 'hidden',
6525
+ whiteSpace: 'nowrap',
6526
+ textOverflow: 'ellipsis'
6527
+ },
6528
+ variant: "caption",
6529
+ children: listItem
6530
+ }, index);
6531
+ }
6532
+ return jsx(ContainerDiv, {
6533
+ children: jsx(ListItem, {
6534
+ disablePadding: true,
6535
+ secondaryAction: jsx(ListItemAction, {
6536
+ isDisabled: isChangeAreaDisabled,
6537
+ listItem: listItem,
6538
+ onAddArea: onAddArea,
6539
+ onRemoveArea: onRemoveArea,
6540
+ selectedAreas: selectedAreas,
6541
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning,
6542
+ t: t
6543
+ }),
6544
+ style: style,
6545
+ children: jsx(Paper, {
6546
+ elevation: 0,
6547
+ sx: {
6548
+ width: '100%',
6549
+ margin: 0.25,
6550
+ backgroundColor: 'geowebColors.background.surface',
6551
+ border: 'solid 1px',
6552
+ borderColor: 'geowebColors.cards.cardContainerBorder'
6553
+ },
6554
+ children: jsxs(Stack, {
6555
+ children: [jsx(Typography, {
6556
+ sx: {
6557
+ lineHeight: '16px',
6558
+ maxHeight: '32px',
6559
+ overflow: 'hidden'
6560
+ },
6561
+ variant: "caption",
6562
+ children: listItem.objectName
6563
+ }), !isArea(listItem) && jsx(Typography, {
6564
+ sx: {
6565
+ opacity: 0.67,
6566
+ lineHeight: '16px',
6567
+ maxHeight: '32px',
6568
+ overflow: 'hidden'
6569
+ },
6570
+ variant: "caption",
6571
+ children: getDisplayDate(listItem.lastUpdatedTime)
6572
+ })]
6573
+ })
6574
+ })
6575
+ }, listItem.id)
6576
+ });
6577
+ };
6454
6578
  var OBJECT_ITEM_SIZE = 44;
6455
6579
  var OBJECT_ITEM_SIZE_SMALL_WIDTH = 72;
6456
6580
  var HEADER_ITEM_SIZE = 28;
@@ -6482,9 +6606,9 @@ var isArea = function isArea(item) {
6482
6606
  return !((_item$keywords = item.keywords) != null && _item$keywords.includes('Objects'));
6483
6607
  };
6484
6608
  var getListInclHeaders = function getListInclHeaders(items, translateFn) {
6485
- var _items$reduce = items.reduce(function (_ref, item) {
6486
- var objects = _ref.objects,
6487
- areas = _ref.areas;
6609
+ var _items$reduce = items.reduce(function (_ref2, item) {
6610
+ var objects = _ref2.objects,
6611
+ areas = _ref2.areas;
6488
6612
  var isObject = !isArea(item);
6489
6613
  if (isObject) {
6490
6614
  return {
@@ -6522,15 +6646,15 @@ var getLabel = function getLabel(selectedAreas, isAreaSelected) {
6522
6646
  var getDisplayDate = function getDisplayDate(date) {
6523
6647
  return dateUtils.dateToString(dateUtils.utc(date), dateUtils.DATE_FORMAT_NAME_OF_DAY) + " UTC";
6524
6648
  };
6525
- var ListItemAction = function ListItemAction(_ref2) {
6526
- var listItem = _ref2.listItem,
6527
- selectedAreas = _ref2.selectedAreas,
6528
- onAddArea = _ref2.onAddArea,
6529
- onRemoveArea = _ref2.onRemoveArea,
6530
- isDisabled = _ref2.isDisabled,
6531
- t = _ref2.t,
6532
- _ref2$shouldDisableRe = _ref2.shouldDisableRemoveWarning,
6533
- shouldDisableRemoveWarning = _ref2$shouldDisableRe === void 0 ? false : _ref2$shouldDisableRe;
6649
+ var ListItemAction = function ListItemAction(_ref3) {
6650
+ var listItem = _ref3.listItem,
6651
+ selectedAreas = _ref3.selectedAreas,
6652
+ onAddArea = _ref3.onAddArea,
6653
+ onRemoveArea = _ref3.onRemoveArea,
6654
+ isDisabled = _ref3.isDisabled,
6655
+ t = _ref3.t,
6656
+ _ref3$shouldDisableRe = _ref3.shouldDisableRemoveWarning,
6657
+ shouldDisableRemoveWarning = _ref3$shouldDisableRe === void 0 ? false : _ref3$shouldDisableRe;
6534
6658
  var isAreaSelected = !!selectedAreas.find(function (area) {
6535
6659
  return area.objectName === listItem.objectName;
6536
6660
  });
@@ -6586,35 +6710,29 @@ var ContainerDiv = styled('div')(function () {
6586
6710
  }
6587
6711
  };
6588
6712
  });
6589
- var AreasObjects = function AreasObjects(_ref3) {
6590
- var drawingListItems = _ref3.drawingListItems,
6591
- _ref3$isLoading = _ref3.isLoading,
6592
- isLoading = _ref3$isLoading === void 0 ? false : _ref3$isLoading,
6593
- _ref3$hasError = _ref3.hasError,
6594
- hasError = _ref3$hasError === void 0 ? false : _ref3$hasError,
6595
- filterRef = _ref3.filterRef,
6596
- _ref3$onAddArea = _ref3.onAddArea,
6597
- onAddArea = _ref3$onAddArea === void 0 ? function () {} : _ref3$onAddArea,
6598
- _ref3$onRemoveArea = _ref3.onRemoveArea,
6599
- onRemoveArea = _ref3$onRemoveArea === void 0 ? function () {} : _ref3$onRemoveArea,
6600
- _ref3$selectedAreas = _ref3.selectedAreas,
6601
- selectedAreas = _ref3$selectedAreas === void 0 ? [] : _ref3$selectedAreas,
6602
- _ref3$isChangeAreaDis = _ref3.isChangeAreaDisabled,
6603
- isChangeAreaDisabled = _ref3$isChangeAreaDis === void 0 ? true : _ref3$isChangeAreaDis,
6604
- _ref3$shouldDisableRe = _ref3.shouldDisableRemoveWarning,
6605
- shouldDisableRemoveWarning = _ref3$shouldDisableRe === void 0 ? false : _ref3$shouldDisableRe;
6713
+ var AreasObjects = function AreasObjects(_ref4) {
6714
+ var drawingListItems = _ref4.drawingListItems,
6715
+ _ref4$isLoading = _ref4.isLoading,
6716
+ isLoading = _ref4$isLoading === void 0 ? false : _ref4$isLoading,
6717
+ _ref4$hasError = _ref4.hasError,
6718
+ hasError = _ref4$hasError === void 0 ? false : _ref4$hasError,
6719
+ filterRef = _ref4.filterRef,
6720
+ _ref4$onAddArea = _ref4.onAddArea,
6721
+ onAddArea = _ref4$onAddArea === void 0 ? function () {} : _ref4$onAddArea,
6722
+ _ref4$onRemoveArea = _ref4.onRemoveArea,
6723
+ onRemoveArea = _ref4$onRemoveArea === void 0 ? function () {} : _ref4$onRemoveArea,
6724
+ _ref4$selectedAreas = _ref4.selectedAreas,
6725
+ selectedAreas = _ref4$selectedAreas === void 0 ? [] : _ref4$selectedAreas,
6726
+ _ref4$isChangeAreaDis = _ref4.isChangeAreaDisabled,
6727
+ isChangeAreaDisabled = _ref4$isChangeAreaDis === void 0 ? true : _ref4$isChangeAreaDis,
6728
+ _ref4$shouldDisableRe = _ref4.shouldDisableRemoveWarning,
6729
+ shouldDisableRemoveWarning = _ref4$shouldDisableRe === void 0 ? false : _ref4$shouldDisableRe;
6606
6730
  var _useWarningsTranslati = useWarningsTranslation(),
6607
6731
  t = _useWarningsTranslati.t;
6608
- var listRef = React.useRef(null);
6609
6732
  var _getListInclHeaders = getListInclHeaders(drawingListItems, t),
6610
6733
  objects = _getListInclHeaders.objects,
6611
6734
  areas = _getListInclHeaders.areas;
6612
6735
  var filterHeight = useGetFilterHeight(filterRef);
6613
- React.useEffect(function () {
6614
- if (listRef.current !== null) {
6615
- listRef.current.resetAfterIndex(0, true);
6616
- }
6617
- }, [drawingListItems]);
6618
6736
  var items = [objects.title].concat(objects.items, [areas.title], areas.items);
6619
6737
  var getItemSize = function getItemSize(width, index) {
6620
6738
  var item = items[index];
@@ -6624,109 +6742,44 @@ var AreasObjects = function AreasObjects(_ref3) {
6624
6742
  return HEADER_ITEM_SIZE;
6625
6743
  };
6626
6744
  var totalContainerHeight = hasError ? filterHeight + ERROR_HEIGHT : filterHeight;
6745
+ var ref = useRef(null);
6746
+ var _React$useState2 = React.useState(0),
6747
+ width = _React$useState2[0],
6748
+ setWidth = _React$useState2[1];
6749
+ React.useEffect(function () {
6750
+ var _ref$current;
6751
+ setWidth(((_ref$current = ref.current) == null ? void 0 : _ref$current.clientWidth) || 0);
6752
+ }, [ref]);
6627
6753
  return jsx(Box, {
6754
+ ref: ref,
6628
6755
  sx: {
6629
6756
  height: "calc(100% - " + totalContainerHeight + "px)"
6630
6757
  },
6631
- children: jsx(AutoSizer, {
6632
- onResize: function onResize() {
6633
- if (listRef.current !== null) {
6634
- listRef.current.resetAfterIndex(0, true);
6635
- }
6758
+ children: !isLoading && drawingListItems.length === 0 ? jsx(Typography, {
6759
+ sx: {
6760
+ paddingLeft: '16px',
6761
+ paddingTop: '8px'
6636
6762
  },
6637
- children: function children(_ref4) {
6638
- var _ref4$height = _ref4.height,
6639
- height = _ref4$height === void 0 ? 0 : _ref4$height,
6640
- _ref4$width = _ref4.width,
6641
- width = _ref4$width === void 0 ? 0 : _ref4$width;
6642
- return jsx(Box, {
6643
- sx: {
6644
- width: width
6645
- },
6646
- children: !isLoading && drawingListItems.length === 0 ? jsx(Typography, {
6647
- sx: {
6648
- paddingLeft: '16px',
6649
- paddingTop: '8px'
6650
- },
6651
- variant: "body1",
6652
- children: t('area-object-loader-no-areas-objects')
6653
- }) : jsx(VariableSizeList, {
6654
- height: height,
6655
- itemCount: items.length,
6656
- itemSize: function itemSize(index) {
6657
- return getItemSize(width, index);
6658
- },
6659
- ref: listRef,
6660
- width: width,
6661
- children: function children(_ref5) {
6662
- var index = _ref5.index,
6663
- style = _ref5.style;
6664
- var listItem = items[index];
6665
- if (typeof listItem === 'string') {
6666
- return jsx(Typography, {
6667
- style: style,
6668
- sx: {
6669
- paddingLeft: 2.5,
6670
- paddingBottom: 0.5,
6671
- paddingTop: 1,
6672
- opacity: 0.67,
6673
- lineHeight: '16px',
6674
- overflow: 'hidden',
6675
- whiteSpace: 'nowrap',
6676
- textOverflow: 'ellipsis'
6677
- },
6678
- variant: "caption",
6679
- children: listItem
6680
- }, index);
6681
- }
6682
- return jsx(ContainerDiv, {
6683
- children: jsx(ListItem, {
6684
- disablePadding: true,
6685
- secondaryAction: jsx(ListItemAction, {
6686
- isDisabled: isChangeAreaDisabled,
6687
- listItem: listItem,
6688
- onAddArea: onAddArea,
6689
- onRemoveArea: onRemoveArea,
6690
- selectedAreas: selectedAreas,
6691
- shouldDisableRemoveWarning: shouldDisableRemoveWarning,
6692
- t: t
6693
- }),
6694
- style: style,
6695
- children: jsx(Paper, {
6696
- elevation: 0,
6697
- sx: {
6698
- width: '100%',
6699
- margin: 0.25,
6700
- backgroundColor: 'geowebColors.background.surface',
6701
- border: 'solid 1px',
6702
- borderColor: 'geowebColors.cards.cardContainerBorder'
6703
- },
6704
- children: jsxs(Stack, {
6705
- children: [jsx(Typography, {
6706
- sx: {
6707
- lineHeight: '16px',
6708
- maxHeight: '32px',
6709
- overflow: 'hidden'
6710
- },
6711
- variant: "caption",
6712
- children: listItem.objectName
6713
- }), !isArea(listItem) && jsx(Typography, {
6714
- sx: {
6715
- opacity: 0.67,
6716
- lineHeight: '16px',
6717
- maxHeight: '32px',
6718
- overflow: 'hidden'
6719
- },
6720
- variant: "caption",
6721
- children: getDisplayDate(listItem.lastUpdatedTime)
6722
- })]
6723
- })
6724
- })
6725
- }, listItem.id)
6726
- });
6727
- }
6728
- })
6729
- });
6763
+ variant: "body1",
6764
+ children: t('area-object-loader-no-areas-objects')
6765
+ }) : jsx(List, {
6766
+ rowComponent: RowComponent$1,
6767
+ rowCount: items.length,
6768
+ rowHeight: function rowHeight(index) {
6769
+ return getItemSize(width, index);
6770
+ },
6771
+ rowProps: {
6772
+ items: items,
6773
+ selectedAreas: selectedAreas,
6774
+ onAddArea: onAddArea,
6775
+ onRemoveArea: onRemoveArea,
6776
+ isChangeAreaDisabled: isChangeAreaDisabled,
6777
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning,
6778
+ t: t
6779
+ },
6780
+ style: {
6781
+ height: '100%',
6782
+ width: '100%'
6730
6783
  }
6731
6784
  })
6732
6785
  });
@@ -6864,12 +6917,30 @@ var AreaObjectLoader = function AreaObjectLoader(_ref) {
6864
6917
  });
6865
6918
  };
6866
6919
 
6920
+ var EXTENT_PADDING = 50;
6921
+ function getGeojsonExtent(featureCollection, viewSrs, dataSrs) {
6922
+ var format = new GeoJSON();
6923
+ var features = format.readFeatures(featureCollection, {
6924
+ dataProjection: dataSrs,
6925
+ featureProjection: viewSrs
6926
+ });
6927
+ var extent = createEmpty();
6928
+ for (var _iterator = _createForOfIteratorHelperLoose(features), _step; !(_step = _iterator()).done;) {
6929
+ var feat = _step.value;
6930
+ var geo = feat.getGeometry();
6931
+ if (geo) {
6932
+ extend(extent, geo.getExtent());
6933
+ }
6934
+ }
6935
+ return extent;
6936
+ }
6867
6937
  var WarningsMapView = function WarningsMapView(_ref) {
6868
6938
  var _defaultMapPreset$lay, _defaultMapPreset$lay2, _viewRef$current;
6869
6939
  var geojsonFeature = _ref.geojsonFeature,
6870
6940
  defaultMapPreset = _ref.defaultMapPreset,
6871
6941
  _ref$isSnapshot = _ref.isSnapshot,
6872
6942
  isSnapshot = _ref$isSnapshot === void 0 ? false : _ref$isSnapshot;
6943
+ var containerRef = useRef(null);
6873
6944
  var defaultMapPresetBbox = geojsonFeature != null && geojsonFeature.features.length ? undefined : defaultBbox;
6874
6945
  var defaultBbox$1 = (defaultMapPreset == null ? void 0 : defaultMapPreset.proj) || defaultMapPresetBbox;
6875
6946
  var defaultBaseLayer = (defaultMapPreset == null || (_defaultMapPreset$lay = defaultMapPreset.layers) == null ? void 0 : _defaultMapPreset$lay.find(function (layer) {
@@ -6885,12 +6956,36 @@ var WarningsMapView = function WarningsMapView(_ref) {
6885
6956
  };
6886
6957
  var viewRef = useRef(viewUtils.makeView());
6887
6958
  React.useEffect(function () {
6959
+ var _geojsonFeature$featu;
6888
6960
  if (viewRef.current.getProjection().getCode() !== (defaultBbox$1 == null ? void 0 : defaultBbox$1.srs)) {
6889
6961
  viewRef.current = viewUtils.makeView(defaultBbox$1 == null ? void 0 : defaultBbox$1.srs);
6890
6962
  }
6891
- defaultBbox$1 != null && defaultBbox$1.bbox ? viewUtils.setViewFromExtent(viewRef.current, defaultBbox$1 == null ? void 0 : defaultBbox$1.bbox) : viewUtils.setViewFromFeature(viewRef.current, geojsonFeature);
6963
+ var isNew = (defaultBbox$1 == null ? void 0 : defaultBbox$1.bbox) && !(geojsonFeature != null && geojsonFeature.features.length);
6964
+ if (isNew) {
6965
+ viewUtils.setViewFromExtent(viewRef.current, defaultBbox$1 == null ? void 0 : defaultBbox$1.bbox);
6966
+ return;
6967
+ }
6968
+ if (geojsonFeature != null && (_geojsonFeature$featu = geojsonFeature.features) != null && _geojsonFeature$featu.length) {
6969
+ var viewSrs = viewRef.current.getProjection().getCode();
6970
+ var extent = getGeojsonExtent(geojsonFeature, viewSrs, 'EPSG:4326');
6971
+ if (!isEmpty(extent)) {
6972
+ var el = containerRef.current;
6973
+ var rect = el == null ? void 0 : el.getBoundingClientRect();
6974
+ var size = rect && rect.width > 0 && rect.height > 0 ? [Math.round(rect.width), Math.round(rect.height)] : undefined;
6975
+ viewRef.current.fit(extent, {
6976
+ size: size,
6977
+ padding: [EXTENT_PADDING, EXTENT_PADDING, EXTENT_PADDING, EXTENT_PADDING],
6978
+ maxZoom: 12,
6979
+ duration: 0
6980
+ });
6981
+ return;
6982
+ }
6983
+ }
6984
+ // fallback
6985
+ viewUtils.setViewFromFeature(viewRef.current, geojsonFeature);
6892
6986
  }, [defaultBbox$1, geojsonFeature]);
6893
6987
  return jsx("div", {
6988
+ ref: containerRef,
6894
6989
  style: {
6895
6990
  height: '200px',
6896
6991
  width: '100%'
@@ -7198,18 +7293,18 @@ var WarningLevel;
7198
7293
  var LevelColors = {
7199
7294
  moderate: {
7200
7295
  color: '#FAE21E',
7201
- textColor: '#051039',
7202
- borderColor: '#FBFE02'
7296
+ textColor: '#3A3400',
7297
+ borderColor: '#A08F07'
7203
7298
  },
7204
7299
  severe: {
7205
7300
  color: '#E27000',
7206
7301
  textColor: '#051039',
7207
- borderColor: '#FEAE02'
7302
+ borderColor: '#9C4D00'
7208
7303
  },
7209
7304
  extreme: {
7210
7305
  color: '#D62A20',
7211
7306
  textColor: '#ffffff',
7212
- borderColor: '#FF0000'
7307
+ borderColor: '#890101'
7213
7308
  }
7214
7309
  };
7215
7310
  var getLevelStyle = function getLevelStyle(levelColor) {
@@ -7327,7 +7422,7 @@ var ProbabilityField = function ProbabilityField(_ref) {
7327
7422
  var onChangeProbability = function onChangeProbability() {
7328
7423
  void trigger('probability');
7329
7424
  // We don't want to trigger the missing value validation
7330
- if (!isEmpty(getValues('level'))) {
7425
+ if (!isEmpty$1(getValues('level'))) {
7331
7426
  void trigger('level');
7332
7427
  }
7333
7428
  };
@@ -7436,7 +7531,7 @@ var _isMaxHoursAfterCurrentTime = function isMaxHoursAfterCurrentTime(value, t)
7436
7531
  });
7437
7532
  };
7438
7533
  var _isMinHoursAfterValidFrom = function isMinHoursAfterValidFrom(value, validFromValue, t) {
7439
- if (isEmpty(value) || isEmpty(validFromValue) || !dateUtils.isValidIsoDateString(validFromValue)) {
7534
+ if (isEmpty$1(value) || isEmpty$1(validFromValue) || !dateUtils.isValidIsoDateString(validFromValue)) {
7440
7535
  return true;
7441
7536
  }
7442
7537
  var duration = dateUtils.differenceInHours(new Date(value), new Date(validFromValue));
@@ -10451,7 +10546,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10451
10546
  _ref$warningType = _ref.warningType,
10452
10547
  warningType = _ref$warningType === void 0 ? 'public' : _ref$warningType,
10453
10548
  mode = _ref.mode;
10454
- var _useSelector = useSelector(selectPublicWarningState),
10549
+ var _useSelector = useSelector(selectWarningsFormState),
10455
10550
  warning = _useSelector.warning,
10456
10551
  object = _useSelector.object,
10457
10552
  formState = _useSelector.formState,
@@ -10496,7 +10591,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10496
10591
  };
10497
10592
  }();
10498
10593
  var clearForm = function clearForm() {
10499
- dispatch(publicWarningFormActions.removeAllAreas());
10594
+ dispatch(warningsFormActions.removeAllAreas());
10500
10595
  };
10501
10596
  var closeForm = function closeForm() {
10502
10597
  dispatch(uiActions.setToggleOpenDialog({
@@ -10544,7 +10639,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10544
10639
  case 13:
10545
10640
  if ((_result = result) != null && _result.uuid) {
10546
10641
  setSelectedUUID == null || setSelectedUUID(result.uuid);
10547
- dispatch(publicWarningFormActions.setSelectedWarningId(result.uuid));
10642
+ dispatch(warningsFormActions.setSelectedWarningId(result.uuid));
10548
10643
  }
10549
10644
  return _context2.abrupt("return", result);
10550
10645
  case 15:
@@ -10585,7 +10680,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10585
10680
  };
10586
10681
  }();
10587
10682
  var onFormDirty = function onFormDirty(isFormDirty) {
10588
- dispatch(publicWarningFormActions.setFormDirty({
10683
+ dispatch(warningsFormActions.setFormDirty({
10589
10684
  isFormDirty: isFormDirty
10590
10685
  }));
10591
10686
  };
@@ -10625,12 +10720,12 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10625
10720
  }));
10626
10721
  };
10627
10722
  var onSetViewModeResetArea = function onSetViewModeResetArea(area) {
10628
- dispatch(publicWarningFormActions.addArea({
10723
+ dispatch(warningsFormActions.addArea({
10629
10724
  area: area[0]
10630
10725
  }));
10631
10726
  };
10632
10727
  var setWarningLevel = function setWarningLevel(level) {
10633
- dispatch(publicWarningFormActions.setWarningLevel(level));
10728
+ dispatch(warningsFormActions.setWarningLevel(level));
10634
10729
  };
10635
10730
  var selectedMapIds = useSelector(function (state) {
10636
10731
  return genericSelectors.getLinkedMaps(state, panelId);
@@ -10847,7 +10942,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10847
10942
  var onAddArea = function onAddArea(_ref2) {
10848
10943
  var geoJSON = _ref2.geoJSON,
10849
10944
  objectName = _ref2.objectName;
10850
- dispatch(publicWarningFormActions.addArea({
10945
+ dispatch(warningsFormActions.addArea({
10851
10946
  area: {
10852
10947
  geoJSON: geoJSON,
10853
10948
  objectName: objectName
@@ -10857,7 +10952,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10857
10952
  var onRemoveArea = function onRemoveArea(_ref3) {
10858
10953
  var geoJSON = _ref3.geoJSON,
10859
10954
  objectName = _ref3.objectName;
10860
- dispatch(publicWarningFormActions.removeArea({
10955
+ dispatch(warningsFormActions.removeArea({
10861
10956
  area: {
10862
10957
  geoJSON: geoJSON,
10863
10958
  objectName: objectName
@@ -10969,7 +11064,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10969
11064
  var shouldGiveEditorWarning = React.useCallback(function (newEditor, oldEditor) {
10970
11065
  var oldEditorIsYou = oldEditor && oldEditor === (auth == null ? void 0 : auth.username);
10971
11066
  if (oldEditorIsYou && newEditor && newEditor !== oldEditor) {
10972
- dispatch(publicWarningFormActions.setFormError({
11067
+ dispatch(warningsFormActions.setFormError({
10973
11068
  severity: 'warning',
10974
11069
  message: TAKEOVER_MESSAGE
10975
11070
  }));
@@ -11002,7 +11097,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11002
11097
  }, [editor]);
11003
11098
  React.useEffect(function () {
11004
11099
  if ((selectedWarning == null ? void 0 : selectedWarning.id) !== (previousSelectedWarning == null ? void 0 : previousSelectedWarning.id)) {
11005
- dispatch(publicWarningFormActions.removeFormError());
11100
+ dispatch(warningsFormActions.removeFormError());
11006
11101
  }
11007
11102
  }, [selectedWarning == null ? void 0 : selectedWarning.id, previousSelectedWarning == null ? void 0 : previousSelectedWarning.id, dispatch]);
11008
11103
  React.useEffect(function () {
@@ -11059,7 +11154,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11059
11154
  }) : warning;
11060
11155
  });
11061
11156
  });
11062
- dispatch(publicWarningFormActions.setFormValues({
11157
+ dispatch(warningsFormActions.setFormValues({
11063
11158
  formState: isReadOnly ? 'readonly' : ''
11064
11159
  }));
11065
11160
  dispatch(uiActions.setToggleOpenDialog({
@@ -11087,7 +11182,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11087
11182
  // correct editor is already set or
11088
11183
  // someone else is editor so only have to set to readonly mode
11089
11184
  // No need for a BE call
11090
- dispatch(publicWarningFormActions.setFormValues({
11185
+ dispatch(warningsFormActions.setFormValues({
11091
11186
  formState: isReadOnly ? 'readonly' : ''
11092
11187
  }));
11093
11188
  // If the editor was changed in a different window, refetch the warnings
@@ -11241,15 +11336,28 @@ var NewWarningButton = function NewWarningButton(_ref) {
11241
11336
  var _useWarningsTranslati = useWarningsTranslation(),
11242
11337
  t = _useWarningsTranslati.t;
11243
11338
  var config = sessionStorageProvider.getConfig();
11244
- var showMartimeWarningOption = !!config.GW_WARNINGS_MARITIME_WARNINGS;
11339
+ var showMartimeWarningOption = !!config.GW_WARNINGS_MARITIME_WARNINGS && !!config.GW_DRAWINGS_BASE_URL;
11245
11340
  var showAirMetOption = !!config.GW_AIRMET_BASE_URL;
11341
+ var showSigmetOption = !!config.GW_SIGMET_BASE_URL;
11342
+ var showPublicWarningOption = !!config.GW_DRAWINGS_BASE_URL;
11246
11343
  var _React$useState = React.useState(null),
11247
11344
  anchorEl = _React$useState[0],
11248
11345
  setAnchorEl = _React$useState[1];
11249
11346
  var isOpen = Boolean(anchorEl);
11347
+ var _React$useState2 = React.useState(0),
11348
+ menuMinWidth = _React$useState2[0],
11349
+ setMenuMinWidth = _React$useState2[1];
11350
+ var buttonId = 'newWarningButton';
11351
+ React.useEffect(function () {
11352
+ if (isDefaultOpen) {
11353
+ setAnchorEl(document.getElementById(buttonId));
11354
+ }
11355
+ }, [isDefaultOpen, buttonId]);
11250
11356
  var handleClick = function handleClick(event) {
11251
11357
  event.stopPropagation();
11252
11358
  setAnchorEl(event.currentTarget);
11359
+ var buttonWidth = event.currentTarget.getBoundingClientRect().width;
11360
+ setMenuMinWidth(buttonWidth);
11253
11361
  };
11254
11362
  var handleClose = function handleClose(event) {
11255
11363
  event.stopPropagation();
@@ -11259,12 +11367,6 @@ var NewWarningButton = function NewWarningButton(_ref) {
11259
11367
  onCreateWarning(warningType);
11260
11368
  handleClose(event);
11261
11369
  };
11262
- var buttonId = 'newWarningButton';
11263
- React.useEffect(function () {
11264
- if (isDefaultOpen) {
11265
- setAnchorEl(document.getElementById(buttonId));
11266
- }
11267
- }, [isDefaultOpen, buttonId]);
11268
11370
  return jsxs(Fragment, {
11269
11371
  children: [jsxs(CustomToggleButton, {
11270
11372
  id: buttonId,
@@ -11309,7 +11411,8 @@ var NewWarningButton = function NewWarningButton(_ref) {
11309
11411
  },
11310
11412
  list: {
11311
11413
  style: {
11312
- padding: '0px'
11414
+ padding: '0px',
11415
+ minWidth: menuMinWidth || undefined
11313
11416
  }
11314
11417
  }
11315
11418
  },
@@ -11317,28 +11420,28 @@ var NewWarningButton = function NewWarningButton(_ref) {
11317
11420
  vertical: 'top',
11318
11421
  horizontal: 'center'
11319
11422
  },
11320
- children: [jsx(MenuItem, {
11423
+ children: [showPublicWarningOption ? jsx(MenuItem, {
11321
11424
  onClick: function onClick(event) {
11322
11425
  onCreateNewWarning('public', event);
11323
11426
  },
11324
11427
  children: jsx(ListItemText, {
11325
11428
  children: t('public-warning-title').toUpperCase()
11326
11429
  })
11327
- }, "Public"), showAirMetOption ? jsx(MenuItem, {
11430
+ }, "Public") : null, showAirMetOption ? jsx(MenuItem, {
11328
11431
  onClick: function onClick(event) {
11329
11432
  onCreateNewWarning('airmet', event);
11330
11433
  },
11331
11434
  children: jsx(ListItemText, {
11332
11435
  children: BUTTON_AIRMET
11333
11436
  })
11334
- }, "Airmet") : null, jsx(MenuItem, {
11437
+ }, "Airmet") : null, showSigmetOption ? jsx(MenuItem, {
11335
11438
  onClick: function onClick(event) {
11336
11439
  onCreateNewWarning('sigmet', event);
11337
11440
  },
11338
11441
  children: jsx(ListItemText, {
11339
11442
  children: BUTTON_SIGMET
11340
11443
  })
11341
- }, "Sigmet"), showMartimeWarningOption ? jsxs(Fragment, {
11444
+ }, "Sigmet") : null, showMartimeWarningOption ? jsxs(Fragment, {
11342
11445
  children: [jsx(MenuItem, {
11343
11446
  onClick: function onClick(event) {
11344
11447
  onCreateNewWarning('maritimeWarningCoastal', event);
@@ -12486,6 +12589,55 @@ var FilterList = function FilterList(_ref) {
12486
12589
  });
12487
12590
  };
12488
12591
 
12592
+ var RowComponent = function RowComponent(_ref) {
12593
+ var index = _ref.index,
12594
+ style = _ref.style,
12595
+ items = _ref.items,
12596
+ expandedSections = _ref.expandedSections,
12597
+ hoveredFeatureId = _ref.hoveredFeatureId,
12598
+ selectedWarningId = _ref.selectedWarningId,
12599
+ onSelectWarning = _ref.onSelectWarning,
12600
+ onEditWarning = _ref.onEditWarning,
12601
+ onDeleteWarning = _ref.onDeleteWarning,
12602
+ onDeleteReviewWarning = _ref.onDeleteReviewWarning,
12603
+ onExpireWarning = _ref.onExpireWarning,
12604
+ onWithdrawWarning = _ref.onWithdrawWarning,
12605
+ toggleExpand = _ref.toggleExpand,
12606
+ timeFilter = _ref.timeFilter,
12607
+ onActionAviationWarning = _ref.onActionAviationWarning,
12608
+ onActionMaritimeWarning = _ref.onActionMaritimeWarning;
12609
+ var warning = items[index];
12610
+ var key = "warning-" + warning.status + "-" + index;
12611
+ if (warning.totalWarnings !== undefined) {
12612
+ var header = warning;
12613
+ return jsx(WarningListItemSeperator, {
12614
+ isExpanded: expandedSections[warning.status],
12615
+ onClick: function onClick() {
12616
+ toggleExpand(!expandedSections[header.status], header.status);
12617
+ },
12618
+ status: header.status,
12619
+ style: style,
12620
+ timeFilter: timeFilter,
12621
+ totalWarnings: header.totalWarnings
12622
+ }, key);
12623
+ }
12624
+ var publicWarning = warning;
12625
+ var highlightedItem = hoveredFeatureId === publicWarning.id;
12626
+ return jsx(WarningListItem, {
12627
+ activeWarningId: selectedWarningId,
12628
+ highlightedItem: highlightedItem,
12629
+ onActionAviationWarning: onActionAviationWarning,
12630
+ onActionMaritimeWarning: onActionMaritimeWarning,
12631
+ onDeleteReviewWarning: onDeleteReviewWarning,
12632
+ onDeleteWarning: onDeleteWarning,
12633
+ onEditWarning: onEditWarning,
12634
+ onExpireWarning: onExpireWarning,
12635
+ onSelectWarning: onSelectWarning,
12636
+ onWithdrawWarning: onWithdrawWarning,
12637
+ style: style,
12638
+ warning: publicWarning
12639
+ }, key);
12640
+ };
12489
12641
  var groupWarningsOnStatus = function groupWarningsOnStatus(warnings, sortState) {
12490
12642
  var key = sortState.key,
12491
12643
  direction = sortState.direction;
@@ -12523,42 +12675,42 @@ var groupWarningsOnStatus = function groupWarningsOnStatus(warnings, sortState)
12523
12675
  expired: []
12524
12676
  }, groupedWarnings);
12525
12677
  };
12526
- var PublicWarningList = function PublicWarningList(_ref) {
12678
+ var PublicWarningList = function PublicWarningList(_ref2) {
12527
12679
  var _sx, _sx2;
12528
- var _ref$warnings = _ref.warnings,
12529
- warnings = _ref$warnings === void 0 ? [] : _ref$warnings,
12530
- filterHookState = _ref.filterHookState,
12531
- _ref$isLoading = _ref.isLoading,
12532
- isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
12533
- error = _ref.error,
12534
- _ref$selectedWarningI = _ref.selectedWarningId,
12535
- selectedWarningId = _ref$selectedWarningI === void 0 ? '' : _ref$selectedWarningI,
12536
- lastUpdatedTime = _ref.lastUpdatedTime,
12537
- _ref$onSelectWarning = _ref.onSelectWarning,
12538
- onSelectWarning = _ref$onSelectWarning === void 0 ? function () {} : _ref$onSelectWarning,
12539
- _ref$onEditWarning = _ref.onEditWarning,
12540
- onEditWarning = _ref$onEditWarning === void 0 ? function () {} : _ref$onEditWarning,
12541
- _ref$onCreateWarning = _ref.onCreateWarning,
12542
- onCreateWarning = _ref$onCreateWarning === void 0 ? function () {} : _ref$onCreateWarning,
12543
- _ref$onDeleteWarning = _ref.onDeleteWarning,
12544
- onDeleteWarning = _ref$onDeleteWarning === void 0 ? function () {} : _ref$onDeleteWarning,
12545
- _ref$onRefetchWarning = _ref.onRefetchWarnings,
12546
- onRefetchWarnings = _ref$onRefetchWarning === void 0 ? function () {} : _ref$onRefetchWarning,
12547
- _ref$onDeleteReviewWa = _ref.onDeleteReviewWarning,
12548
- onDeleteReviewWarning = _ref$onDeleteReviewWa === void 0 ? function () {} : _ref$onDeleteReviewWa,
12549
- _ref$onExpireWarning = _ref.onExpireWarning,
12550
- onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
12551
- _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
12552
- onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12553
- _ref$onActionAviation = _ref.onActionAviationWarning,
12554
- onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
12555
- _ref$onActionMaritime = _ref.onActionMaritimeWarning,
12556
- onActionMaritimeWarning = _ref$onActionMaritime === void 0 ? function () {} : _ref$onActionMaritime,
12557
- hoveredFeatureId = _ref.hoveredFeatureId,
12558
- expandedSections = _ref.expandedSections,
12559
- setExpandedSections = _ref.setExpandedSections,
12560
- limitAlertCount = _ref.limitAlertCount,
12561
- showLimitAlert = _ref.showLimitAlert;
12680
+ var _ref2$warnings = _ref2.warnings,
12681
+ warnings = _ref2$warnings === void 0 ? [] : _ref2$warnings,
12682
+ filterHookState = _ref2.filterHookState,
12683
+ _ref2$isLoading = _ref2.isLoading,
12684
+ isLoading = _ref2$isLoading === void 0 ? false : _ref2$isLoading,
12685
+ error = _ref2.error,
12686
+ _ref2$selectedWarning = _ref2.selectedWarningId,
12687
+ selectedWarningId = _ref2$selectedWarning === void 0 ? '' : _ref2$selectedWarning,
12688
+ lastUpdatedTime = _ref2.lastUpdatedTime,
12689
+ _ref2$onSelectWarning = _ref2.onSelectWarning,
12690
+ onSelectWarning = _ref2$onSelectWarning === void 0 ? function () {} : _ref2$onSelectWarning,
12691
+ _ref2$onEditWarning = _ref2.onEditWarning,
12692
+ onEditWarning = _ref2$onEditWarning === void 0 ? function () {} : _ref2$onEditWarning,
12693
+ _ref2$onCreateWarning = _ref2.onCreateWarning,
12694
+ onCreateWarning = _ref2$onCreateWarning === void 0 ? function () {} : _ref2$onCreateWarning,
12695
+ _ref2$onDeleteWarning = _ref2.onDeleteWarning,
12696
+ onDeleteWarning = _ref2$onDeleteWarning === void 0 ? function () {} : _ref2$onDeleteWarning,
12697
+ _ref2$onRefetchWarnin = _ref2.onRefetchWarnings,
12698
+ onRefetchWarnings = _ref2$onRefetchWarnin === void 0 ? function () {} : _ref2$onRefetchWarnin,
12699
+ _ref2$onDeleteReviewW = _ref2.onDeleteReviewWarning,
12700
+ onDeleteReviewWarning = _ref2$onDeleteReviewW === void 0 ? function () {} : _ref2$onDeleteReviewW,
12701
+ _ref2$onExpireWarning = _ref2.onExpireWarning,
12702
+ onExpireWarning = _ref2$onExpireWarning === void 0 ? function () {} : _ref2$onExpireWarning,
12703
+ _ref2$onWithdrawWarni = _ref2.onWithdrawWarning,
12704
+ onWithdrawWarning = _ref2$onWithdrawWarni === void 0 ? function () {} : _ref2$onWithdrawWarni,
12705
+ _ref2$onActionAviatio = _ref2.onActionAviationWarning,
12706
+ onActionAviationWarning = _ref2$onActionAviatio === void 0 ? function () {} : _ref2$onActionAviatio,
12707
+ _ref2$onActionMaritim = _ref2.onActionMaritimeWarning,
12708
+ onActionMaritimeWarning = _ref2$onActionMaritim === void 0 ? function () {} : _ref2$onActionMaritim,
12709
+ hoveredFeatureId = _ref2.hoveredFeatureId,
12710
+ expandedSections = _ref2.expandedSections,
12711
+ setExpandedSections = _ref2.setExpandedSections,
12712
+ limitAlertCount = _ref2.limitAlertCount,
12713
+ showLimitAlert = _ref2.showLimitAlert;
12562
12714
  var updateFilter = filterHookState.updateFilter,
12563
12715
  allSelected = filterHookState.allSelected,
12564
12716
  filterState = filterHookState.filterState,
@@ -12626,27 +12778,34 @@ var PublicWarningList = function PublicWarningList(_ref) {
12626
12778
  return 34;
12627
12779
  };
12628
12780
  var filterRef = React.useRef(null);
12629
- var listRef = React.useRef(null);
12630
- var resetListIndex = function resetListIndex() {
12781
+ var listRef = useListRef(null);
12782
+ var resetListIndex = useCallback(function () {
12631
12783
  if (listRef.current) {
12632
- listRef.current.resetAfterIndex(0, true);
12784
+ var _listRef$current;
12785
+ (_listRef$current = listRef.current) == null || _listRef$current.scrollToRow({
12786
+ index: 0,
12787
+ behavior: 'instant'
12788
+ });
12633
12789
  }
12634
- };
12790
+ }, [listRef]);
12635
12791
  React.useEffect(function () {
12636
12792
  if (listRef.current) {
12637
12793
  resetListIndex();
12638
12794
  }
12639
- }, [warnings]);
12795
+ }, [listRef, resetListIndex, warnings]);
12640
12796
  var filterHeight = useGetFilterHeight(filterRef);
12641
12797
  React.useEffect(function () {
12642
12798
  if (hoveredFeatureId) {
12643
- var _listRef$current;
12799
+ var _listRef$current2;
12644
12800
  var index = items.findIndex(function (item) {
12645
12801
  return item.id === hoveredFeatureId;
12646
12802
  });
12647
- (_listRef$current = listRef.current) == null || _listRef$current.scrollToItem(index, 'smart');
12803
+ (_listRef$current2 = listRef.current) == null || _listRef$current2.scrollToRow({
12804
+ index: index,
12805
+ behavior: 'smooth'
12806
+ });
12648
12807
  }
12649
- }, [hoveredFeatureId, items]);
12808
+ }, [hoveredFeatureId, items, listRef]);
12650
12809
  return jsxs(Fragment, {
12651
12810
  children: [isLoading ? jsx(LinearProgress, {
12652
12811
  color: "secondary",
@@ -12781,57 +12940,29 @@ var PublicWarningList = function PublicWarningList(_ref) {
12781
12940
  height: "calc(100% - " + filterHeight + "px)",
12782
12941
  minHeight: '206px'
12783
12942
  },
12784
- children: jsx(AutoSizer, {
12785
- onResize: resetListIndex,
12786
- children: function children(_ref2) {
12787
- var _ref2$height = _ref2.height,
12788
- height = _ref2$height === void 0 ? 0 : _ref2$height,
12789
- _ref2$width = _ref2.width,
12790
- width = _ref2$width === void 0 ? 0 : _ref2$width;
12791
- return jsx(VariableSizeList, {
12792
- height: height,
12793
- itemCount: items.length,
12794
- itemSize: function itemSize(index) {
12795
- return getItemSize(index, width);
12796
- },
12797
- ref: listRef,
12798
- width: width,
12799
- children: function children(_ref3) {
12800
- var index = _ref3.index,
12801
- style = _ref3.style;
12802
- var warning = items[index];
12803
- var key = "warning-" + warning.status + "-" + index;
12804
- if (warning.totalWarnings !== undefined) {
12805
- var header = warning;
12806
- return jsx(WarningListItemSeperator, {
12807
- isExpanded: expandedSections[warning.status],
12808
- onClick: function onClick() {
12809
- toggleExpand(!expandedSections[header.status], header.status);
12810
- },
12811
- status: header.status,
12812
- style: style,
12813
- timeFilter: timeFilter,
12814
- totalWarnings: header.totalWarnings
12815
- }, key);
12816
- }
12817
- var publicWarning = warning;
12818
- var highlightedItem = hoveredFeatureId === publicWarning.id;
12819
- return jsx(WarningListItem, {
12820
- activeWarningId: selectedWarningId,
12821
- highlightedItem: highlightedItem,
12822
- onActionAviationWarning: onActionAviationWarning,
12823
- onActionMaritimeWarning: onActionMaritimeWarning,
12824
- onDeleteReviewWarning: onDeleteReviewWarning,
12825
- onDeleteWarning: onDeleteWarning,
12826
- onEditWarning: onEditWarning,
12827
- onExpireWarning: onExpireWarning,
12828
- onSelectWarning: onSelectWarning,
12829
- onWithdrawWarning: onWithdrawWarning,
12830
- style: style,
12831
- warning: publicWarning
12832
- }, key);
12833
- }
12834
- });
12943
+ children: jsx(List, {
12944
+ listRef: listRef,
12945
+ rowComponent: RowComponent,
12946
+ rowCount: items.length,
12947
+ rowHeight: function rowHeight(index) {
12948
+ var _listRef$current3;
12949
+ return getItemSize(index, ((_listRef$current3 = listRef.current) == null || (_listRef$current3 = _listRef$current3.element) == null ? void 0 : _listRef$current3.clientWidth) || 0);
12950
+ },
12951
+ rowProps: {
12952
+ items: items,
12953
+ expandedSections: expandedSections,
12954
+ hoveredFeatureId: hoveredFeatureId,
12955
+ selectedWarningId: selectedWarningId,
12956
+ onSelectWarning: onSelectWarning,
12957
+ onEditWarning: onEditWarning,
12958
+ onDeleteWarning: onDeleteWarning,
12959
+ onDeleteReviewWarning: onDeleteReviewWarning,
12960
+ onExpireWarning: onExpireWarning,
12961
+ onWithdrawWarning: onWithdrawWarning,
12962
+ toggleExpand: toggleExpand,
12963
+ timeFilter: timeFilter,
12964
+ onActionAviationWarning: onActionAviationWarning,
12965
+ onActionMaritimeWarning: onActionMaritimeWarning
12835
12966
  }
12836
12967
  })
12837
12968
  }) : null]
@@ -12931,38 +13062,18 @@ var ConfirmDeleteWarningDialog = function ConfirmDeleteWarningDialog(_ref) {
12931
13062
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
12932
13063
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
12933
13064
  * */
12934
- var getPublicWarningsStore = function getPublicWarningsStore(store) {
12935
- if (store != null && store.publicWarnings) {
12936
- return store.publicWarnings;
13065
+ var getWarningsFilters = function getWarningsFilters(store) {
13066
+ if (store != null && store.warningsFilters) {
13067
+ return store.warningsFilters;
12937
13068
  }
12938
13069
  return null;
12939
13070
  };
12940
- var _publicWarningsAdapte = publicWarningsAdapter.getSelectors(function (state) {
12941
- var _state$publicWarnings, _state$publicWarnings2;
12942
- return (_state$publicWarnings = state == null || (_state$publicWarnings2 = state.publicWarnings) == null ? void 0 : _state$publicWarnings2.warnings) != null ? _state$publicWarnings : {
12943
- entities: {},
12944
- ids: []
12945
- };
12946
- }),
12947
- selectAllPublicWarnings = _publicWarningsAdapte.selectAll;
12948
- var isPublicWarningsLoading = createSelector(getPublicWarningsStore, function (store) {
12949
- return (store == null ? void 0 : store.isLoading) || false;
12950
- });
12951
- var getPublicWarningsError = createSelector(getPublicWarningsStore, function (store) {
12952
- return store == null ? void 0 : store.error;
12953
- });
12954
- var getPublicWarningsLastUpdatedTime = createSelector(getPublicWarningsStore, function (store) {
12955
- return store == null ? void 0 : store.lastUpdatedTime;
12956
- });
12957
- var getWarningsFilterState = createSelector(getPublicWarningsStore, function (store) {
12958
- return store == null ? void 0 : store.filterState;
12959
- }, selectorMemoizationOptions);
12960
- var getWarningsFilterById = createSelector(getWarningsFilterState, function (_store, panelId) {
13071
+ var getWarningsFilterById = createSelector(getWarningsFilters, function (_store, panelId) {
12961
13072
  return panelId;
12962
13073
  }, function (filterState, panelId) {
12963
13074
  return panelId && filterState != null && filterState[panelId] ? filterState[panelId] : initialFilters;
12964
13075
  }, selectorMemoizationOptions);
12965
- var getWarningsPresetById = createSelector(getWarningsFilterState, function (_store, panelId) {
13076
+ var getWarningsPresetById = createSelector(getWarningsFilters, function (_store, panelId) {
12966
13077
  return panelId;
12967
13078
  }, function (filterState, panelId) {
12968
13079
  if (!panelId || !(filterState != null && filterState[panelId])) {
@@ -12977,13 +13088,9 @@ var getWarningsPresetById = createSelector(getWarningsFilterState, function (_st
12977
13088
 
12978
13089
  var selectors = /*#__PURE__*/Object.freeze({
12979
13090
  __proto__: null,
12980
- getPublicWarningsError: getPublicWarningsError,
12981
- getPublicWarningsLastUpdatedTime: getPublicWarningsLastUpdatedTime,
12982
- getPublicWarningsStore: getPublicWarningsStore,
12983
13091
  getWarningsFilterById: getWarningsFilterById,
12984
- getWarningsPresetById: getWarningsPresetById,
12985
- isPublicWarningsLoading: isPublicWarningsLoading,
12986
- selectAllPublicWarnings: selectAllPublicWarnings
13092
+ getWarningsFilters: getWarningsFilters,
13093
+ getWarningsPresetById: getWarningsPresetById
12987
13094
  });
12988
13095
 
12989
13096
  /* *
@@ -13472,7 +13579,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
13472
13579
  }
13473
13580
  return _context.abrupt("return");
13474
13581
  case 6:
13475
- dispatch(publicWarningFormActions.openPublicWarningFormDialog(Object.assign({}, warning && {
13582
+ dispatch(warningsFormActions.openPublicWarningFormDialog(Object.assign({}, warning && {
13476
13583
  warning: warning
13477
13584
  }, {
13478
13585
  formState: formAction,
@@ -13907,7 +14014,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
13907
14014
  if (systemUpdate === void 0) {
13908
14015
  systemUpdate = false;
13909
14016
  }
13910
- dispatch(publicWarningActions.setWarningFilters({
14017
+ dispatch(warningsFiltersActions.setWarningFilters({
13911
14018
  filterState: filterState,
13912
14019
  panelId: panelId,
13913
14020
  systemUpdate: systemUpdate
@@ -14079,4 +14186,705 @@ ComponentsLookUpWrapper) {
14079
14186
  }
14080
14187
  };
14081
14188
 
14082
- export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, componentsLookUp, createMockStore, isAlreadyEdited, publicWarningActions, publicWarningFormActions, publicWarningFormListener, publicWarningFormReducer, publicWarningsListener, publicWarningsReducer, selectors as publicWarningsSelectors, useObjectDrawDialogAction, warningFormConfirmationOptions, warningsDrawingsActions, warningsDrawingsReducer, warningsMiddlewares, warningsReducersMap, warningsTranslations };
14189
+ /* *
14190
+ * Licensed under the Apache License, Version 2.0 (the "License");
14191
+ * you may not use this file except in compliance with the License.
14192
+ * You may obtain a copy of the License at
14193
+ *
14194
+ * http://www.apache.org/licenses/LICENSE-2.0
14195
+ *
14196
+ * Unless required by applicable law or agreed to in writing, software
14197
+ * distributed under the License is distributed on an "AS IS" BASIS,
14198
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14199
+ * See the License for the specific language governing permissions and
14200
+ * limitations under the License.
14201
+ *
14202
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14203
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
14204
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
14205
+ * */
14206
+ var draftStripes = function draftStripes(stripeColor, bgColor) {
14207
+ return "repeating-linear-gradient(\n -45deg,\n transparent,\n transparent 8px,\n " + stripeColor + " 8px,\n " + stripeColor + " 9px\n ), " + bgColor;
14208
+ };
14209
+ var TimelineColors = {
14210
+ // Public warnings - Extreme (Red)
14211
+ extreme: {
14212
+ published: {
14213
+ background: LevelColors.extreme.color,
14214
+ border: LevelColors.extreme.borderColor,
14215
+ iconColor: LevelColors.extreme.textColor,
14216
+ letterColor: LevelColors.extreme.textColor
14217
+ },
14218
+ draft: {
14219
+ background: '#F1D0D0',
14220
+ stripeColor: 'rgba(255, 255, 255, 0.5)',
14221
+ border: LevelColors.extreme.borderColor,
14222
+ iconColor: LevelColors.extreme.color,
14223
+ letterColor: LevelColors.extreme.color
14224
+ },
14225
+ expired: {
14226
+ background: '#EFEFEF',
14227
+ border: LevelColors.extreme.borderColor,
14228
+ iconColor: LevelColors.extreme.color,
14229
+ letterColor: LevelColors.extreme.color
14230
+ }
14231
+ },
14232
+ // Public warnings - Severe (Orange)
14233
+ severe: {
14234
+ published: {
14235
+ background: LevelColors.severe.color,
14236
+ border: LevelColors.severe.borderColor,
14237
+ iconColor: 'white',
14238
+ letterColor: 'white'
14239
+ },
14240
+ draft: {
14241
+ background: '#FADDC2',
14242
+ stripeColor: 'rgba(255, 255, 255, 0.5)',
14243
+ border: '#E27000',
14244
+ iconColor: '#9C4D00',
14245
+ letterColor: '#9C4D00'
14246
+ },
14247
+ expired: {
14248
+ background: '#EFEFEF',
14249
+ border: '#E27000',
14250
+ iconColor: '#9C4D00',
14251
+ letterColor: '#9C4D00'
14252
+ }
14253
+ },
14254
+ // Public warnings - Moderate (Yellow)
14255
+ moderate: {
14256
+ published: {
14257
+ background: LevelColors.moderate.color,
14258
+ border: LevelColors.moderate.borderColor,
14259
+ iconColor: '#3A3400',
14260
+ letterColor: '#3A3400'
14261
+ },
14262
+ draft: {
14263
+ background: '#FFFACE',
14264
+ stripeColor: 'rgba(250, 226, 28, 0.5)',
14265
+ // Yellow stripes
14266
+ border: LevelColors.moderate.borderColor,
14267
+ iconColor: '#3A3400',
14268
+ letterColor: '#3A3400'
14269
+ },
14270
+ expired: {
14271
+ background: '#EFEFEF',
14272
+ border: LevelColors.moderate.borderColor,
14273
+ iconColor: '#3A3400',
14274
+ letterColor: '#3A3400'
14275
+ }
14276
+ },
14277
+ // Aviation (SIGMET/AIRMET) - Blue
14278
+ aviation: {
14279
+ published: {
14280
+ background: '#186DFF',
14281
+ border: '#0800B9',
14282
+ iconColor: '#FFFFFF',
14283
+ letterColor: '#FFFFFF'
14284
+ },
14285
+ draft: {
14286
+ background: '#E3EDFF',
14287
+ stripeColor: 'rgba(255, 255, 255, 0.5)',
14288
+ border: '#0800B9',
14289
+ iconColor: '#0800B9',
14290
+ letterColor: '#0800B9'
14291
+ },
14292
+ expired: {
14293
+ background: '#EFEFEF',
14294
+ border: '#0800B9',
14295
+ iconColor: '#186DFF',
14296
+ letterColor: '#186DFF'
14297
+ }
14298
+ },
14299
+ // Default/fallback
14300
+ "default": {
14301
+ published: {
14302
+ background: '#FFFFFF',
14303
+ border: '#AAAAAA',
14304
+ iconColor: '#333333',
14305
+ letterColor: '#333333'
14306
+ },
14307
+ draft: {
14308
+ background: '#FFFFFF',
14309
+ stripeColor: 'rgba(255, 255, 255, 0.5)',
14310
+ border: '#AAAAAA',
14311
+ iconColor: '#333333',
14312
+ letterColor: '#333333'
14313
+ },
14314
+ expired: {
14315
+ background: '#EFEFEF',
14316
+ border: '#AAAAAA',
14317
+ iconColor: '#333333',
14318
+ letterColor: '#333333'
14319
+ }
14320
+ }
14321
+ };
14322
+ var getThemeForLevel = function getThemeForLevel(level, isAviation) {
14323
+ if (isAviation) {
14324
+ return TimelineColors.aviation;
14325
+ }
14326
+ switch (level) {
14327
+ case WarningLevel.extreme:
14328
+ return TimelineColors.extreme;
14329
+ case WarningLevel.severe:
14330
+ return TimelineColors.severe;
14331
+ case WarningLevel.moderate:
14332
+ return TimelineColors.moderate;
14333
+ default:
14334
+ return TimelineColors["default"];
14335
+ }
14336
+ };
14337
+ var getBlockStyle = function getBlockStyle(level, status, isAviation) {
14338
+ var theme = getThemeForLevel(level, isAviation);
14339
+ if (status === PublicWarningStatus.DRAFT || status === PublicWarningStatus.DRAFT_PUBLISHED) {
14340
+ var _theme$draft = theme.draft,
14341
+ stripeColor = _theme$draft.stripeColor,
14342
+ background = _theme$draft.background,
14343
+ border = _theme$draft.border,
14344
+ iconColor = _theme$draft.iconColor,
14345
+ letterColor = _theme$draft.letterColor;
14346
+ return {
14347
+ background: draftStripes(stripeColor, background),
14348
+ border: "1px solid " + border,
14349
+ borderColor: border,
14350
+ iconColor: iconColor,
14351
+ letterColor: letterColor
14352
+ };
14353
+ }
14354
+ if (status === PublicWarningStatus.EXPIRED) {
14355
+ return {
14356
+ background: theme.expired.background,
14357
+ border: "1px solid " + theme.expired.border,
14358
+ borderColor: theme.expired.border,
14359
+ iconColor: theme.expired.iconColor,
14360
+ letterColor: theme.expired.letterColor
14361
+ };
14362
+ }
14363
+ // Published (default)
14364
+ return {
14365
+ background: theme.published.background,
14366
+ border: "1px solid " + theme.published.border,
14367
+ borderColor: theme.published.border,
14368
+ iconColor: theme.published.iconColor,
14369
+ letterColor: theme.published.letterColor
14370
+ };
14371
+ };
14372
+
14373
+ /* *
14374
+ * Licensed under the Apache License, Version 2.0 (the "License");
14375
+ * you may not use this file except in compliance with the License.
14376
+ * You may obtain a copy of the License at
14377
+ *
14378
+ * http://www.apache.org/licenses/LICENSE-2.0
14379
+ *
14380
+ * Unless required by applicable law or agreed to in writing, software
14381
+ * distributed under the License is distributed on an "AS IS" BASIS,
14382
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14383
+ * See the License for the specific language governing permissions and
14384
+ * limitations under the License.
14385
+ *
14386
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14387
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
14388
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
14389
+ * */
14390
+ var EDGE_PADDING = 24;
14391
+ var SIZE_THRESHOLDS = {
14392
+ xxs: 24,
14393
+ xs: 50,
14394
+ sm: 100
14395
+ };
14396
+ var getTimelineX = function getTimelineX(targetTime, timelineStart, timelineEnd, drawableWidth) {
14397
+ var totalTimelineDuration = timelineEnd.getTime() - timelineStart.getTime();
14398
+ if (totalTimelineDuration <= 0) {
14399
+ return 0;
14400
+ }
14401
+ var elapsedMs = targetTime.getTime() - timelineStart.getTime();
14402
+ return EDGE_PADDING + elapsedMs / totalTimelineDuration * drawableWidth;
14403
+ };
14404
+ var getTimeFromX = function getTimeFromX(x, timelineStart, timelineEnd, drawableWidth) {
14405
+ var totalTimelineDuration = timelineEnd.getTime() - timelineStart.getTime();
14406
+ if (drawableWidth <= 0) {
14407
+ return new Date(timelineStart);
14408
+ }
14409
+ var adjustedX = x - EDGE_PADDING;
14410
+ var ratio = adjustedX / drawableWidth;
14411
+ var timeMs = timelineStart.getTime() + ratio * totalTimelineDuration;
14412
+ return new Date(timeMs);
14413
+ };
14414
+ var generateTicks = function generateTicks(timelineStart, timelineEnd) {
14415
+ var ticks = [];
14416
+ var hourInterval = 3;
14417
+ var current = new Date(timelineStart);
14418
+ current.setUTCMinutes(0, 0, 0);
14419
+ if (current < timelineStart) {
14420
+ current.setUTCHours(current.getUTCHours() + 1);
14421
+ }
14422
+ while (current <= timelineEnd) {
14423
+ var hour = current.getUTCHours();
14424
+ if (hour === 0) {
14425
+ ticks.push({
14426
+ time: new Date(current),
14427
+ type: 'day'
14428
+ });
14429
+ } else if (hour % hourInterval === 0) {
14430
+ ticks.push({
14431
+ time: new Date(current),
14432
+ type: 'major'
14433
+ });
14434
+ } else {
14435
+ ticks.push({
14436
+ time: new Date(current),
14437
+ type: 'dashed'
14438
+ });
14439
+ }
14440
+ current.setUTCHours(current.getUTCHours() + 1);
14441
+ }
14442
+ return ticks;
14443
+ };
14444
+ var getTickLineStyle = function getTickLineStyle(tickType) {
14445
+ if (tickType === 'day') {
14446
+ return {
14447
+ width: '2px',
14448
+ borderLeft: '2px solid #ABC3FF'
14449
+ };
14450
+ }
14451
+ if (tickType === 'dashed') {
14452
+ return {
14453
+ width: '1px',
14454
+ borderLeft: '1px dashed #E7ECFA'
14455
+ };
14456
+ }
14457
+ return {
14458
+ width: '1px',
14459
+ borderLeft: '1px solid #90caf9'
14460
+ };
14461
+ };
14462
+ var getBlockSize = function getBlockSize(width) {
14463
+ if (width < SIZE_THRESHOLDS.xxs) {
14464
+ return 'xxs';
14465
+ }
14466
+ if (width < SIZE_THRESHOLDS.xs) {
14467
+ return 'xs';
14468
+ }
14469
+ if (width < SIZE_THRESHOLDS.sm) {
14470
+ return 's';
14471
+ }
14472
+ return 'l';
14473
+ };
14474
+
14475
+ /**
14476
+ * Gets the author/editor from a warning.
14477
+ * For airmet/sigmet warnings, author is in sigmetAirmetDetails.
14478
+ * For public/maritime warnings, editor is on the base warning.
14479
+ */
14480
+ var getWarningAuthor = function getWarningAuthor(warning) {
14481
+ if ('sigmetAirmetDetails' in warning) {
14482
+ var _warning$sigmetAirmet, _warning$sigmetAirmet2;
14483
+ return (_warning$sigmetAirmet = (_warning$sigmetAirmet2 = warning.sigmetAirmetDetails) == null ? void 0 : _warning$sigmetAirmet2.author) != null ? _warning$sigmetAirmet : warning.editor;
14484
+ }
14485
+ return warning.editor;
14486
+ };
14487
+ var formatPeriod = function formatPeriod(from, until) {
14488
+ var ff = new Date(from);
14489
+ var uu = new Date(until);
14490
+ var dateOpts = {
14491
+ day: 'numeric',
14492
+ month: 'short',
14493
+ timeZone: 'UTC'
14494
+ };
14495
+ var timeOpts = {
14496
+ hour: '2-digit',
14497
+ minute: '2-digit',
14498
+ hour12: false,
14499
+ timeZone: 'UTC'
14500
+ };
14501
+ var fDate = ff.toLocaleDateString('en-GB', dateOpts);
14502
+ var uDate = uu.toLocaleDateString('en-GB', dateOpts);
14503
+ var fTime = ff.toLocaleTimeString('en-GB', timeOpts);
14504
+ var uTime = uu.toLocaleTimeString('en-GB', timeOpts);
14505
+ return fDate === uDate ? fDate + " " + fTime + " \u2013 " + uTime + " UTC" : fDate + " " + fTime + " \u2013 " + uDate + " " + uTime + " UTC";
14506
+ };
14507
+ var getTooltipContent = function getTooltipContent(warning, t) {
14508
+ var warningDetail = warning.warningDetail,
14509
+ status = warning.status,
14510
+ type = warning.type;
14511
+ var author = getWarningAuthor(warning);
14512
+ var isAviation = type === 'sigmet' || type === 'airmet';
14513
+ var phenomenonEntry = warningPhenomena.find(function (entry) {
14514
+ return entry.key === warningDetail.phenomenon;
14515
+ });
14516
+ var phenomenonLabel = phenomenonEntry ? t(phenomenonEntry.translationKey) : warningDetail.phenomenon;
14517
+ var line1 = isAviation ? [type.toUpperCase(), phenomenonLabel].filter(Boolean).join(' · ') : [phenomenonLabel, warningDetail.level, warningDetail.probability ? warningDetail.probability + "%" : null].filter(Boolean).join(' · ');
14518
+ var period = warningDetail.validFrom && warningDetail.validUntil ? formatPeriod(warningDetail.validFrom, warningDetail.validUntil) : null;
14519
+ var meta = [author, status].filter(Boolean).join(' · ');
14520
+ return jsxs(Box, {
14521
+ sx: {
14522
+ fontSize: 12,
14523
+ lineHeight: 1.6
14524
+ },
14525
+ children: [jsx(Box, {
14526
+ sx: {
14527
+ fontWeight: 600
14528
+ },
14529
+ children: line1
14530
+ }), period ? jsx(Box, {
14531
+ children: period
14532
+ }) : null, meta ? jsx(Box, {
14533
+ children: meta
14534
+ }) : null]
14535
+ });
14536
+ };
14537
+ var WarningBlock = function WarningBlock(_ref) {
14538
+ var warning = _ref.warning,
14539
+ left = _ref.left,
14540
+ top = _ref.top,
14541
+ width = _ref.width;
14542
+ var _useWarningsTranslati = useWarningsTranslation(),
14543
+ t = _useWarningsTranslati.t;
14544
+ var warningDetail = warning.warningDetail,
14545
+ status = warning.status,
14546
+ type = warning.type;
14547
+ var author = getWarningAuthor(warning);
14548
+ var isAviation = type === 'sigmet' || type === 'airmet';
14549
+ var level = warningDetail.level || null;
14550
+ var letter = level ? t("warning-level-letter-" + level) : '';
14551
+ var _getBlockStyle = getBlockStyle(level, status, isAviation),
14552
+ background = _getBlockStyle.background,
14553
+ border = _getBlockStyle.border,
14554
+ iconColor = _getBlockStyle.iconColor,
14555
+ letterColor = _getBlockStyle.letterColor;
14556
+ var size = getBlockSize(width);
14557
+ var elements = [];
14558
+ if (size === 's' || size === 'l') {
14559
+ elements.push(jsx(Box, {
14560
+ sx: {
14561
+ fontSize: 16,
14562
+ fontWeight: 600,
14563
+ lineHeight: '80%',
14564
+ color: letterColor
14565
+ },
14566
+ children: letter
14567
+ }, "letter"));
14568
+ }
14569
+ if (size !== 'xxs') {
14570
+ elements.push(jsx(Box, {
14571
+ sx: {
14572
+ display: 'flex',
14573
+ alignItems: 'center',
14574
+ justifyContent: 'center',
14575
+ color: iconColor,
14576
+ fontSize: 18
14577
+ },
14578
+ children: getPhenomenaIcon(warningDetail.phenomenon) || null
14579
+ }, "icon"));
14580
+ }
14581
+ if (size === 'l') {
14582
+ elements.push(jsx(Box, {
14583
+ sx: {
14584
+ border: '0.5px solid white',
14585
+ borderRadius: '50%'
14586
+ },
14587
+ children: jsx(WarningAvatar, {
14588
+ editor: author != null ? author : ''
14589
+ })
14590
+ }, "avatar"));
14591
+ }
14592
+ return jsx(Tooltip, {
14593
+ placement: "top",
14594
+ title: getTooltipContent(warning, t),
14595
+ children: jsx(Box, {
14596
+ "data-testid": "warning-block",
14597
+ sx: {
14598
+ position: 'absolute',
14599
+ left: left,
14600
+ top: top,
14601
+ width: width,
14602
+ height: 28,
14603
+ padding: '4px 8px',
14604
+ background: background,
14605
+ border: border,
14606
+ borderRadius: 1,
14607
+ display: 'flex',
14608
+ alignItems: 'center',
14609
+ justifyContent: elements.length === 1 ? 'center' : 'space-between',
14610
+ overflow: 'hidden'
14611
+ },
14612
+ children: elements
14613
+ })
14614
+ });
14615
+ };
14616
+
14617
+ var WARNING_BLOCK_HEIGHT = 34;
14618
+ var DEFAULT_VISIBLE_ROWS = 10;
14619
+ var TIMELINE_BAR_HEIGHT = 40;
14620
+ var PIXELS_PER_HOUR = 30;
14621
+ var MS_PER_HOUR = 60 * 60 * 1000;
14622
+ var MS_PER_DAY = 24 * MS_PER_HOUR;
14623
+ var WarningsTimeline = function WarningsTimeline(_ref) {
14624
+ var warnings = _ref.warnings;
14625
+ var timelineWarnings = React.useMemo(function () {
14626
+ var _warnings$filter;
14627
+ return (_warnings$filter = warnings == null ? void 0 : warnings.filter(function (warning) {
14628
+ return Boolean(warning.warningDetail.validFrom) && Boolean(warning.warningDetail.validUntil);
14629
+ })) != null ? _warnings$filter : [];
14630
+ }, [warnings]);
14631
+ var warningsAreaRef = React.useRef(null);
14632
+ var timeAxisRef = React.useRef(null);
14633
+ var _React$useState = React.useState(0),
14634
+ containerWidth = _React$useState[0],
14635
+ setContainerWidth = _React$useState[1];
14636
+ React.useEffect(function () {
14637
+ if (!warningsAreaRef.current) {
14638
+ return undefined;
14639
+ }
14640
+ var resizeObserver = new ResizeObserver(function (entries) {
14641
+ for (var _iterator = _createForOfIteratorHelperLoose(entries), _step; !(_step = _iterator()).done;) {
14642
+ var entry = _step.value;
14643
+ setContainerWidth(entry.contentRect.width);
14644
+ }
14645
+ });
14646
+ resizeObserver.observe(warningsAreaRef.current);
14647
+ return function () {
14648
+ return resizeObserver.disconnect();
14649
+ };
14650
+ }, []);
14651
+ var handleWarningsScroll = React.useCallback(function () {
14652
+ if (warningsAreaRef.current && timeAxisRef.current) {
14653
+ timeAxisRef.current.scrollLeft = warningsAreaRef.current.scrollLeft;
14654
+ }
14655
+ }, []);
14656
+ var _React$useState2 = React.useState(function () {
14657
+ return new Date();
14658
+ }),
14659
+ now = _React$useState2[0],
14660
+ setNow = _React$useState2[1];
14661
+ React.useEffect(function () {
14662
+ var id = setInterval(function () {
14663
+ return setNow(new Date());
14664
+ }, MS_PER_HOUR / 60);
14665
+ return function () {
14666
+ return clearInterval(id);
14667
+ };
14668
+ }, []);
14669
+ var _React$useMemo = React.useMemo(function () {
14670
+ var snapshotNow = new Date();
14671
+ var defaultStart = new Date(snapshotNow.getTime() - MS_PER_DAY);
14672
+ var defaultEnd = new Date(snapshotNow.getTime() + 3 * MS_PER_DAY);
14673
+ if (!timelineWarnings.length) {
14674
+ return {
14675
+ timelineStart: defaultStart,
14676
+ timelineEnd: defaultEnd
14677
+ };
14678
+ }
14679
+ var warningMin = Number.POSITIVE_INFINITY;
14680
+ var warningMax = Number.NEGATIVE_INFINITY;
14681
+ for (var _iterator2 = _createForOfIteratorHelperLoose(timelineWarnings), _step2; !(_step2 = _iterator2()).done;) {
14682
+ var warning = _step2.value;
14683
+ var _warning$warningDetai = warning.warningDetail,
14684
+ validFrom = _warning$warningDetai.validFrom,
14685
+ validUntil = _warning$warningDetai.validUntil;
14686
+ if (validFrom) {
14687
+ warningMin = Math.min(warningMin, new Date(validFrom).getTime());
14688
+ }
14689
+ if (validUntil) {
14690
+ warningMax = Math.max(warningMax, new Date(validUntil).getTime());
14691
+ }
14692
+ }
14693
+ // Floor earliest warning to previous 3-hour boundary, then subtract 3h to get some 'air'
14694
+ var warningStartDate = new Date(warningMin);
14695
+ warningStartDate.setUTCMinutes(0, 0, 0);
14696
+ var flooredHour = warningStartDate.getUTCHours() - warningStartDate.getUTCHours() % 3 - 3;
14697
+ warningStartDate.setUTCHours(flooredHour);
14698
+ var minTime = Math.min(defaultStart.getTime(), warningStartDate.getTime());
14699
+ // End is bound by the last warning
14700
+ return {
14701
+ timelineStart: new Date(minTime),
14702
+ timelineEnd: new Date(warningMax)
14703
+ };
14704
+ }, [timelineWarnings]),
14705
+ timelineStart = _React$useMemo.timelineStart,
14706
+ timelineEnd = _React$useMemo.timelineEnd;
14707
+ var totalMs = timelineEnd.getTime() - timelineStart.getTime();
14708
+ var totalHours = totalMs / MS_PER_HOUR;
14709
+ var contentWidth = Math.max(containerWidth, totalHours * PIXELS_PER_HOUR);
14710
+ var fullWidth = contentWidth + 2 * EDGE_PADDING;
14711
+ var ticks = generateTicks(timelineStart, timelineEnd);
14712
+ var _React$useState3 = React.useState(null),
14713
+ hoverTimelineX = _React$useState3[0],
14714
+ setHoverTimelineX = _React$useState3[1];
14715
+ var hoverTime = hoverTimelineX !== null ? getTimeFromX(hoverTimelineX, timelineStart, timelineEnd, contentWidth).toLocaleString('en-GB', {
14716
+ day: 'numeric',
14717
+ month: 'short',
14718
+ hour: '2-digit',
14719
+ minute: '2-digit',
14720
+ timeZone: 'UTC'
14721
+ }) + " UTC" : '';
14722
+ var handleTimeAxisMouseMove = React.useCallback(function (event) {
14723
+ var _timeAxisRef$current$, _timeAxisRef$current;
14724
+ var rect = event.currentTarget.getBoundingClientRect();
14725
+ // Only show tooltip when mouse is below the top 10px (away from scrollbar)
14726
+ if (event.clientY - rect.top < 10) {
14727
+ setHoverTimelineX(null);
14728
+ return;
14729
+ }
14730
+ setHoverTimelineX(event.clientX - rect.left + ((_timeAxisRef$current$ = (_timeAxisRef$current = timeAxisRef.current) == null ? void 0 : _timeAxisRef$current.scrollLeft) != null ? _timeAxisRef$current$ : 0));
14731
+ }, []);
14732
+ var handleTimeAxisMouseLeave = React.useCallback(function () {
14733
+ setHoverTimelineX(null);
14734
+ }, []);
14735
+ var currentTimeX = getTimelineX(now, timelineStart, timelineEnd, contentWidth);
14736
+ var showCurrentTime = now.getTime() >= timelineStart.getTime() && now.getTime() <= timelineEnd.getTime();
14737
+ return jsxs(Box$1, {
14738
+ sx: {
14739
+ width: '100%',
14740
+ height: '100%',
14741
+ display: 'flex',
14742
+ flexDirection: 'column'
14743
+ },
14744
+ children: [jsx(Box$1, {
14745
+ onScroll: handleWarningsScroll,
14746
+ ref: warningsAreaRef,
14747
+ sx: {
14748
+ flex: 1,
14749
+ overflow: 'auto',
14750
+ minHeight: 0
14751
+ },
14752
+ children: jsx(Box$1, {
14753
+ sx: {
14754
+ width: fullWidth,
14755
+ position: 'relative'
14756
+ },
14757
+ children: jsxs(Box$1, {
14758
+ sx: {
14759
+ position: 'relative',
14760
+ height: Math.max(timelineWarnings.length * WARNING_BLOCK_HEIGHT, DEFAULT_VISIBLE_ROWS * WARNING_BLOCK_HEIGHT)
14761
+ },
14762
+ children: [ticks.map(function (tick) {
14763
+ var x = getTimelineX(tick.time, timelineStart, timelineEnd, contentWidth);
14764
+ var lineStyle = getTickLineStyle(tick.type);
14765
+ return jsx(Box$1, {
14766
+ sx: Object.assign({
14767
+ position: 'absolute',
14768
+ left: x,
14769
+ top: 0,
14770
+ bottom: 0
14771
+ }, lineStyle)
14772
+ }, tick.time.toISOString());
14773
+ }), showCurrentTime ? jsx(Box$1, {
14774
+ sx: {
14775
+ position: 'absolute',
14776
+ left: currentTimeX,
14777
+ top: 0,
14778
+ bottom: 0,
14779
+ width: '3px',
14780
+ bgcolor: '#0051DD',
14781
+ zIndex: 10
14782
+ }
14783
+ }) : null, timelineWarnings.map(function (warning, index) {
14784
+ var warningDetail = warning.warningDetail;
14785
+ var validFrom = new Date(warningDetail.validFrom);
14786
+ var validUntil = new Date(warningDetail.validUntil);
14787
+ var left = getTimelineX(validFrom, timelineStart, timelineEnd, contentWidth);
14788
+ var right = getTimelineX(validUntil, timelineStart, timelineEnd, contentWidth);
14789
+ var blockWidth = Math.max(0, right - left);
14790
+ return jsx(WarningBlock, {
14791
+ left: left,
14792
+ top: index * WARNING_BLOCK_HEIGHT,
14793
+ warning: warning,
14794
+ width: blockWidth
14795
+ }, warning.id);
14796
+ })]
14797
+ })
14798
+ })
14799
+ }), jsx(Tooltip$1, {
14800
+ enterDelay: 150,
14801
+ followCursor: true,
14802
+ leaveDelay: 0,
14803
+ placement: "top",
14804
+ slotProps: {
14805
+ popper: {
14806
+ sx: {
14807
+ pointerEvents: 'none'
14808
+ }
14809
+ }
14810
+ },
14811
+ title: hoverTime,
14812
+ children: jsx(Box$1, {
14813
+ onMouseLeave: handleTimeAxisMouseLeave,
14814
+ onMouseMove: handleTimeAxisMouseMove,
14815
+ ref: timeAxisRef,
14816
+ sx: {
14817
+ height: TIMELINE_BAR_HEIGHT,
14818
+ overflow: 'hidden',
14819
+ borderTop: '1px solid #ccc'
14820
+ },
14821
+ children: jsx(Box$1, {
14822
+ sx: {
14823
+ width: fullWidth,
14824
+ position: 'relative',
14825
+ height: '100%'
14826
+ },
14827
+ children: ticks.filter(function (tick) {
14828
+ return tick.type === 'day' || tick.time.getUTCHours() % 3 === 0;
14829
+ }).map(function (tick) {
14830
+ var x = getTimelineX(tick.time, timelineStart, timelineEnd, contentWidth);
14831
+ var hour = tick.time.getUTCHours();
14832
+ var hourLabel = String(hour).padStart(2, '0') + ":00";
14833
+ var isDayBoundary = tick.type === 'day';
14834
+ var dateStr = tick.time.toLocaleDateString('en-GB', {
14835
+ day: 'numeric',
14836
+ month: 'short',
14837
+ timeZone: 'UTC'
14838
+ });
14839
+ return jsxs(Box$1, {
14840
+ sx: {
14841
+ position: 'absolute',
14842
+ left: x,
14843
+ top: 2,
14844
+ transform: 'translateX(-50%)',
14845
+ textAlign: 'center',
14846
+ lineHeight: 1.1
14847
+ },
14848
+ children: [jsx(Box$1, {
14849
+ component: "span",
14850
+ sx: {
14851
+ fontSize: isDayBoundary ? 14 : 12,
14852
+ fontWeight: isDayBoundary ? 'bold' : 'normal',
14853
+ color: isDayBoundary ? '#333' : '#666'
14854
+ },
14855
+ children: hourLabel
14856
+ }), isDayBoundary ? jsx(Box$1, {
14857
+ sx: {
14858
+ fontSize: 12,
14859
+ color: '#666'
14860
+ },
14861
+ children: dateStr
14862
+ }) : null]
14863
+ }, "label-" + tick.time.toISOString());
14864
+ })
14865
+ })
14866
+ })
14867
+ })]
14868
+ });
14869
+ };
14870
+
14871
+ var WarningsTimelineConnect = function WarningsTimelineConnect(_ref) {
14872
+ _ref.panelId;
14873
+ var _useWarningsTranslati = useWarningsTranslation(),
14874
+ t = _useWarningsTranslati.t;
14875
+ var _useAuthenticationCon = useAuthenticationContext$1(),
14876
+ isLoggedIn = _useAuthenticationCon.isLoggedIn;
14877
+ var warnings = [];
14878
+ if (!isLoggedIn) {
14879
+ return jsx(AlertBanner, {
14880
+ dataTestId: "warnings-timeline-auth-error",
14881
+ severity: "error",
14882
+ title: t('error-auth-login')
14883
+ });
14884
+ }
14885
+ return jsx(WarningsTimeline, {
14886
+ warnings: warnings
14887
+ });
14888
+ };
14889
+
14890
+ export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsTimeline, WarningsTimelineConnect, componentsLookUp, createMockStore, isAlreadyEdited, selectors as publicWarningsSelectors, useObjectDrawDialogAction, warningFormConfirmationOptions, warningsDrawingsActions, warningsDrawingsReducer, warningsFiltersActions, warningsFiltersReducer, warningsFormActions, warningsFormListener, warningsFormReducer, warningsMiddlewares, warningsReducersMap, warningsTranslations };