@opengeoweb/warnings 10.1.0 → 11.0.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 (56) hide show
  1. package/index.esm.js +1599 -892
  2. package/package.json +1 -1
  3. package/src/index.d.ts +0 -2
  4. package/src/lib/api/api-utils.d.ts +10 -0
  5. package/src/lib/{aviation-api → api/aviation-api}/hooks.d.ts +1 -1
  6. package/src/lib/api/warning-api/api.d.ts +4 -0
  7. package/src/lib/api/warning-api/hooks.d.ts +15 -0
  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 +4 -4
  11. package/src/lib/components/FilterList/filter-utils.d.ts +6 -4
  12. package/src/lib/components/ObjectManager/ObjectManager.d.ts +1 -1
  13. package/src/lib/components/ObjectManager/Objects.d.ts +1 -1
  14. package/src/lib/components/Providers/Providers.d.ts +3 -0
  15. package/src/lib/components/PublicWarningList/PublicWarningList.d.ts +5 -4
  16. package/src/lib/components/PublicWarningList/PublicWarningListConnect.stories.d.ts +37 -4
  17. package/src/lib/components/PublicWarningList/WarningListItem.d.ts +3 -3
  18. package/src/lib/components/PublicWarningList/WarningListItemMenu.d.ts +9 -7
  19. package/src/lib/components/PublicWarningsForm/PublicWarningsForm.d.ts +1 -1
  20. package/src/lib/components/PublicWarningsForm/PublicWarningsFormConnect.d.ts +2 -0
  21. package/src/lib/components/WarningsModuleProvider/WarningsModuleProvider.spec.d.ts +1 -0
  22. package/src/lib/store/index.d.ts +2 -1
  23. package/src/lib/store/publicWarningForm/index.d.ts +1 -1
  24. package/src/lib/store/publicWarningForm/reducer.d.ts +28 -33
  25. package/src/lib/store/publicWarningForm/selectors.d.ts +12 -17
  26. package/src/lib/store/publicWarningForm/types.d.ts +18 -6
  27. package/src/lib/store/publicWarnings/index.d.ts +1 -1
  28. package/src/lib/store/publicWarnings/reducer.d.ts +7 -18
  29. package/src/lib/store/publicWarnings/selectors.d.ts +1 -1
  30. package/src/lib/store/publicWarnings/types.d.ts +2 -2
  31. package/src/lib/store/store.d.ts +15 -0
  32. package/src/lib/store/types.d.ts +3 -3
  33. package/src/lib/store/warningsDrawings/index.d.ts +2 -0
  34. package/src/lib/store/warningsDrawings/listener.d.ts +2 -0
  35. package/src/lib/store/{drawings → warningsDrawings}/reducer.d.ts +1 -2
  36. package/src/lib/store/warningsDrawings/reducer.spec.d.ts +1 -0
  37. package/src/lib/store/warningsDrawings/selectors.spec.d.ts +1 -0
  38. package/src/lib/storybookUtils/testUtils.d.ts +2 -0
  39. package/src/lib/utils/api.d.ts +4 -8
  40. package/src/lib/utils/fakeApi/index.d.ts +10 -5
  41. package/src/lib/utils/fakeApi.d.ts +1 -1
  42. package/src/lib/utils/sig-airmet-util.d.ts +14 -7
  43. package/src/lib/utils/sig-airmet-util.spec.d.ts +1 -0
  44. package/src/lib/utils/warningUtils.d.ts +4 -4
  45. package/src/lib/store/config.d.ts +0 -9
  46. package/src/lib/store/drawings/index.d.ts +0 -2
  47. package/src/lib/store/drawings/listener.d.ts +0 -2
  48. package/src/lib/utils/testUtils.d.ts +0 -4
  49. /package/src/lib/{aviation-api → api/aviation-api}/api.d.ts +0 -0
  50. /package/src/lib/{aviation-api → api/aviation-api}/fakeApi.d.ts +0 -0
  51. /package/src/lib/{store/drawings/reducer.spec.d.ts → components/PublicWarningList/PublicWarningListConnect.confirmation.integration.spec.d.ts} +0 -0
  52. /package/src/lib/{store/drawings/selectors.spec.d.ts → components/PublicWarningList/PublicWarningListConnect.draft.integration.spec.d.ts} +0 -0
  53. /package/src/lib/{store/publicWarnings/reducer.spec.d.ts → components/PublicWarningList/WarningListItemMenu.spec.d.ts} +0 -0
  54. /package/src/lib/store/{drawings → warningsDrawings}/selectors.d.ts +0 -0
  55. /package/src/lib/store/{drawings → warningsDrawings}/types.d.ts +0 -0
  56. /package/src/lib/store/{drawings → warningsDrawings}/utils.d.ts +0 -0
package/index.esm.js CHANGED
@@ -1,27 +1,28 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
- import { Polygons, Share, ExitDomain, Edit, Delete, DrawPolygon, Visibility, Add, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, breakpoints, Options, Close, ChevronDown, ChevronUp, Copy, Success, Expire, Remove, ArrowUpCompact, ArrowDownCompact } from '@opengeoweb/theme';
4
- import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawtoolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, useSetupDialog, selectorMemoizationOptions, useUpdateSharedData } from '@opengeoweb/store';
3
+ import { Polygons, Share, ExitDomain, Edit, Delete, DrawPolygon, Visibility, Add, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, breakpoints, Options, Close, ChevronDown, ChevronUp, Copy, Update, Success, Expire, Remove, ArrowUpCompact, ArrowDownCompact } from '@opengeoweb/theme';
4
+ import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, useSetupDialog, selectorMemoizationOptions, useUpdateSharedData, layersListener, drawingToolListener, layerReducer, uiReducer, drawingToolReducer } from '@opengeoweb/store';
5
5
  import { defaultPolygon, emptyGeoJSON, MapControlButton, getIcon, rewindGeometry, getGeoJSONPropertyValue, currentlySupportedDrawModes, defaultLayers, MapView, MapViewLayer, getFeatureExtent } from '@opengeoweb/webmap-react';
6
- import { SHARED_NAMESPACE, useConfirmationDialog, ToggleMenu, dateUtils, calculateStartSize, ToolContainerDraggable, AlertBanner, ConfirmationDialog, getAxiosErrorMessage, usePrevious, CustomIconButton, CustomTooltip, Avatar, getInitials, SwitchButton, CustomToggleButton, Filter, FilterChip, FilterOption, StatusTag, LastUpdateTime, ErrorBoundary, pollingIntervalTimeout, isAxiosError as isAxiosError$1 } from '@opengeoweb/shared';
7
- import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit';
6
+ import { SHARED_NAMESPACE, useConfirmationDialog, ToggleMenu, dateUtils, calculateStartSize, ToolContainerDraggable, AlertBanner, ConfirmationDialog, getAxiosErrorMessage, usePrevious, CustomIconButton, CustomTooltip, Avatar, getInitials, SwitchButton, CustomToggleButton, Filter, FilterChip, FilterOption, StatusTag, LastUpdateTime, ErrorBoundary, isAxiosError as isAxiosError$1 } from '@opengeoweb/shared';
7
+ import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf, combineReducers, configureStore } from '@reduxjs/toolkit';
8
8
  import 'i18next';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import '@opengeoweb/core';
11
11
  import { FORM_FIELDS_NAMESPACE, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormSelect, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, useDraftFormHelpers, errorMessages, ReactHookFormDateTime, isXHoursBefore, isXHoursAfter, isEmpty } from '@opengeoweb/form-fields';
12
12
  import { LayerType, generateMapId, getWMJSMapById, getGeoCoordFromLatLong, WMBBOX } from '@opengeoweb/webmap';
13
- import { SigmetForm, isInstanceOfCancelSigmet, AirmetForm, isInstanceOfCancelAirmet, getProductFormMode } from '@opengeoweb/sigmet-airmet';
14
- import { snackbarActions, snackbarTypes } from '@opengeoweb/snackbar';
13
+ import { airmetConfig, sigmetConfig, SigmetForm, isInstanceOfCancelSigmet, AirmetForm, isInstanceOfCancelAirmet, getDefaultValidUntilValue, getProductFormMode, ProductAction } from '@opengeoweb/sigmet-airmet';
14
+ import { snackbarActions, snackbarTypes, snackbarListener, snackbarReducer } from '@opengeoweb/snackbar';
15
15
  import * as React from 'react';
16
16
  import React__default, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
17
17
  import { styled, Box, Typography, ListItem, Grid2, Paper, ListItemButton, Stack, LinearProgress, Button, FormHelperText, MenuItem, Tabs, Tab, Card, CardContent, CircularProgress, Menu, DialogTitle, DialogContent, Switch, ListItemText } from '@mui/material';
18
18
  import { VariableSizeList } from 'react-window';
19
19
  import AutoSizer from 'react-virtualized-auto-sizer';
20
- import { getApi, createApiInstance, createNonAuthApiInstance, createFakeApiInstance, ApiProvider, getHeaders, useAuthQuery, useAuthenticationContext, ProductStatus } from '@opengeoweb/api';
20
+ import { getApi, createApiInstance, createNonAuthApiInstance, createFakeApiInstance, ApiProvider, AirmetPhenomena, SigmetPhenomena, getHeaders, handleResponse, useAuthQuery, useAuthenticationContext, ProductStatus, optimisticUpdate } from '@opengeoweb/api';
21
+ import { rest } from 'msw';
22
+ import { concat, isEqual, cloneDeep, clamp, groupBy, pick, assign } from 'lodash';
21
23
  import { useFormContext } from 'react-hook-form';
22
- import { isEqual, cloneDeep, clamp, groupBy, assign, pick } from 'lodash';
23
24
  import { getConfig, useAuthenticationContext as useAuthenticationContext$1 } from '@opengeoweb/authentication';
24
- import { useQueryClient } from '@tanstack/react-query';
25
+ import { useQueryClient, useMutation } from '@tanstack/react-query';
25
26
  import { isAxiosError } from 'axios';
26
27
 
27
28
  var en = {
@@ -199,7 +200,8 @@ var en = {
199
200
  "warning-dialog-withdraw-title": "Withdraw warning",
200
201
  "warning-dialog-withdraw-confirm": "Withdraw",
201
202
  "warning-dialog-withdraw-description": "Are you sure you want to withdraw this warning?",
202
- "tac-missing-data": "Missing data: no TAC can be generated"
203
+ "tac-missing-data": "Missing data: no TAC can be generated",
204
+ "warning-list-button-renew": "Renew"
203
205
  };
204
206
  var nl = {
205
207
  "drawing-tool-form-tools": "Gereedschap",
@@ -337,7 +339,8 @@ var nl = {
337
339
  "warning-domain-maritime": "Maritiem",
338
340
  "warning-domain-public": "Publiek",
339
341
  "error-title-retry": "Probeer opnieuw",
340
- "tac-missing-data": "Ontbrekende gegevens: er kan geen TAC worden gegenereerd"
342
+ "tac-missing-data": "Ontbrekende gegevens: er kan geen TAC worden gegenereerd",
343
+ "warning-list-button-renew": "Hernieuwen"
341
344
  };
342
345
  var fi = {
343
346
  "drawing-tool-form-tools": "Työkalut",
@@ -475,7 +478,8 @@ var fi = {
475
478
  "warning-domain-maritime": "ei käännetty",
476
479
  "warning-domain-public": "ei käännetty",
477
480
  "error-title-retry": "Yritä uudelleen",
478
- "tac-missing-data": "Tarvittavia tietoja puuttu, TAC:ia ei voida generoida"
481
+ "tac-missing-data": "Tarvittavia tietoja puuttu, TAC:ia ei voida generoida",
482
+ "warning-list-button-renew": "Renew"
479
483
  };
480
484
  var no = {
481
485
  "drawing-tool-form-tools": "Verktøy",
@@ -613,7 +617,8 @@ var no = {
613
617
  "warning-domain-maritime": "ikke oversatt",
614
618
  "warning-domain-public": "ikke oversatt",
615
619
  "error-title-retry": "Prøv igjen",
616
- "tac-missing-data": "Mangler data: ingen TAC kan genereres"
620
+ "tac-missing-data": "Mangler data: ingen TAC kan genereres",
621
+ "warning-list-button-renew": "Renew"
617
622
  };
618
623
  var warningsTranslations = {
619
624
  en: en,
@@ -1067,8 +1072,8 @@ var slice$2 = createSlice({
1067
1072
  });
1068
1073
  }
1069
1074
  });
1070
- var reducer$2 = slice$2.reducer;
1071
- var drawActions = slice$2.actions;
1075
+ var warningsDrawingsReducer = slice$2.reducer,
1076
+ warningsDrawingsActions = slice$2.actions;
1072
1077
 
1073
1078
  /* *
1074
1079
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -1139,7 +1144,7 @@ var useCloseDrawDialog = function useCloseDrawDialog(_ref) {
1139
1144
  var dispatch = useDispatch();
1140
1145
  var drawLayerId = getSingularDrawtoolDrawLayerId(mapId);
1141
1146
  var drawDialogActiveDrawModeId = useSelector(function (store) {
1142
- return drawtoolSelectors.getActiveDrawModeId(store, drawingDialogType);
1147
+ return drawingToolSelectors.getActiveDrawModeId(store, drawingDialogType);
1143
1148
  });
1144
1149
  var featureLayerContainsGeoJSON = useSelector(function (store) {
1145
1150
  return layerSelectors.getHasFeatureLayerGeoJSON(store, drawLayerId);
@@ -1199,7 +1204,7 @@ var useCloseDrawDialog = function useCloseDrawDialog(_ref) {
1199
1204
  source: source
1200
1205
  }));
1201
1206
  // reset all drawings fields
1202
- dispatch(drawActions.setDrawValues({
1207
+ dispatch(warningsDrawingsActions.setDrawValues({
1203
1208
  drawingInstanceId: drawingDialogType,
1204
1209
  objectName: '',
1205
1210
  id: ''
@@ -1246,7 +1251,7 @@ var useCloseObjectDialog = function useCloseObjectDialog(_ref3) {
1246
1251
  }
1247
1252
  // reset active object
1248
1253
  if (shouldReset) {
1249
- dispatch(drawActions.setDrawValues({
1254
+ dispatch(warningsDrawingsActions.setDrawValues({
1250
1255
  drawingInstanceId: drawingDialogType,
1251
1256
  objectName: '',
1252
1257
  id: ''
@@ -1305,7 +1310,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1305
1310
  drawDialogLayerHasGeoJSON = _useDialogOptions.hasGeoJSON,
1306
1311
  drawDialogLayerId = _useDialogOptions.dialogLayerId;
1307
1312
  var drawDialogActiveDrawModeId = useSelector(function (store) {
1308
- return drawtoolSelectors.getActiveDrawModeId(store, drawingDialogType);
1313
+ return drawingToolSelectors.getActiveDrawModeId(store, drawingDialogType);
1309
1314
  });
1310
1315
  var isFormDirty = useSelector(function (store) {
1311
1316
  return getWarningFormDirty(store, drawingDialogType);
@@ -1952,10 +1957,6 @@ var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
1952
1957
  getAreaKeywords: function getAreaKeywords() {
1953
1958
  return axiosInstance.get("/area-keywords");
1954
1959
  },
1955
- // warnings
1956
- getWarnings: function getWarnings() {
1957
- return axiosInstance.get('/warnings');
1958
- },
1959
1960
  saveWarningAs: function saveWarningAs(data) {
1960
1961
  return axiosInstance.post("/warnings/", data).then(function (response) {
1961
1962
  var headerLocation = response == null ? void 0 : response.request.getResponseHeader('Location');
@@ -1967,9 +1968,6 @@ var getApiRoutes$1 = function getApiRoutes(axiosInstance) {
1967
1968
  },
1968
1969
  deleteWarning: function deleteWarning(warningId) {
1969
1970
  return axiosInstance.post("/warnings/" + warningId + "?delete=true");
1970
- },
1971
- toggleEditorWarning: function toggleEditorWarning(warningId, isEditor) {
1972
- return axiosInstance.post("/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false'));
1973
1971
  }
1974
1972
  };
1975
1973
  };
@@ -2100,84 +2098,22 @@ var publicWarningDialogType = uiTypes.DialogTypes.PublicWarnings;
2100
2098
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
2101
2099
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2102
2100
  * */
2103
- var publicWarningsAdapter = createEntityAdapter({
2104
- selectId: function selectId(warning) {
2105
- return warning.id;
2106
- }
2107
- });
2108
- var initialState$1 = {
2109
- warnings: publicWarningsAdapter.getInitialState(),
2110
- isLoading: true,
2111
- lastUpdatedTime: '',
2112
- filterState: {}
2113
- };
2101
+ var TAKEOVER_MESSAGE = 'You are no longer the editor of this warning';
2102
+ var initialState$1 = {};
2114
2103
  var slice$1 = createSlice({
2115
2104
  initialState: initialState$1,
2116
- name: 'publicWarnings',
2117
- reducers: {
2118
- fetchWarnings: function fetchWarnings(draft) {
2119
- draft.isLoading = true;
2120
- delete draft.error;
2121
- },
2122
- fetchWarningsSuccess: function fetchWarningsSuccess(draft, action) {
2123
- var _action$payload = action.payload,
2124
- warnings = _action$payload.warnings,
2125
- lastUpdatedTime = _action$payload.lastUpdatedTime;
2126
- draft.isLoading = false;
2127
- draft.lastUpdatedTime = lastUpdatedTime;
2128
- publicWarningsAdapter.setAll(draft.warnings, warnings);
2129
- },
2130
- fetchWarningsError: function fetchWarningsError(draft, action) {
2131
- var error = action.payload.error;
2132
- draft.isLoading = false;
2133
- draft.error = error;
2134
- },
2135
- setWarningFilters: function setWarningFilters(draft, action) {
2136
- var _action$payload2 = action.payload,
2137
- filterState = _action$payload2.filterState,
2138
- panelId = _action$payload2.panelId;
2139
- if (panelId) {
2140
- draft.filterState[panelId] = filterState;
2141
- }
2142
- }
2143
- }
2144
- });
2145
- var reducer$1 = slice$1.reducer;
2146
- var publicWarningActions = slice$1.actions;
2147
-
2148
- /* *
2149
- * Licensed under the Apache License, Version 2.0 (the "License");
2150
- * you may not use this file except in compliance with the License.
2151
- * You may obtain a copy of the License at
2152
- *
2153
- * http://www.apache.org/licenses/LICENSE-2.0
2154
- *
2155
- * Unless required by applicable law or agreed to in writing, software
2156
- * distributed under the License is distributed on an "AS IS" BASIS,
2157
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2158
- * See the License for the specific language governing permissions and
2159
- * limitations under the License.
2160
- *
2161
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2162
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
2163
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
2164
- * */
2165
- var TAKEOVER_MESSAGE = 'You are no longer the editor of this warning';
2166
- var initialState = {};
2167
- var slice = createSlice({
2168
- initialState: initialState,
2169
2105
  name: 'publicWarningForm',
2170
2106
  reducers: {
2171
2107
  setFormValues: function setFormValues(draft, action) {
2172
2108
  var _action$payload = action.payload,
2173
2109
  object = _action$payload.object,
2174
- publicWarning = _action$payload.publicWarning,
2110
+ warning = _action$payload.warning,
2175
2111
  formState = _action$payload.formState;
2176
2112
  if (object) {
2177
2113
  draft.object = object;
2178
2114
  }
2179
- if (publicWarning) {
2180
- draft.publicWarning = publicWarning;
2115
+ if (warning) {
2116
+ draft.warning = warning;
2181
2117
  }
2182
2118
  if (formState !== undefined) {
2183
2119
  draft.formState = formState;
@@ -2186,62 +2122,50 @@ var slice = createSlice({
2186
2122
  addArea: function addArea(draft, action) {
2187
2123
  var area = action.payload.area;
2188
2124
  // only support 1 area (for now)
2189
- if (draft.publicWarning) {
2190
- var areaWithPreservedUUID = Object.assign({}, draft.publicWarning.warningDetail.areas.at(0), area);
2191
- draft.publicWarning.warningDetail.areas = [areaWithPreservedUUID];
2125
+ if (draft.warning) {
2126
+ var _draft$warning$warnin;
2127
+ var areaWithPreservedUUID = Object.assign({}, (_draft$warning$warnin = draft.warning.warningDetail.areas) == null ? void 0 : _draft$warning$warnin.at(0), area);
2128
+ draft.warning.warningDetail.areas = [areaWithPreservedUUID];
2192
2129
  } else {
2193
2130
  var newWarning = {
2194
2131
  warningDetail: {
2195
2132
  areas: [area]
2196
2133
  }
2197
2134
  };
2198
- draft.publicWarning = newWarning;
2135
+ draft.warning = newWarning;
2199
2136
  }
2200
2137
  },
2201
2138
  removeArea: function removeArea(draft, action) {
2202
2139
  var area = action.payload.area;
2203
- if (draft.publicWarning) {
2204
- var removeAreas = draft.publicWarning.warningDetail.areas.filter(function (existingArea) {
2140
+ if (draft.warning) {
2141
+ var _draft$warning$warnin2;
2142
+ var removeAreas = (_draft$warning$warnin2 = draft.warning.warningDetail.areas) == null ? void 0 : _draft$warning$warnin2.filter(function (existingArea) {
2205
2143
  return existingArea.objectName !== area.objectName;
2206
2144
  });
2207
- draft.publicWarning.warningDetail.areas = removeAreas;
2145
+ draft.warning.warningDetail.areas = removeAreas;
2208
2146
  }
2209
2147
  },
2210
2148
  removeAllAreas: function removeAllAreas(draft) {
2211
- if (draft.publicWarning) {
2212
- draft.publicWarning.warningDetail.areas = [];
2149
+ if (draft.warning) {
2150
+ draft.warning.warningDetail.areas = [];
2213
2151
  }
2214
2152
  },
2215
2153
  openPublicWarningFormDialog: function openPublicWarningFormDialog(draft, action) {
2216
2154
  var _action$payload2 = action.payload,
2217
2155
  object = _action$payload2.object,
2218
- publicWarning = _action$payload2.publicWarning,
2156
+ warning = _action$payload2.warning,
2219
2157
  _action$payload2$form = _action$payload2.formState,
2220
2158
  formState = _action$payload2$form === void 0 ? '' : _action$payload2$form,
2221
2159
  _action$payload2$warn = _action$payload2.warningType,
2222
2160
  warningType = _action$payload2$warn === void 0 ? 'public' : _action$payload2$warn,
2223
2161
  panelId = _action$payload2.panelId;
2224
2162
  draft.object = object;
2225
- draft.publicWarning = publicWarning;
2226
- draft.selectedPublicWarningId = publicWarning == null ? void 0 : publicWarning.id;
2163
+ draft.warning = warning;
2164
+ draft.selectedWarningId = warning == null ? void 0 : warning.id;
2227
2165
  draft.formState = formState;
2228
- draft.warningType = warningType;
2166
+ draft.warningType = (warning == null ? void 0 : warning.type) || warningType;
2229
2167
  draft.panelId = panelId;
2230
2168
  },
2231
- toggleEditorWarning: function toggleEditorWarning(draft,
2232
- // eslint-disable-next-line no-unused-vars
2233
- action) {
2234
- delete draft.error;
2235
- },
2236
- toggleEditorWarningSuccess: function toggleEditorWarningSuccess(draft, action) {
2237
- var _action$payload3 = action.payload,
2238
- isEditor = _action$payload3.isEditor,
2239
- username = _action$payload3.username;
2240
- if (draft.publicWarning) {
2241
- draft.publicWarning.editor = isEditor ? username : '';
2242
- }
2243
- draft.formState = isEditor ? '' : 'readonly';
2244
- },
2245
2169
  // publish warning
2246
2170
  publishWarning: function publishWarning(draft,
2247
2171
  // eslint-disable-next-line no-unused-vars
@@ -2251,7 +2175,7 @@ var slice = createSlice({
2251
2175
  },
2252
2176
  publishWarningSuccess: function publishWarningSuccess(draft, action) {
2253
2177
  var publicWarning = action.payload.publicWarning;
2254
- draft.publicWarning = publicWarning;
2178
+ draft.warning = publicWarning;
2255
2179
  // If form has been published, set form to readonly
2256
2180
  draft.formState = 'readonly';
2257
2181
  },
@@ -2261,70 +2185,60 @@ var slice = createSlice({
2261
2185
  action) {
2262
2186
  draft.formState = 'saving';
2263
2187
  delete draft.error;
2264
- draft.publicWarning = action.payload.publicWarning;
2188
+ draft.warning = action.payload.publicWarning;
2265
2189
  },
2266
2190
  saveWarningSuccess: function saveWarningSuccess(draft, action) {
2267
2191
  var _publicWarning$warnin;
2268
2192
  var publicWarning = action.payload.publicWarning;
2269
- draft.publicWarning = publicWarning;
2193
+ draft.warning = publicWarning;
2270
2194
  if (publicWarning != null && (_publicWarning$warnin = publicWarning.warningDetail) != null && _publicWarning$warnin.id) {
2271
- draft.selectedPublicWarningId = publicWarning.warningDetail.id;
2195
+ draft.selectedWarningId = publicWarning.warningDetail.id;
2272
2196
  }
2273
2197
  draft.formState = '';
2274
2198
  },
2275
2199
  setFormError: function setFormError(draft, action) {
2276
- var _action$payload4 = action.payload,
2277
- message = _action$payload4.message,
2278
- _action$payload4$seve = _action$payload4.severity,
2279
- severity = _action$payload4$seve === void 0 ? 'error' : _action$payload4$seve;
2200
+ var _action$payload3 = action.payload,
2201
+ message = _action$payload3.message,
2202
+ _action$payload3$seve = _action$payload3.severity,
2203
+ severity = _action$payload3$seve === void 0 ? 'error' : _action$payload3$seve;
2280
2204
  draft.formState = '';
2281
2205
  draft.error = {
2282
2206
  severity: severity,
2283
2207
  message: message
2284
2208
  };
2285
2209
  },
2210
+ removeFormError: function removeFormError(draft) {
2211
+ delete draft.error;
2212
+ },
2286
2213
  setFormDirty: function setFormDirty(draft, action) {
2287
2214
  var isFormDirty = action.payload.isFormDirty;
2288
2215
  draft.isFormDirty = isFormDirty;
2216
+ },
2217
+ setEditMode: function setEditMode(draft, action) {
2218
+ var warningId = action.payload.warningId;
2219
+ draft.selectedWarningId = warningId;
2220
+ draft.formState = 'edit';
2289
2221
  }
2290
2222
  },
2291
2223
  extraReducers: function extraReducers(builder) {
2292
2224
  builder.addCase(uiActions.setToggleOpenDialog, function (draft, action) {
2293
- var _action$payload5 = action.payload,
2294
- type = _action$payload5.type,
2295
- setOpen = _action$payload5.setOpen;
2225
+ var _action$payload4 = action.payload,
2226
+ type = _action$payload4.type,
2227
+ setOpen = _action$payload4.setOpen;
2296
2228
  if (type === publicWarningDialogType && setOpen === false) {
2297
2229
  delete draft.object;
2298
- delete draft.publicWarning;
2230
+ delete draft.warning;
2299
2231
  delete draft.formState;
2300
2232
  delete draft.error;
2301
- delete draft.selectedPublicWarningId;
2233
+ delete draft.selectedWarningId;
2302
2234
  delete draft.isFormDirty;
2303
2235
  delete draft.warningType;
2304
2236
  }
2305
- }).addCase(publicWarningActions.fetchWarningsSuccess, function (draft, action) {
2306
- var warnings = action.payload.warnings;
2307
- if (draft.selectedPublicWarningId) {
2308
- var _draft$publicWarning;
2309
- var currentWarning = warnings.find(function (warning) {
2310
- return warning.id === draft.selectedPublicWarningId;
2311
- });
2312
- if (currentWarning && ((_draft$publicWarning = draft.publicWarning) == null ? void 0 : _draft$publicWarning.editor) !== currentWarning.editor) {
2313
- draft.publicWarning.editor = currentWarning.editor;
2314
- // if form is in edit mode show warning
2315
- if (draft.formState === '') {
2316
- draft.error = {
2317
- severity: 'warning',
2318
- message: TAKEOVER_MESSAGE
2319
- };
2320
- }
2321
- }
2322
- }
2323
2237
  });
2324
2238
  }
2325
2239
  });
2326
- var reducer = slice.reducer;
2327
- var publicWarningFormActions = slice.actions;
2240
+ var publicWarningFormReducer = slice$1.reducer,
2241
+ publicWarningFormActions = slice$1.actions;
2328
2242
 
2329
2243
  var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2330
2244
  var bounds = _ref.bounds,
@@ -2424,7 +2338,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2424
2338
  while (1) switch (_context.prev = _context.next) {
2425
2339
  case 0:
2426
2340
  isActive = drawing.id === (currrentDrawing == null ? void 0 : currrentDrawing.id);
2427
- dispatch(drawActions.setDrawValues({
2341
+ dispatch(warningsDrawingsActions.setDrawValues({
2428
2342
  objectName: drawing.objectName,
2429
2343
  drawingInstanceId: drawingDialogType,
2430
2344
  id: !isActive ? drawing.id : ''
@@ -2470,7 +2384,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2470
2384
  _yield$warningsApi$ge = _context2.sent;
2471
2385
  data = _yield$warningsApi$ge.data;
2472
2386
  // update draw tool values
2473
- dispatch(drawActions.setDrawValues({
2387
+ dispatch(warningsDrawingsActions.setDrawValues({
2474
2388
  objectName: data.objectName,
2475
2389
  id: drawingId,
2476
2390
  drawingInstanceId: drawingDialogType
@@ -2508,13 +2422,14 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2508
2422
  var onShareObject = function onShareObject(object) {
2509
2423
  dispatch(publicWarningFormActions.openPublicWarningFormDialog({
2510
2424
  object: object,
2511
- publicWarning: {
2425
+ warning: {
2512
2426
  warningDetail: {
2513
2427
  areas: [{
2514
2428
  geoJSON: object.geoJSON,
2515
2429
  objectName: object.objectName
2516
2430
  }]
2517
- }
2431
+ },
2432
+ type: 'public'
2518
2433
  }
2519
2434
  }));
2520
2435
  };
@@ -6950,167 +6865,745 @@ var warningListJSON = [
6950
6865
  }
6951
6866
  ];
6952
6867
 
6953
- /* *
6954
- * Licensed under the Apache License, Version 2.0 (the "License");
6955
- * you may not use this file except in compliance with the License.
6956
- * You may obtain a copy of the License at
6957
- *
6958
- * http://www.apache.org/licenses/LICENSE-2.0
6959
- *
6960
- * Unless required by applicable law or agreed to in writing, software
6961
- * distributed under the License is distributed on an "AS IS" BASIS,
6962
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6963
- * See the License for the specific language governing permissions and
6964
- * limitations under the License.
6965
- *
6966
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
6967
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
6968
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
6969
- * */
6970
- var drawingList = drawingListJSON;
6971
- var drawingsListFullContent = drawingsListFullContentJSON;
6972
- var warningList = warningListJSON;
6973
- warningList.filter(function (warning) {
6974
- return warning.status !== 'EXPIRED' && warning.status !== 'WITHDRAWN';
6975
- }).length;
6976
- var areaKeywordList = ['North Sea districts', 'Coastal Districts', 'KNMI Specific', 'Objects', 'Baltic areas', 'NL', 'FI', 'METNorway Specific', 'Provinces', 'FIR', 'Countries'];
6868
+ var sigmetListJSON$1 = [
6869
+ {
6870
+ id: "57eaf6c8-a247-11ef-ac05-12e0cc025418",
6871
+ lastUpdatedTime: "2024-11-14T05:14:37",
6872
+ productStatus: "DRAFT",
6873
+ sigmetAirmetDetails: {
6874
+ },
6875
+ warningDetail: {
6876
+ areas: [
6877
+ {
6878
+ geoJSON: {
6879
+ features: [
6880
+ {
6881
+ geometry: {
6882
+ type: "Polygon",
6883
+ coordinates: [
6884
+ [
6885
+ [
6886
+ 10,
6887
+ 20
6888
+ ],
6889
+ [
6890
+ 15,
6891
+ 25
6892
+ ],
6893
+ [
6894
+ 20,
6895
+ 20
6896
+ ],
6897
+ [
6898
+ 10,
6899
+ 20
6900
+ ]
6901
+ ]
6902
+ ]
6903
+ },
6904
+ properties: {
6905
+ selectionType: "fir",
6906
+ stroke: "#0075a9",
6907
+ "stroke-width": 1.5,
6908
+ "stroke-opacity": 1,
6909
+ fill: "#0075a9",
6910
+ "fill-opacity": 0.4
6911
+ },
6912
+ type: "Feature"
6913
+ }
6914
+ ],
6915
+ type: "FeatureCollection"
6916
+ },
6917
+ objectName: "ENOB"
6918
+ }
6919
+ ],
6920
+ descriptionOriginal: "",
6921
+ descriptionTranslation: "",
6922
+ firName: "BODOE OCEANIC FIR",
6923
+ incident: "-1",
6924
+ level: "SIG",
6925
+ phenomenon: "EMBD_TSGR",
6926
+ probability: "0",
6927
+ validFrom: "2024-11-14T05:30:14Z",
6928
+ validUntil: "2024-11-14T07:30:14Z"
6929
+ }
6930
+ },
6931
+ {
6932
+ id: "fc4c0002-8d32-11ef-888b-ee87a1644661",
6933
+ lastUpdatedTime: "2024-11-14T05:14:06",
6934
+ productStatus: "EXPIRED",
6935
+ sigmetAirmetDetails: {
6936
+ },
6937
+ warningDetail: {
6938
+ areas: [
6939
+ {
6940
+ geoJSON: null,
6941
+ objectName: "EFIN"
6942
+ }
6943
+ ],
6944
+ descriptionOriginal: "",
6945
+ descriptionTranslation: "",
6946
+ firName: "HELSINKI FIR",
6947
+ incident: "T01",
6948
+ level: "SIG",
6949
+ phenomenon: "OBSC_TS",
6950
+ probability: "0",
6951
+ validFrom: "2024-11-13T05:30:14Z",
6952
+ validUntil: "2024-11-13T07:30:14Z"
6953
+ }
6954
+ },
6955
+ {
6956
+ id: "fe4a14bc-8a90-11ef-9090-6c08d8abf452",
6957
+ lastUpdatedTime: "2024-10-08T08:10:30",
6958
+ productStatus: "PUBLISHED",
6959
+ sigmetAirmetDetails: {
6960
+ },
6961
+ warningDetail: {
6962
+ areas: [
6963
+ {
6964
+ geoJSON: null,
6965
+ objectName: "EHAA"
6966
+ }
6967
+ ],
6968
+ descriptionOriginal: "",
6969
+ descriptionTranslation: "",
6970
+ firName: "AMSTERDAM FIR",
6971
+ incident: "Z01",
6972
+ level: "SIG",
6973
+ phenomenon: "SEV_ICE",
6974
+ probability: "0",
6975
+ validFrom: "2024-10-08T05:30:14Z",
6976
+ validUntil: "2024-10-08T09:30:14Z"
6977
+ }
6978
+ },
6979
+ {
6980
+ id: "fe4a14bc-8a90-11ef-9090-6c08d8abf453",
6981
+ lastUpdatedTime: "2024-10-08T08:10:30",
6982
+ productStatus: "CANCELLED",
6983
+ warningDetail: {
6984
+ areas: [
6985
+ {
6986
+ geoJSON: null,
6987
+ objectName: "ENOR"
6988
+ }
6989
+ ],
6990
+ descriptionOriginal: "",
6991
+ descriptionTranslation: "",
6992
+ firName: "POLARIS FIR",
6993
+ incident: "U01",
6994
+ level: "SIG",
6995
+ phenomenon: "SEV_TURB",
6996
+ probability: "0",
6997
+ validFrom: "2024-10-08T05:30:14Z",
6998
+ validUntil: "2024-10-08T09:30:14Z"
6999
+ },
7000
+ sigmetAirmetDetails: {
7001
+ sequence: "U01",
7002
+ productStatus: "CANCELLED"
7003
+ }
7004
+ },
7005
+ {
7006
+ id: "fe4a14bc-8a90-11ef-9090-6c08d8abf454",
7007
+ lastUpdatedTime: "2024-10-08T08:10:30",
7008
+ productStatus: "PUBLISHED",
7009
+ warningDetail: {
7010
+ areas: [
7011
+ {
7012
+ geoJSON: null,
7013
+ objectName: "ENOR"
7014
+ }
7015
+ ],
7016
+ descriptionOriginal: "",
7017
+ descriptionTranslation: "",
7018
+ firName: "POLARIS FIR",
7019
+ incident: "U02",
7020
+ level: "SIG",
7021
+ phenomenon: "SEV_TURB",
7022
+ probability: "0",
7023
+ validFrom: "2024-10-08T05:30:14Z",
7024
+ validUntil: "2024-10-08T09:30:14Z"
7025
+ },
7026
+ sigmetAirmetDetails: {
7027
+ cancelsSigmetSequenceId: "U01",
7028
+ sequence: "U02",
7029
+ productStatus: "PUBLISHED"
7030
+ }
7031
+ }
7032
+ ];
6977
7033
 
6978
- /* *
6979
- * Licensed under the Apache License, Version 2.0 (the "License");
6980
- * you may not use this file except in compliance with the License.
6981
- * You may obtain a copy of the License at
6982
- *
6983
- * http://www.apache.org/licenses/LICENSE-2.0
6984
- *
6985
- * Unless required by applicable law or agreed to in writing, software
6986
- * distributed under the License is distributed on an "AS IS" BASIS,
6987
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6988
- * See the License for the specific language governing permissions and
6989
- * limitations under the License.
6990
- *
6991
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
6992
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
6993
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
6994
- * */
6995
- var ERROR_NOT_FOUND = 'Request failed with status code 400';
6996
- var MOCK_USERNAME = 'user.name';
6997
- var extractDrawingDetailsFromJSON = function extractDrawingDetailsFromJSON(drawingId) {
6998
- return drawingsListFullContent.find(function (element) {
6999
- return element.id === drawingId;
7000
- });
7001
- };
7002
- // to copy
7003
- var getCleanSearchQuery = function getCleanSearchQuery(searchQuery) {
7004
- return searchQuery.trim().split(/\s+/).join();
7005
- };
7006
- var getApiRoutes = function getApiRoutes(axiosInstance) {
7007
- return {
7008
- // drawings
7009
- getDrawings: function getDrawings(params) {
7010
- return axiosInstance.get('/drawings', {
7011
- params: params
7012
- }).then(function () {
7013
- var result = drawingList.filter(function (element) {
7014
- if (params != null && params.search || params != null && params.keywords) {
7015
- var _params$keywords;
7016
- var searchQuery = getCleanSearchQuery(params.search || '').split(',');
7017
- var keyWordsQuery = ((_params$keywords = params.keywords) == null ? void 0 : _params$keywords.split(',')) || [];
7018
- var hasResult = [].concat(searchQuery, keyWordsQuery).every(function (query) {
7019
- var _element$keywords;
7020
- return element.objectName.toLowerCase().includes(query.toLowerCase()) || ((_element$keywords = element.keywords) == null ? void 0 : _element$keywords.toLowerCase().includes(query.toLowerCase()));
7021
- });
7022
- if (hasResult) {
7023
- return element;
7024
- }
7025
- } else {
7026
- return element;
7027
- }
7028
- return null;
7029
- });
7030
- return {
7031
- data: result
7032
- };
7033
- });
7034
- },
7035
- getDrawingDetails: function getDrawingDetails(drawingId) {
7036
- return axiosInstance.get("/drawings/" + drawingId).then(function () {
7037
- if (!extractDrawingDetailsFromJSON(drawingId)) {
7038
- throw new Error(ERROR_NOT_FOUND);
7039
- }
7040
- return {
7041
- data: extractDrawingDetailsFromJSON(drawingId)
7042
- };
7043
- });
7044
- },
7045
- updateDrawing: function updateDrawing(drawingId, data) {
7046
- // eslint-disable-next-line no-console
7047
- console.log('api: save drawing', drawingId, data);
7048
- return axiosInstance.post("/drawings/" + drawingId + "/", data);
7049
- },
7050
- saveDrawingAs: function saveDrawingAs(data) {
7051
- // eslint-disable-next-line no-console
7052
- console.log('api: save drawing as', data);
7053
- return axiosInstance.post("/drawings/", data).then(function () {
7054
- return 'new-drawing-id';
7055
- });
7056
- },
7057
- deleteDrawing: function deleteDrawing(drawingId) {
7058
- // eslint-disable-next-line no-console
7059
- console.log('api: delete drawing', drawingId);
7060
- drawingList.splice(drawingList.findIndex(function (drawing) {
7061
- return drawing.id === drawingId;
7062
- }), 1);
7063
- return axiosInstance.post("/drawings/" + drawingId + "?delete=true");
7064
- },
7065
- getAreaKeywords: function getAreaKeywords() {
7066
- return axiosInstance.get('/area-keywords').then(function () {
7067
- return {
7068
- data: areaKeywordList
7069
- };
7070
- });
7071
- },
7072
- // public warnings
7073
- getWarnings: function getWarnings() {
7074
- return axiosInstance.get("/warnings/").then(function () {
7075
- return {
7076
- data: warningList
7077
- };
7078
- });
7079
- },
7080
- saveWarningAs: function saveWarningAs(data) {
7081
- // eslint-disable-next-line no-console
7082
- console.log('api: save warning as', data);
7083
- return axiosInstance.post("/warnings/", data).then(function () {
7084
- return 'new-warning-id';
7085
- });
7086
- },
7034
+ var airmetListJSON$1 = [
7035
+ {
7036
+ id: "02d3727a-b190-11ef-ba31-067f7750936d",
7037
+ lastUpdatedTime: "2024-12-03T16:02:35",
7038
+ productStatus: "DRAFT",
7039
+ sigmetAirmetDetails: {
7040
+ },
7041
+ warningDetail: {
7042
+ areas: [
7043
+ {
7044
+ geoJSON: null,
7045
+ objectName: "EHAA"
7046
+ }
7047
+ ],
7048
+ descriptionOriginal: "",
7049
+ descriptionTranslation: "",
7050
+ firName: "AMSTERDAM FIR",
7051
+ incident: "-1",
7052
+ level: "AIR",
7053
+ phenomenon: "SFC_WIND",
7054
+ probability: "0",
7055
+ validFrom: "2024-12-03T17:00:09Z",
7056
+ validUntil: "2024-12-03T21:00:09Z"
7057
+ }
7058
+ },
7059
+ {
7060
+ id: "1a868884-9076-11ef-8e82-5a063b90cdf6",
7061
+ lastUpdatedTime: "2024-10-22T13:03:56",
7062
+ productStatus: "DRAFT",
7063
+ sigmetAirmetDetails: {
7064
+ },
7065
+ warningDetail: {
7066
+ areas: [
7067
+ {
7068
+ geoJSON: null,
7069
+ objectName: "EHAA"
7070
+ }
7071
+ ],
7072
+ descriptionOriginal: "",
7073
+ descriptionTranslation: "",
7074
+ firName: "AMSTERDAM FIR",
7075
+ incident: "-1",
7076
+ level: "AIR",
7077
+ phenomenon: "MOD_TURB",
7078
+ probability: "0",
7079
+ validFrom: "2024-10-22T15:00:09Z",
7080
+ validUntil: "2024-10-22T18:00:09Z"
7081
+ }
7082
+ },
7083
+ {
7084
+ id: "4ac7fc94-c670-11ee-8ace-92491e683685",
7085
+ lastUpdatedTime: "2024-02-08T12:26:31.803468",
7086
+ productStatus: "EXPIRED",
7087
+ sigmetAirmetDetails: {
7088
+ },
7089
+ warningDetail: {
7090
+ areas: [
7091
+ {
7092
+ geoJSON: null,
7093
+ objectName: "ENOR"
7094
+ }
7095
+ ],
7096
+ descriptionOriginal: "",
7097
+ descriptionTranslation: "",
7098
+ firName: "POLARIS FIR",
7099
+ incident: "T01",
7100
+ level: "AIR",
7101
+ phenomenon: "OBSC_TS",
7102
+ probability: "0",
7103
+ validFrom: "2024-02-08T09:00:09Z",
7104
+ validUntil: "2024-02-08T11:00:09Z"
7105
+ }
7106
+ },
7107
+ {
7108
+ id: "9dbcd4c6-c4c0-11ee-a0e9-9e39e246af14",
7109
+ lastUpdatedTime: "2024-02-06T07:15:18.166785",
7110
+ productStatus: "PUBLISHED",
7111
+ sigmetAirmetDetails: {
7112
+ },
7113
+ warningDetail: {
7114
+ areas: [
7115
+ {
7116
+ geoJSON: null,
7117
+ objectName: "EHAA"
7118
+ }
7119
+ ],
7120
+ descriptionOriginal: "",
7121
+ descriptionTranslation: "",
7122
+ firName: "AMSTERDAM FIR",
7123
+ incident: "Z01",
7124
+ level: "AIR",
7125
+ phenomenon: "SEV_ICE",
7126
+ probability: "0",
7127
+ validFrom: "2024-02-06T08:00:09Z",
7128
+ validUntil: "2024-02-06T12:00:09Z"
7129
+ }
7130
+ }
7131
+ ];
7132
+
7133
+ var airmetListJSON = [
7134
+ {
7135
+ uuid: "02d3727a-b190-11ef-ba31-067f7750936d",
7136
+ lastUpdateDate: "2024-12-03T16:02:35",
7137
+ creationDate: "2024-12-03T16:02:35",
7138
+ canbe: [
7139
+ "DRAFTED",
7140
+ "DISCARDED",
7141
+ "PUBLISHED"
7142
+ ],
7143
+ airmet: {
7144
+ uuid: "02d3727a-b190-11ef-ba31-067f7750936d",
7145
+ phenomenon: "SFC_WIND",
7146
+ sequence: "-1",
7147
+ validDateStart: "2024-12-03T13:26:19Z",
7148
+ validDateEnd: "2024-12-03T15:26:19Z",
7149
+ firName: "AMSTERDAM FIR",
7150
+ locationIndicatorATSU: "EHAA",
7151
+ locationIndicatorATSR: "EHAA",
7152
+ locationIndicatorMWO: "EHDB",
7153
+ isObservationOrForecast: "OBS",
7154
+ observationOrForecastTime: "2024-12-03T11:26:19Z",
7155
+ movementType: "STATIONARY",
7156
+ change: "WKN",
7157
+ type: "NORMAL",
7158
+ status: "DRAFT",
7159
+ windDirection: 70,
7160
+ windSpeed: 35,
7161
+ windUnit: "KT",
7162
+ firGeometry: {
7163
+ },
7164
+ startGeometry: {
7165
+ type: "FeatureCollection",
7166
+ features: [
7167
+ {
7168
+ type: "Feature",
7169
+ geometry: {
7170
+ type: "Polygon",
7171
+ coordinates: [
7172
+ [
7173
+ [
7174
+ 5,
7175
+ 55
7176
+ ],
7177
+ [
7178
+ 4.331914,
7179
+ 55.332644
7180
+ ],
7181
+ [
7182
+ 3.368817,
7183
+ 55.764314
7184
+ ],
7185
+ [
7186
+ 2.761908,
7187
+ 54.379261
7188
+ ],
7189
+ [
7190
+ 3.15576,
7191
+ 52.913554
7192
+ ],
7193
+ [
7194
+ 2.000002,
7195
+ 51.500002
7196
+ ],
7197
+ [
7198
+ 3.370001,
7199
+ 51.369722
7200
+ ],
7201
+ [
7202
+ 3.370527,
7203
+ 51.36867
7204
+ ],
7205
+ [
7206
+ 3.362223,
7207
+ 51.320002
7208
+ ],
7209
+ [
7210
+ 3.36389,
7211
+ 51.313608
7212
+ ],
7213
+ [
7214
+ 3.373613,
7215
+ 51.309999
7216
+ ],
7217
+ [
7218
+ 3.952501,
7219
+ 51.214441
7220
+ ],
7221
+ [
7222
+ 4.397501,
7223
+ 51.452776
7224
+ ],
7225
+ [
7226
+ 5.078611,
7227
+ 51.391665
7228
+ ],
7229
+ [
7230
+ 5.848333,
7231
+ 51.139444
7232
+ ],
7233
+ [
7234
+ 5.651667,
7235
+ 50.824717
7236
+ ],
7237
+ [
7238
+ 6.011797,
7239
+ 50.757273
7240
+ ],
7241
+ [
7242
+ 5.934168,
7243
+ 51.036386
7244
+ ],
7245
+ [
7246
+ 6.222223,
7247
+ 51.361666
7248
+ ],
7249
+ [
7250
+ 5.94639,
7251
+ 51.811663
7252
+ ],
7253
+ [
7254
+ 6.405001,
7255
+ 51.830828
7256
+ ],
7257
+ [
7258
+ 7.053095,
7259
+ 52.237764
7260
+ ],
7261
+ [
7262
+ 7.031389,
7263
+ 52.268885
7264
+ ],
7265
+ [
7266
+ 7.063612,
7267
+ 52.346109
7268
+ ],
7269
+ [
7270
+ 7.065557,
7271
+ 52.385828
7272
+ ],
7273
+ [
7274
+ 7.133055,
7275
+ 52.888887
7276
+ ],
7277
+ [
7278
+ 7.14218,
7279
+ 52.898244
7280
+ ],
7281
+ [
7282
+ 7.191667,
7283
+ 53.3
7284
+ ],
7285
+ [
7286
+ 6.5,
7287
+ 53.666667
7288
+ ],
7289
+ [
7290
+ 6.500002,
7291
+ 55.000002
7292
+ ],
7293
+ [
7294
+ 5,
7295
+ 55
7296
+ ]
7297
+ ]
7298
+ ]
7299
+ },
7300
+ properties: {
7301
+ selectionType: "fir"
7302
+ }
7303
+ }
7304
+ ]
7305
+ }
7306
+ }
7307
+ }
7308
+ ];
7309
+
7310
+ var sigmetListJSON = [
7311
+ {
7312
+ uuid: "someuniqueidprescibedbyBE2",
7313
+ lastUpdateDate: "2020-09-17T12:00:00Z",
7314
+ creationDate: "2020-09-17T12:00:00Z",
7315
+ canbe: [
7316
+ "CANCELLED"
7317
+ ],
7318
+ sigmet: {
7319
+ uuid: "someuniqueidprescibedbyBE2",
7320
+ phenomenon: "VA_CLD",
7321
+ sequence: "A01V",
7322
+ issueDate: "2020-09-17T12:00:00Z",
7323
+ firName: "AMSTERDAM FIR",
7324
+ locationIndicatorATSU: "EHAA",
7325
+ locationIndicatorATSR: "EHAA",
7326
+ locationIndicatorMWO: "EHDB",
7327
+ isObservationOrForecast: "OBS",
7328
+ observationOrForecastTime: "",
7329
+ movementType: "STATIONARY",
7330
+ change: "WKN",
7331
+ type: "NORMAL",
7332
+ status: "PUBLISHED",
7333
+ levelInfoMode: "BETW",
7334
+ vaSigmetVolcanoName: "EYJAFJALLAJOKULL",
7335
+ vaSigmetVolcanoCoordinates: {
7336
+ latitude: 63.62,
7337
+ longitude: -19.61
7338
+ },
7339
+ level: {
7340
+ value: 2000,
7341
+ unit: "FT"
7342
+ },
7343
+ lowerLevel: {
7344
+ value: 1000,
7345
+ unit: "FT"
7346
+ },
7347
+ firGeometry: "",
7348
+ startGeometry: {
7349
+ type: "FeatureCollection",
7350
+ features: [
7351
+ {
7352
+ type: "Feature",
7353
+ properties: {
7354
+ selectionType: "poly"
7355
+ },
7356
+ geometry: {
7357
+ type: "Polygon",
7358
+ coordinates: [
7359
+ [
7360
+ [
7361
+ 4.799062887514267,
7362
+ 54.04327723979929
7363
+ ],
7364
+ [
7365
+ 6.006227982070749,
7366
+ 53.64012115183787
7367
+ ],
7368
+ [
7369
+ 4.6168492883359304,
7370
+ 53.32840097044425
7371
+ ],
7372
+ [
7373
+ 4.799062887514267,
7374
+ 54.04327723979929
7375
+ ]
7376
+ ]
7377
+ ]
7378
+ }
7379
+ }
7380
+ ]
7381
+ },
7382
+ startGeometryIntersect: {
7383
+ type: "FeatureCollection",
7384
+ features: [
7385
+ {
7386
+ type: "Feature",
7387
+ properties: {
7388
+ selectionType: "poly"
7389
+ },
7390
+ geometry: {
7391
+ type: "Polygon",
7392
+ coordinates: [
7393
+ [
7394
+ [
7395
+ 4.799062887514267,
7396
+ 54.04327723979929
7397
+ ],
7398
+ [
7399
+ 6.006227982070749,
7400
+ 53.64012115183787
7401
+ ],
7402
+ [
7403
+ 4.6168492883359304,
7404
+ 53.32840097044425
7405
+ ],
7406
+ [
7407
+ 4.799062887514267,
7408
+ 54.04327723979929
7409
+ ]
7410
+ ]
7411
+ ]
7412
+ }
7413
+ }
7414
+ ]
7415
+ }
7416
+ }
7417
+ }
7418
+ ];
7419
+
7420
+ /* *
7421
+ * Licensed under the Apache License, Version 2.0 (the "License");
7422
+ * you may not use this file except in compliance with the License.
7423
+ * You may obtain a copy of the License at
7424
+ *
7425
+ * http://www.apache.org/licenses/LICENSE-2.0
7426
+ *
7427
+ * Unless required by applicable law or agreed to in writing, software
7428
+ * distributed under the License is distributed on an "AS IS" BASIS,
7429
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7430
+ * See the License for the specific language governing permissions and
7431
+ * limitations under the License.
7432
+ *
7433
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7434
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
7435
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7436
+ * */
7437
+ var airmetList$1 = airmetListJSON;
7438
+ var sigmetList$1 = sigmetListJSON;
7439
+ var fakeSigmetTAC = 'EHAA SIGMET 1 VALID 121249/121449 EHDB- EHAA AMSTERDAM FIR FRQ TS OBS ENTIRE FIR FL010 STNR WKN';
7440
+ var fakeAirmetTAC = 'EHAA AIRMET -1 VALID 310700/311100 EHDB- EHAA AMSTERDAM FIR ISOL CB OBS ENTIRE FIR FL020 STNR NC';
7441
+ [rest.get(/^.*\/airmetlist$/, function (_, res, ctx) {
7442
+ return res(ctx.status(200), ctx.json(airmetList$1));
7443
+ }), rest.get(/^.*\/sigmetlist$/, function (_, res, ctx) {
7444
+ return res(ctx.status(200), ctx.json(sigmetList$1));
7445
+ }), rest.get(/^.*\/airmet-config$/, function (_, res, ctx) {
7446
+ return res(ctx.status(200), ctx.json(airmetConfig));
7447
+ }), rest.get(/^.*\/sigmet-config$/, function (_, res, ctx) {
7448
+ return res(ctx.status(200), ctx.json(sigmetConfig));
7449
+ }), rest.post(/^.*\/airmet2tac$/, function (_, res, ctx) {
7450
+ return res(ctx.status(200), ctx.text(fakeAirmetTAC));
7451
+ }), rest.post(/^.*\/sigmet2tac$/, function (_, res, ctx) {
7452
+ return res(ctx.status(200), ctx.text(fakeSigmetTAC));
7453
+ }), rest.get(/^(?!.*(sigmet|airmet)).*$/, function (req) {
7454
+ return req.passthrough();
7455
+ })];
7456
+
7457
+ /* *
7458
+ * Licensed under the Apache License, Version 2.0 (the "License");
7459
+ * you may not use this file except in compliance with the License.
7460
+ * You may obtain a copy of the License at
7461
+ *
7462
+ * http://www.apache.org/licenses/LICENSE-2.0
7463
+ *
7464
+ * Unless required by applicable law or agreed to in writing, software
7465
+ * distributed under the License is distributed on an "AS IS" BASIS,
7466
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7467
+ * See the License for the specific language governing permissions and
7468
+ * limitations under the License.
7469
+ *
7470
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7471
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
7472
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7473
+ * */
7474
+ var drawingList = drawingListJSON;
7475
+ var drawingsListFullContent = drawingsListFullContentJSON;
7476
+ var warningList = warningListJSON.map(function (pw) {
7477
+ return Object.assign({}, pw, {
7478
+ type: 'public'
7479
+ });
7480
+ });
7481
+ warningList.filter(function (warning) {
7482
+ return warning.status !== 'EXPIRED' && warning.status !== 'WITHDRAWN';
7483
+ }).length;
7484
+ var sigmetList = sigmetListJSON$1.map(function (s) {
7485
+ return Object.assign({}, s, {
7486
+ type: 'sigmet'
7487
+ });
7488
+ });
7489
+ var airmetList = airmetListJSON$1.map(function (a) {
7490
+ return Object.assign({}, a, {
7491
+ type: 'airmet'
7492
+ });
7493
+ });
7494
+ concat(warningList, sigmetList, airmetList);
7495
+ var areaKeywordList = ['North Sea districts', 'Coastal Districts', 'KNMI Specific', 'Objects', 'Baltic areas', 'NL', 'FI', 'METNorway Specific', 'Provinces', 'FIR', 'Countries'];
7496
+ [rest.get(/^.*\/warnings$/, function (req, res, ctx) {
7497
+ // respond using a mocked JSON body
7498
+ return res(ctx.status(200), ctx.json(warningList));
7499
+ }), rest.post(/^.*\/warnings\/(.*)$/, function (req, res, ctx) {
7500
+ return res(ctx.status(200), ctx.json({}));
7501
+ })];
7502
+
7503
+ /* *
7504
+ * Licensed under the Apache License, Version 2.0 (the "License");
7505
+ * you may not use this file except in compliance with the License.
7506
+ * You may obtain a copy of the License at
7507
+ *
7508
+ * http://www.apache.org/licenses/LICENSE-2.0
7509
+ *
7510
+ * Unless required by applicable law or agreed to in writing, software
7511
+ * distributed under the License is distributed on an "AS IS" BASIS,
7512
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7513
+ * See the License for the specific language governing permissions and
7514
+ * limitations under the License.
7515
+ *
7516
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7517
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
7518
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7519
+ * */
7520
+ var ERROR_NOT_FOUND = 'Request failed with status code 400';
7521
+ var extractDrawingDetailsFromJSON = function extractDrawingDetailsFromJSON(drawingId) {
7522
+ return drawingsListFullContent.find(function (element) {
7523
+ return element.id === drawingId;
7524
+ });
7525
+ };
7526
+ // to copy
7527
+ var getCleanSearchQuery = function getCleanSearchQuery(searchQuery) {
7528
+ return searchQuery.trim().split(/\s+/).join();
7529
+ };
7530
+ var getApiRoutes = function getApiRoutes(axiosInstance) {
7531
+ return {
7532
+ // drawings
7533
+ getDrawings: function getDrawings(params) {
7534
+ return axiosInstance.get('/drawings', {
7535
+ params: params
7536
+ }).then(function () {
7537
+ var result = drawingList.filter(function (element) {
7538
+ if (params != null && params.search || params != null && params.keywords) {
7539
+ var _params$keywords;
7540
+ var searchQuery = getCleanSearchQuery(params.search || '').split(',');
7541
+ var keyWordsQuery = ((_params$keywords = params.keywords) == null ? void 0 : _params$keywords.split(',')) || [];
7542
+ var hasResult = [].concat(searchQuery, keyWordsQuery).every(function (query) {
7543
+ var _element$keywords;
7544
+ return element.objectName.toLowerCase().includes(query.toLowerCase()) || ((_element$keywords = element.keywords) == null ? void 0 : _element$keywords.toLowerCase().includes(query.toLowerCase()));
7545
+ });
7546
+ if (hasResult) {
7547
+ return element;
7548
+ }
7549
+ } else {
7550
+ return element;
7551
+ }
7552
+ return null;
7553
+ });
7554
+ return {
7555
+ data: result
7556
+ };
7557
+ });
7558
+ },
7559
+ getDrawingDetails: function getDrawingDetails(drawingId) {
7560
+ return axiosInstance.get("/drawings/" + drawingId).then(function () {
7561
+ if (!extractDrawingDetailsFromJSON(drawingId)) {
7562
+ throw new Error(ERROR_NOT_FOUND);
7563
+ }
7564
+ return {
7565
+ data: extractDrawingDetailsFromJSON(drawingId)
7566
+ };
7567
+ });
7568
+ },
7569
+ updateDrawing: function updateDrawing(drawingId, data) {
7570
+ return axiosInstance.post("/drawings/" + drawingId + "/", data);
7571
+ },
7572
+ saveDrawingAs: function saveDrawingAs(data) {
7573
+ return axiosInstance.post("/drawings/", data).then(function () {
7574
+ return 'new-drawing-id';
7575
+ });
7576
+ },
7577
+ deleteDrawing: function deleteDrawing(drawingId) {
7578
+ drawingList.splice(drawingList.findIndex(function (drawing) {
7579
+ return drawing.id === drawingId;
7580
+ }), 1);
7581
+ return axiosInstance.post("/drawings/" + drawingId + "?delete=true");
7582
+ },
7583
+ getAreaKeywords: function getAreaKeywords() {
7584
+ return axiosInstance.get('/area-keywords').then(function () {
7585
+ return {
7586
+ data: areaKeywordList
7587
+ };
7588
+ });
7589
+ },
7590
+ saveWarningAs: function saveWarningAs(data) {
7591
+ return axiosInstance.post("/warnings/", data).then(function () {
7592
+ return 'new-warning-id';
7593
+ });
7594
+ },
7087
7595
  updateWarning: function updateWarning(warningId, data) {
7088
- // eslint-disable-next-line no-console
7089
- console.log("api: update warning " + warningId, data);
7090
7596
  return axiosInstance.post("/warnings/" + warningId + "/", data);
7091
7597
  },
7092
7598
  deleteWarning: function deleteWarning(warningId) {
7093
- // eslint-disable-next-line no-console
7094
- console.log('api: delete warning', warningId);
7095
7599
  warningList.splice(warningList.findIndex(function (warning) {
7096
7600
  return warning.id === warningId;
7097
7601
  }), 1);
7098
7602
  return axiosInstance.post("/warnings/" + warningId + "?delete=true");
7099
- },
7100
- toggleEditorWarning: function toggleEditorWarning(warningId, isEditor) {
7101
- // eslint-disable-next-line no-console
7102
- console.log('api: toggle editor warning', warningId, isEditor);
7103
- var index = warningList.findIndex(function (warning) {
7104
- return warning.id === warningId;
7105
- });
7106
- warningList.splice(index, 1, Object.assign({}, warningList[index], {
7107
- editor: isEditor ? MOCK_USERNAME : null
7108
- }));
7109
- return axiosInstance.post("/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false'));
7110
7603
  }
7111
7604
  };
7112
7605
  };
7113
- // used in storybook
7606
+ // used in storybook and tests
7114
7607
  var createApi = function createApi() {
7115
7608
  var instance = createFakeApiInstance();
7116
7609
  return getApiRoutes(instance);
@@ -7457,7 +7950,7 @@ var DrawingToolFormContentsNoMemo = function DrawingToolFormContentsNoMemo(_ref)
7457
7950
  };
7458
7951
  var DrawingToolFormContents = /*#__PURE__*/React__default.memo(DrawingToolFormContentsNoMemo, isEqual);
7459
7952
 
7460
- var _excluded$8 = ["opacity", "geoJSON"];
7953
+ var _excluded$9 = ["opacity", "geoJSON"];
7461
7954
  var getObjectName$1 = function getObjectName(objectName) {
7462
7955
  return objectName || dateUtils.dateToString(new Date(), dateUtils.DATE_FORMAT_DATEPICKER, true) + " UTC";
7463
7956
  };
@@ -7527,7 +8020,7 @@ var DrawingToolForm = function DrawingToolForm(_ref) {
7527
8020
  // remove unneeded properties
7528
8021
  formValues.opacity;
7529
8022
  var geoJSON = formValues.geoJSON,
7530
- allFormValues = _objectWithoutPropertiesLoose(formValues, _excluded$8);
8023
+ allFormValues = _objectWithoutPropertiesLoose(formValues, _excluded$9);
7531
8024
  // rewind geometry
7532
8025
  var rewindedGeometry = rewindGeometry(geoJSON);
7533
8026
  onSubmitForm(Object.assign({}, allFormValues, {
@@ -7596,7 +8089,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7596
8089
  });
7597
8090
  var drawToolId = drawingDialogType;
7598
8091
  var drawTool = useSelector(function (store) {
7599
- return drawtoolSelectors.selectDrawToolById(store, drawToolId);
8092
+ return drawingToolSelectors.selectDrawToolById(store, drawToolId);
7600
8093
  });
7601
8094
  var layerFeatureGeoJSON = useSelector(function (store) {
7602
8095
  return layerSelectors.getFeatureLayerGeoJSON(store, drawTool == null ? void 0 : drawTool.geoJSONLayerId);
@@ -7614,7 +8107,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7614
8107
  return uiSelectors.getDialogError(store, drawToolId);
7615
8108
  });
7616
8109
  var onSubmitForm = React.useCallback(function (formValues) {
7617
- dispatch(drawActions.submitDrawValues({
8110
+ dispatch(warningsDrawingsActions.submitDrawValues({
7618
8111
  geoJSON: formValues.geoJSON,
7619
8112
  objectName: formValues.objectName,
7620
8113
  scope: 'user',
@@ -7648,7 +8141,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7648
8141
  }
7649
8142
  }, [dispatch, drawTool == null ? void 0 : drawTool.activeDrawModeId, drawTool == null ? void 0 : drawTool.geoJSONLayerId, drawToolId]);
7650
8143
  var onChangeName = React.useCallback(function (newName) {
7651
- dispatch(drawActions.setDrawValues({
8144
+ dispatch(warningsDrawingsActions.setDrawValues({
7652
8145
  objectName: newName,
7653
8146
  id: (drawing == null ? void 0 : drawing.id) || '',
7654
8147
  drawingInstanceId: drawingDialogType,
@@ -7656,7 +8149,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7656
8149
  }));
7657
8150
  }, [dispatch, drawing == null ? void 0 : drawing.id, drawing == null ? void 0 : drawing.isFormDirty]);
7658
8151
  var onChangeFormDirty = React.useCallback(function (isFormDirty) {
7659
- dispatch(drawActions.setFormDirty({
8152
+ dispatch(warningsDrawingsActions.setFormDirty({
7660
8153
  drawingInstanceId: drawingDialogType,
7661
8154
  isFormDirty: isFormDirty
7662
8155
  }));
@@ -7936,7 +8429,7 @@ var PublicWarningsFormDialog = function PublicWarningsFormDialog(_ref) {
7936
8429
  }));
7937
8430
  };
7938
8431
 
7939
- var _excluded$7 = ["children", "value", "index"];
8432
+ var _excluded$8 = ["children", "value", "index"];
7940
8433
  function a11yProps(index) {
7941
8434
  return {
7942
8435
  id: "tab-" + index,
@@ -7957,7 +8450,7 @@ var CustomTabPanel = function CustomTabPanel(props) {
7957
8450
  var children = props.children,
7958
8451
  value = props.value,
7959
8452
  index = props.index,
7960
- other = _objectWithoutPropertiesLoose(props, _excluded$7);
8453
+ other = _objectWithoutPropertiesLoose(props, _excluded$8);
7961
8454
  return jsx("div", Object.assign({
7962
8455
  role: "tabpanel",
7963
8456
  hidden: value !== index,
@@ -8205,23 +8698,6 @@ var AreaField = function AreaField(_ref) {
8205
8698
  };
8206
8699
 
8207
8700
  var _defaultLevelFilter, _defaultEmptyFilter;
8208
- /* *
8209
- * Licensed under the Apache License, Version 2.0 (the "License");
8210
- * you may not use this file except in compliance with the License.
8211
- * You may obtain a copy of the License at
8212
- *
8213
- * http://www.apache.org/licenses/LICENSE-2.0
8214
- *
8215
- * Unless required by applicable law or agreed to in writing, software
8216
- * distributed under the License is distributed on an "AS IS" BASIS,
8217
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8218
- * See the License for the specific language governing permissions and
8219
- * limitations under the License.
8220
- *
8221
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8222
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
8223
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
8224
- * */
8225
8701
  var Domain;
8226
8702
  (function (Domain) {
8227
8703
  Domain["aviation"] = "aviation";
@@ -8267,7 +8743,16 @@ var makeFilterFromList = function makeFilterFromList(options) {
8267
8743
  return p ? Object.assign({}, acc, (_Object$assign = {}, _Object$assign[p] = true, _Object$assign)) : acc;
8268
8744
  }, (_options$reduce = {}, _options$reduce[emptyFilterId] = true, _options$reduce));
8269
8745
  };
8270
- var defaultPhenomenonFilter = makeFilterFromList(Object.values(Phenomenon$1));
8746
+ var AllPhenomena = Object.assign({}, AirmetPhenomena, SigmetPhenomena, Phenomenon$1);
8747
+ var AllPhenomenaKeys = Object.fromEntries(Object.keys(AllPhenomena).map(function (key) {
8748
+ return [key, key];
8749
+ }));
8750
+ var domainPhenomena = {
8751
+ aviation: [].concat(Object.keys(SigmetPhenomena), Object.keys(AirmetPhenomena)),
8752
+ maritime: [],
8753
+ "public": [].concat(Object.keys(Phenomenon$1))
8754
+ };
8755
+ var defaultPhenomenonFilter = makeFilterFromList(Object.keys(AllPhenomenaKeys));
8271
8756
  var initialFilters = {
8272
8757
  incident: defaultEmptyFilter,
8273
8758
  source: defaultEmptyFilter,
@@ -8474,6 +8959,10 @@ var warningPhenomena = [{
8474
8959
  translationKey: 'aviation-phenomenon-obscured-thunderstorm-with-hail',
8475
8960
  key: 'OBSC_TSGR',
8476
8961
  isAviation: true
8962
+ }, {
8963
+ translationKey: 'aviation-phenomenon-obscured-thunderstorm',
8964
+ key: 'OBSC_TS',
8965
+ isAviation: true
8477
8966
  }, {
8478
8967
  translationKey: 'aviation-phenomenon-squall-thunderstorm-with-hail',
8479
8968
  key: 'SQL_TSGR',
@@ -8955,23 +9444,19 @@ var ProbabilityField = function ProbabilityField(_ref) {
8955
9444
  });
8956
9445
  };
8957
9446
 
8958
- var config = getConfig();
8959
- var airmetBaseUrl = config.GW_AIRMET_BASE_URL;
8960
- var sigmetBaseUrl = config.GW_SIGMET_BASE_URL;
9447
+ var config$1 = getConfig();
9448
+ var airmetBaseUrl = config$1.GW_AIRMET_BASE_URL || '';
9449
+ var sigmetBaseUrl = config$1.GW_SIGMET_BASE_URL || '';
8961
9450
  // API
8962
9451
  var getAirmetList = function getAirmetList(auth) {
8963
9452
  return fetch(airmetBaseUrl + "/airmetlist", {
8964
9453
  headers: getHeaders(auth)
8965
- }).then(function (r) {
8966
- return r.json();
8967
- });
9454
+ }).then(handleResponse);
8968
9455
  };
8969
9456
  var getSigmetList = function getSigmetList(auth) {
8970
9457
  return fetch(sigmetBaseUrl + "/sigmetlist", {
8971
9458
  headers: getHeaders(auth)
8972
- }).then(function (r) {
8973
- return r.json();
8974
- });
9459
+ }).then(handleResponse);
8975
9460
  };
8976
9461
  var getAirmetConfig = function getAirmetConfig(auth) {
8977
9462
  return fetch(airmetBaseUrl + "/airmet-config", {
@@ -9121,7 +9606,7 @@ var useTACApi = function useTACApi() {
9121
9606
  };
9122
9607
  };
9123
9608
 
9124
- var _excluded$6 = ["IS_DRAFT", "object", "translation-select"];
9609
+ var _excluded$7 = ["IS_DRAFT", "object", "translation-select"];
9125
9610
  var useScrollTopOnError = function useScrollTopOnError(error) {
9126
9611
  var ref = React.useRef(null);
9127
9612
  React.useEffect(function () {
@@ -9218,7 +9703,7 @@ var prepareFormValues = function prepareFormValues(data) {
9218
9703
  data.IS_DRAFT;
9219
9704
  data.object;
9220
9705
  data['translation-select'];
9221
- var productToPost = _objectWithoutPropertiesLoose(data, _excluded$6);
9706
+ var productToPost = _objectWithoutPropertiesLoose(data, _excluded$7);
9222
9707
  // remove empty fields
9223
9708
  return Object.keys(productToPost).reduce(function (warningDetail, fieldName) {
9224
9709
  var key = fieldName;
@@ -9312,7 +9797,7 @@ isAviationWarning) {
9312
9797
  });
9313
9798
  }
9314
9799
  var Form = function Form(_ref5) {
9315
- var _publicWarningDetails;
9800
+ var _publicWarningDetails, _publicWarningDetails2;
9316
9801
  var defaultMapPreset = _ref5.defaultMapPreset,
9317
9802
  _ref5$onSaveForm = _ref5.onSaveForm,
9318
9803
  onSaveForm = _ref5$onSaveForm === void 0 ? function () {} : _ref5$onSaveForm,
@@ -9344,7 +9829,7 @@ var Form = function Form(_ref5) {
9344
9829
  var _useTACApi = useTACApi(),
9345
9830
  fetchSigmetTAC = _useTACApi.fetchSigmetTAC,
9346
9831
  fetchAirmetTAC = _useTACApi.fetchAirmetTAC;
9347
- var initialPublicWarningArea = publicWarningDetails && (publicWarningDetails == null ? void 0 : publicWarningDetails.areas) && (publicWarningDetails == null ? void 0 : publicWarningDetails.areas.length) && (publicWarningDetails == null || (_publicWarningDetails = publicWarningDetails.areas[0]) == null ? void 0 : _publicWarningDetails.geoJSON);
9832
+ var initialPublicWarningArea = (publicWarningDetails == null || (_publicWarningDetails = publicWarningDetails.areas) == null ? void 0 : _publicWarningDetails.length) && (publicWarningDetails == null || (_publicWarningDetails2 = publicWarningDetails.areas[0]) == null ? void 0 : _publicWarningDetails2.geoJSON);
9348
9833
  var _React$useState = React.useState(initialPublicWarningArea),
9349
9834
  warningGeoJSONFeature = _React$useState[0],
9350
9835
  setWarningGeoJSONFeature = _React$useState[1];
@@ -9726,29 +10211,25 @@ var getPublicWarningStore = function getPublicWarningStore(store) {
9726
10211
  if (store && store.publicWarningForm) {
9727
10212
  return store.publicWarningForm;
9728
10213
  }
9729
- return null;
10214
+ return {};
9730
10215
  };
9731
10216
  var getPublicWarningObject = createSelector(getPublicWarningStore, function (publicWarningStore) {
9732
10217
  return publicWarningStore.object;
9733
10218
  });
9734
10219
  var getPublicWarning = createSelector(getPublicWarningStore, function (publicWarningStore) {
9735
- return publicWarningStore.publicWarning;
10220
+ return publicWarningStore == null ? void 0 : publicWarningStore.warning;
9736
10221
  });
9737
10222
  var getPublicWarningStatus = createSelector(getPublicWarningStore, function (publicWarningStore) {
9738
- var _publicWarningStore$p;
9739
- return publicWarningStore == null || (_publicWarningStore$p = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p.status;
9740
- });
9741
- var getPublicWarningEditor = createSelector(getPublicWarningStore, function (publicWarningStore) {
9742
- var _publicWarningStore$p2;
9743
- return publicWarningStore == null || (_publicWarningStore$p2 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p2.editor;
10223
+ var _publicWarningStore$w;
10224
+ return publicWarningStore == null || (_publicWarningStore$w = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w.status;
9744
10225
  });
9745
10226
  var getPublicWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
9746
- var _publicWarningStore$p3;
9747
- return publicWarningStore == null || (_publicWarningStore$p3 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p3.warningDetail.id;
10227
+ var _publicWarningStore$w2;
10228
+ return publicWarningStore == null || (_publicWarningStore$w2 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w2.warningDetail.id;
9748
10229
  });
9749
10230
  var getPublicWarningAreas = createSelector(getPublicWarningStore, function (publicWarningStore) {
9750
- var _publicWarningStore$p4;
9751
- return (publicWarningStore == null || (_publicWarningStore$p4 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p4.warningDetail.areas) || [];
10231
+ var _publicWarningStore$w3;
10232
+ return (publicWarningStore == null || (_publicWarningStore$w3 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w3.warningDetail.areas) || [];
9752
10233
  });
9753
10234
  var getPublicWarningFormState = createSelector(getPublicWarningStore, function (publicWarningStore) {
9754
10235
  return (publicWarningStore == null ? void 0 : publicWarningStore.formState) || '';
@@ -9756,8 +10237,8 @@ var getPublicWarningFormState = createSelector(getPublicWarningStore, function (
9756
10237
  var getPublicWarningFormError = createSelector(getPublicWarningStore, function (publicWarningStore) {
9757
10238
  return publicWarningStore == null ? void 0 : publicWarningStore.error;
9758
10239
  });
9759
- var getSelectedPublicWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
9760
- return (publicWarningStore == null ? void 0 : publicWarningStore.selectedPublicWarningId) || '';
10240
+ var getSelectedWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
10241
+ return (publicWarningStore == null ? void 0 : publicWarningStore.selectedWarningId) || '';
9761
10242
  });
9762
10243
  var getSelectedPublicIsFormDirty = createSelector(getPublicWarningStore, function (publicWarningStore) {
9763
10244
  return (publicWarningStore == null ? void 0 : publicWarningStore.isFormDirty) || false;
@@ -9795,50 +10276,49 @@ var PublicWarningStatus;
9795
10276
  })(PublicWarningStatus || (PublicWarningStatus = {}));
9796
10277
 
9797
10278
  var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9798
- var defaultMapPreset = _ref.defaultMapPreset,
10279
+ var editor = _ref.editor,
10280
+ defaultMapPreset = _ref.defaultMapPreset,
9799
10281
  selectedAviationProduct = _ref.selectedAviationProduct,
9800
10282
  _ref$warningType = _ref.warningType,
9801
10283
  warningType = _ref$warningType === void 0 ? 'public' : _ref$warningType,
9802
- mode = _ref.mode;
9803
- var publicWarning = useSelector(function (store) {
9804
- return getPublicWarning(store);
9805
- });
9806
- var publicWarningObject = useSelector(function (store) {
9807
- return getPublicWarningObject(store);
9808
- });
9809
- var publicWarningFormAction = useSelector(function (store) {
9810
- return getPublicWarningFormState(store);
9811
- });
9812
- var publicWarningFormError = useSelector(function (store) {
9813
- return getPublicWarningFormError(store);
9814
- });
9815
- var publicWarningEditor = useSelector(function (store) {
9816
- return getPublicWarningEditor(store);
9817
- });
10284
+ mode = _ref.mode,
10285
+ onFormSubmit = _ref.onFormSubmit;
10286
+ var publicWarning = useSelector(getPublicWarning);
10287
+ var publicWarningObject = useSelector(getPublicWarningObject);
10288
+ var publicWarningFormAction = useSelector(getPublicWarningFormState);
10289
+ var publicWarningFormError = useSelector(getPublicWarningFormError);
9818
10290
  var _useAuthenticationCon = useAuthenticationContext$1(),
9819
10291
  auth = _useAuthenticationCon.auth;
9820
- var isEditor = publicWarningEditor === (auth == null ? void 0 : auth.username) || false;
10292
+ var isEditor = editor === (auth == null ? void 0 : auth.username) || false;
9821
10293
  var dispatch = useDispatch();
9822
10294
  var publishForm = function publishForm(newFormValues) {
9823
- dispatch(publicWarningFormActions.publishWarning({
9824
- publicWarning: {
9825
- warningDetail: newFormValues,
9826
- status: PublicWarningStatus.PUBLISHED
9827
- }
9828
- }));
10295
+ if (warningType === 'public') {
10296
+ dispatch(publicWarningFormActions.publishWarning({
10297
+ publicWarning: {
10298
+ warningDetail: newFormValues,
10299
+ status: PublicWarningStatus.PUBLISHED,
10300
+ type: warningType
10301
+ },
10302
+ refetchWarnings: onFormSubmit
10303
+ }));
10304
+ }
9829
10305
  };
9830
10306
  var clearForm = function clearForm() {
9831
10307
  dispatch(publicWarningFormActions.removeAllAreas());
9832
10308
  };
9833
10309
  var saveForm = function saveForm(newFormValues) {
9834
10310
  var status = newFormValues.linked_to_id ? PublicWarningStatus.DRAFT_PUBLISHED : PublicWarningStatus.DRAFT;
9835
- dispatch(publicWarningFormActions.saveWarning({
9836
- publicWarning: {
9837
- warningDetail: newFormValues,
9838
- status: status,
9839
- editor: auth == null ? void 0 : auth.username
9840
- }
9841
- }));
10311
+ if (warningType === 'public') {
10312
+ dispatch(publicWarningFormActions.saveWarning({
10313
+ publicWarning: {
10314
+ warningDetail: newFormValues,
10315
+ status: status,
10316
+ editor: auth == null ? void 0 : auth.username,
10317
+ type: warningType
10318
+ },
10319
+ refetchWarnings: onFormSubmit
10320
+ }));
10321
+ }
9842
10322
  };
9843
10323
  var onFormDirty = function onFormDirty(isFormDirty) {
9844
10324
  dispatch(publicWarningFormActions.setFormDirty({
@@ -9861,12 +10341,16 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9861
10341
  if ((selectedAviationProduct == null ? void 0 : selectedAviationProduct.status) === 'DRAFT') {
9862
10342
  return false;
9863
10343
  }
10344
+ if (publicWarningFormAction === 'edit') {
10345
+ return false;
10346
+ }
9864
10347
  if (mode === 'new') {
9865
10348
  return false;
9866
10349
  }
9867
10350
  return true;
9868
10351
  };
9869
10352
  var isReadOnly = getIsReadOnly();
10353
+ var formMode = publicWarningFormAction === 'edit' ? 'edit' : mode;
9870
10354
  var onAddObject = function onAddObject() {
9871
10355
  dispatch(uiActions.setToggleOpenDialog({
9872
10356
  type: uiTypes.DialogTypes.AreaObjectLoader,
@@ -9887,7 +10371,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9887
10371
  onAddObject: onAddObject,
9888
10372
  selectedAviationProduct: selectedAviationProduct,
9889
10373
  warningType: warningType,
9890
- mode: mode
10374
+ mode: formMode
9891
10375
  });
9892
10376
  };
9893
10377
 
@@ -10511,26 +10995,23 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10511
10995
  });
10512
10996
  };
10513
10997
 
10514
- /* *
10515
- * Licensed under the Apache License, Version 2.0 (the "License");
10516
- * you may not use this file except in compliance with the License.
10517
- * You may obtain a copy of the License at
10518
- *
10519
- * http://www.apache.org/licenses/LICENSE-2.0
10520
- *
10521
- * Unless required by applicable law or agreed to in writing, software
10522
- * distributed under the License is distributed on an "AS IS" BASIS,
10523
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10524
- * See the License for the specific language governing permissions and
10525
- * limitations under the License.
10526
- *
10527
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10528
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
10529
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
10530
- * */
10998
+ var _excluded$6 = ["sigmetAirmetDetails"];
10999
+ function isCancelAirmet(warningDetail) {
11000
+ return warningDetail.cancelsAirmetSequenceId !== undefined;
11001
+ }
11002
+ function isCancelSigmet(warningDetail) {
11003
+ return warningDetail.cancelsSigmetSequenceId !== undefined;
11004
+ }
11005
+ var flattenPublicWarning = function flattenPublicWarning(publicWarning) {
11006
+ if (publicWarning.type === 'public') {
11007
+ return {};
11008
+ }
11009
+ var sigmetAirmetDetails = publicWarning.sigmetAirmetDetails,
11010
+ rest = _objectWithoutPropertiesLoose(publicWarning, _excluded$6);
11011
+ return Object.assign({}, rest, sigmetAirmetDetails);
11012
+ };
10531
11013
  var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(apiAirmet) {
10532
11014
  var airmet = apiAirmet.airmet;
10533
- var cancelAirmet = apiAirmet == null ? void 0 : apiAirmet.airmet;
10534
11015
  var areas = [];
10535
11016
  if (airmet.startGeometry) {
10536
11017
  areas.push({
@@ -10551,23 +11032,23 @@ var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(api
10551
11032
  lastUpdatedTime: apiAirmet.lastUpdateDate,
10552
11033
  productStatus: airmet.status,
10553
11034
  warningDetail: {
10554
- descriptionOriginal: '',
10555
- descriptionTranslation: '',
10556
- areas: areas,
11035
+ id: airmet.uuid,
10557
11036
  phenomenon: airmet.phenomenon,
11037
+ areas: areas,
10558
11038
  validFrom: airmet.validDateStart,
10559
11039
  validUntil: airmet.validDateEnd,
11040
+ incident: airmet.sequence,
10560
11041
  level: 'AIR',
10561
11042
  probability: 0,
10562
- incident: airmet.sequence,
10563
- firName: airmet.firName,
10564
- cancelId: isInstanceOfCancelAirmet(airmet) ? cancelAirmet.cancelsAirmetSequenceId : undefined
10565
- }
11043
+ descriptionOriginal: '',
11044
+ descriptionTranslation: ''
11045
+ },
11046
+ sigmetAirmetDetails: Object.assign({}, airmet),
11047
+ type: 'airmet'
10566
11048
  };
10567
11049
  };
10568
11050
  var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(apiSigmet) {
10569
11051
  var sigmet = apiSigmet.sigmet;
10570
- var cancelSigmet = apiSigmet == null ? void 0 : apiSigmet.sigmet;
10571
11052
  var areas = [];
10572
11053
  if (sigmet.startGeometry) {
10573
11054
  areas.push({
@@ -10604,18 +11085,19 @@ var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(api
10604
11085
  lastUpdatedTime: apiSigmet.lastUpdateDate,
10605
11086
  productStatus: sigmet.status,
10606
11087
  warningDetail: {
10607
- descriptionOriginal: '',
10608
- descriptionTranslation: '',
10609
- areas: areas,
11088
+ id: sigmet.uuid,
10610
11089
  phenomenon: sigmet.phenomenon,
11090
+ areas: areas,
10611
11091
  validFrom: sigmet.validDateStart,
10612
11092
  validUntil: sigmet.validDateEnd,
11093
+ incident: sigmet.sequence,
10613
11094
  level: 'SIG',
10614
11095
  probability: 0,
10615
- incident: sigmet.sequence,
10616
- firName: sigmet.firName,
10617
- cancelId: isInstanceOfCancelSigmet(sigmet) ? cancelSigmet.cancelsSigmetSequenceId : undefined
10618
- }
11096
+ descriptionOriginal: '',
11097
+ descriptionTranslation: ''
11098
+ },
11099
+ sigmetAirmetDetails: Object.assign({}, sigmet),
11100
+ type: 'sigmet'
10619
11101
  };
10620
11102
  };
10621
11103
  var mapProductStatusToWarningStatus = function mapProductStatusToWarningStatus(productStatus) {
@@ -10631,15 +11113,9 @@ var mapProductStatusToWarningStatus = function mapProductStatusToWarningStatus(p
10631
11113
  return PublicWarningStatus.EXPIRED;
10632
11114
  }
10633
11115
  };
10634
- var transformSigmetToProductFormat = function transformSigmetToProductFormat(warning, config) {
10635
- var _warning$sigmet;
10636
- var fir = (warning == null || (_warning$sigmet = warning.sigmet) == null ? void 0 : _warning$sigmet.locationIndicatorATSR) || config.active_firs[0];
10637
- var firConfig = config.fir_areas[fir];
11116
+ var transformSigmetToProductFormat = function transformSigmetToProductFormat(warning) {
10638
11117
  var sigmet = warning == null ? void 0 : warning.sigmet;
10639
11118
  var cancelSigmet = warning == null ? void 0 : warning.sigmet;
10640
- if (!firConfig) {
10641
- throw new Error("FIR " + fir + " not found in configuration");
10642
- }
10643
11119
  return Object.assign({
10644
11120
  uuid: (sigmet == null ? void 0 : sigmet.uuid) || 'default',
10645
11121
  // Use a fallback UUID or handle undefined
@@ -10680,15 +11156,9 @@ var transformSigmetToProductFormat = function transformSigmetToProductFormat(war
10680
11156
  validDateEndOfSigmetToCancel: cancelSigmet.validDateEndOfSigmetToCancel
10681
11157
  });
10682
11158
  };
10683
- var transformAirmetToProductFormat = function transformAirmetToProductFormat(warning, config) {
10684
- var _warning$airmet;
10685
- var fir = (warning == null || (_warning$airmet = warning.airmet) == null ? void 0 : _warning$airmet.locationIndicatorATSR) || config.active_firs[0];
10686
- var firConfig = config.fir_areas[fir];
11159
+ var transformAirmetToProductFormat = function transformAirmetToProductFormat(warning) {
10687
11160
  var airmet = warning == null ? void 0 : warning.airmet;
10688
11161
  var cancelAirmet = warning == null ? void 0 : warning.airmet;
10689
- if (!firConfig) {
10690
- throw new Error("FIR " + fir + " not found in configuration");
10691
- }
10692
11162
  return Object.assign({
10693
11163
  uuid: (airmet == null ? void 0 : airmet.uuid) || 'default',
10694
11164
  // Use a fallback UUID or handle undefined
@@ -10801,6 +11271,179 @@ var getEmptyAirmetWarning = function getEmptyAirmetWarning() {
10801
11271
  }
10802
11272
  };
10803
11273
  };
11274
+ var renewAviationProduct = function renewAviationProduct(aviationWarning, productConfig) {
11275
+ var warningDetail = aviationWarning.sigmetAirmetDetails;
11276
+ var newValidUntil = 'phenomenon' in warningDetail ? getDefaultValidUntilValue(productConfig, warningDetail.phenomenon, warningDetail.locationIndicatorATSR, warningDetail.validDateEnd) : warningDetail.validDateEnd;
11277
+ var renewedWarningDetail = Object.assign({}, warningDetail, {
11278
+ validDateStart: warningDetail.validDateEnd,
11279
+ validDateEnd: newValidUntil,
11280
+ status: ProductStatus.DRAFT,
11281
+ uuid: undefined,
11282
+ sequence: '-1'
11283
+ });
11284
+ return Object.assign({}, aviationWarning, {
11285
+ sigmetAirmetDetails: renewedWarningDetail
11286
+ });
11287
+ };
11288
+ var duplicateAviationProduct = function duplicateAviationProduct(aviationWarning) {
11289
+ var duplicatedWarningDetail = Object.assign({}, aviationWarning.sigmetAirmetDetails, {
11290
+ status: ProductStatus.DRAFT,
11291
+ uuid: undefined,
11292
+ sequence: '-1'
11293
+ });
11294
+ return Object.assign({}, aviationWarning, {
11295
+ sigmetAirmetDetails: duplicatedWarningDetail
11296
+ });
11297
+ };
11298
+
11299
+ /* *
11300
+ * Licensed under the Apache License, Version 2.0 (the "License");
11301
+ * you may not use this file except in compliance with the License.
11302
+ * You may obtain a copy of the License at
11303
+ *
11304
+ * http://www.apache.org/licenses/LICENSE-2.0
11305
+ *
11306
+ * Unless required by applicable law or agreed to in writing, software
11307
+ * distributed under the License is distributed on an "AS IS" BASIS,
11308
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11309
+ * See the License for the specific language governing permissions and
11310
+ * limitations under the License.
11311
+ *
11312
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11313
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
11314
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
11315
+ * */
11316
+ var config = getConfig();
11317
+ var publicWarningBaseUrl = config.GW_DRAWINGS_BASE_URL || '';
11318
+ // API
11319
+ var getPublicWarningList = function getPublicWarningList(auth) {
11320
+ return fetch(publicWarningBaseUrl + "/warnings", {
11321
+ headers: getHeaders(auth)
11322
+ }).then(handleResponse).then(function (warnings) {
11323
+ return warnings.map(function (warning) {
11324
+ return Object.assign({}, warning, {
11325
+ type: 'public'
11326
+ });
11327
+ });
11328
+ });
11329
+ };
11330
+ var updatePublicWarningEditor = function updatePublicWarningEditor(warningId, isEditor, auth) {
11331
+ return fetch(publicWarningBaseUrl + "/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false') + "&force=true", {
11332
+ headers: getHeaders(auth),
11333
+ method: 'POST'
11334
+ }).then(handleResponse);
11335
+ };
11336
+
11337
+ /**
11338
+ * @param disabled - Disables fetching, but still returns cached values.
11339
+ * https://tanstack.com/query/v4/docs/framework/react/guides/disabling-queries
11340
+ */
11341
+ var usePublicWarnings = function usePublicWarnings(disabled) {
11342
+ if (disabled === void 0) {
11343
+ disabled = false;
11344
+ }
11345
+ return useAuthQuery(['public-warning-list'], getPublicWarningList, disabled, 1000 * 60 * 5);
11346
+ };
11347
+ var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
11348
+ var queryClient = useQueryClient();
11349
+ var _useAuthenticationCon = useAuthenticationContext(),
11350
+ auth = _useAuthenticationCon.auth;
11351
+ var dispatch = useDispatch();
11352
+ return useMutation(Object.assign({
11353
+ mutationFn: function mutationFn(_ref) {
11354
+ var id = _ref.id,
11355
+ isEditor = _ref.isEditor;
11356
+ if (!auth) {
11357
+ throw new Error('Authentication context not found');
11358
+ }
11359
+ return updatePublicWarningEditor(id, isEditor, auth);
11360
+ }
11361
+ }, optimisticUpdate(['public-warning-list'], queryClient, function (w, _ref2) {
11362
+ var isEditor = _ref2.isEditor;
11363
+ return Object.assign({}, w, {
11364
+ editor: isEditor ? auth.username : undefined
11365
+ });
11366
+ }, function (error) {
11367
+ dispatch(publicWarningFormActions.setFormError({
11368
+ message: error.message
11369
+ }));
11370
+ }), {
11371
+ onSettled: function () {
11372
+ var _onSettled = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data, e, _ref3) {
11373
+ var isEditor;
11374
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
11375
+ while (1) switch (_context.prev = _context.next) {
11376
+ case 0:
11377
+ isEditor = _ref3.isEditor;
11378
+ dispatch(snackbarActions.openSnackbar({
11379
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
11380
+ key: isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor'
11381
+ }));
11382
+ case 2:
11383
+ case "end":
11384
+ return _context.stop();
11385
+ }
11386
+ }, _callee);
11387
+ }));
11388
+ function onSettled(_x, _x2, _x3) {
11389
+ return _onSettled.apply(this, arguments);
11390
+ }
11391
+ return onSettled;
11392
+ }()
11393
+ }));
11394
+ };
11395
+
11396
+ /* *
11397
+ * Licensed under the Apache License, Version 2.0 (the "License");
11398
+ * you may not use this file except in compliance with the License.
11399
+ * You may obtain a copy of the License at
11400
+ *
11401
+ * http://www.apache.org/licenses/LICENSE-2.0
11402
+ *
11403
+ * Unless required by applicable law or agreed to in writing, software
11404
+ * distributed under the License is distributed on an "AS IS" BASIS,
11405
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11406
+ * See the License for the specific language governing permissions and
11407
+ * limitations under the License.
11408
+ *
11409
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11410
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
11411
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
11412
+ * */
11413
+ var useWarnings = function useWarnings(disabled) {
11414
+ var _usePublicWarnings = usePublicWarnings(disabled),
11415
+ publicWarnings = _usePublicWarnings.data,
11416
+ refetchPublicWarnings = _usePublicWarnings.refetch,
11417
+ isFetchingPublicWarnings = _usePublicWarnings.isFetching,
11418
+ publicWarningsError = _usePublicWarnings.error,
11419
+ dataUpdatedAt = _usePublicWarnings.dataUpdatedAt;
11420
+ var _useAirmetList = useAirmetList(disabled),
11421
+ airmetWarnings = _useAirmetList.data,
11422
+ refetchAirmet = _useAirmetList.refetch,
11423
+ isFetchingAirmet = _useAirmetList.isFetching;
11424
+ var _useSigmetList = useSigmetList(disabled),
11425
+ sigmetWarnings = _useSigmetList.data,
11426
+ refetchSigmet = _useSigmetList.refetch,
11427
+ isFetchingSigmet = _useSigmetList.isFetching;
11428
+ var combinedWarnings = useMemo(function () {
11429
+ var transformedSigmets = (sigmetWarnings == null ? void 0 : sigmetWarnings.map(transformSigmetToWarningFormat)) || [];
11430
+ var transformedAirmets = (airmetWarnings == null ? void 0 : airmetWarnings.map(transformAirmetToWarningFormat)) || [];
11431
+ return concat(publicWarnings || [], transformedSigmets, transformedAirmets);
11432
+ }, [publicWarnings, sigmetWarnings, airmetWarnings]);
11433
+ var refetchWarnings = function refetchWarnings() {
11434
+ void refetchPublicWarnings();
11435
+ void refetchAirmet();
11436
+ void refetchSigmet();
11437
+ };
11438
+ var isFetching = isFetchingPublicWarnings || isFetchingAirmet || isFetchingSigmet;
11439
+ return {
11440
+ combinedWarnings: combinedWarnings,
11441
+ refetchWarnings: refetchWarnings,
11442
+ isFetching: isFetching,
11443
+ error: publicWarningsError || undefined,
11444
+ dataUpdatedAt: dataUpdatedAt
11445
+ };
11446
+ };
10804
11447
 
10805
11448
  var warningFormConfirmationOptions = function warningFormConfirmationOptions(t) {
10806
11449
  return {
@@ -10820,7 +11463,6 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10820
11463
  source = _ref$source === void 0 ? 'app' : _ref$source,
10821
11464
  startPosition = _ref.startPosition,
10822
11465
  defaultMapPreset = _ref.defaultMapPreset;
10823
- var warningsApi = getWarningsApi();
10824
11466
  var _useSetupDialog = useSetupDialog(publicWarningDialogType, source),
10825
11467
  dialogOrder = _useSetupDialog.dialogOrder,
10826
11468
  setDialogOrder = _useSetupDialog.setDialogOrder,
@@ -10838,66 +11480,98 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10838
11480
  var isFormDirty = useSelector(function (store) {
10839
11481
  return getSelectedPublicIsFormDirty(store);
10840
11482
  });
10841
- var publicWarningStatus = useSelector(function (store) {
10842
- return getPublicWarningStatus(store);
10843
- });
10844
- var selectedWarningId = useSelector(function (store) {
10845
- return getSelectedPublicWarningId(store);
10846
- });
10847
- var publicWarningEditor = useSelector(function (store) {
10848
- return getPublicWarningEditor(store);
10849
- });
11483
+ var publicWarningState = useSelector(getPublicWarning);
11484
+ var _ref2 = publicWarningState || {},
11485
+ status = _ref2.status,
11486
+ editor = _ref2.editor;
11487
+ var _useWarnings = useWarnings(true),
11488
+ combinedWarnings = _useWarnings.combinedWarnings,
11489
+ refetchWarnings = _useWarnings.refetchWarnings,
11490
+ isFetching = _useWarnings.isFetching;
11491
+ var _React$useState = React__default.useState(isFetching),
11492
+ hasFetched = _React$useState[0],
11493
+ setHasFetched = _React$useState[1];
11494
+ React__default.useEffect(function () {
11495
+ if (isFetching) {
11496
+ setHasFetched(true);
11497
+ }
11498
+ }, [isFetching]);
11499
+ var selectedWarningId = useSelector(getSelectedWarningId);
11500
+ var selectedWarningObject = useSelector(getPublicWarning);
10850
11501
  var warningType = useSelector(getWarningType);
11502
+ var selectedWarning = combinedWarnings == null ? void 0 : combinedWarnings.find(function (w) {
11503
+ return w.id === selectedWarningId;
11504
+ });
10851
11505
  var _useAuthenticationCon = useAuthenticationContext$1(),
10852
11506
  auth = _useAuthenticationCon.auth;
10853
- var isEditor = publicWarningEditor === (auth == null ? void 0 : auth.username) || false;
10854
- var getLatestEditor = /*#__PURE__*/function () {
10855
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
10856
- var latestWarnings, latestWarning;
11507
+ var isEditor = (selectedWarning == null ? void 0 : selectedWarning.editor) === (auth == null ? void 0 : auth.username) || false;
11508
+ var shouldGiveEditorWarning = React__default.useCallback(function (newEditor, oldEditor) {
11509
+ var oldEditorIsYou = oldEditor && oldEditor === (auth == null ? void 0 : auth.username);
11510
+ if (oldEditorIsYou && newEditor !== oldEditor) {
11511
+ dispatch(publicWarningFormActions.setFormError({
11512
+ severity: 'warning',
11513
+ message: TAKEOVER_MESSAGE
11514
+ }));
11515
+ }
11516
+ }, [dispatch, auth == null ? void 0 : auth.username]);
11517
+ var previousSelectedWarning = usePrevious(selectedWarning);
11518
+ var refetchCurrentEditor = /*#__PURE__*/function () {
11519
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
11520
+ var newWarnings, newSelectedWarning;
10857
11521
  return _regeneratorRuntime().wrap(function _callee$(_context) {
10858
11522
  while (1) switch (_context.prev = _context.next) {
10859
11523
  case 0:
10860
11524
  _context.next = 2;
10861
- return warningsApi.getWarnings();
11525
+ return getPublicWarningList(auth);
10862
11526
  case 2:
10863
- latestWarnings = _context.sent;
10864
- latestWarning = latestWarnings.data.find(function (warning) {
10865
- return warning.id === selectedWarningId;
11527
+ newWarnings = _context.sent;
11528
+ newSelectedWarning = newWarnings == null ? void 0 : newWarnings.find(function (w) {
11529
+ return w.id === selectedWarningId;
10866
11530
  });
10867
- return _context.abrupt("return", (latestWarning == null ? void 0 : latestWarning.editor) || '');
11531
+ return _context.abrupt("return", (newSelectedWarning == null ? void 0 : newSelectedWarning.editor) || '');
10868
11532
  case 5:
10869
11533
  case "end":
10870
11534
  return _context.stop();
10871
11535
  }
10872
11536
  }, _callee);
10873
11537
  }));
10874
- return function getLatestEditor() {
10875
- return _ref2.apply(this, arguments);
11538
+ return function refetchCurrentEditor() {
11539
+ return _ref3.apply(this, arguments);
10876
11540
  };
10877
11541
  }();
11542
+ React__default.useEffect(function () {
11543
+ if (editor !== (selectedWarning == null ? void 0 : selectedWarning.editor) && status !== 'TODO') {
11544
+ void setIsEditor(editor !== (auth == null ? void 0 : auth.username));
11545
+ }
11546
+ // eslint-disable-next-line react-hooks/exhaustive-deps
11547
+ }, [editor]);
11548
+ React__default.useEffect(function () {
11549
+ if ((selectedWarning == null ? void 0 : selectedWarning.id) !== (previousSelectedWarning == null ? void 0 : previousSelectedWarning.id)) {
11550
+ dispatch(publicWarningFormActions.removeFormError());
11551
+ }
11552
+ }, [selectedWarning == null ? void 0 : selectedWarning.id, previousSelectedWarning == null ? void 0 : previousSelectedWarning.id, dispatch]);
11553
+ React__default.useEffect(function () {
11554
+ // Only give editor warning when the change in selectedWarning is from a refetch
11555
+ if (hasFetched) {
11556
+ setHasFetched(false);
11557
+ shouldGiveEditorWarning(selectedWarning == null ? void 0 : selectedWarning.editor, previousSelectedWarning == null ? void 0 : previousSelectedWarning.editor);
11558
+ }
11559
+ // eslint-disable-next-line react-hooks/exhaustive-deps
11560
+ }, [selectedWarning == null ? void 0 : selectedWarning.editor]);
11561
+ var updatePublicWarningEditor = useMutatePublicWarningEditor();
10878
11562
  var setIsEditor = /*#__PURE__*/function () {
10879
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(isReadOnly) {
11563
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(isReadOnly) {
10880
11564
  var username, latestEditor;
10881
11565
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
10882
11566
  while (1) switch (_context2.prev = _context2.next) {
10883
11567
  case 0:
10884
11568
  username = (auth == null ? void 0 : auth.username) || ''; // make sure to get the latest changes if you are editing an existing warning
10885
- if (!selectedWarningId) {
10886
- _context2.next = 7;
10887
- break;
10888
- }
10889
- _context2.next = 4;
10890
- return getLatestEditor();
10891
- case 4:
10892
- _context2.t0 = _context2.sent;
10893
- _context2.next = 8;
10894
- break;
10895
- case 7:
10896
- _context2.t0 = '';
10897
- case 8:
10898
- latestEditor = _context2.t0;
11569
+ _context2.next = 3;
11570
+ return refetchCurrentEditor();
11571
+ case 3:
11572
+ latestEditor = _context2.sent;
10899
11573
  if (!(!selectedWarningId || !isReadOnly && username === latestEditor || isReadOnly && latestEditor !== username)) {
10900
- _context2.next = 12;
11574
+ _context2.next = 8;
10901
11575
  break;
10902
11576
  }
10903
11577
  // currently editing a new warning or
@@ -10907,34 +11581,40 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10907
11581
  dispatch(publicWarningFormActions.setFormValues({
10908
11582
  formState: isReadOnly ? 'readonly' : ''
10909
11583
  }));
11584
+ // If the editor was changed in a different window, refetch the warnings
11585
+ if (latestEditor !== (selectedWarning == null ? void 0 : selectedWarning.editor)) {
11586
+ void refetchWarnings();
11587
+ }
10910
11588
  return _context2.abrupt("return", true);
10911
- case 12:
11589
+ case 8:
10912
11590
  if (!(!isReadOnly && isAlreadyEdited(latestEditor, username))) {
10913
- _context2.next = 15;
11591
+ _context2.next = 11;
10914
11592
  break;
10915
11593
  }
10916
- _context2.next = 15;
11594
+ _context2.next = 11;
10917
11595
  return confirmDialog({
10918
11596
  title: t('warning-edit-mode-title'),
10919
11597
  description: t('warning-edit-mode-description'),
10920
11598
  confirmLabel: t('warning-edit-mode-confirm'),
10921
11599
  cancelLabel: t('warning-dialog-cancel')
10922
11600
  });
10923
- case 15:
10924
- dispatch(publicWarningFormActions.toggleEditorWarning({
10925
- warningId: selectedWarningId,
10926
- isEditor: !isReadOnly,
10927
- username: username
11601
+ case 11:
11602
+ dispatch(publicWarningFormActions.setFormValues({
11603
+ formState: isReadOnly ? 'readonly' : ''
10928
11604
  }));
11605
+ updatePublicWarningEditor.mutate({
11606
+ id: selectedWarningId,
11607
+ isEditor: !isReadOnly
11608
+ });
10929
11609
  return _context2.abrupt("return", true);
10930
- case 17:
11610
+ case 14:
10931
11611
  case "end":
10932
11612
  return _context2.stop();
10933
11613
  }
10934
11614
  }, _callee2);
10935
11615
  }));
10936
11616
  return function setIsEditor(_x) {
10937
- return _ref3.apply(this, arguments);
11617
+ return _ref4.apply(this, arguments);
10938
11618
  };
10939
11619
  }();
10940
11620
  var onChangeFormMode = function onChangeFormMode(isReadOnly) {
@@ -10961,7 +11641,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10961
11641
  }
10962
11642
  };
10963
11643
  var closeDialog = /*#__PURE__*/function () {
10964
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
11644
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
10965
11645
  var mayProceed;
10966
11646
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
10967
11647
  while (1) switch (_context4.prev = _context4.next) {
@@ -10992,7 +11672,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10992
11672
  }, _callee4);
10993
11673
  }));
10994
11674
  return function closeDialog() {
10995
- return _ref5.apply(this, arguments);
11675
+ return _ref6.apply(this, arguments);
10996
11676
  };
10997
11677
  }();
10998
11678
  var _useAirmetList = useAirmetList(true),
@@ -11008,15 +11688,26 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11008
11688
  var updatedWarningType = selectedSigmet ? 'sigmet' : selectedAirmet && 'airmet' || warningType;
11009
11689
  var _useProductConfig = useProductConfig(updatedWarningType, !isDialogOpen),
11010
11690
  aviationConfig = _useProductConfig.data;
11011
- var selectedSigmetProduct = selectedSigmet && aviationConfig ? transformSigmetToProductFormat(selectedSigmet, aviationConfig) : getEmptySigmetWarning();
11012
- var selectedAirmetProduct = selectedAirmet && aviationConfig ? transformAirmetToProductFormat(selectedAirmet, aviationConfig) : getEmptyAirmetWarning();
11013
- var selectedAviationProduct = updatedWarningType === 'sigmet' ? selectedSigmetProduct : updatedWarningType === 'airmet' && selectedAirmetProduct || undefined;
11691
+ var selectedSigmetProduct = selectedSigmet && aviationConfig ? transformSigmetToProductFormat(selectedSigmet) : getEmptySigmetWarning();
11692
+ var selectedAirmetProduct = selectedAirmet && aviationConfig ? transformAirmetToProductFormat(selectedAirmet) : getEmptyAirmetWarning();
11693
+ var selectedAviationProduct = React__default.useMemo(function () {
11694
+ if (['sigmet', 'airmet'].includes((selectedWarningObject == null ? void 0 : selectedWarningObject.type) || '') && aviationConfig) {
11695
+ return flattenPublicWarning(selectedWarningObject);
11696
+ }
11697
+ if (updatedWarningType === 'sigmet') {
11698
+ return selectedSigmetProduct;
11699
+ }
11700
+ if (updatedWarningType === 'airmet') {
11701
+ return selectedAirmetProduct;
11702
+ }
11703
+ return undefined;
11704
+ }, [selectedWarningObject, updatedWarningType, selectedSigmetProduct, selectedAirmetProduct, aviationConfig]);
11014
11705
  var productCanBe = updatedWarningType === 'public' ? ['DRAFTED', 'DISCARDED', 'PUBLISHED'] : (selectedSigmet == null ? void 0 : selectedSigmet.canbe) || (selectedAirmet == null ? void 0 : selectedAirmet.canbe);
11015
11706
  var mode = getProductFormMode(productCanBe, !selectedWarningId ? null : selectedAviationProduct);
11016
11707
  // Readonly also in case you are not creating a new warning and you are not set as the editor
11017
- var isReadOnly = formAction === 'readonly' || !isEditor && publicWarningStatus !== undefined;
11708
+ var isReadOnly = formAction === 'readonly' || !isEditor && status !== undefined;
11018
11709
  // Only show toggle if in draft status
11019
- var shouldHideFormToggleMode = publicWarningStatus !== 'DRAFT' && publicWarningStatus !== 'DRAFT_PUBLISHED';
11710
+ var shouldHideFormToggleMode = status !== 'DRAFT' && status !== 'DRAFT_PUBLISHED';
11020
11711
  return jsxs(Fragment, {
11021
11712
  children: [jsx(PublicWarningsFormDialog, {
11022
11713
  isOpen: isDialogOpen,
@@ -11030,14 +11721,18 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11030
11721
  isReadOnly: isReadOnly,
11031
11722
  onChangeFormMode: onChangeFormMode,
11032
11723
  shouldHideFormMode: shouldHideFormToggleMode,
11033
- publicWarningEditor: publicWarningEditor,
11724
+ publicWarningEditor: (selectedWarning == null ? void 0 : selectedWarning.editor) || undefined,
11034
11725
  selectedAviationProduct: selectedAviationProduct,
11035
11726
  warningType: updatedWarningType,
11036
11727
  children: jsx(PublicWarningsFormConnect, {
11728
+ editor: (selectedWarning == null ? void 0 : selectedWarning.editor) || undefined,
11037
11729
  defaultMapPreset: defaultMapPreset,
11038
11730
  selectedAviationProduct: selectedAviationProduct,
11039
11731
  warningType: updatedWarningType,
11040
- mode: mode
11732
+ mode: mode,
11733
+ onFormSubmit: function onFormSubmit() {
11734
+ return refetchWarnings();
11735
+ }
11041
11736
  })
11042
11737
  }), jsx(AreaObjectLoaderConnect, {})]
11043
11738
  });
@@ -11081,6 +11776,7 @@ var getSortedStatus = function getSortedStatus(status) {
11081
11776
  }
11082
11777
  };
11083
11778
  var getWarningWithoutIdStatusEditor = function getWarningWithoutIdStatusEditor(warning) {
11779
+ var _warningDetail$areas;
11084
11780
  warning.id;
11085
11781
  var warningDetail = warning.warningDetail;
11086
11782
  warning.status;
@@ -11091,7 +11787,7 @@ var getWarningWithoutIdStatusEditor = function getWarningWithoutIdStatusEditor(w
11091
11787
  warningDetail.proposal_id;
11092
11788
  warningDetail.warning_handle_uuid;
11093
11789
  var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded2);
11094
- var areas = warningDetail.areas.map(function (_ref) {
11790
+ var areas = (_warningDetail$areas = warningDetail.areas) == null ? void 0 : _warningDetail$areas.map(function (_ref) {
11095
11791
  _ref.published_warning_uuid;
11096
11792
  var area = _objectWithoutPropertiesLoose(_ref, _excluded3);
11097
11793
  return area;
@@ -11205,7 +11901,6 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11205
11901
  })
11206
11902
  })
11207
11903
  }), jsxs(Menu, {
11208
- title: t("filter-" + id),
11209
11904
  open: Boolean(anchorEl),
11210
11905
  onClose: function onClose() {
11211
11906
  return setAnchorEl(null);
@@ -11279,17 +11974,12 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11279
11974
  return updateFilter(id, emptyFilterId, checked, only);
11280
11975
  },
11281
11976
  labelStyle: {
11282
- width: 'fit-content',
11283
- fontSize: '16px',
11284
- display: 'flex',
11285
- alignItems: 'center',
11286
- gap: 1
11977
+ fontSize: '16px'
11287
11978
  },
11288
11979
  label: jsx(Fragment, {
11289
11980
  children: t(getTranslationKey(emptyFilterId, id))
11290
11981
  })
11291
- }, id + "-" + emptyFilterId), Object.keys(options).map(function (_optionId) {
11292
- var optionId = _optionId;
11982
+ }, id + "-" + emptyFilterId), Object.keys(options).map(function (optionId) {
11293
11983
  if (optionId === emptyFilterId) {
11294
11984
  return null;
11295
11985
  }
@@ -11301,14 +11991,29 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11301
11991
  return updateFilter(id, optionId, checked, only);
11302
11992
  },
11303
11993
  labelStyle: Object.assign({}, getLevelStyle(warningColor), {
11304
- width: 'fit-content',
11305
- fontSize: '16px',
11306
- display: 'flex',
11307
- alignItems: 'center',
11308
- gap: 1
11994
+ width: LevelColors[optionId] ? 'fit-content' : '100%',
11995
+ fontSize: '16px'
11309
11996
  }),
11310
- label: jsxs(Fragment, {
11311
- children: [getWarningPhenomenaIcon(optionId), ' ', t(getTranslationKey(optionId, id))]
11997
+ label: jsx(CustomTooltip, {
11998
+ title: t(getTranslationKey(optionId, id)),
11999
+ placement: "bottom",
12000
+ children: jsxs(Box, {
12001
+ "data-testid": "wrapper-" + optionId,
12002
+ sx: {
12003
+ display: 'flex',
12004
+ alignItems: 'center',
12005
+ gap: 1,
12006
+ maxWidth: 200
12007
+ },
12008
+ children: [getPhenomenaIcon(optionId), jsx(Typography, {
12009
+ noWrap: true,
12010
+ variant: "body2",
12011
+ sx: {
12012
+ fontSize: '16px'
12013
+ },
12014
+ children: t(getTranslationKey(optionId, id))
12015
+ })]
12016
+ })
11312
12017
  })
11313
12018
  }, id + "-" + optionId);
11314
12019
  })]
@@ -11465,6 +12170,8 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
11465
12170
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
11466
12171
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
11467
12172
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12173
+ _ref$onActionAviation = _ref.onActionAviationWarning,
12174
+ onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
11468
12175
  t = _ref.t;
11469
12176
  var duplicate = {
11470
12177
  text: t('warning-list-button-duplicate'),
@@ -11473,6 +12180,13 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
11473
12180
  },
11474
12181
  icon: jsx(Copy, {})
11475
12182
  };
12183
+ var aviationDuplicate = {
12184
+ text: t('warning-list-button-duplicate'),
12185
+ action: function action() {
12186
+ return onActionAviationWarning(warning, ProductAction.DUPLICATE);
12187
+ },
12188
+ icon: jsx(Copy, {})
12189
+ };
11476
12190
  // disable Expire option if warning is not active
11477
12191
  var shouldDisableExpire = !dateUtils.isBetween(dateUtils.getNowUtc(), dateUtils.createDate(warning.warningDetail.validFrom), dateUtils.createDate(warning.warningDetail.validUntil), '[]');
11478
12192
  switch (warning.status) {
@@ -11531,11 +12245,44 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
11531
12245
  icon: jsx(Delete, {})
11532
12246
  }];
11533
12247
  default:
11534
- return [];
12248
+ switch (warning.productStatus) {
12249
+ case ProductStatus.DRAFT:
12250
+ return [aviationDuplicate];
12251
+ case ProductStatus.PUBLISHED:
12252
+ if (warning.type !== 'public' && (isInstanceOfCancelSigmet(warning.sigmetAirmetDetails) || isInstanceOfCancelAirmet(warning.sigmetAirmetDetails))) {
12253
+ return [];
12254
+ }
12255
+ return [{
12256
+ text: t('warning-list-button-renew'),
12257
+ action: function action() {
12258
+ if (warning) {
12259
+ onActionAviationWarning(warning);
12260
+ }
12261
+ },
12262
+ icon: jsx(Update, {})
12263
+ }, aviationDuplicate];
12264
+ case ProductStatus.CANCELLED:
12265
+ return [];
12266
+ case ProductStatus.EXPIRED:
12267
+ if (warning.type !== 'public' && (isInstanceOfCancelSigmet(warning.sigmetAirmetDetails) || isInstanceOfCancelAirmet(warning.sigmetAirmetDetails))) {
12268
+ return [];
12269
+ }
12270
+ return [{
12271
+ text: t('warning-list-button-renew'),
12272
+ action: function action() {
12273
+ if (warning) {
12274
+ onActionAviationWarning(warning, ProductAction.RENEW);
12275
+ }
12276
+ },
12277
+ icon: jsx(Update, {})
12278
+ }, aviationDuplicate];
12279
+ default:
12280
+ return [];
12281
+ }
11535
12282
  }
11536
12283
  };
11537
12284
 
11538
- var _excluded$2 = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning"];
12285
+ var _excluded$2 = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onActionAviationWarning"];
11539
12286
  var renderLevelText = function renderLevelText(levelString) {
11540
12287
  if (!levelString) {
11541
12288
  return null;
@@ -11572,10 +12319,10 @@ var renderStatusIcon = function renderStatusIcon(warning, status) {
11572
12319
  icon: icon
11573
12320
  });
11574
12321
  };
11575
- if (warning.productStatus === ProductStatus.PUBLISHED && warning.warningDetail.cancelId) {
11576
- return getStatusTag("Cnls " + warning.warningDetail.cancelId, 'red');
12322
+ if (warning.productStatus === ProductStatus.PUBLISHED && warning.type !== 'public' && (isCancelAirmet(warning.sigmetAirmetDetails) || isCancelSigmet(warning.sigmetAirmetDetails))) {
12323
+ return getStatusTag("Cnls " + (isCancelAirmet(warning.sigmetAirmetDetails) ? warning.sigmetAirmetDetails.cancelsAirmetSequenceId : warning.sigmetAirmetDetails.cancelsSigmetSequenceId), 'red');
11577
12324
  }
11578
- if (warning.productStatus === ProductStatus.CANCELLED && warning.warningDetail.cancelId === undefined) {
12325
+ if (warning.productStatus === ProductStatus.CANCELLED && warning.type !== 'public') {
11579
12326
  return getStatusTag('Cnld', 'red');
11580
12327
  }
11581
12328
  switch (status) {
@@ -11630,12 +12377,14 @@ var WarningListItem = function WarningListItem(_ref) {
11630
12377
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
11631
12378
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
11632
12379
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12380
+ _ref$onActionAviation = _ref.onActionAviationWarning,
12381
+ onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
11633
12382
  props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
11634
12383
  var _useWarningsTranslati = useWarningsTranslation(),
11635
12384
  t = _useWarningsTranslati.t;
11636
12385
  var phenomenonDetails = allPhenomenaDict[warning.warningDetail.phenomenon];
11637
12386
  var objectNameText = ((_warning$warningDetai = warning.warningDetail.areas) == null || (_warning$warningDetai = _warning$warningDetai[0]) == null ? void 0 : _warning$warningDetai.objectName) || '-';
11638
- var objectHoverText = warning.warningDetail.firName ? warning.warningDetail.firName : objectNameText;
12387
+ var objectHoverText = warning.type !== 'public' ? warning.sigmetAirmetDetails.firName : objectNameText;
11639
12388
  var _useOverflowCheck = useOverflowCheck(objectNameText),
11640
12389
  objectNameRef = _useOverflowCheck.ref;
11641
12390
  var phenomenonText = phenomenonDetails != null && phenomenonDetails.translationKey ? t(phenomenonDetails.translationKey) : '-';
@@ -11683,7 +12432,8 @@ var WarningListItem = function WarningListItem(_ref) {
11683
12432
  onDeleteReviewWarning: onDeleteReviewWarning,
11684
12433
  onDeleteWarning: onDeleteWarning,
11685
12434
  onExpireWarning: onExpireWarning,
11686
- onWithdrawWarning: onWithdrawWarning
12435
+ onWithdrawWarning: onWithdrawWarning,
12436
+ onActionAviationWarning: onActionAviationWarning
11687
12437
  }),
11688
12438
  buttonIcon: jsx(Options, {})
11689
12439
  }),
@@ -12065,8 +12815,8 @@ var PublicWarningList = function PublicWarningList(_ref) {
12065
12815
  _ref$isLoading = _ref.isLoading,
12066
12816
  isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
12067
12817
  error = _ref.error,
12068
- _ref$selectedPublicWa = _ref.selectedPublicWarningId,
12069
- selectedPublicWarningId = _ref$selectedPublicWa === void 0 ? '' : _ref$selectedPublicWa,
12818
+ _ref$selectedWarningI = _ref.selectedWarningId,
12819
+ selectedWarningId = _ref$selectedWarningI === void 0 ? '' : _ref$selectedWarningI,
12070
12820
  lastUpdatedTime = _ref.lastUpdatedTime,
12071
12821
  _ref$onSelectWarning = _ref.onSelectWarning,
12072
12822
  onSelectWarning = _ref$onSelectWarning === void 0 ? function () {} : _ref$onSelectWarning,
@@ -12084,11 +12834,14 @@ var PublicWarningList = function PublicWarningList(_ref) {
12084
12834
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
12085
12835
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
12086
12836
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12837
+ _ref$onActionAviation = _ref.onActionAviationWarning,
12838
+ onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
12087
12839
  hoveredFeatureId = _ref.hoveredFeatureId,
12088
12840
  expandedSections = _ref.expandedSections,
12089
12841
  setExpandedSections = _ref.setExpandedSections;
12090
12842
  var updateFilter = filterHookState.updateFilter,
12091
- allSelected = filterHookState.allSelected;
12843
+ allSelected = filterHookState.allSelected,
12844
+ filterState = filterHookState.filterState;
12092
12845
  var _useWarningsTranslati = useWarningsTranslation(),
12093
12846
  t = _useWarningsTranslati.t;
12094
12847
  var _React$useState = React__default.useState({
@@ -12220,7 +12973,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
12220
12973
  children: jsx(FilterList, {
12221
12974
  isAllSelected: allSelected,
12222
12975
  onClickAll: onClickAll,
12223
- filterState: filterHookState.filterState,
12976
+ filterState: filterState,
12224
12977
  updateFilter: updateFilter
12225
12978
  })
12226
12979
  }), jsxs(Grid2, {
@@ -12370,9 +13123,10 @@ var PublicWarningList = function PublicWarningList(_ref) {
12370
13123
  onEditWarning: onEditWarning,
12371
13124
  onDeleteWarning: onDeleteWarning,
12372
13125
  onDeleteReviewWarning: onDeleteReviewWarning,
12373
- activeWarningId: selectedPublicWarningId,
13126
+ activeWarningId: selectedWarningId,
12374
13127
  onExpireWarning: onExpireWarning,
12375
- onWithdrawWarning: onWithdrawWarning
13128
+ onWithdrawWarning: onWithdrawWarning,
13129
+ onActionAviationWarning: onActionAviationWarning
12376
13130
  }, key);
12377
13131
  }
12378
13132
  });
@@ -12383,6 +13137,51 @@ var PublicWarningList = function PublicWarningList(_ref) {
12383
13137
  });
12384
13138
  };
12385
13139
 
13140
+ /* *
13141
+ * Licensed under the Apache License, Version 2.0 (the "License");
13142
+ * you may not use this file except in compliance with the License.
13143
+ * You may obtain a copy of the License at
13144
+ *
13145
+ * http://www.apache.org/licenses/LICENSE-2.0
13146
+ *
13147
+ * Unless required by applicable law or agreed to in writing, software
13148
+ * distributed under the License is distributed on an "AS IS" BASIS,
13149
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13150
+ * See the License for the specific language governing permissions and
13151
+ * limitations under the License.
13152
+ *
13153
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
13154
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
13155
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
13156
+ * */
13157
+ var publicWarningsAdapter = createEntityAdapter({
13158
+ selectId: function selectId(warning) {
13159
+ return warning.id;
13160
+ }
13161
+ });
13162
+ var initialState = {
13163
+ warnings: publicWarningsAdapter.getInitialState(),
13164
+ isLoading: true,
13165
+ lastUpdatedTime: '',
13166
+ filterState: {}
13167
+ };
13168
+ var slice = createSlice({
13169
+ initialState: initialState,
13170
+ name: 'publicWarnings',
13171
+ reducers: {
13172
+ setWarningFilters: function setWarningFilters(draft, action) {
13173
+ var _action$payload = action.payload,
13174
+ filterState = _action$payload.filterState,
13175
+ panelId = _action$payload.panelId;
13176
+ if (panelId) {
13177
+ draft.filterState[panelId] = filterState;
13178
+ }
13179
+ }
13180
+ }
13181
+ });
13182
+ var publicWarningsReducer = slice.reducer,
13183
+ publicWarningActions = slice.actions;
13184
+
12386
13185
  /* *
12387
13186
  * Licensed under the Apache License, Version 2.0 (the "License");
12388
13187
  * you may not use this file except in compliance with the License.
@@ -12455,106 +13254,16 @@ var selectors = /*#__PURE__*/Object.freeze({
12455
13254
  selectAllPublicWarnings: selectAllPublicWarnings
12456
13255
  });
12457
13256
 
12458
- var ConfirmDeleteWarningDialog = function ConfirmDeleteWarningDialog(_ref) {
12459
- var _ref$onClose = _ref.onClose,
12460
- onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,
12461
- title = _ref.title,
12462
- description = _ref.description,
12463
- request = _ref.request,
12464
- confirmLabel = _ref.confirmLabel,
12465
- callback = _ref.callback,
12466
- isLocked = _ref.isLocked;
12467
- var _useWarningsTranslati = useWarningsTranslation(),
12468
- t = _useWarningsTranslati.t;
12469
- var defaultError = isLocked ? t('warning-dialog-delete-islocked') : undefined;
12470
- var _React$useState = React__default.useState(false),
12471
- isLoading = _React$useState[0],
12472
- setIsLoading = _React$useState[1];
12473
- var _React$useState2 = React__default.useState(defaultError),
12474
- error = _React$useState2[0],
12475
- setError = _React$useState2[1];
12476
- var onSubmit = /*#__PURE__*/function () {
12477
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
12478
- return _regeneratorRuntime().wrap(function _callee$(_context) {
12479
- while (1) switch (_context.prev = _context.next) {
12480
- case 0:
12481
- setIsLoading(true);
12482
- _context.prev = 1;
12483
- _context.next = 4;
12484
- return request();
12485
- case 4:
12486
- callback();
12487
- setIsLoading(false);
12488
- _context.next = 12;
12489
- break;
12490
- case 8:
12491
- _context.prev = 8;
12492
- _context.t0 = _context["catch"](1);
12493
- setError(getAxiosErrorMessage(_context.t0));
12494
- setIsLoading(false);
12495
- case 12:
12496
- case "end":
12497
- return _context.stop();
12498
- }
12499
- }, _callee, null, [[1, 8]]);
12500
- }));
12501
- return function onSubmit() {
12502
- return _ref2.apply(this, arguments);
12503
- };
12504
- }();
12505
- return jsx(ConfirmationDialog, Object.assign({
12506
- title: title,
12507
- open: true,
12508
- confirmLabel: confirmLabel,
12509
- cancelLabel: t('warning-dialog-cancel'),
12510
- description: !error ? description : '',
12511
- onClose: onClose,
12512
- onSubmit: onSubmit,
12513
- isLoading: isLoading,
12514
- sx: {
12515
- width: 330
12516
- }
12517
- }, error && {
12518
- content: jsxs(Box, {
12519
- sx: {
12520
- marginBottom: 0
12521
- },
12522
- children: [jsx(AlertBanner, {
12523
- title: error,
12524
- severity: isLocked ? 'warning' : 'error'
12525
- }), jsx(Typography, {
12526
- variant: "body1",
12527
- sx: {
12528
- marginTop: 1
12529
- },
12530
- children: description
12531
- })]
12532
- })
12533
- }));
12534
- };
12535
-
12536
- /* *
12537
- * Licensed under the Apache License, Version 2.0 (the "License");
12538
- * you may not use this file except in compliance with the License.
12539
- * You may obtain a copy of the License at
12540
- *
12541
- * http://www.apache.org/licenses/LICENSE-2.0
12542
- *
12543
- * Unless required by applicable law or agreed to in writing, software
12544
- * distributed under the License is distributed on an "AS IS" BASIS,
12545
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12546
- * See the License for the specific language governing permissions and
12547
- * limitations under the License.
12548
- *
12549
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12550
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
12551
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
12552
- * */
12553
13257
  var getLevelsForDomainFilter = function getLevelsForDomainFilter(domainFilter) {
12554
13258
  return Object.keys(domainFilter).flatMap(function (domain) {
12555
13259
  return domainFilter[domain] ? domainLevels[domain] : [];
12556
13260
  });
12557
13261
  };
13262
+ var getPhenomenaForDomainFilter = function getPhenomenaForDomainFilter(domainFilter) {
13263
+ return Object.keys(domainFilter).flatMap(function (domain) {
13264
+ return domainFilter[domain] ? domainPhenomena[domain] : [];
13265
+ });
13266
+ };
12558
13267
  var getFilterOptions = function getFilterOptions(defaultFilter, allOptions, savedFilter) {
12559
13268
  var pickedFilterOptions = pick(defaultFilter, [emptyFilterId].concat(allOptions));
12560
13269
  // keep options state from savedFilter if it still exists
@@ -12577,20 +13286,18 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12577
13286
  updatedPickedLevels = _getFilterOptions[0],
12578
13287
  allLevelsSelected = _getFilterOptions[1];
12579
13288
  // phenomenon
13289
+ var domainPhenomena = useMemo(function () {
13290
+ return getPhenomenaForDomainFilter(pickedDomainFilter);
13291
+ }, [pickedDomainFilter]);
12580
13292
  var warningsPhenomena = useMemo(function () {
12581
13293
  return getFiltersFromWarnings(warnings, 'phenomenon');
12582
13294
  }, [warnings]);
12583
- // filter out aviation phenomena
12584
- var phenomenaKeysToFilter = new Set(Object.values(Phenomenon$1));
12585
- var relevantPhenomena = warningsPhenomena.filter(function (item) {
12586
- return phenomenaKeysToFilter.has(item);
12587
- });
13295
+ var relevantPhenomena = useMemo(function () {
13296
+ return domainPhenomena.filter(function (phenomenon) {
13297
+ return warningsPhenomena.includes(phenomenon);
13298
+ });
13299
+ }, [warningsPhenomena, domainPhenomena]);
12588
13300
  relevantPhenomena.push(emptyFilterId);
12589
- var defaultPhenomenonFilter = useMemo(function () {
12590
- return Object.fromEntries(relevantPhenomena.map(function (key) {
12591
- return [key, true];
12592
- }));
12593
- }, [relevantPhenomena]);
12594
13301
  var _getFilterOptions2 = getFilterOptions(defaultPhenomenonFilter, relevantPhenomena, pickedPhenomenonFilter),
12595
13302
  updatedPickedPhenomena = _getFilterOptions2[0],
12596
13303
  allPhenomenaSelected = _getFilterOptions2[1];
@@ -12621,7 +13328,14 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12621
13328
  useEffect(function () {
12622
13329
  // when the preset changes, update the filters
12623
13330
  if (presetFilterState) {
12624
- onUpdateFilters(assign({}, initialFilters, presetFilterState), 'system');
13331
+ var initialFiltersWithPresets = {
13332
+ incident: Object.assign({}, makeFilterFromList(relevantIncidents), presetFilterState.incident),
13333
+ source: Object.assign({}, makeFilterFromList(relevantSources), presetFilterState.source),
13334
+ domain: Object.assign({}, initialFilters.domain, presetFilterState.domain),
13335
+ phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState.phenomenon),
13336
+ level: Object.assign({}, initialFilters.level, presetFilterState.level)
13337
+ };
13338
+ onUpdateFilters(initialFiltersWithPresets, 'system');
12625
13339
  } else {
12626
13340
  // for a preset without filters saved use the initial filters
12627
13341
  onUpdateFilters(Object.assign({}, initialFilters, {
@@ -12688,7 +13402,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12688
13402
  if (!pickedLevelFilter[level]) {
12689
13403
  return false;
12690
13404
  }
12691
- var phenomenon = getValue(Phenomenon$1, warning.warningDetail.phenomenon);
13405
+ var phenomenon = getValue(AllPhenomenaKeys, warning.warningDetail.phenomenon);
12692
13406
  if (!pickedPhenomenonFilter[phenomenon]) {
12693
13407
  return false;
12694
13408
  }
@@ -12717,41 +13431,115 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12717
13431
  incident: updatedPickedIncidents,
12718
13432
  source: updatedPickedSources
12719
13433
  }
12720
- };
13434
+ };
13435
+ };
13436
+
13437
+ var ConfirmDeleteWarningDialog = function ConfirmDeleteWarningDialog(_ref) {
13438
+ var _ref$onClose = _ref.onClose,
13439
+ onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,
13440
+ title = _ref.title,
13441
+ description = _ref.description,
13442
+ request = _ref.request,
13443
+ confirmLabel = _ref.confirmLabel,
13444
+ callback = _ref.callback,
13445
+ isLocked = _ref.isLocked;
13446
+ var _useWarningsTranslati = useWarningsTranslation(),
13447
+ t = _useWarningsTranslati.t;
13448
+ var defaultError = isLocked ? t('warning-dialog-delete-islocked') : undefined;
13449
+ var _React$useState = React__default.useState(false),
13450
+ isLoading = _React$useState[0],
13451
+ setIsLoading = _React$useState[1];
13452
+ var _React$useState2 = React__default.useState(defaultError),
13453
+ error = _React$useState2[0],
13454
+ setError = _React$useState2[1];
13455
+ var onSubmit = /*#__PURE__*/function () {
13456
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
13457
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
13458
+ while (1) switch (_context.prev = _context.next) {
13459
+ case 0:
13460
+ setIsLoading(true);
13461
+ _context.prev = 1;
13462
+ _context.next = 4;
13463
+ return request();
13464
+ case 4:
13465
+ callback();
13466
+ setIsLoading(false);
13467
+ _context.next = 12;
13468
+ break;
13469
+ case 8:
13470
+ _context.prev = 8;
13471
+ _context.t0 = _context["catch"](1);
13472
+ setError(getAxiosErrorMessage(_context.t0));
13473
+ setIsLoading(false);
13474
+ case 12:
13475
+ case "end":
13476
+ return _context.stop();
13477
+ }
13478
+ }, _callee, null, [[1, 8]]);
13479
+ }));
13480
+ return function onSubmit() {
13481
+ return _ref2.apply(this, arguments);
13482
+ };
13483
+ }();
13484
+ return jsx(ConfirmationDialog, Object.assign({
13485
+ title: title,
13486
+ open: true,
13487
+ confirmLabel: confirmLabel,
13488
+ cancelLabel: t('warning-dialog-cancel'),
13489
+ description: !error ? description : '',
13490
+ onClose: onClose,
13491
+ onSubmit: onSubmit,
13492
+ isLoading: isLoading,
13493
+ sx: {
13494
+ width: 330
13495
+ }
13496
+ }, error && {
13497
+ content: jsxs(Box, {
13498
+ sx: {
13499
+ marginBottom: 0
13500
+ },
13501
+ children: [jsx(AlertBanner, {
13502
+ title: error,
13503
+ severity: isLocked ? 'warning' : 'error'
13504
+ }), jsx(Typography, {
13505
+ variant: "body1",
13506
+ sx: {
13507
+ marginTop: 1
13508
+ },
13509
+ children: description
13510
+ })]
13511
+ })
13512
+ }));
12721
13513
  };
12722
13514
 
12723
13515
  var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12724
13516
  var panelId = _ref.panelId,
12725
13517
  presetFilterState = _ref.presetFilterState;
13518
+ var updatePublicWarningEditor = useMutatePublicWarningEditor();
12726
13519
  var _useWarningsTranslati = useWarningsTranslation(),
12727
13520
  t = _useWarningsTranslati.t;
12728
13521
  var dispatch = useDispatch();
12729
13522
  var confirmDialog = useConfirmationDialog();
12730
13523
  var _useAuthenticationCon = useAuthenticationContext$1(),
12731
13524
  auth = _useAuthenticationCon.auth;
12732
- var _useAirmetList = useAirmetList(),
12733
- airmetList = _useAirmetList.data,
12734
- refetchAirmetList = _useAirmetList.refetch,
12735
- isFetchingAirmet = _useAirmetList.isFetching;
12736
- var _useSigmetList = useSigmetList(),
12737
- sigmetList = _useSigmetList.data,
12738
- refetchSigmetList = _useSigmetList.refetch,
12739
- isFetchingSigmet = _useSigmetList.isFetching;
13525
+ var _useWarnings = useWarnings(),
13526
+ combinedWarnings = _useWarnings.combinedWarnings,
13527
+ refetchWarnings = _useWarnings.refetchWarnings,
13528
+ isFetching = _useWarnings.isFetching,
13529
+ error = _useWarnings.error,
13530
+ dataUpdatedAt = _useWarnings.dataUpdatedAt;
13531
+ var lastUpdateTime = dateUtils.dateToString(new Date(dataUpdatedAt), dateUtils.DATE_FORMAT_HOURS);
12740
13532
  var _React$useState = React__default.useState(undefined),
12741
13533
  confirmDialogOptions = _React$useState[0],
12742
13534
  setConfirmDialogOptions = _React$useState[1];
12743
- var publicWarnings = useSelector(selectAllPublicWarnings);
12744
- var selectedPublicWarningId = useSelector(getSelectedPublicWarningId);
12745
- var isLoading = useSelector(isPublicWarningsLoading) || isFetchingAirmet || isFetchingSigmet;
12746
- var error = useSelector(getPublicWarningsError);
12747
- var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12748
- var lastUpdatedTime = useSelector(getPublicWarningsLastUpdatedTime);
13535
+ var selectedWarningId = useSelector(getSelectedWarningId);
12749
13536
  var savedFilterState = useSelector(function (store) {
12750
13537
  return getWarningsFilterById(store, panelId);
12751
13538
  });
13539
+ var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12752
13540
  var warningsApi = getWarningsApi();
12753
13541
  var openPublicWarningDialog = /*#__PURE__*/function () {
12754
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, publicWarning, warningType) {
13542
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, warning, warningType) {
12755
13543
  var mayProceed;
12756
13544
  return _regeneratorRuntime().wrap(function _callee$(_context) {
12757
13545
  while (1) switch (_context.prev = _context.next) {
@@ -12774,8 +13562,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12774
13562
  }
12775
13563
  return _context.abrupt("return");
12776
13564
  case 6:
12777
- dispatch(publicWarningFormActions.openPublicWarningFormDialog(Object.assign({}, publicWarning && {
12778
- publicWarning: publicWarning
13565
+ dispatch(publicWarningFormActions.openPublicWarningFormDialog(Object.assign({}, warning && {
13566
+ warning: warning
12779
13567
  }, {
12780
13568
  formState: formAction,
12781
13569
  warningType: warningType,
@@ -12803,24 +13591,24 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12803
13591
  while (1) switch (_context2.prev = _context2.next) {
12804
13592
  case 0:
12805
13593
  if (!(publicWarning.id && auth != null && auth.username && !publicWarning.editor)) {
12806
- _context2.next = 6;
13594
+ _context2.next = 7;
12807
13595
  break;
12808
13596
  }
12809
- dispatch(publicWarningFormActions.toggleEditorWarning({
12810
- warningId: publicWarning.id,
12811
- isEditor: true,
12812
- username: auth == null ? void 0 : auth.username
12813
- }));
12814
- _context2.next = 4;
13597
+ refetchWarnings();
13598
+ updatePublicWarningEditor.mutate({
13599
+ id: publicWarning.id,
13600
+ isEditor: true
13601
+ });
13602
+ _context2.next = 5;
12815
13603
  return openPublicWarningDialog('', Object.assign({}, publicWarning, {
12816
13604
  editor: auth == null ? void 0 : auth.username
12817
13605
  }));
12818
- case 4:
12819
- _context2.next = 7;
13606
+ case 5:
13607
+ _context2.next = 8;
12820
13608
  break;
12821
- case 6:
12822
- void openPublicWarningDialog('', publicWarning);
12823
13609
  case 7:
13610
+ void openPublicWarningDialog('', publicWarning);
13611
+ case 8:
12824
13612
  case "end":
12825
13613
  return _context2.stop();
12826
13614
  }
@@ -12890,6 +13678,25 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12890
13678
  return _ref5.apply(this, arguments);
12891
13679
  };
12892
13680
  }();
13681
+ var warningType = useSelector(getWarningType);
13682
+ var _useProductConfig = useProductConfig(warningType, false),
13683
+ aviationConfig = _useProductConfig.data;
13684
+ var handleAviationProductClick = function handleAviationProductClick(warning, actionType) {
13685
+ if (!warning) {
13686
+ return;
13687
+ }
13688
+ var type = warning.warningDetail.level === 'SIG' ? 'sigmet' : 'airmet';
13689
+ var updatedWarning;
13690
+ switch (actionType) {
13691
+ case 'RENEW':
13692
+ updatedWarning = renewAviationProduct(warning, aviationConfig);
13693
+ break;
13694
+ case 'DUPLICATE':
13695
+ updatedWarning = duplicateAviationProduct(warning);
13696
+ break;
13697
+ }
13698
+ void openPublicWarningDialog('edit', updatedWarning, type);
13699
+ };
12893
13700
  var openSnackbar = function openSnackbar(message) {
12894
13701
  dispatch(snackbarActions.openSnackbar({
12895
13702
  type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
@@ -12931,29 +13738,15 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12931
13738
  // close confirm dialog
12932
13739
  setConfirmDialogOptions(undefined);
12933
13740
  // Close warning dialog if needed
12934
- if (selectedPublicWarningId === warningId) {
13741
+ if (selectedWarningId === warningId) {
12935
13742
  dispatch(uiActions.setToggleOpenDialog({
12936
13743
  setOpen: false,
12937
13744
  type: publicWarningDialogType
12938
13745
  }));
12939
13746
  }
12940
13747
  openSnackbar(snackbarMessage);
12941
- fetchWarnings();
13748
+ refetchWarnings();
12942
13749
  };
12943
- var fetchWarnings = React__default.useCallback(function () {
12944
- void refetchAirmetList();
12945
- void refetchSigmetList();
12946
- dispatch(publicWarningActions.fetchWarnings());
12947
- }, [dispatch, refetchAirmetList, refetchSigmetList]);
12948
- React__default.useEffect(function () {
12949
- // fetch warnings on mount
12950
- fetchWarnings();
12951
- }, [fetchWarnings]);
12952
- var combinedWarnings = React__default.useMemo(function () {
12953
- var transformedSigmets = (sigmetList == null ? void 0 : sigmetList.map(transformSigmetToWarningFormat)) || [];
12954
- var transformedAirmets = (airmetList == null ? void 0 : airmetList.map(transformAirmetToWarningFormat)) || [];
12955
- return publicWarnings.concat(transformedSigmets).concat(transformedAirmets);
12956
- }, [publicWarnings, sigmetList, airmetList]);
12957
13750
  var onUpdateFilters = React__default.useCallback(function (filterState, origin) {
12958
13751
  dispatch(publicWarningActions.setWarningFilters({
12959
13752
  filterState: filterState,
@@ -12980,8 +13773,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12980
13773
  }, [filteredWarnings, expandedSections]);
12981
13774
  var allFeatures = React__default.useMemo(function () {
12982
13775
  return filteredWarningsByExpandedSections.flatMap(function (warning) {
12983
- var _warning$warningDetai;
12984
- return (warning == null ? void 0 : warning.id) && (warning == null || (_warning$warningDetai = warning.warningDetail) == null || (_warning$warningDetai = _warning$warningDetai.areas) == null ? void 0 : _warning$warningDetai.filter(function (area) {
13776
+ return (warning == null ? void 0 : warning.id) && (warning != null && warning.warningDetail && warning.warningDetail.areas ? warning.warningDetail.areas.filter(function (area) {
12985
13777
  return area.geoJSON;
12986
13778
  }).map(function (area) {
12987
13779
  var isAviationWarning = warning.warningDetail.level === 'SIG' || warning.warningDetail.level === 'AIR';
@@ -12991,7 +13783,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12991
13783
  originalId: warning.id,
12992
13784
  geoJSON: styledGeoJSON
12993
13785
  };
12994
- })) || [];
13786
+ }) : []) || [];
12995
13787
  }).filter(function (feature) {
12996
13788
  return feature.id;
12997
13789
  });
@@ -13005,8 +13797,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
13005
13797
  warnings: filteredWarnings,
13006
13798
  expandedSections: expandedSections,
13007
13799
  setExpandedSections: setExpandedSections,
13008
- isLoading: isLoading,
13009
- error: error,
13800
+ isLoading: isFetching,
13801
+ error: error || undefined,
13010
13802
  onSelectWarning: selectWarning,
13011
13803
  onCreateWarning: createWarning,
13012
13804
  onEditWarning: editWarning,
@@ -13014,11 +13806,12 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
13014
13806
  onDeleteReviewWarning: deleteReviewWarning,
13015
13807
  onExpireWarning: expireWarning,
13016
13808
  onWithdrawWarning: withdrawWarning,
13017
- selectedPublicWarningId: selectedPublicWarningId,
13018
- lastUpdatedTime: lastUpdatedTime,
13019
- onRefetchWarnings: fetchWarnings,
13809
+ selectedWarningId: selectedWarningId,
13810
+ lastUpdatedTime: lastUpdateTime,
13811
+ onRefetchWarnings: refetchWarnings,
13020
13812
  filterHookState: filterHookState,
13021
- hoveredFeatureId: hoveredFeatureId
13813
+ hoveredFeatureId: hoveredFeatureId,
13814
+ onActionAviationWarning: handleAviationProductClick
13022
13815
  }), confirmDialogOptions && jsx(ConfirmDeleteWarningDialog, {
13023
13816
  onClose: function onClose() {
13024
13817
  return setConfirmDialogOptions(undefined);
@@ -13089,48 +13882,49 @@ var componentsLookUp = function componentsLookUp(payload, apiProps) {
13089
13882
  var getErrorMessage = function getErrorMessage(error) {
13090
13883
  return isAxiosError(error) ? getAxiosErrorMessage(error) : error.message;
13091
13884
  };
13092
- var getToggleEditorSuccessMessage = function getToggleEditorSuccessMessage(isEditor) {
13093
- return isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor';
13094
- };
13095
13885
  var publicWarningFormListener = createListenerMiddleware();
13096
13886
  publicWarningFormListener.startListening({
13097
- actionCreator: publicWarningFormActions.toggleEditorWarning,
13887
+ actionCreator: publicWarningFormActions.publishWarning,
13098
13888
  effect: function () {
13099
13889
  var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
13100
- var payload, warningId, isEditor, username, warningsApi, isDialogOpen;
13890
+ var payload, publicWarning, refetchWarnings, publishedWarning, isDialogOpen;
13101
13891
  return _regeneratorRuntime().wrap(function _callee$(_context) {
13102
13892
  while (1) switch (_context.prev = _context.next) {
13103
13893
  case 0:
13104
13894
  payload = _ref.payload;
13105
13895
  listenerApi.cancelActiveListeners();
13106
13896
  _context.prev = 2;
13107
- warningId = payload.warningId, isEditor = payload.isEditor, username = payload.username;
13108
- warningsApi = getWarningsApi();
13109
- _context.next = 7;
13110
- return warningsApi.toggleEditorWarning(warningId, isEditor);
13111
- case 7:
13112
- // update list to show correct avatar
13113
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13114
- listenerApi.dispatch(publicWarningFormActions.toggleEditorWarningSuccess({
13115
- isEditor: isEditor,
13116
- username: username,
13897
+ publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13898
+ _context.next = 6;
13899
+ return saveOrUpdateWarning(publicWarning);
13900
+ case 6:
13901
+ publishedWarning = _context.sent;
13902
+ if (refetchWarnings) {
13903
+ refetchWarnings();
13904
+ }
13905
+ listenerApi.dispatch(publicWarningFormActions.publishWarningSuccess({
13906
+ publicWarning: publishedWarning,
13117
13907
  message: {
13118
13908
  type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13119
- key: getToggleEditorSuccessMessage(isEditor)
13909
+ key: 'warning-publish-succes'
13120
13910
  }
13121
13911
  }));
13122
- _context.next = 15;
13912
+ listenerApi.dispatch(uiActions.setToggleOpenDialog({
13913
+ type: publicWarningDialogType,
13914
+ setOpen: false
13915
+ }));
13916
+ _context.next = 16;
13123
13917
  break;
13124
- case 11:
13125
- _context.prev = 11;
13918
+ case 12:
13919
+ _context.prev = 12;
13126
13920
  _context.t0 = _context["catch"](2);
13127
13921
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13128
13922
  errorEffect(listenerApi.dispatch, getErrorMessage(_context.t0), isDialogOpen);
13129
- case 15:
13923
+ case 16:
13130
13924
  case "end":
13131
13925
  return _context.stop();
13132
13926
  }
13133
- }, _callee, null, [[2, 11]]);
13927
+ }, _callee, null, [[2, 12]]);
13134
13928
  }));
13135
13929
  function effect(_x, _x2) {
13136
13930
  return _effect.apply(this, arguments);
@@ -13139,32 +13933,31 @@ publicWarningFormListener.startListening({
13139
13933
  }()
13140
13934
  });
13141
13935
  publicWarningFormListener.startListening({
13142
- actionCreator: publicWarningFormActions.publishWarning,
13936
+ actionCreator: publicWarningFormActions.saveWarning,
13143
13937
  effect: function () {
13144
13938
  var _effect2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2, listenerApi) {
13145
- var payload, publicWarning, publishedWarning, isDialogOpen;
13939
+ var payload, publicWarning, refetchWarnings, savedWarning, isDialogOpen;
13146
13940
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
13147
13941
  while (1) switch (_context2.prev = _context2.next) {
13148
13942
  case 0:
13149
13943
  payload = _ref2.payload;
13150
13944
  listenerApi.cancelActiveListeners();
13151
13945
  _context2.prev = 2;
13152
- publicWarning = payload.publicWarning;
13946
+ publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13153
13947
  _context2.next = 6;
13154
13948
  return saveOrUpdateWarning(publicWarning);
13155
13949
  case 6:
13156
- publishedWarning = _context2.sent;
13157
- listenerApi.dispatch(publicWarningFormActions.publishWarningSuccess({
13158
- publicWarning: publishedWarning,
13950
+ savedWarning = _context2.sent;
13951
+ if (refetchWarnings) {
13952
+ refetchWarnings();
13953
+ }
13954
+ listenerApi.dispatch(publicWarningFormActions.saveWarningSuccess({
13955
+ publicWarning: savedWarning,
13159
13956
  message: {
13160
13957
  type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13161
- key: 'warning-publish-succes'
13958
+ key: 'warning-save-succes'
13162
13959
  }
13163
13960
  }));
13164
- listenerApi.dispatch(uiActions.setToggleOpenDialog({
13165
- type: publicWarningDialogType,
13166
- setOpen: false
13167
- }));
13168
13961
  _context2.next = 15;
13169
13962
  break;
13170
13963
  case 11:
@@ -13184,41 +13977,26 @@ publicWarningFormListener.startListening({
13184
13977
  return effect;
13185
13978
  }()
13186
13979
  });
13980
+ // Side effects/snackbar listeners
13187
13981
  publicWarningFormListener.startListening({
13188
- actionCreator: publicWarningFormActions.saveWarning,
13982
+ matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess),
13189
13983
  effect: function () {
13190
13984
  var _effect3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3, listenerApi) {
13191
- var payload, publicWarning, savedWarning, isDialogOpen;
13985
+ var payload, message, isDialogOpen;
13192
13986
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
13193
13987
  while (1) switch (_context3.prev = _context3.next) {
13194
13988
  case 0:
13195
13989
  payload = _ref3.payload;
13196
13990
  listenerApi.cancelActiveListeners();
13197
- _context3.prev = 2;
13198
- publicWarning = payload.publicWarning;
13199
- _context3.next = 6;
13200
- return saveOrUpdateWarning(publicWarning);
13201
- case 6:
13202
- savedWarning = _context3.sent;
13203
- listenerApi.dispatch(publicWarningFormActions.saveWarningSuccess({
13204
- publicWarning: savedWarning,
13205
- message: {
13206
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13207
- key: 'warning-save-succes'
13208
- }
13209
- }));
13210
- _context3.next = 14;
13211
- break;
13212
- case 10:
13213
- _context3.prev = 10;
13214
- _context3.t0 = _context3["catch"](2);
13991
+ message = payload.message;
13992
+ listenerApi.dispatch(snackbarActions.openSnackbar(message));
13215
13993
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13216
- errorEffect(listenerApi.dispatch, getErrorMessage(_context3.t0), isDialogOpen);
13217
- case 14:
13994
+ toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, false);
13995
+ case 6:
13218
13996
  case "end":
13219
13997
  return _context3.stop();
13220
13998
  }
13221
- }, _callee3, null, [[2, 10]]);
13999
+ }, _callee3);
13222
14000
  }));
13223
14001
  function effect(_x5, _x6) {
13224
14002
  return _effect3.apply(this, arguments);
@@ -13226,22 +14004,18 @@ publicWarningFormListener.startListening({
13226
14004
  return effect;
13227
14005
  }()
13228
14006
  });
13229
- // Side effects/snackbar listeners
13230
14007
  publicWarningFormListener.startListening({
13231
- matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess, publicWarningFormActions.toggleEditorWarningSuccess),
14008
+ matcher: isAnyOf(publicWarningFormActions.publishWarning, publicWarningFormActions.saveWarning),
13232
14009
  effect: function () {
13233
- var _effect4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref4, listenerApi) {
13234
- var payload, message, isDialogOpen;
14010
+ var _effect4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_, listenerApi) {
14011
+ var isDialogOpen;
13235
14012
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
13236
14013
  while (1) switch (_context4.prev = _context4.next) {
13237
14014
  case 0:
13238
- payload = _ref4.payload;
13239
14015
  listenerApi.cancelActiveListeners();
13240
- message = payload.message;
13241
- listenerApi.dispatch(snackbarActions.openSnackbar(message));
13242
14016
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13243
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, false);
13244
- case 6:
14017
+ toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, true);
14018
+ case 3:
13245
14019
  case "end":
13246
14020
  return _context4.stop();
13247
14021
  }
@@ -13253,38 +14027,15 @@ publicWarningFormListener.startListening({
13253
14027
  return effect;
13254
14028
  }()
13255
14029
  });
13256
- publicWarningFormListener.startListening({
13257
- matcher: isAnyOf(publicWarningFormActions.publishWarning, publicWarningFormActions.saveWarning),
13258
- effect: function () {
13259
- var _effect5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_, listenerApi) {
13260
- var isDialogOpen;
13261
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
13262
- while (1) switch (_context5.prev = _context5.next) {
13263
- case 0:
13264
- listenerApi.cancelActiveListeners();
13265
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13266
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, true);
13267
- case 3:
13268
- case "end":
13269
- return _context5.stop();
13270
- }
13271
- }, _callee5);
13272
- }));
13273
- function effect(_x9, _x10) {
13274
- return _effect5.apply(this, arguments);
13275
- }
13276
- return effect;
13277
- }()
13278
- });
13279
14030
  publicWarningFormListener.startListening({
13280
14031
  actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
13281
14032
  effect: function () {
13282
- var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(_ref5, listenerApi) {
14033
+ var _effect5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_ref4, listenerApi) {
13283
14034
  var payload, panelId;
13284
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
13285
- while (1) switch (_context6.prev = _context6.next) {
14035
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
14036
+ while (1) switch (_context5.prev = _context5.next) {
13286
14037
  case 0:
13287
- payload = _ref5.payload;
14038
+ payload = _ref4.payload;
13288
14039
  listenerApi.cancelActiveListeners();
13289
14040
  panelId = payload.panelId;
13290
14041
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
@@ -13294,35 +14045,35 @@ publicWarningFormListener.startListening({
13294
14045
  }));
13295
14046
  case 4:
13296
14047
  case "end":
13297
- return _context6.stop();
14048
+ return _context5.stop();
13298
14049
  }
13299
- }, _callee6);
14050
+ }, _callee5);
13300
14051
  }));
13301
- function effect(_x11, _x12) {
13302
- return _effect6.apply(this, arguments);
14052
+ function effect(_x9, _x10) {
14053
+ return _effect5.apply(this, arguments);
13303
14054
  }
13304
14055
  return effect;
13305
14056
  }()
13306
14057
  });
13307
14058
  var saveOrUpdateWarning = /*#__PURE__*/function () {
13308
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(publicWarning) {
14059
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(publicWarning) {
13309
14060
  var warningsApi, warningDetail, status, warning, newWarningId;
13310
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
13311
- while (1) switch (_context7.prev = _context7.next) {
14061
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
14062
+ while (1) switch (_context6.prev = _context6.next) {
13312
14063
  case 0:
13313
14064
  warningsApi = getWarningsApi();
13314
14065
  warningDetail = publicWarning.warningDetail, status = publicWarning.status;
13315
14066
  if (!warningDetail.id) {
13316
- _context7.next = 6;
14067
+ _context6.next = 6;
13317
14068
  break;
13318
14069
  }
13319
- _context7.next = 5;
14070
+ _context6.next = 5;
13320
14071
  return warningsApi.updateWarning(warningDetail.id, publicWarning);
13321
14072
  case 5:
13322
- return _context7.abrupt("return", publicWarning);
14073
+ return _context6.abrupt("return", publicWarning);
13323
14074
  case 6:
13324
14075
  if (!(status === 'PUBLISHED' && warningDetail.linked_to_id)) {
13325
- _context7.next = 11;
14076
+ _context6.next = 11;
13326
14077
  break;
13327
14078
  }
13328
14079
  warning = Object.assign({}, publicWarning, {
@@ -13330,28 +14081,28 @@ var saveOrUpdateWarning = /*#__PURE__*/function () {
13330
14081
  id: warningDetail.linked_to_id
13331
14082
  })
13332
14083
  });
13333
- _context7.next = 10;
14084
+ _context6.next = 10;
13334
14085
  return warningsApi.updateWarning(warningDetail.linked_to_id, warning);
13335
14086
  case 10:
13336
- return _context7.abrupt("return", warning);
14087
+ return _context6.abrupt("return", warning);
13337
14088
  case 11:
13338
- _context7.next = 13;
14089
+ _context6.next = 13;
13339
14090
  return warningsApi.saveWarningAs(publicWarning);
13340
14091
  case 13:
13341
- newWarningId = _context7.sent;
13342
- return _context7.abrupt("return", Object.assign({}, publicWarning, {
14092
+ newWarningId = _context6.sent;
14093
+ return _context6.abrupt("return", Object.assign({}, publicWarning, {
13343
14094
  warningDetail: Object.assign({}, warningDetail, {
13344
14095
  id: newWarningId
13345
14096
  })
13346
14097
  }));
13347
14098
  case 15:
13348
14099
  case "end":
13349
- return _context7.stop();
14100
+ return _context6.stop();
13350
14101
  }
13351
- }, _callee7);
14102
+ }, _callee6);
13352
14103
  }));
13353
- return function saveOrUpdateWarning(_x13) {
13354
- return _ref6.apply(this, arguments);
14104
+ return function saveOrUpdateWarning(_x11) {
14105
+ return _ref5.apply(this, arguments);
13355
14106
  };
13356
14107
  }();
13357
14108
  var toggleDialogLoadingEffect = function toggleDialogLoadingEffect(dispatch, isDialogOpen, isLoading) {
@@ -13371,12 +14122,12 @@ var errorEffect = function errorEffect(dispatch, message, isDialogOpen) {
13371
14122
  publicWarningFormListener.startListening({
13372
14123
  actionCreator: uiActions.setToggleOpenDialog,
13373
14124
  effect: function () {
13374
- var _effect7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(_ref7, listenerApi) {
14125
+ var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(_ref6, listenerApi) {
13375
14126
  var payload;
13376
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
13377
- while (1) switch (_context8.prev = _context8.next) {
14127
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
14128
+ while (1) switch (_context7.prev = _context7.next) {
13378
14129
  case 0:
13379
- payload = _ref7.payload;
14130
+ payload = _ref6.payload;
13380
14131
  if (!payload.setOpen && payload.type === publicWarningDialogType) {
13381
14132
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
13382
14133
  setOpen: false,
@@ -13385,89 +14136,12 @@ publicWarningFormListener.startListening({
13385
14136
  }
13386
14137
  case 2:
13387
14138
  case "end":
13388
- return _context8.stop();
13389
- }
13390
- }, _callee8);
13391
- }));
13392
- function effect(_x14, _x15) {
13393
- return _effect7.apply(this, arguments);
13394
- }
13395
- return effect;
13396
- }()
13397
- });
13398
-
13399
- var getLastUpdatedTimeFormatted = function getLastUpdatedTimeFormatted() {
13400
- return dateUtils.dateToString(dateUtils.utc(), dateUtils.DATE_FORMAT_HOURS);
13401
- };
13402
- var publicWarningsListener = createListenerMiddleware();
13403
- publicWarningsListener.startListening({
13404
- actionCreator: publicWarningActions.fetchWarnings,
13405
- effect: function () {
13406
- var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_, listenerApi) {
13407
- var warningsApi, _yield$warningsApi$ge, warnings, lastUpdatedTime, taskError;
13408
- return _regeneratorRuntime().wrap(function _callee$(_context) {
13409
- while (1) switch (_context.prev = _context.next) {
13410
- case 0:
13411
- listenerApi.cancelActiveListeners();
13412
- _context.prev = 1;
13413
- warningsApi = getWarningsApi();
13414
- _context.next = 5;
13415
- return warningsApi.getWarnings();
13416
- case 5:
13417
- _yield$warningsApi$ge = _context.sent;
13418
- warnings = _yield$warningsApi$ge.data;
13419
- lastUpdatedTime = getLastUpdatedTimeFormatted();
13420
- listenerApi.dispatch(publicWarningActions.fetchWarningsSuccess({
13421
- warnings: warnings,
13422
- lastUpdatedTime: lastUpdatedTime
13423
- }));
13424
- _context.next = 11;
13425
- return listenerApi.delay(pollingIntervalTimeout);
13426
- case 11:
13427
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13428
- _context.next = 18;
13429
- break;
13430
- case 14:
13431
- _context.prev = 14;
13432
- _context.t0 = _context["catch"](1);
13433
- taskError = _context.t0; // Don't set an error if the cancelActiveListeners was invoked (which throws a TaskAbortError)
13434
- if ((taskError == null ? void 0 : taskError.code) !== 'listener-cancelled') {
13435
- listenerApi.dispatch(publicWarningActions.fetchWarningsError({
13436
- error: {
13437
- name: taskError.name,
13438
- message: taskError.message
13439
- }
13440
- }));
13441
- }
13442
- case 18:
13443
- case "end":
13444
- return _context.stop();
13445
- }
13446
- }, _callee, null, [[1, 14]]);
13447
- }));
13448
- function effect(_x, _x2) {
13449
- return _effect.apply(this, arguments);
13450
- }
13451
- return effect;
13452
- }()
13453
- });
13454
- publicWarningsListener.startListening({
13455
- matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess),
13456
- effect: function () {
13457
- var _effect2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_, listenerApi) {
13458
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
13459
- while (1) switch (_context2.prev = _context2.next) {
13460
- case 0:
13461
- listenerApi.cancelActiveListeners();
13462
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13463
- case 2:
13464
- case "end":
13465
- return _context2.stop();
14139
+ return _context7.stop();
13466
14140
  }
13467
- }, _callee2);
14141
+ }, _callee7);
13468
14142
  }));
13469
- function effect(_x3, _x4) {
13470
- return _effect2.apply(this, arguments);
14143
+ function effect(_x12, _x13) {
14144
+ return _effect6.apply(this, arguments);
13471
14145
  }
13472
14146
  return effect;
13473
14147
  }()
@@ -13483,9 +14157,9 @@ var getSnackbarMessage = function getSnackbarMessage(objectName, id) {
13483
14157
  }
13484
14158
  };
13485
14159
  };
13486
- var drawingsListener = createListenerMiddleware();
13487
- drawingsListener.startListening({
13488
- actionCreator: drawActions.submitDrawValues,
14160
+ var warningsDrawingsListener = createListenerMiddleware();
14161
+ warningsDrawingsListener.startListening({
14162
+ actionCreator: warningsDrawingsActions.submitDrawValues,
13489
14163
  effect: function () {
13490
14164
  var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
13491
14165
  var payload, id, formValues, warningsApi, newID, taskError, errorMessage;
@@ -13509,7 +14183,7 @@ drawingsListener.startListening({
13509
14183
  return warningsApi.saveDrawingAs(formValues);
13510
14184
  case 9:
13511
14185
  newID = _context.sent;
13512
- listenerApi.dispatch(drawActions.setDrawValues({
14186
+ listenerApi.dispatch(warningsDrawingsActions.setDrawValues({
13513
14187
  drawingInstanceId: drawingDialogType,
13514
14188
  id: newID,
13515
14189
  objectName: formValues.objectName
@@ -13577,13 +14251,46 @@ drawingsListener.startListening({
13577
14251
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
13578
14252
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
13579
14253
  * */
13580
- var drawingModuleConfig = {
13581
- reducersMap: {
13582
- drawings: reducer$2,
13583
- publicWarningForm: reducer,
13584
- publicWarnings: reducer$1
13585
- },
13586
- middlewares: [drawingsListener.middleware, publicWarningsListener.middleware, publicWarningFormListener.middleware]
14254
+ var publicWarningsListener = createListenerMiddleware();
14255
+
14256
+ /* *
14257
+ * Licensed under the Apache License, Version 2.0 (the "License");
14258
+ * you may not use this file except in compliance with the License.
14259
+ * You may obtain a copy of the License at
14260
+ *
14261
+ * http://www.apache.org/licenses/LICENSE-2.0
14262
+ *
14263
+ * Unless required by applicable law or agreed to in writing, software
14264
+ * distributed under the License is distributed on an "AS IS" BASIS,
14265
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14266
+ * See the License for the specific language governing permissions and
14267
+ * limitations under the License.
14268
+ *
14269
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
14270
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
14271
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
14272
+ * */
14273
+ var warningsReducersMap = {
14274
+ layers: layerReducer,
14275
+ ui: uiReducer,
14276
+ drawingtools: drawingToolReducer,
14277
+ drawings: warningsDrawingsReducer,
14278
+ publicWarningForm: publicWarningFormReducer,
14279
+ publicWarnings: publicWarningsReducer,
14280
+ snackbar: snackbarReducer
14281
+ };
14282
+ var warningsMiddlewares = [layersListener.middleware, drawingToolListener.middleware, warningsDrawingsListener.middleware, publicWarningsListener.middleware, publicWarningFormListener.middleware, snackbarListener.middleware];
14283
+ var warningsRootReducer = combineReducers(warningsReducersMap);
14284
+ var createMockStore = function createMockStore(mockState) {
14285
+ return configureStore({
14286
+ reducer: warningsRootReducer,
14287
+ preloadedState: mockState,
14288
+ middleware: warningsMiddlewares
14289
+ });
13587
14290
  };
14291
+ /* _____ NOTE --> We should use the middlwares like this down below, but as it will be more strict, it exposes errors from the code itself, which won´t be fixed in this MR ______
14292
+ middleware: (getDefaultMiddleware) =>
14293
+ getDefaultMiddleware().concat(warningsMiddlewares),
14294
+ */
13588
14295
 
13589
- export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningApiWrapper, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsModuleProvider, componentsLookUp, drawingModuleConfig, initialState$1 as initialState, isAlreadyEdited, publicWarningActions, publicWarningFormListener, reducer as publicWarningFormReducer, publicWarningsAdapter, publicWarningsListener, reducer$1 as publicWarningsReducer, selectors as publicWarningsSelectors, reducer$1 as reducer, useObjectDrawDialogAction, warningFormConfirmationOptions, drawingsListener as warningsDrawingsListener, reducer$2 as warningsDrawingsReducer, warningsTranslations };
14296
+ export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningApiWrapper, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsModuleProvider, componentsLookUp, createMockStore, isAlreadyEdited, publicWarningActions, publicWarningFormActions, publicWarningFormListener, publicWarningFormReducer, publicWarningsListener, publicWarningsReducer, selectors as publicWarningsSelectors, useObjectDrawDialogAction, warningFormConfirmationOptions, warningsDrawingsActions, warningsDrawingsListener, warningsDrawingsReducer, warningsMiddlewares, warningsReducersMap, warningsTranslations };