@opengeoweb/warnings 10.0.0 → 10.2.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 (32) hide show
  1. package/index.esm.js +1126 -676
  2. package/package.json +1 -1
  3. package/src/lib/api/api-utils.d.ts +10 -0
  4. package/src/lib/{aviation-api → api/aviation-api}/hooks.d.ts +1 -1
  5. package/src/lib/api/warning-api/api.d.ts +4 -0
  6. package/src/lib/api/warning-api/hooks.d.ts +15 -0
  7. package/src/lib/components/DrawingToolForm/DrawingToolFormContents.d.ts +1 -1
  8. package/src/lib/components/FilterList/filter-hooks.d.ts +4 -3
  9. package/src/lib/components/FilterList/filter-utils.d.ts +6 -3
  10. package/src/lib/components/Providers/Providers.d.ts +3 -0
  11. package/src/lib/components/PublicWarningList/PublicWarningList.d.ts +6 -6
  12. package/src/lib/components/PublicWarningList/PublicWarningListConnect.stories.d.ts +37 -4
  13. package/src/lib/components/PublicWarningList/WarningListItem.d.ts +3 -3
  14. package/src/lib/components/PublicWarningList/WarningListItemMenu.d.ts +8 -7
  15. package/src/lib/components/PublicWarningsForm/PublicWarningsForm.d.ts +1 -0
  16. package/src/lib/components/PublicWarningsForm/PublicWarningsFormConnect.d.ts +2 -0
  17. package/src/lib/store/config.d.ts +1 -2
  18. package/src/lib/store/publicWarningForm/reducer.d.ts +30 -33
  19. package/src/lib/store/publicWarningForm/selectors.d.ts +12 -17
  20. package/src/lib/store/publicWarningForm/types.d.ts +5 -4
  21. package/src/lib/store/publicWarnings/reducer.d.ts +3 -14
  22. package/src/lib/store/publicWarnings/selectors.d.ts +2 -14
  23. package/src/lib/store/publicWarnings/types.d.ts +2 -2
  24. package/src/lib/store/types.d.ts +2 -2
  25. package/src/lib/utils/api.d.ts +3 -7
  26. package/src/lib/utils/fakeApi/index.d.ts +8 -5
  27. package/src/lib/utils/sig-airmet-util.d.ts +11 -7
  28. package/src/lib/utils/sig-airmet-util.spec.d.ts +1 -0
  29. package/src/lib/utils/warningUtils.d.ts +4 -4
  30. /package/src/lib/{aviation-api → api/aviation-api}/api.d.ts +0 -0
  31. /package/src/lib/{aviation-api → api/aviation-api}/fakeApi.d.ts +0 -0
  32. /package/src/lib/{store/publicWarnings/reducer.spec.d.ts → components/PublicWarningList/WarningListItemMenu.spec.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, drawtoolActions, mapStoreActions, 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, drawtoolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, useSetupDialog, selectorMemoizationOptions, useUpdateSharedData } 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';
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
7
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf } 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';
13
+ import { airmetConfig, sigmetConfig, SigmetForm, isInstanceOfCancelSigmet, AirmetForm, isInstanceOfCancelAirmet, getDefaultValidUntilValue, getProductFormMode } from '@opengeoweb/sigmet-airmet';
14
14
  import { snackbarActions, snackbarTypes } 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';
21
22
  import { useFormContext } from 'react-hook-form';
22
23
  import { isEqual, cloneDeep, clamp, groupBy, pick, assign } 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,
@@ -1186,7 +1191,7 @@ var useCloseDrawDialog = function useCloseDrawDialog(_ref) {
1186
1191
  drawMode: ''
1187
1192
  }));
1188
1193
  // reset active draw tool
1189
- dispatch(drawtoolActions.changeDrawToolMode({
1194
+ dispatch(drawingToolActions.changeDrawToolMode({
1190
1195
  drawToolId: drawingDialogType,
1191
1196
  drawModeId: drawDialogActiveDrawModeId
1192
1197
  }));
@@ -1213,7 +1218,7 @@ var useCloseDrawDialog = function useCloseDrawDialog(_ref) {
1213
1218
  }
1214
1219
  // clear existing geoJSON
1215
1220
  if (featureLayerContainsGeoJSON) {
1216
- dispatch(mapStoreActions.layerChangeGeojson({
1221
+ dispatch(layerActions.layerChangeGeojson({
1217
1222
  layerId: drawLayerId,
1218
1223
  geojson: emptyGeoJSON
1219
1224
  }));
@@ -1260,7 +1265,7 @@ var useCloseObjectDialog = function useCloseObjectDialog(_ref3) {
1260
1265
  source: source
1261
1266
  }));
1262
1267
  if (featureLayerContainsGeoJSON && shouldReset) {
1263
- dispatch(mapStoreActions.layerChangeGeojson({
1268
+ dispatch(layerActions.layerChangeGeojson({
1264
1269
  layerId: drawLayerId,
1265
1270
  geojson: emptyGeoJSON
1266
1271
  }));
@@ -1318,7 +1323,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1318
1323
  objectDialogLayerHasGeoJSON = _useDialogOptions2.hasGeoJSON,
1319
1324
  objectDialogLayerId = _useDialogOptions2.dialogLayerId;
1320
1325
  var clearGeoJSON = function clearGeoJSON(layerId) {
1321
- dispatch(mapStoreActions.layerChangeGeojson({
1326
+ dispatch(layerActions.layerChangeGeojson({
1322
1327
  layerId: layerId,
1323
1328
  geojson: emptyGeoJSON
1324
1329
  }));
@@ -1366,7 +1371,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1366
1371
  // move shape to screen
1367
1372
  if (isObjectDialogOpen && objectDialogLayerHasGeoJSON) {
1368
1373
  // update new shape
1369
- dispatch(mapStoreActions.layerSetGeojsonFromLayer({
1374
+ dispatch(layerActions.layerSetGeojsonFromLayer({
1370
1375
  layerId: currentDrawLayerId,
1371
1376
  sourceLayerId: objectDialogLayerId
1372
1377
  }));
@@ -1399,13 +1404,13 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1399
1404
  source: source
1400
1405
  }));
1401
1406
  // activate draw tool
1402
- dispatch(drawtoolActions.updateGeoJSONLayerId({
1407
+ dispatch(drawingToolActions.updateGeoJSONLayerId({
1403
1408
  drawToolId: drawingDialogType,
1404
1409
  geoJSONLayerId: currentDrawLayerId
1405
1410
  }));
1406
1411
  // activate default draw mode
1407
1412
  if (!drawDialogActiveDrawModeId && !isDrawDialogOpen) {
1408
- dispatch(drawtoolActions.changeDrawToolMode({
1413
+ dispatch(drawingToolActions.changeDrawToolMode({
1409
1414
  drawToolId: drawingDialogType,
1410
1415
  drawModeId: defaultPolygon.drawModeId
1411
1416
  }));
@@ -1413,7 +1418,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1413
1418
  // move shape to screen
1414
1419
  if (isDrawDialogOpen && drawDialogLayerHasGeoJSON) {
1415
1420
  // update new shape
1416
- dispatch(mapStoreActions.layerSetGeojsonFromLayer({
1421
+ dispatch(layerActions.layerSetGeojsonFromLayer({
1417
1422
  layerId: currentDrawLayerId,
1418
1423
  sourceLayerId: drawDialogLayerId
1419
1424
  }));
@@ -1435,7 +1440,7 @@ var useObjectDrawDialogAction = function useObjectDrawDialogAction(_ref5) {
1435
1440
  }));
1436
1441
  }
1437
1442
  if (newGeoJSON) {
1438
- dispatch(mapStoreActions.layerChangeGeojson({
1443
+ dispatch(layerActions.layerChangeGeojson({
1439
1444
  layerId: currentDrawLayerId,
1440
1445
  geojson: newGeoJSON
1441
1446
  }));
@@ -1589,7 +1594,7 @@ var Objects = function Objects(_ref2) {
1589
1594
  var _useWarningsTranslati = useWarningsTranslation(),
1590
1595
  t = _useWarningsTranslati.t;
1591
1596
  var listRef = React__default.useRef(null);
1592
- var _getListInclHeaders = getListInclHeaders$1(objects),
1597
+ var _getListInclHeaders = getListInclHeaders$1(objects || []),
1593
1598
  listInclHeaders = _getListInclHeaders.listInclHeaders,
1594
1599
  headerList = _getListInclHeaders.headerList;
1595
1600
  var getItemSize = function getItemSize(width, index) {
@@ -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,56 +2122,49 @@ 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
- draft.publicWarning.warningDetail.areas = [area];
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];
2191
2129
  } else {
2192
2130
  var newWarning = {
2193
2131
  warningDetail: {
2194
2132
  areas: [area]
2195
2133
  }
2196
2134
  };
2197
- draft.publicWarning = newWarning;
2135
+ draft.warning = newWarning;
2198
2136
  }
2199
2137
  },
2200
2138
  removeArea: function removeArea(draft, action) {
2201
2139
  var area = action.payload.area;
2202
- if (draft.publicWarning) {
2203
- var removeAreas = draft.publicWarning.warningDetail.areas.filter(function (existingArea) {
2140
+ if (draft.warning) {
2141
+ var removeAreas = draft.warning.warningDetail.areas.filter(function (existingArea) {
2204
2142
  return existingArea.objectName !== area.objectName;
2205
2143
  });
2206
- draft.publicWarning.warningDetail.areas = removeAreas;
2144
+ draft.warning.warningDetail.areas = removeAreas;
2145
+ }
2146
+ },
2147
+ removeAllAreas: function removeAllAreas(draft) {
2148
+ if (draft.warning) {
2149
+ draft.warning.warningDetail.areas = [];
2207
2150
  }
2208
2151
  },
2209
2152
  openPublicWarningFormDialog: function openPublicWarningFormDialog(draft, action) {
2210
2153
  var _action$payload2 = action.payload,
2211
2154
  object = _action$payload2.object,
2212
- publicWarning = _action$payload2.publicWarning,
2155
+ warning = _action$payload2.warning,
2213
2156
  _action$payload2$form = _action$payload2.formState,
2214
2157
  formState = _action$payload2$form === void 0 ? '' : _action$payload2$form,
2215
2158
  _action$payload2$warn = _action$payload2.warningType,
2216
2159
  warningType = _action$payload2$warn === void 0 ? 'public' : _action$payload2$warn,
2217
2160
  panelId = _action$payload2.panelId;
2218
2161
  draft.object = object;
2219
- draft.publicWarning = publicWarning;
2220
- draft.selectedPublicWarningId = publicWarning == null ? void 0 : publicWarning.id;
2162
+ draft.warning = warning;
2163
+ draft.selectedWarningId = warning == null ? void 0 : warning.id;
2221
2164
  draft.formState = formState;
2222
2165
  draft.warningType = warningType;
2223
2166
  draft.panelId = panelId;
2224
2167
  },
2225
- toggleEditorWarning: function toggleEditorWarning(draft,
2226
- // eslint-disable-next-line no-unused-vars
2227
- action) {
2228
- delete draft.error;
2229
- },
2230
- toggleEditorWarningSuccess: function toggleEditorWarningSuccess(draft, action) {
2231
- var _action$payload3 = action.payload,
2232
- isEditor = _action$payload3.isEditor,
2233
- username = _action$payload3.username;
2234
- if (draft.publicWarning) {
2235
- draft.publicWarning.editor = isEditor ? username : '';
2236
- }
2237
- draft.formState = isEditor ? '' : 'readonly';
2238
- },
2239
2168
  // publish warning
2240
2169
  publishWarning: function publishWarning(draft,
2241
2170
  // eslint-disable-next-line no-unused-vars
@@ -2245,7 +2174,7 @@ var slice = createSlice({
2245
2174
  },
2246
2175
  publishWarningSuccess: function publishWarningSuccess(draft, action) {
2247
2176
  var publicWarning = action.payload.publicWarning;
2248
- draft.publicWarning = publicWarning;
2177
+ draft.warning = publicWarning;
2249
2178
  // If form has been published, set form to readonly
2250
2179
  draft.formState = 'readonly';
2251
2180
  },
@@ -2255,70 +2184,60 @@ var slice = createSlice({
2255
2184
  action) {
2256
2185
  draft.formState = 'saving';
2257
2186
  delete draft.error;
2258
- draft.publicWarning = action.payload.publicWarning;
2187
+ draft.warning = action.payload.publicWarning;
2259
2188
  },
2260
2189
  saveWarningSuccess: function saveWarningSuccess(draft, action) {
2261
2190
  var _publicWarning$warnin;
2262
2191
  var publicWarning = action.payload.publicWarning;
2263
- draft.publicWarning = publicWarning;
2192
+ draft.warning = publicWarning;
2264
2193
  if (publicWarning != null && (_publicWarning$warnin = publicWarning.warningDetail) != null && _publicWarning$warnin.id) {
2265
- draft.selectedPublicWarningId = publicWarning.warningDetail.id;
2194
+ draft.selectedWarningId = publicWarning.warningDetail.id;
2266
2195
  }
2267
2196
  draft.formState = '';
2268
2197
  },
2269
2198
  setFormError: function setFormError(draft, action) {
2270
- var _action$payload4 = action.payload,
2271
- message = _action$payload4.message,
2272
- _action$payload4$seve = _action$payload4.severity,
2273
- severity = _action$payload4$seve === void 0 ? 'error' : _action$payload4$seve;
2199
+ var _action$payload3 = action.payload,
2200
+ message = _action$payload3.message,
2201
+ _action$payload3$seve = _action$payload3.severity,
2202
+ severity = _action$payload3$seve === void 0 ? 'error' : _action$payload3$seve;
2274
2203
  draft.formState = '';
2275
2204
  draft.error = {
2276
2205
  severity: severity,
2277
2206
  message: message
2278
2207
  };
2279
2208
  },
2209
+ removeFormError: function removeFormError(draft) {
2210
+ delete draft.error;
2211
+ },
2280
2212
  setFormDirty: function setFormDirty(draft, action) {
2281
2213
  var isFormDirty = action.payload.isFormDirty;
2282
2214
  draft.isFormDirty = isFormDirty;
2215
+ },
2216
+ setEditMode: function setEditMode(draft, action) {
2217
+ var warningId = action.payload.warningId;
2218
+ draft.selectedWarningId = warningId;
2219
+ draft.formState = 'edit';
2283
2220
  }
2284
2221
  },
2285
2222
  extraReducers: function extraReducers(builder) {
2286
2223
  builder.addCase(uiActions.setToggleOpenDialog, function (draft, action) {
2287
- var _action$payload5 = action.payload,
2288
- type = _action$payload5.type,
2289
- setOpen = _action$payload5.setOpen;
2224
+ var _action$payload4 = action.payload,
2225
+ type = _action$payload4.type,
2226
+ setOpen = _action$payload4.setOpen;
2290
2227
  if (type === publicWarningDialogType && setOpen === false) {
2291
2228
  delete draft.object;
2292
- delete draft.publicWarning;
2229
+ delete draft.warning;
2293
2230
  delete draft.formState;
2294
2231
  delete draft.error;
2295
- delete draft.selectedPublicWarningId;
2232
+ delete draft.selectedWarningId;
2296
2233
  delete draft.isFormDirty;
2297
2234
  delete draft.warningType;
2298
2235
  }
2299
- }).addCase(publicWarningActions.fetchWarningsSuccess, function (draft, action) {
2300
- var warnings = action.payload.warnings;
2301
- if (draft.selectedPublicWarningId) {
2302
- var _draft$publicWarning;
2303
- var currentWarning = warnings.find(function (warning) {
2304
- return warning.id === draft.selectedPublicWarningId;
2305
- });
2306
- if (currentWarning && ((_draft$publicWarning = draft.publicWarning) == null ? void 0 : _draft$publicWarning.editor) !== currentWarning.editor) {
2307
- draft.publicWarning.editor = currentWarning.editor;
2308
- // if form is in edit mode show warning
2309
- if (draft.formState === '') {
2310
- draft.error = {
2311
- severity: 'warning',
2312
- message: TAKEOVER_MESSAGE
2313
- };
2314
- }
2315
- }
2316
- }
2317
2236
  });
2318
2237
  }
2319
2238
  });
2320
- var reducer = slice.reducer;
2321
- var publicWarningFormActions = slice.actions;
2239
+ var reducer$1 = slice$1.reducer;
2240
+ var publicWarningFormActions = slice$1.actions;
2322
2241
 
2323
2242
  var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2324
2243
  var bounds = _ref.bounds,
@@ -2396,7 +2315,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2396
2315
  };
2397
2316
  var showGeoJSONLayer = function showGeoJSONLayer(drawing) {
2398
2317
  if (!currentLayer) {
2399
- dispatch(mapStoreActions.addLayer({
2318
+ dispatch(layerActions.addLayer({
2400
2319
  mapId: mapId,
2401
2320
  layer: {
2402
2321
  geojson: drawing.geoJSON
@@ -2405,7 +2324,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2405
2324
  origin: 'warnings-lib'
2406
2325
  }));
2407
2326
  } else {
2408
- dispatch(mapStoreActions.layerChangeGeojson({
2327
+ dispatch(layerActions.layerChangeGeojson({
2409
2328
  layerId: geoJSONLayerId,
2410
2329
  geojson: drawing.geoJSON
2411
2330
  }));
@@ -2477,10 +2396,12 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2477
2396
  _context2.prev = 13;
2478
2397
  _context2.t0 = _context2["catch"](2);
2479
2398
  setLoading(false);
2480
- dispatch(uiActions.setErrorDialog({
2481
- error: _context2.t0.message,
2482
- type: objectDialogType
2483
- }));
2399
+ if (_context2.t0 instanceof Error) {
2400
+ dispatch(uiActions.setErrorDialog({
2401
+ error: _context2.t0.message,
2402
+ type: objectDialogType
2403
+ }));
2404
+ }
2484
2405
  case 17:
2485
2406
  case "end":
2486
2407
  return _context2.stop();
@@ -2500,7 +2421,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
2500
2421
  var onShareObject = function onShareObject(object) {
2501
2422
  dispatch(publicWarningFormActions.openPublicWarningFormDialog({
2502
2423
  object: object,
2503
- publicWarning: {
2424
+ warning: {
2504
2425
  warningDetail: {
2505
2426
  areas: [{
2506
2427
  geoJSON: object.geoJSON,
@@ -6942,6 +6863,330 @@ var warningListJSON = [
6942
6863
  }
6943
6864
  ];
6944
6865
 
6866
+ var airmetListJSON = [
6867
+ {
6868
+ uuid: "02d3727a-b190-11ef-ba31-067f7750936d",
6869
+ lastUpdateDate: "2024-12-03T16:02:35",
6870
+ creationDate: "2024-12-03T16:02:35",
6871
+ canbe: [
6872
+ "DRAFTED",
6873
+ "DISCARDED",
6874
+ "PUBLISHED"
6875
+ ],
6876
+ airmet: {
6877
+ uuid: "02d3727a-b190-11ef-ba31-067f7750936d",
6878
+ phenomenon: "SFC_WIND",
6879
+ sequence: "-1",
6880
+ validDateStart: "2024-12-03T13:26:19Z",
6881
+ validDateEnd: "2024-12-03T15:26:19Z",
6882
+ firName: "AMSTERDAM FIR",
6883
+ locationIndicatorATSU: "EHAA",
6884
+ locationIndicatorATSR: "EHAA",
6885
+ locationIndicatorMWO: "EHDB",
6886
+ isObservationOrForecast: "OBS",
6887
+ observationOrForecastTime: "2024-12-03T11:26:19Z",
6888
+ movementType: "STATIONARY",
6889
+ change: "WKN",
6890
+ type: "NORMAL",
6891
+ status: "DRAFT",
6892
+ windDirection: 70,
6893
+ windSpeed: 35,
6894
+ windUnit: "KT",
6895
+ firGeometry: {
6896
+ },
6897
+ startGeometry: {
6898
+ type: "FeatureCollection",
6899
+ features: [
6900
+ {
6901
+ type: "Feature",
6902
+ geometry: {
6903
+ type: "Polygon",
6904
+ coordinates: [
6905
+ [
6906
+ [
6907
+ 5,
6908
+ 55
6909
+ ],
6910
+ [
6911
+ 4.331914,
6912
+ 55.332644
6913
+ ],
6914
+ [
6915
+ 3.368817,
6916
+ 55.764314
6917
+ ],
6918
+ [
6919
+ 2.761908,
6920
+ 54.379261
6921
+ ],
6922
+ [
6923
+ 3.15576,
6924
+ 52.913554
6925
+ ],
6926
+ [
6927
+ 2.000002,
6928
+ 51.500002
6929
+ ],
6930
+ [
6931
+ 3.370001,
6932
+ 51.369722
6933
+ ],
6934
+ [
6935
+ 3.370527,
6936
+ 51.36867
6937
+ ],
6938
+ [
6939
+ 3.362223,
6940
+ 51.320002
6941
+ ],
6942
+ [
6943
+ 3.36389,
6944
+ 51.313608
6945
+ ],
6946
+ [
6947
+ 3.373613,
6948
+ 51.309999
6949
+ ],
6950
+ [
6951
+ 3.952501,
6952
+ 51.214441
6953
+ ],
6954
+ [
6955
+ 4.397501,
6956
+ 51.452776
6957
+ ],
6958
+ [
6959
+ 5.078611,
6960
+ 51.391665
6961
+ ],
6962
+ [
6963
+ 5.848333,
6964
+ 51.139444
6965
+ ],
6966
+ [
6967
+ 5.651667,
6968
+ 50.824717
6969
+ ],
6970
+ [
6971
+ 6.011797,
6972
+ 50.757273
6973
+ ],
6974
+ [
6975
+ 5.934168,
6976
+ 51.036386
6977
+ ],
6978
+ [
6979
+ 6.222223,
6980
+ 51.361666
6981
+ ],
6982
+ [
6983
+ 5.94639,
6984
+ 51.811663
6985
+ ],
6986
+ [
6987
+ 6.405001,
6988
+ 51.830828
6989
+ ],
6990
+ [
6991
+ 7.053095,
6992
+ 52.237764
6993
+ ],
6994
+ [
6995
+ 7.031389,
6996
+ 52.268885
6997
+ ],
6998
+ [
6999
+ 7.063612,
7000
+ 52.346109
7001
+ ],
7002
+ [
7003
+ 7.065557,
7004
+ 52.385828
7005
+ ],
7006
+ [
7007
+ 7.133055,
7008
+ 52.888887
7009
+ ],
7010
+ [
7011
+ 7.14218,
7012
+ 52.898244
7013
+ ],
7014
+ [
7015
+ 7.191667,
7016
+ 53.3
7017
+ ],
7018
+ [
7019
+ 6.5,
7020
+ 53.666667
7021
+ ],
7022
+ [
7023
+ 6.500002,
7024
+ 55.000002
7025
+ ],
7026
+ [
7027
+ 5,
7028
+ 55
7029
+ ]
7030
+ ]
7031
+ ]
7032
+ },
7033
+ properties: {
7034
+ selectionType: "fir"
7035
+ }
7036
+ }
7037
+ ]
7038
+ }
7039
+ }
7040
+ }
7041
+ ];
7042
+
7043
+ var sigmetListJSON = [
7044
+ {
7045
+ uuid: "someuniqueidprescibedbyBE2",
7046
+ lastUpdateDate: "2020-09-17T12:00:00Z",
7047
+ creationDate: "2020-09-17T12:00:00Z",
7048
+ canbe: [
7049
+ "CANCELLED"
7050
+ ],
7051
+ sigmet: {
7052
+ uuid: "someuniqueidprescibedbyBE2",
7053
+ phenomenon: "VA_CLD",
7054
+ sequence: "A01V",
7055
+ issueDate: "2020-09-17T12:00:00Z",
7056
+ firName: "AMSTERDAM FIR",
7057
+ locationIndicatorATSU: "EHAA",
7058
+ locationIndicatorATSR: "EHAA",
7059
+ locationIndicatorMWO: "EHDB",
7060
+ isObservationOrForecast: "OBS",
7061
+ observationOrForecastTime: "",
7062
+ movementType: "STATIONARY",
7063
+ change: "WKN",
7064
+ type: "NORMAL",
7065
+ status: "PUBLISHED",
7066
+ levelInfoMode: "BETW",
7067
+ vaSigmetVolcanoName: "EYJAFJALLAJOKULL",
7068
+ vaSigmetVolcanoCoordinates: {
7069
+ latitude: 63.62,
7070
+ longitude: -19.61
7071
+ },
7072
+ level: {
7073
+ value: 2000,
7074
+ unit: "FT"
7075
+ },
7076
+ lowerLevel: {
7077
+ value: 1000,
7078
+ unit: "FT"
7079
+ },
7080
+ firGeometry: "",
7081
+ startGeometry: {
7082
+ type: "FeatureCollection",
7083
+ features: [
7084
+ {
7085
+ type: "Feature",
7086
+ properties: {
7087
+ selectionType: "poly"
7088
+ },
7089
+ geometry: {
7090
+ type: "Polygon",
7091
+ coordinates: [
7092
+ [
7093
+ [
7094
+ 4.799062887514267,
7095
+ 54.04327723979929
7096
+ ],
7097
+ [
7098
+ 6.006227982070749,
7099
+ 53.64012115183787
7100
+ ],
7101
+ [
7102
+ 4.6168492883359304,
7103
+ 53.32840097044425
7104
+ ],
7105
+ [
7106
+ 4.799062887514267,
7107
+ 54.04327723979929
7108
+ ]
7109
+ ]
7110
+ ]
7111
+ }
7112
+ }
7113
+ ]
7114
+ },
7115
+ startGeometryIntersect: {
7116
+ type: "FeatureCollection",
7117
+ features: [
7118
+ {
7119
+ type: "Feature",
7120
+ properties: {
7121
+ selectionType: "poly"
7122
+ },
7123
+ geometry: {
7124
+ type: "Polygon",
7125
+ coordinates: [
7126
+ [
7127
+ [
7128
+ 4.799062887514267,
7129
+ 54.04327723979929
7130
+ ],
7131
+ [
7132
+ 6.006227982070749,
7133
+ 53.64012115183787
7134
+ ],
7135
+ [
7136
+ 4.6168492883359304,
7137
+ 53.32840097044425
7138
+ ],
7139
+ [
7140
+ 4.799062887514267,
7141
+ 54.04327723979929
7142
+ ]
7143
+ ]
7144
+ ]
7145
+ }
7146
+ }
7147
+ ]
7148
+ }
7149
+ }
7150
+ }
7151
+ ];
7152
+
7153
+ /* *
7154
+ * Licensed under the Apache License, Version 2.0 (the "License");
7155
+ * you may not use this file except in compliance with the License.
7156
+ * You may obtain a copy of the License at
7157
+ *
7158
+ * http://www.apache.org/licenses/LICENSE-2.0
7159
+ *
7160
+ * Unless required by applicable law or agreed to in writing, software
7161
+ * distributed under the License is distributed on an "AS IS" BASIS,
7162
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7163
+ * See the License for the specific language governing permissions and
7164
+ * limitations under the License.
7165
+ *
7166
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7167
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
7168
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7169
+ * */
7170
+ var airmetList = airmetListJSON;
7171
+ var sigmetList = sigmetListJSON;
7172
+ var fakeSigmetTAC = 'EHAA SIGMET 1 VALID 121249/121449 EHDB- EHAA AMSTERDAM FIR FRQ TS OBS ENTIRE FIR FL010 STNR WKN';
7173
+ var fakeAirmetTAC = 'EHAA AIRMET -1 VALID 310700/311100 EHDB- EHAA AMSTERDAM FIR ISOL CB OBS ENTIRE FIR FL020 STNR NC';
7174
+ [rest.get(/^.*\/airmetlist$/, function (_, res, ctx) {
7175
+ return res(ctx.status(200), ctx.json(airmetList));
7176
+ }), rest.get(/^.*\/sigmetlist$/, function (_, res, ctx) {
7177
+ return res(ctx.status(200), ctx.json(sigmetList));
7178
+ }), rest.get(/^.*\/airmet-config$/, function (_, res, ctx) {
7179
+ return res(ctx.status(200), ctx.json(airmetConfig));
7180
+ }), rest.get(/^.*\/sigmet-config$/, function (_, res, ctx) {
7181
+ return res(ctx.status(200), ctx.json(sigmetConfig));
7182
+ }), rest.post(/^.*\/airmet2tac$/, function (_, res, ctx) {
7183
+ return res(ctx.status(200), ctx.text(fakeAirmetTAC));
7184
+ }), rest.post(/^.*\/sigmet2tac$/, function (_, res, ctx) {
7185
+ return res(ctx.status(200), ctx.text(fakeSigmetTAC));
7186
+ }), rest.get(/^(?!.*(sigmet|airmet)).*$/, function (req) {
7187
+ return req.passthrough();
7188
+ })];
7189
+
6945
7190
  /* *
6946
7191
  * Licensed under the Apache License, Version 2.0 (the "License");
6947
7192
  * you may not use this file except in compliance with the License.
@@ -6966,6 +7211,12 @@ warningList.filter(function (warning) {
6966
7211
  return warning.status !== 'EXPIRED' && warning.status !== 'WITHDRAWN';
6967
7212
  }).length;
6968
7213
  var areaKeywordList = ['North Sea districts', 'Coastal Districts', 'KNMI Specific', 'Objects', 'Baltic areas', 'NL', 'FI', 'METNorway Specific', 'Provinces', 'FIR', 'Countries'];
7214
+ [rest.get(/^.*\/warnings$/, function (req, res, ctx) {
7215
+ // respond using a mocked JSON body
7216
+ return res(ctx.json(warningList));
7217
+ }), rest.post(/^.*\/warnings\/(.*)$/, function (req, res, ctx) {
7218
+ return res(ctx.json({}));
7219
+ })];
6969
7220
 
6970
7221
  /* *
6971
7222
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -6985,7 +7236,6 @@ var areaKeywordList = ['North Sea districts', 'Coastal Districts', 'KNMI Specifi
6985
7236
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
6986
7237
  * */
6987
7238
  var ERROR_NOT_FOUND = 'Request failed with status code 400';
6988
- var MOCK_USERNAME = 'user.name';
6989
7239
  var extractDrawingDetailsFromJSON = function extractDrawingDetailsFromJSON(drawingId) {
6990
7240
  return drawingsListFullContent.find(function (element) {
6991
7241
  return element.id === drawingId;
@@ -7061,14 +7311,6 @@ var getApiRoutes = function getApiRoutes(axiosInstance) {
7061
7311
  };
7062
7312
  });
7063
7313
  },
7064
- // public warnings
7065
- getWarnings: function getWarnings() {
7066
- return axiosInstance.get("/warnings/").then(function () {
7067
- return {
7068
- data: warningList
7069
- };
7070
- });
7071
- },
7072
7314
  saveWarningAs: function saveWarningAs(data) {
7073
7315
  // eslint-disable-next-line no-console
7074
7316
  console.log('api: save warning as', data);
@@ -7088,17 +7330,6 @@ var getApiRoutes = function getApiRoutes(axiosInstance) {
7088
7330
  return warning.id === warningId;
7089
7331
  }), 1);
7090
7332
  return axiosInstance.post("/warnings/" + warningId + "?delete=true");
7091
- },
7092
- toggleEditorWarning: function toggleEditorWarning(warningId, isEditor) {
7093
- // eslint-disable-next-line no-console
7094
- console.log('api: toggle editor warning', warningId, isEditor);
7095
- var index = warningList.findIndex(function (warning) {
7096
- return warning.id === warningId;
7097
- });
7098
- warningList.splice(index, 1, Object.assign({}, warningList[index], {
7099
- editor: isEditor ? MOCK_USERNAME : null
7100
- }));
7101
- return axiosInstance.post("/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false'));
7102
7333
  }
7103
7334
  };
7104
7335
  };
@@ -7449,7 +7680,7 @@ var DrawingToolFormContentsNoMemo = function DrawingToolFormContentsNoMemo(_ref)
7449
7680
  };
7450
7681
  var DrawingToolFormContents = /*#__PURE__*/React__default.memo(DrawingToolFormContentsNoMemo, isEqual);
7451
7682
 
7452
- var _excluded$8 = ["opacity", "geoJSON"];
7683
+ var _excluded$9 = ["opacity", "geoJSON"];
7453
7684
  var getObjectName$1 = function getObjectName(objectName) {
7454
7685
  return objectName || dateUtils.dateToString(new Date(), dateUtils.DATE_FORMAT_DATEPICKER, true) + " UTC";
7455
7686
  };
@@ -7519,7 +7750,7 @@ var DrawingToolForm = function DrawingToolForm(_ref) {
7519
7750
  // remove unneeded properties
7520
7751
  formValues.opacity;
7521
7752
  var geoJSON = formValues.geoJSON,
7522
- allFormValues = _objectWithoutPropertiesLoose(formValues, _excluded$8);
7753
+ allFormValues = _objectWithoutPropertiesLoose(formValues, _excluded$9);
7523
7754
  // rewind geometry
7524
7755
  var rewindedGeometry = rewindGeometry(geoJSON);
7525
7756
  onSubmitForm(Object.assign({}, allFormValues, {
@@ -7533,7 +7764,8 @@ var DrawingToolForm = function DrawingToolForm(_ref) {
7533
7764
  }));
7534
7765
  }, [geoJSONProperties, drawModes]);
7535
7766
  var onChangeOpacity = React.useCallback(function (event) {
7536
- var value = event.target.value;
7767
+ var target = event.target;
7768
+ var value = target.value;
7537
7769
  var newOpacity = parseInt(value, 10) / 100;
7538
7770
  var additionalStrokeOpacity = 0.8;
7539
7771
  onChangeProperties({
@@ -7620,7 +7852,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7620
7852
  }));
7621
7853
  }, [dispatch, drawTool == null ? void 0 : drawTool.geoJSONLayerId]);
7622
7854
  var onChangeDrawMode = React.useCallback(function (tool) {
7623
- dispatch(drawtoolActions.changeDrawToolMode({
7855
+ dispatch(drawingToolActions.changeDrawToolMode({
7624
7856
  drawToolId: drawToolId,
7625
7857
  drawModeId: tool.drawModeId
7626
7858
  }));
@@ -7632,7 +7864,7 @@ var DrawingToolFormConnect = function DrawingToolFormConnect() {
7632
7864
  drawMode: ''
7633
7865
  }));
7634
7866
  if (drawTool != null && drawTool.activeDrawModeId) {
7635
- dispatch(drawtoolActions.changeDrawToolMode({
7867
+ dispatch(drawingToolActions.changeDrawToolMode({
7636
7868
  drawToolId: drawToolId,
7637
7869
  drawModeId: drawTool == null ? void 0 : drawTool.activeDrawModeId
7638
7870
  }));
@@ -7724,12 +7956,12 @@ var DrawingToolConnect = function DrawingToolConnect(_ref) {
7724
7956
  var dispatch = useDispatch();
7725
7957
  React.useEffect(function () {
7726
7958
  var defaultDrawModes = translateDrawModes(currentlySupportedDrawModes, t);
7727
- dispatch(drawtoolActions.registerDrawTool({
7959
+ dispatch(drawingToolActions.registerDrawTool({
7728
7960
  drawToolId: drawingDialogType,
7729
7961
  defaultDrawModes: defaultDrawModes
7730
7962
  }));
7731
7963
  return function () {
7732
- dispatch(drawtoolActions.unregisterDrawTool({
7964
+ dispatch(drawingToolActions.unregisterDrawTool({
7733
7965
  drawToolId: drawingDialogType
7734
7966
  }));
7735
7967
  };
@@ -7927,7 +8159,7 @@ var PublicWarningsFormDialog = function PublicWarningsFormDialog(_ref) {
7927
8159
  }));
7928
8160
  };
7929
8161
 
7930
- var _excluded$7 = ["children", "value", "index"];
8162
+ var _excluded$8 = ["children", "value", "index"];
7931
8163
  function a11yProps(index) {
7932
8164
  return {
7933
8165
  id: "tab-" + index,
@@ -7948,7 +8180,7 @@ var CustomTabPanel = function CustomTabPanel(props) {
7948
8180
  var children = props.children,
7949
8181
  value = props.value,
7950
8182
  index = props.index,
7951
- other = _objectWithoutPropertiesLoose(props, _excluded$7);
8183
+ other = _objectWithoutPropertiesLoose(props, _excluded$8);
7952
8184
  return jsx("div", Object.assign({
7953
8185
  role: "tabpanel",
7954
8186
  hidden: value !== index,
@@ -8195,24 +8427,7 @@ var AreaField = function AreaField(_ref) {
8195
8427
  });
8196
8428
  };
8197
8429
 
8198
- var _defaultLevelFilter, _defaultEmptyFilter, _defaultPhenomenonFil;
8199
- /* *
8200
- * Licensed under the Apache License, Version 2.0 (the "License");
8201
- * you may not use this file except in compliance with the License.
8202
- * You may obtain a copy of the License at
8203
- *
8204
- * http://www.apache.org/licenses/LICENSE-2.0
8205
- *
8206
- * Unless required by applicable law or agreed to in writing, software
8207
- * distributed under the License is distributed on an "AS IS" BASIS,
8208
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8209
- * See the License for the specific language governing permissions and
8210
- * limitations under the License.
8211
- *
8212
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
8213
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
8214
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
8215
- * */
8430
+ var _defaultLevelFilter, _defaultEmptyFilter;
8216
8431
  var Domain;
8217
8432
  (function (Domain) {
8218
8433
  Domain["aviation"] = "aviation";
@@ -8251,12 +8466,28 @@ var domainLevels = {
8251
8466
  };
8252
8467
  var defaultLevelFilter = (_defaultLevelFilter = {}, _defaultLevelFilter[emptyFilterId] = true, _defaultLevelFilter.extreme = true, _defaultLevelFilter.moderate = true, _defaultLevelFilter.severe = true, _defaultLevelFilter.AIR = true, _defaultLevelFilter.SIG = true, _defaultLevelFilter);
8253
8468
  var defaultEmptyFilter = (_defaultEmptyFilter = {}, _defaultEmptyFilter[emptyFilterId] = true, _defaultEmptyFilter);
8254
- (_defaultPhenomenonFil = {}, _defaultPhenomenonFil[emptyFilterId] = true, _defaultPhenomenonFil.coastalEvent = true, _defaultPhenomenonFil.fog = true, _defaultPhenomenonFil.highTemp = true, _defaultPhenomenonFil.lowTemp = true, _defaultPhenomenonFil.rain = true, _defaultPhenomenonFil.snowIce = true, _defaultPhenomenonFil.thunderstorm = true, _defaultPhenomenonFil.wind = true, _defaultPhenomenonFil);
8469
+ var makeFilterFromList = function makeFilterFromList(options) {
8470
+ var _options$reduce;
8471
+ return options.reduce(function (acc, p) {
8472
+ var _Object$assign;
8473
+ return p ? Object.assign({}, acc, (_Object$assign = {}, _Object$assign[p] = true, _Object$assign)) : acc;
8474
+ }, (_options$reduce = {}, _options$reduce[emptyFilterId] = true, _options$reduce));
8475
+ };
8476
+ var AllPhenomena = Object.assign({}, AirmetPhenomena, SigmetPhenomena, Phenomenon$1);
8477
+ var AllPhenomenaKeys = Object.fromEntries(Object.keys(AllPhenomena).map(function (key) {
8478
+ return [key, key];
8479
+ }));
8480
+ var domainPhenomena = {
8481
+ aviation: [].concat(Object.keys(SigmetPhenomena), Object.keys(AirmetPhenomena)),
8482
+ maritime: [],
8483
+ "public": [].concat(Object.keys(Phenomenon$1))
8484
+ };
8485
+ var defaultPhenomenonFilter = makeFilterFromList(Object.keys(AllPhenomenaKeys));
8255
8486
  var initialFilters = {
8256
8487
  incident: defaultEmptyFilter,
8257
8488
  source: defaultEmptyFilter,
8258
8489
  domain: defaultDomainFilter,
8259
- phenomenon: defaultEmptyFilter,
8490
+ phenomenon: defaultPhenomenonFilter,
8260
8491
  level: defaultLevelFilter
8261
8492
  };
8262
8493
  var getSelectedOptions = function getSelectedOptions(options) {
@@ -8270,11 +8501,11 @@ var getSelectedOptions = function getSelectedOptions(options) {
8270
8501
  };
8271
8502
  };
8272
8503
  var updateState = function updateState(state, optionKey, value, only) {
8273
- var _Object$assign3;
8504
+ var _Object$assign4;
8274
8505
  if (only) {
8275
8506
  return Object.keys(state).reduce(function (acc, k) {
8276
- var _Object$assign;
8277
- return Object.assign({}, acc, (_Object$assign = {}, _Object$assign[k] = k === optionKey, _Object$assign));
8507
+ var _Object$assign2;
8508
+ return Object.assign({}, acc, (_Object$assign2 = {}, _Object$assign2[k] = k === optionKey, _Object$assign2));
8278
8509
  }, {});
8279
8510
  }
8280
8511
  if (optionKey === 'ALL') {
@@ -8282,11 +8513,11 @@ var updateState = function updateState(state, optionKey, value, only) {
8282
8513
  return state;
8283
8514
  }
8284
8515
  return Object.keys(state).reduce(function (acc, k) {
8285
- var _Object$assign2;
8286
- return Object.assign({}, acc, (_Object$assign2 = {}, _Object$assign2[k] = value, _Object$assign2));
8516
+ var _Object$assign3;
8517
+ return Object.assign({}, acc, (_Object$assign3 = {}, _Object$assign3[k] = value, _Object$assign3));
8287
8518
  }, {});
8288
8519
  }
8289
- return Object.assign({}, state, (_Object$assign3 = {}, _Object$assign3[optionKey] = value, _Object$assign3));
8520
+ return Object.assign({}, state, (_Object$assign4 = {}, _Object$assign4[optionKey] = value, _Object$assign4));
8290
8521
  };
8291
8522
  /** Make sure our value is in the filter */
8292
8523
  var getValue = function getValue(values, value) {
@@ -8458,6 +8689,10 @@ var warningPhenomena = [{
8458
8689
  translationKey: 'aviation-phenomenon-obscured-thunderstorm-with-hail',
8459
8690
  key: 'OBSC_TSGR',
8460
8691
  isAviation: true
8692
+ }, {
8693
+ translationKey: 'aviation-phenomenon-obscured-thunderstorm',
8694
+ key: 'OBSC_TS',
8695
+ isAviation: true
8461
8696
  }, {
8462
8697
  translationKey: 'aviation-phenomenon-squall-thunderstorm-with-hail',
8463
8698
  key: 'SQL_TSGR',
@@ -8939,23 +9174,19 @@ var ProbabilityField = function ProbabilityField(_ref) {
8939
9174
  });
8940
9175
  };
8941
9176
 
8942
- var config = getConfig();
8943
- var airmetBaseUrl = config.GW_AIRMET_BASE_URL;
8944
- var sigmetBaseUrl = config.GW_SIGMET_BASE_URL;
9177
+ var config$1 = getConfig();
9178
+ var airmetBaseUrl = config$1.GW_AIRMET_BASE_URL || '';
9179
+ var sigmetBaseUrl = config$1.GW_SIGMET_BASE_URL || '';
8945
9180
  // API
8946
9181
  var getAirmetList = function getAirmetList(auth) {
8947
9182
  return fetch(airmetBaseUrl + "/airmetlist", {
8948
9183
  headers: getHeaders(auth)
8949
- }).then(function (r) {
8950
- return r.json();
8951
- });
9184
+ }).then(handleResponse);
8952
9185
  };
8953
9186
  var getSigmetList = function getSigmetList(auth) {
8954
9187
  return fetch(sigmetBaseUrl + "/sigmetlist", {
8955
9188
  headers: getHeaders(auth)
8956
- }).then(function (r) {
8957
- return r.json();
8958
- });
9189
+ }).then(handleResponse);
8959
9190
  };
8960
9191
  var getAirmetConfig = function getAirmetConfig(auth) {
8961
9192
  return fetch(airmetBaseUrl + "/airmet-config", {
@@ -9105,7 +9336,7 @@ var useTACApi = function useTACApi() {
9105
9336
  };
9106
9337
  };
9107
9338
 
9108
- var _excluded$6 = ["IS_DRAFT", "object", "translation-select"];
9339
+ var _excluded$7 = ["IS_DRAFT", "object", "translation-select"];
9109
9340
  var useScrollTopOnError = function useScrollTopOnError(error) {
9110
9341
  var ref = React.useRef(null);
9111
9342
  React.useEffect(function () {
@@ -9202,10 +9433,11 @@ var prepareFormValues = function prepareFormValues(data) {
9202
9433
  data.IS_DRAFT;
9203
9434
  data.object;
9204
9435
  data['translation-select'];
9205
- var productToPost = _objectWithoutPropertiesLoose(data, _excluded$6);
9436
+ var productToPost = _objectWithoutPropertiesLoose(data, _excluded$7);
9206
9437
  // remove empty fields
9207
9438
  return Object.keys(productToPost).reduce(function (warningDetail, fieldName) {
9208
- var fieldValue = productToPost[fieldName];
9439
+ var key = fieldName;
9440
+ var fieldValue = productToPost[key];
9209
9441
  if (Array.isArray(fieldValue)) {
9210
9442
  if (!fieldValue.length || fieldValue[0].geoJSON === null) {
9211
9443
  return warningDetail;
@@ -9213,7 +9445,7 @@ var prepareFormValues = function prepareFormValues(data) {
9213
9445
  }
9214
9446
  if (fieldValue) {
9215
9447
  var _Object$assign;
9216
- return Object.assign({}, warningDetail, (_Object$assign = {}, _Object$assign[fieldName] = fieldValue, _Object$assign));
9448
+ return Object.assign({}, warningDetail, (_Object$assign = {}, _Object$assign[key] = fieldValue, _Object$assign));
9217
9449
  }
9218
9450
  return warningDetail;
9219
9451
  }, {});
@@ -9301,6 +9533,8 @@ var Form = function Form(_ref5) {
9301
9533
  onSaveForm = _ref5$onSaveForm === void 0 ? function () {} : _ref5$onSaveForm,
9302
9534
  _ref5$onPublishForm = _ref5.onPublishForm,
9303
9535
  onPublishForm = _ref5$onPublishForm === void 0 ? function () {} : _ref5$onPublishForm,
9536
+ _ref5$onClearForm = _ref5.onClearForm,
9537
+ onClearForm = _ref5$onClearForm === void 0 ? function () {} : _ref5$onClearForm,
9304
9538
  object = _ref5.object,
9305
9539
  _ref5$formAction = _ref5.formAction,
9306
9540
  formAction = _ref5$formAction === void 0 ? '' : _ref5$formAction,
@@ -9398,6 +9632,7 @@ var Form = function Form(_ref5) {
9398
9632
  var onPressClear = function onPressClear() {
9399
9633
  reset(getEmptyPublicWarning());
9400
9634
  setWarningGeoJSONFeature(undefined);
9635
+ onClearForm();
9401
9636
  };
9402
9637
  var publicWarningId = publicWarningDetails == null ? void 0 : publicWarningDetails.id;
9403
9638
  React.useEffect(function () {
@@ -9706,29 +9941,25 @@ var getPublicWarningStore = function getPublicWarningStore(store) {
9706
9941
  if (store && store.publicWarningForm) {
9707
9942
  return store.publicWarningForm;
9708
9943
  }
9709
- return null;
9944
+ return {};
9710
9945
  };
9711
9946
  var getPublicWarningObject = createSelector(getPublicWarningStore, function (publicWarningStore) {
9712
9947
  return publicWarningStore.object;
9713
9948
  });
9714
9949
  var getPublicWarning = createSelector(getPublicWarningStore, function (publicWarningStore) {
9715
- return publicWarningStore.publicWarning;
9950
+ return publicWarningStore == null ? void 0 : publicWarningStore.warning;
9716
9951
  });
9717
9952
  var getPublicWarningStatus = createSelector(getPublicWarningStore, function (publicWarningStore) {
9718
- var _publicWarningStore$p;
9719
- return publicWarningStore == null || (_publicWarningStore$p = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p.status;
9720
- });
9721
- var getPublicWarningEditor = createSelector(getPublicWarningStore, function (publicWarningStore) {
9722
- var _publicWarningStore$p2;
9723
- return publicWarningStore == null || (_publicWarningStore$p2 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p2.editor;
9953
+ var _publicWarningStore$w;
9954
+ return publicWarningStore == null || (_publicWarningStore$w = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w.status;
9724
9955
  });
9725
9956
  var getPublicWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
9726
- var _publicWarningStore$p3;
9727
- return publicWarningStore == null || (_publicWarningStore$p3 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p3.warningDetail.id;
9957
+ var _publicWarningStore$w2;
9958
+ return publicWarningStore == null || (_publicWarningStore$w2 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w2.warningDetail.id;
9728
9959
  });
9729
9960
  var getPublicWarningAreas = createSelector(getPublicWarningStore, function (publicWarningStore) {
9730
- var _publicWarningStore$p4;
9731
- return (publicWarningStore == null || (_publicWarningStore$p4 = publicWarningStore.publicWarning) == null ? void 0 : _publicWarningStore$p4.warningDetail.areas) || [];
9961
+ var _publicWarningStore$w3;
9962
+ return (publicWarningStore == null || (_publicWarningStore$w3 = publicWarningStore.warning) == null ? void 0 : _publicWarningStore$w3.warningDetail.areas) || [];
9732
9963
  });
9733
9964
  var getPublicWarningFormState = createSelector(getPublicWarningStore, function (publicWarningStore) {
9734
9965
  return (publicWarningStore == null ? void 0 : publicWarningStore.formState) || '';
@@ -9736,8 +9967,8 @@ var getPublicWarningFormState = createSelector(getPublicWarningStore, function (
9736
9967
  var getPublicWarningFormError = createSelector(getPublicWarningStore, function (publicWarningStore) {
9737
9968
  return publicWarningStore == null ? void 0 : publicWarningStore.error;
9738
9969
  });
9739
- var getSelectedPublicWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
9740
- return (publicWarningStore == null ? void 0 : publicWarningStore.selectedPublicWarningId) || '';
9970
+ var getSelectedWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
9971
+ return (publicWarningStore == null ? void 0 : publicWarningStore.selectedWarningId) || '';
9741
9972
  });
9742
9973
  var getSelectedPublicIsFormDirty = createSelector(getPublicWarningStore, function (publicWarningStore) {
9743
9974
  return (publicWarningStore == null ? void 0 : publicWarningStore.isFormDirty) || false;
@@ -9775,11 +10006,13 @@ var PublicWarningStatus;
9775
10006
  })(PublicWarningStatus || (PublicWarningStatus = {}));
9776
10007
 
9777
10008
  var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9778
- var defaultMapPreset = _ref.defaultMapPreset,
10009
+ var editor = _ref.editor,
10010
+ defaultMapPreset = _ref.defaultMapPreset,
9779
10011
  selectedAviationProduct = _ref.selectedAviationProduct,
9780
10012
  _ref$warningType = _ref.warningType,
9781
10013
  warningType = _ref$warningType === void 0 ? 'public' : _ref$warningType,
9782
- mode = _ref.mode;
10014
+ mode = _ref.mode,
10015
+ onFormSubmit = _ref.onFormSubmit;
9783
10016
  var publicWarning = useSelector(function (store) {
9784
10017
  return getPublicWarning(store);
9785
10018
  });
@@ -9792,21 +10025,22 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9792
10025
  var publicWarningFormError = useSelector(function (store) {
9793
10026
  return getPublicWarningFormError(store);
9794
10027
  });
9795
- var publicWarningEditor = useSelector(function (store) {
9796
- return getPublicWarningEditor(store);
9797
- });
9798
10028
  var _useAuthenticationCon = useAuthenticationContext$1(),
9799
10029
  auth = _useAuthenticationCon.auth;
9800
- var isEditor = publicWarningEditor === (auth == null ? void 0 : auth.username) || false;
10030
+ var isEditor = editor === (auth == null ? void 0 : auth.username) || false;
9801
10031
  var dispatch = useDispatch();
9802
10032
  var publishForm = function publishForm(newFormValues) {
9803
10033
  dispatch(publicWarningFormActions.publishWarning({
9804
10034
  publicWarning: {
9805
10035
  warningDetail: newFormValues,
9806
10036
  status: PublicWarningStatus.PUBLISHED
9807
- }
10037
+ },
10038
+ refetchWarnings: onFormSubmit
9808
10039
  }));
9809
10040
  };
10041
+ var clearForm = function clearForm() {
10042
+ dispatch(publicWarningFormActions.removeAllAreas());
10043
+ };
9810
10044
  var saveForm = function saveForm(newFormValues) {
9811
10045
  var status = newFormValues.linked_to_id ? PublicWarningStatus.DRAFT_PUBLISHED : PublicWarningStatus.DRAFT;
9812
10046
  dispatch(publicWarningFormActions.saveWarning({
@@ -9814,7 +10048,8 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9814
10048
  warningDetail: newFormValues,
9815
10049
  status: status,
9816
10050
  editor: auth == null ? void 0 : auth.username
9817
- }
10051
+ },
10052
+ refetchWarnings: onFormSubmit
9818
10053
  }));
9819
10054
  };
9820
10055
  var onFormDirty = function onFormDirty(isFormDirty) {
@@ -9838,12 +10073,16 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9838
10073
  if ((selectedAviationProduct == null ? void 0 : selectedAviationProduct.status) === 'DRAFT') {
9839
10074
  return false;
9840
10075
  }
9841
- if (mode === 'new') {
10076
+ if (publicWarningFormAction === 'edit') {
10077
+ return false;
10078
+ }
10079
+ if (mode === 'new') {
9842
10080
  return false;
9843
10081
  }
9844
10082
  return true;
9845
10083
  };
9846
10084
  var isReadOnly = getIsReadOnly();
10085
+ var formMode = publicWarningFormAction === 'edit' ? 'edit' : mode;
9847
10086
  var onAddObject = function onAddObject() {
9848
10087
  dispatch(uiActions.setToggleOpenDialog({
9849
10088
  type: uiTypes.DialogTypes.AreaObjectLoader,
@@ -9855,6 +10094,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9855
10094
  publicWarningDetails: publicWarning == null ? void 0 : publicWarning.warningDetail,
9856
10095
  onPublishForm: publishForm,
9857
10096
  onSaveForm: saveForm,
10097
+ onClearForm: clearForm,
9858
10098
  formAction: publicWarningFormAction,
9859
10099
  isReadOnly: isReadOnly,
9860
10100
  error: publicWarningFormError,
@@ -9863,7 +10103,7 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
9863
10103
  onAddObject: onAddObject,
9864
10104
  selectedAviationProduct: selectedAviationProduct,
9865
10105
  warningType: warningType,
9866
- mode: mode
10106
+ mode: formMode
9867
10107
  });
9868
10108
  };
9869
10109
 
@@ -10371,6 +10611,9 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10371
10611
  var warningId = useSelector(function (store) {
10372
10612
  return getPublicWarningId(store);
10373
10613
  });
10614
+ var warningStatus = useSelector(function (store) {
10615
+ return getPublicWarningStatus(store);
10616
+ });
10374
10617
  var fetchItems = function fetchItems() {
10375
10618
  dispatch(uiActions.setErrorDialog({
10376
10619
  error: '',
@@ -10451,7 +10694,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10451
10694
  }
10452
10695
  // eslint-disable-next-line react-hooks/exhaustive-deps
10453
10696
  }, [areas, searchQuery]);
10454
- var isChangeAreaDisabled = warningId !== undefined && typeof warningId === 'string' && warningId.length > 0;
10697
+ var isChangeAreaDisabled = warningId !== undefined && typeof warningId === 'string' && warningId.length > 0 && warningStatus !== PublicWarningStatus.DRAFT && warningStatus !== PublicWarningStatus.DRAFT_PUBLISHED;
10455
10698
  var drawingError = uiError ? {
10456
10699
  type: areaObjectLoaderType,
10457
10700
  error: uiError
@@ -10484,26 +10727,25 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10484
10727
  });
10485
10728
  };
10486
10729
 
10487
- /* *
10488
- * Licensed under the Apache License, Version 2.0 (the "License");
10489
- * you may not use this file except in compliance with the License.
10490
- * You may obtain a copy of the License at
10491
- *
10492
- * http://www.apache.org/licenses/LICENSE-2.0
10493
- *
10494
- * Unless required by applicable law or agreed to in writing, software
10495
- * distributed under the License is distributed on an "AS IS" BASIS,
10496
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10497
- * See the License for the specific language governing permissions and
10498
- * limitations under the License.
10499
- *
10500
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10501
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
10502
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
10503
- * */
10730
+ var _excluded$6 = ["sigmetAirmetDetail"];
10731
+ function isCancelAirmet(warningDetail) {
10732
+ return warningDetail.cancelsAirmetSequenceId !== undefined;
10733
+ }
10734
+ function isCancelSigmet(warningDetail) {
10735
+ return warningDetail.cancelsSigmetSequenceId !== undefined;
10736
+ }
10737
+ var flattenPublicWarning = function flattenPublicWarning(publicWarning) {
10738
+ if (!publicWarning) {
10739
+ return {};
10740
+ }
10741
+ var sigmetAirmetDetail = publicWarning.sigmetAirmetDetail,
10742
+ rest = _objectWithoutPropertiesLoose(publicWarning, _excluded$6);
10743
+ return Object.assign({}, rest, sigmetAirmetDetail || {}, {
10744
+ status: sigmetAirmetDetail == null ? void 0 : sigmetAirmetDetail.status
10745
+ });
10746
+ };
10504
10747
  var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(apiAirmet) {
10505
10748
  var airmet = apiAirmet.airmet;
10506
- var cancelAirmet = apiAirmet == null ? void 0 : apiAirmet.airmet;
10507
10749
  var areas = [];
10508
10750
  if (airmet.startGeometry) {
10509
10751
  areas.push({
@@ -10524,23 +10766,22 @@ var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(api
10524
10766
  lastUpdatedTime: apiAirmet.lastUpdateDate,
10525
10767
  productStatus: airmet.status,
10526
10768
  warningDetail: {
10527
- descriptionOriginal: '',
10528
- descriptionTranslation: '',
10529
- areas: areas,
10769
+ id: airmet.uuid,
10530
10770
  phenomenon: airmet.phenomenon,
10771
+ areas: areas,
10531
10772
  validFrom: airmet.validDateStart,
10532
10773
  validUntil: airmet.validDateEnd,
10774
+ incident: airmet.sequence,
10533
10775
  level: 'AIR',
10534
10776
  probability: 0,
10535
- incident: airmet.sequence,
10536
- firName: airmet.firName,
10537
- cancelId: isInstanceOfCancelAirmet(airmet) ? cancelAirmet.cancelsAirmetSequenceId : undefined
10538
- }
10777
+ descriptionOriginal: '',
10778
+ descriptionTranslation: ''
10779
+ },
10780
+ sigmetAirmetDetail: Object.assign({}, airmet)
10539
10781
  };
10540
10782
  };
10541
10783
  var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(apiSigmet) {
10542
10784
  var sigmet = apiSigmet.sigmet;
10543
- var cancelSigmet = apiSigmet == null ? void 0 : apiSigmet.sigmet;
10544
10785
  var areas = [];
10545
10786
  if (sigmet.startGeometry) {
10546
10787
  areas.push({
@@ -10577,18 +10818,18 @@ var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(api
10577
10818
  lastUpdatedTime: apiSigmet.lastUpdateDate,
10578
10819
  productStatus: sigmet.status,
10579
10820
  warningDetail: {
10580
- descriptionOriginal: '',
10581
- descriptionTranslation: '',
10582
- areas: areas,
10821
+ id: sigmet.uuid,
10583
10822
  phenomenon: sigmet.phenomenon,
10823
+ areas: areas,
10584
10824
  validFrom: sigmet.validDateStart,
10585
10825
  validUntil: sigmet.validDateEnd,
10826
+ incident: sigmet.sequence,
10586
10827
  level: 'SIG',
10587
10828
  probability: 0,
10588
- incident: sigmet.sequence,
10589
- firName: sigmet.firName,
10590
- cancelId: isInstanceOfCancelSigmet(sigmet) ? cancelSigmet.cancelsSigmetSequenceId : undefined
10591
- }
10829
+ descriptionOriginal: '',
10830
+ descriptionTranslation: ''
10831
+ },
10832
+ sigmetAirmetDetail: Object.assign({}, sigmet)
10592
10833
  };
10593
10834
  };
10594
10835
  var mapProductStatusToWarningStatus = function mapProductStatusToWarningStatus(productStatus) {
@@ -10604,15 +10845,9 @@ var mapProductStatusToWarningStatus = function mapProductStatusToWarningStatus(p
10604
10845
  return PublicWarningStatus.EXPIRED;
10605
10846
  }
10606
10847
  };
10607
- var transformSigmetToProductFormat = function transformSigmetToProductFormat(warning, config) {
10608
- var _warning$sigmet;
10609
- var fir = (warning == null || (_warning$sigmet = warning.sigmet) == null ? void 0 : _warning$sigmet.locationIndicatorATSR) || config.active_firs[0];
10610
- var firConfig = config.fir_areas[fir];
10848
+ var transformSigmetToProductFormat = function transformSigmetToProductFormat(warning) {
10611
10849
  var sigmet = warning == null ? void 0 : warning.sigmet;
10612
10850
  var cancelSigmet = warning == null ? void 0 : warning.sigmet;
10613
- if (!firConfig) {
10614
- throw new Error("FIR " + fir + " not found in configuration");
10615
- }
10616
10851
  return Object.assign({
10617
10852
  uuid: (sigmet == null ? void 0 : sigmet.uuid) || 'default',
10618
10853
  // Use a fallback UUID or handle undefined
@@ -10653,15 +10888,9 @@ var transformSigmetToProductFormat = function transformSigmetToProductFormat(war
10653
10888
  validDateEndOfSigmetToCancel: cancelSigmet.validDateEndOfSigmetToCancel
10654
10889
  });
10655
10890
  };
10656
- var transformAirmetToProductFormat = function transformAirmetToProductFormat(warning, config) {
10657
- var _warning$airmet;
10658
- var fir = (warning == null || (_warning$airmet = warning.airmet) == null ? void 0 : _warning$airmet.locationIndicatorATSR) || config.active_firs[0];
10659
- var firConfig = config.fir_areas[fir];
10891
+ var transformAirmetToProductFormat = function transformAirmetToProductFormat(warning) {
10660
10892
  var airmet = warning == null ? void 0 : warning.airmet;
10661
10893
  var cancelAirmet = warning == null ? void 0 : warning.airmet;
10662
- if (!firConfig) {
10663
- throw new Error("FIR " + fir + " not found in configuration");
10664
- }
10665
10894
  return Object.assign({
10666
10895
  uuid: (airmet == null ? void 0 : airmet.uuid) || 'default',
10667
10896
  // Use a fallback UUID or handle undefined
@@ -10774,6 +11003,172 @@ var getEmptyAirmetWarning = function getEmptyAirmetWarning() {
10774
11003
  }
10775
11004
  };
10776
11005
  };
11006
+ var renewWarning = function renewWarning(warning, productConfig) {
11007
+ if (!warning.sigmetAirmetDetail) {
11008
+ return warning;
11009
+ }
11010
+ return renewAviationProduct(warning, productConfig);
11011
+ };
11012
+ var renewAviationProduct = function renewAviationProduct(oldWarning, productConfig) {
11013
+ var warningDetail = oldWarning.sigmetAirmetDetail;
11014
+ if (!warningDetail) {
11015
+ return oldWarning;
11016
+ }
11017
+ var newValidUntil = 'phenomenon' in warningDetail ? getDefaultValidUntilValue(productConfig, warningDetail.phenomenon, warningDetail.locationIndicatorATSR, warningDetail.validDateEnd) : warningDetail.validDateEnd;
11018
+ var renewedWarningDetail = Object.assign({}, warningDetail, {
11019
+ validDateStart: warningDetail.validDateEnd,
11020
+ validDateEnd: newValidUntil,
11021
+ status: ProductStatus.DRAFT,
11022
+ uuid: undefined,
11023
+ sequence: '-1'
11024
+ });
11025
+ return Object.assign({}, oldWarning, {
11026
+ sigmetAirmetDetail: renewedWarningDetail
11027
+ });
11028
+ };
11029
+
11030
+ /* *
11031
+ * Licensed under the Apache License, Version 2.0 (the "License");
11032
+ * you may not use this file except in compliance with the License.
11033
+ * You may obtain a copy of the License at
11034
+ *
11035
+ * http://www.apache.org/licenses/LICENSE-2.0
11036
+ *
11037
+ * Unless required by applicable law or agreed to in writing, software
11038
+ * distributed under the License is distributed on an "AS IS" BASIS,
11039
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11040
+ * See the License for the specific language governing permissions and
11041
+ * limitations under the License.
11042
+ *
11043
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11044
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
11045
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
11046
+ * */
11047
+ var config = getConfig();
11048
+ var publicWarningBaseUrl = config.GW_DRAWINGS_BASE_URL || '';
11049
+ // API
11050
+ var getPublicWarningList = function getPublicWarningList(auth) {
11051
+ return fetch(publicWarningBaseUrl + "/warnings", {
11052
+ headers: getHeaders(auth)
11053
+ }).then(handleResponse);
11054
+ };
11055
+ var updatePublicWarningEditor = function updatePublicWarningEditor(warningId, isEditor, auth) {
11056
+ return fetch(publicWarningBaseUrl + "/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false'), {
11057
+ headers: getHeaders(auth),
11058
+ method: 'POST'
11059
+ }).then(handleResponse);
11060
+ };
11061
+
11062
+ /**
11063
+ * @param disabled - Disables fetching, but still returns cached values.
11064
+ * https://tanstack.com/query/v4/docs/framework/react/guides/disabling-queries
11065
+ */
11066
+ var usePublicWarnings = function usePublicWarnings(disabled) {
11067
+ if (disabled === void 0) {
11068
+ disabled = false;
11069
+ }
11070
+ return useAuthQuery(['public-warning-list'], getPublicWarningList, disabled, 1000 * 60 * 5);
11071
+ };
11072
+ var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
11073
+ var queryClient = useQueryClient();
11074
+ var _useAuthenticationCon = useAuthenticationContext(),
11075
+ auth = _useAuthenticationCon.auth;
11076
+ var dispatch = useDispatch();
11077
+ return useMutation(Object.assign({
11078
+ mutationFn: function mutationFn(_ref) {
11079
+ var id = _ref.id,
11080
+ isEditor = _ref.isEditor;
11081
+ if (!auth) {
11082
+ throw new Error('Authentication context not found');
11083
+ }
11084
+ return updatePublicWarningEditor(id, isEditor, auth);
11085
+ }
11086
+ }, optimisticUpdate(['public-warning-list'], queryClient, function (w, _ref2) {
11087
+ var isEditor = _ref2.isEditor;
11088
+ return Object.assign({}, w, {
11089
+ editor: isEditor ? auth.username : undefined
11090
+ });
11091
+ }, function (error) {
11092
+ dispatch(publicWarningFormActions.setFormError({
11093
+ message: error.message
11094
+ }));
11095
+ }), {
11096
+ onSettled: function () {
11097
+ var _onSettled = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data, e, _ref3) {
11098
+ var isEditor;
11099
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
11100
+ while (1) switch (_context.prev = _context.next) {
11101
+ case 0:
11102
+ isEditor = _ref3.isEditor;
11103
+ dispatch(snackbarActions.openSnackbar({
11104
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
11105
+ key: isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor'
11106
+ }));
11107
+ case 2:
11108
+ case "end":
11109
+ return _context.stop();
11110
+ }
11111
+ }, _callee);
11112
+ }));
11113
+ function onSettled(_x, _x2, _x3) {
11114
+ return _onSettled.apply(this, arguments);
11115
+ }
11116
+ return onSettled;
11117
+ }()
11118
+ }));
11119
+ };
11120
+
11121
+ /* *
11122
+ * Licensed under the Apache License, Version 2.0 (the "License");
11123
+ * you may not use this file except in compliance with the License.
11124
+ * You may obtain a copy of the License at
11125
+ *
11126
+ * http://www.apache.org/licenses/LICENSE-2.0
11127
+ *
11128
+ * Unless required by applicable law or agreed to in writing, software
11129
+ * distributed under the License is distributed on an "AS IS" BASIS,
11130
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11131
+ * See the License for the specific language governing permissions and
11132
+ * limitations under the License.
11133
+ *
11134
+ * Copyright 2025 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11135
+ * Copyright 2025 - Finnish Meteorological Institute (FMI)
11136
+ * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
11137
+ * */
11138
+ var useWarnings = function useWarnings(disabled) {
11139
+ var _usePublicWarnings = usePublicWarnings(disabled),
11140
+ publicWarnings = _usePublicWarnings.data,
11141
+ refetchPublicWarnings = _usePublicWarnings.refetch,
11142
+ isFetchingPublicWarnings = _usePublicWarnings.isFetching,
11143
+ publicWarningsError = _usePublicWarnings.error,
11144
+ dataUpdatedAt = _usePublicWarnings.dataUpdatedAt;
11145
+ var _useAirmetList = useAirmetList(disabled),
11146
+ airmetWarnings = _useAirmetList.data,
11147
+ refetchAirmet = _useAirmetList.refetch,
11148
+ isFetchingAirmet = _useAirmetList.isFetching;
11149
+ var _useSigmetList = useSigmetList(disabled),
11150
+ sigmetWarnings = _useSigmetList.data,
11151
+ refetchSigmet = _useSigmetList.refetch,
11152
+ isFetchingSigmet = _useSigmetList.isFetching;
11153
+ var combinedWarnings = useMemo(function () {
11154
+ var transformedSigmets = (sigmetWarnings == null ? void 0 : sigmetWarnings.map(transformSigmetToWarningFormat)) || [];
11155
+ var transformedAirmets = (airmetWarnings == null ? void 0 : airmetWarnings.map(transformAirmetToWarningFormat)) || [];
11156
+ return (publicWarnings || []).concat(transformedSigmets).concat(transformedAirmets);
11157
+ }, [publicWarnings, sigmetWarnings, airmetWarnings]);
11158
+ var refetchWarnings = function refetchWarnings() {
11159
+ void refetchPublicWarnings();
11160
+ void refetchAirmet();
11161
+ void refetchSigmet();
11162
+ };
11163
+ var isFetching = isFetchingPublicWarnings || isFetchingAirmet || isFetchingSigmet;
11164
+ return {
11165
+ combinedWarnings: combinedWarnings,
11166
+ refetchWarnings: refetchWarnings,
11167
+ isFetching: isFetching,
11168
+ error: publicWarningsError || undefined,
11169
+ dataUpdatedAt: dataUpdatedAt
11170
+ };
11171
+ };
10777
11172
 
10778
11173
  var warningFormConfirmationOptions = function warningFormConfirmationOptions(t) {
10779
11174
  return {
@@ -10793,7 +11188,6 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10793
11188
  source = _ref$source === void 0 ? 'app' : _ref$source,
10794
11189
  startPosition = _ref.startPosition,
10795
11190
  defaultMapPreset = _ref.defaultMapPreset;
10796
- var warningsApi = getWarningsApi();
10797
11191
  var _useSetupDialog = useSetupDialog(publicWarningDialogType, source),
10798
11192
  dialogOrder = _useSetupDialog.dialogOrder,
10799
11193
  setDialogOrder = _useSetupDialog.setDialogOrder,
@@ -10811,66 +11205,100 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10811
11205
  var isFormDirty = useSelector(function (store) {
10812
11206
  return getSelectedPublicIsFormDirty(store);
10813
11207
  });
10814
- var publicWarningStatus = useSelector(function (store) {
10815
- return getPublicWarningStatus(store);
10816
- });
11208
+ var publicWarningState = useSelector(getPublicWarning);
11209
+ var _ref2 = publicWarningState || {},
11210
+ status = _ref2.status,
11211
+ editor = _ref2.editor;
11212
+ var _useWarnings = useWarnings(true),
11213
+ combinedWarnings = _useWarnings.combinedWarnings,
11214
+ refetchWarnings = _useWarnings.refetchWarnings,
11215
+ isFetching = _useWarnings.isFetching;
11216
+ var _React$useState = React__default.useState(isFetching),
11217
+ hasFetched = _React$useState[0],
11218
+ setHasFetched = _React$useState[1];
11219
+ React__default.useEffect(function () {
11220
+ if (isFetching) {
11221
+ setHasFetched(true);
11222
+ }
11223
+ }, [isFetching]);
10817
11224
  var selectedWarningId = useSelector(function (store) {
10818
- return getSelectedPublicWarningId(store);
10819
- });
10820
- var publicWarningEditor = useSelector(function (store) {
10821
- return getPublicWarningEditor(store);
11225
+ return getSelectedWarningId(store);
10822
11226
  });
11227
+ var selectedWarningObject = useSelector(getPublicWarning);
10823
11228
  var warningType = useSelector(getWarningType);
11229
+ var selectedWarning = combinedWarnings == null ? void 0 : combinedWarnings.find(function (w) {
11230
+ return w.id === selectedWarningId;
11231
+ });
10824
11232
  var _useAuthenticationCon = useAuthenticationContext$1(),
10825
11233
  auth = _useAuthenticationCon.auth;
10826
- var isEditor = publicWarningEditor === (auth == null ? void 0 : auth.username) || false;
10827
- var getLatestEditor = /*#__PURE__*/function () {
10828
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
10829
- var latestWarnings, latestWarning;
11234
+ var isEditor = (selectedWarning == null ? void 0 : selectedWarning.editor) === (auth == null ? void 0 : auth.username) || false;
11235
+ var shouldGiveEditorWarning = React__default.useCallback(function (newEditor, oldEditor) {
11236
+ var oldEditorIsYou = oldEditor && oldEditor === (auth == null ? void 0 : auth.username);
11237
+ if (oldEditorIsYou && newEditor !== oldEditor) {
11238
+ dispatch(publicWarningFormActions.setFormError({
11239
+ severity: 'warning',
11240
+ message: TAKEOVER_MESSAGE
11241
+ }));
11242
+ }
11243
+ }, [dispatch, auth == null ? void 0 : auth.username]);
11244
+ var previousSelectedWarning = usePrevious(selectedWarning);
11245
+ var refetchCurrentEditor = /*#__PURE__*/function () {
11246
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
11247
+ var newWarnings, newSelectedWarning;
10830
11248
  return _regeneratorRuntime().wrap(function _callee$(_context) {
10831
11249
  while (1) switch (_context.prev = _context.next) {
10832
11250
  case 0:
10833
11251
  _context.next = 2;
10834
- return warningsApi.getWarnings();
11252
+ return getPublicWarningList(auth);
10835
11253
  case 2:
10836
- latestWarnings = _context.sent;
10837
- latestWarning = latestWarnings.data.find(function (warning) {
10838
- return warning.id === selectedWarningId;
11254
+ newWarnings = _context.sent;
11255
+ newSelectedWarning = newWarnings == null ? void 0 : newWarnings.find(function (w) {
11256
+ return w.id === selectedWarningId;
10839
11257
  });
10840
- return _context.abrupt("return", (latestWarning == null ? void 0 : latestWarning.editor) || '');
11258
+ return _context.abrupt("return", (newSelectedWarning == null ? void 0 : newSelectedWarning.editor) || '');
10841
11259
  case 5:
10842
11260
  case "end":
10843
11261
  return _context.stop();
10844
11262
  }
10845
11263
  }, _callee);
10846
11264
  }));
10847
- return function getLatestEditor() {
10848
- return _ref2.apply(this, arguments);
11265
+ return function refetchCurrentEditor() {
11266
+ return _ref3.apply(this, arguments);
10849
11267
  };
10850
11268
  }();
11269
+ React__default.useEffect(function () {
11270
+ if (editor !== (selectedWarning == null ? void 0 : selectedWarning.editor) && status !== 'TODO') {
11271
+ void setIsEditor(editor !== (auth == null ? void 0 : auth.username));
11272
+ }
11273
+ // eslint-disable-next-line react-hooks/exhaustive-deps
11274
+ }, [editor]);
11275
+ React__default.useEffect(function () {
11276
+ if ((selectedWarning == null ? void 0 : selectedWarning.id) !== (previousSelectedWarning == null ? void 0 : previousSelectedWarning.id)) {
11277
+ dispatch(publicWarningFormActions.removeFormError());
11278
+ }
11279
+ }, [selectedWarning == null ? void 0 : selectedWarning.id, previousSelectedWarning == null ? void 0 : previousSelectedWarning.id, dispatch]);
11280
+ React__default.useEffect(function () {
11281
+ // Only give editor warning when the change in selectedWarning is from a refetch
11282
+ if (hasFetched) {
11283
+ setHasFetched(false);
11284
+ shouldGiveEditorWarning(selectedWarning == null ? void 0 : selectedWarning.editor, previousSelectedWarning == null ? void 0 : previousSelectedWarning.editor);
11285
+ }
11286
+ // eslint-disable-next-line react-hooks/exhaustive-deps
11287
+ }, [selectedWarning == null ? void 0 : selectedWarning.editor]);
11288
+ var updatePublicWarningEditor = useMutatePublicWarningEditor();
10851
11289
  var setIsEditor = /*#__PURE__*/function () {
10852
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(isReadOnly) {
11290
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(isReadOnly) {
10853
11291
  var username, latestEditor;
10854
11292
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
10855
11293
  while (1) switch (_context2.prev = _context2.next) {
10856
11294
  case 0:
10857
11295
  username = (auth == null ? void 0 : auth.username) || ''; // make sure to get the latest changes if you are editing an existing warning
10858
- if (!selectedWarningId) {
10859
- _context2.next = 7;
10860
- break;
10861
- }
10862
- _context2.next = 4;
10863
- return getLatestEditor();
10864
- case 4:
10865
- _context2.t0 = _context2.sent;
10866
- _context2.next = 8;
10867
- break;
10868
- case 7:
10869
- _context2.t0 = '';
10870
- case 8:
10871
- latestEditor = _context2.t0;
11296
+ _context2.next = 3;
11297
+ return refetchCurrentEditor();
11298
+ case 3:
11299
+ latestEditor = _context2.sent;
10872
11300
  if (!(!selectedWarningId || !isReadOnly && username === latestEditor || isReadOnly && latestEditor !== username)) {
10873
- _context2.next = 12;
11301
+ _context2.next = 8;
10874
11302
  break;
10875
11303
  }
10876
11304
  // currently editing a new warning or
@@ -10880,34 +11308,40 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10880
11308
  dispatch(publicWarningFormActions.setFormValues({
10881
11309
  formState: isReadOnly ? 'readonly' : ''
10882
11310
  }));
11311
+ // If the editor was changed in a different window, refetch the warnings
11312
+ if (latestEditor !== (selectedWarning == null ? void 0 : selectedWarning.editor)) {
11313
+ void refetchWarnings();
11314
+ }
10883
11315
  return _context2.abrupt("return", true);
10884
- case 12:
11316
+ case 8:
10885
11317
  if (!(!isReadOnly && isAlreadyEdited(latestEditor, username))) {
10886
- _context2.next = 15;
11318
+ _context2.next = 11;
10887
11319
  break;
10888
11320
  }
10889
- _context2.next = 15;
11321
+ _context2.next = 11;
10890
11322
  return confirmDialog({
10891
11323
  title: t('warning-edit-mode-title'),
10892
11324
  description: t('warning-edit-mode-description'),
10893
11325
  confirmLabel: t('warning-edit-mode-confirm'),
10894
11326
  cancelLabel: t('warning-dialog-cancel')
10895
11327
  });
10896
- case 15:
10897
- dispatch(publicWarningFormActions.toggleEditorWarning({
10898
- warningId: selectedWarningId,
10899
- isEditor: !isReadOnly,
10900
- username: username
11328
+ case 11:
11329
+ dispatch(publicWarningFormActions.setFormValues({
11330
+ formState: isReadOnly ? 'readonly' : ''
10901
11331
  }));
11332
+ updatePublicWarningEditor.mutate({
11333
+ id: selectedWarningId,
11334
+ isEditor: !isReadOnly
11335
+ });
10902
11336
  return _context2.abrupt("return", true);
10903
- case 17:
11337
+ case 14:
10904
11338
  case "end":
10905
11339
  return _context2.stop();
10906
11340
  }
10907
11341
  }, _callee2);
10908
11342
  }));
10909
11343
  return function setIsEditor(_x) {
10910
- return _ref3.apply(this, arguments);
11344
+ return _ref4.apply(this, arguments);
10911
11345
  };
10912
11346
  }();
10913
11347
  var onChangeFormMode = function onChangeFormMode(isReadOnly) {
@@ -10934,7 +11368,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10934
11368
  }
10935
11369
  };
10936
11370
  var closeDialog = /*#__PURE__*/function () {
10937
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
11371
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
10938
11372
  var mayProceed;
10939
11373
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
10940
11374
  while (1) switch (_context4.prev = _context4.next) {
@@ -10965,7 +11399,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10965
11399
  }, _callee4);
10966
11400
  }));
10967
11401
  return function closeDialog() {
10968
- return _ref5.apply(this, arguments);
11402
+ return _ref6.apply(this, arguments);
10969
11403
  };
10970
11404
  }();
10971
11405
  var _useAirmetList = useAirmetList(true),
@@ -10981,15 +11415,26 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10981
11415
  var updatedWarningType = selectedSigmet ? 'sigmet' : selectedAirmet && 'airmet' || warningType;
10982
11416
  var _useProductConfig = useProductConfig(updatedWarningType, !isDialogOpen),
10983
11417
  aviationConfig = _useProductConfig.data;
10984
- var selectedSigmetProduct = selectedSigmet && aviationConfig ? transformSigmetToProductFormat(selectedSigmet, aviationConfig) : getEmptySigmetWarning();
10985
- var selectedAirmetProduct = selectedAirmet && aviationConfig ? transformAirmetToProductFormat(selectedAirmet, aviationConfig) : getEmptyAirmetWarning();
10986
- var selectedAviationProduct = updatedWarningType === 'sigmet' ? selectedSigmetProduct : updatedWarningType === 'airmet' && selectedAirmetProduct || undefined;
11418
+ var selectedSigmetProduct = selectedSigmet && aviationConfig ? transformSigmetToProductFormat(selectedSigmet) : getEmptySigmetWarning();
11419
+ var selectedAirmetProduct = selectedAirmet && aviationConfig ? transformAirmetToProductFormat(selectedAirmet) : getEmptyAirmetWarning();
11420
+ var selectedAviationProduct = React__default.useMemo(function () {
11421
+ if (selectedWarningObject && selectedWarningObject.sigmetAirmetDetail && aviationConfig) {
11422
+ return flattenPublicWarning(selectedWarningObject);
11423
+ }
11424
+ if (updatedWarningType === 'sigmet') {
11425
+ return selectedSigmetProduct;
11426
+ }
11427
+ if (updatedWarningType === 'airmet') {
11428
+ return selectedAirmetProduct;
11429
+ }
11430
+ return undefined;
11431
+ }, [selectedWarningObject, updatedWarningType, selectedSigmetProduct, selectedAirmetProduct, aviationConfig]);
10987
11432
  var productCanBe = updatedWarningType === 'public' ? ['DRAFTED', 'DISCARDED', 'PUBLISHED'] : (selectedSigmet == null ? void 0 : selectedSigmet.canbe) || (selectedAirmet == null ? void 0 : selectedAirmet.canbe);
10988
11433
  var mode = getProductFormMode(productCanBe, !selectedWarningId ? null : selectedAviationProduct);
10989
11434
  // Readonly also in case you are not creating a new warning and you are not set as the editor
10990
- var isReadOnly = formAction === 'readonly' || !isEditor && publicWarningStatus !== undefined;
11435
+ var isReadOnly = formAction === 'readonly' || !isEditor && status !== undefined;
10991
11436
  // Only show toggle if in draft status
10992
- var shouldHideFormToggleMode = publicWarningStatus !== 'DRAFT' && publicWarningStatus !== 'DRAFT_PUBLISHED';
11437
+ var shouldHideFormToggleMode = status !== 'DRAFT' && status !== 'DRAFT_PUBLISHED';
10993
11438
  return jsxs(Fragment, {
10994
11439
  children: [jsx(PublicWarningsFormDialog, {
10995
11440
  isOpen: isDialogOpen,
@@ -11003,14 +11448,18 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11003
11448
  isReadOnly: isReadOnly,
11004
11449
  onChangeFormMode: onChangeFormMode,
11005
11450
  shouldHideFormMode: shouldHideFormToggleMode,
11006
- publicWarningEditor: publicWarningEditor,
11451
+ publicWarningEditor: (selectedWarning == null ? void 0 : selectedWarning.editor) || undefined,
11007
11452
  selectedAviationProduct: selectedAviationProduct,
11008
11453
  warningType: updatedWarningType,
11009
11454
  children: jsx(PublicWarningsFormConnect, {
11455
+ editor: (selectedWarning == null ? void 0 : selectedWarning.editor) || undefined,
11010
11456
  defaultMapPreset: defaultMapPreset,
11011
11457
  selectedAviationProduct: selectedAviationProduct,
11012
11458
  warningType: updatedWarningType,
11013
- mode: mode
11459
+ mode: mode,
11460
+ onFormSubmit: function onFormSubmit() {
11461
+ return refetchWarnings();
11462
+ }
11014
11463
  })
11015
11464
  }), jsx(AreaObjectLoaderConnect, {})]
11016
11465
  });
@@ -11037,9 +11486,10 @@ var warningColors = Object.assign({}, LevelColors);
11037
11486
 
11038
11487
  var _excluded$5 = ["id", "warningDetail", "status", "editor"],
11039
11488
  _excluded2 = ["id", "linked_to_id", "proposal_id", "warning_handle_uuid"],
11040
- _excluded3 = ["id"],
11041
- _excluded4 = ["id", "warningDetail"],
11042
- _excluded5 = ["id"];
11489
+ _excluded3 = ["published_warning_uuid"],
11490
+ _excluded4 = ["id"],
11491
+ _excluded5 = ["id", "warningDetail"],
11492
+ _excluded6 = ["id"];
11043
11493
  var getSortedStatus = function getSortedStatus(status) {
11044
11494
  switch (status) {
11045
11495
  case 'DRAFT_PUBLISHED':
@@ -11053,6 +11503,7 @@ var getSortedStatus = function getSortedStatus(status) {
11053
11503
  }
11054
11504
  };
11055
11505
  var getWarningWithoutIdStatusEditor = function getWarningWithoutIdStatusEditor(warning) {
11506
+ var _warningDetail$areas;
11056
11507
  warning.id;
11057
11508
  var warningDetail = warning.warningDetail;
11058
11509
  warning.status;
@@ -11063,15 +11514,22 @@ var getWarningWithoutIdStatusEditor = function getWarningWithoutIdStatusEditor(w
11063
11514
  warningDetail.proposal_id;
11064
11515
  warningDetail.warning_handle_uuid;
11065
11516
  var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded2);
11517
+ var areas = (_warningDetail$areas = warningDetail.areas) == null ? void 0 : _warningDetail$areas.map(function (_ref) {
11518
+ _ref.published_warning_uuid;
11519
+ var area = _objectWithoutPropertiesLoose(_ref, _excluded3);
11520
+ return area;
11521
+ });
11066
11522
  return Object.assign({}, fullWarning, {
11067
- warningDetail: cleanWarningDetail
11523
+ warningDetail: Object.assign({}, cleanWarningDetail, {
11524
+ areas: areas
11525
+ })
11068
11526
  });
11069
11527
  };
11070
11528
  var getWarningWithLinkedToId = function getWarningWithLinkedToId(warning) {
11071
11529
  var id = warning.id,
11072
11530
  warningDetail = warning.warningDetail;
11073
11531
  warningDetail.id;
11074
- var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded3);
11532
+ var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded4);
11075
11533
  return Object.assign({}, warning, {
11076
11534
  warningDetail: Object.assign({}, cleanWarningDetail, {
11077
11535
  linked_to_id: id
@@ -11082,9 +11540,9 @@ var getWarningWithLinkedToId = function getWarningWithLinkedToId(warning) {
11082
11540
  var getWarningWithProposalId = function getWarningWithProposalId(warning) {
11083
11541
  var id = warning.id,
11084
11542
  warningDetail = warning.warningDetail,
11085
- fullWarning = _objectWithoutPropertiesLoose(warning, _excluded4);
11543
+ fullWarning = _objectWithoutPropertiesLoose(warning, _excluded5);
11086
11544
  warningDetail.id;
11087
- var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded5);
11545
+ var cleanWarningDetail = _objectWithoutPropertiesLoose(warningDetail, _excluded6);
11088
11546
  return Object.assign({}, fullWarning, {
11089
11547
  warningDetail: Object.assign({}, cleanWarningDetail, {
11090
11548
  proposal_id: id
@@ -11170,7 +11628,6 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11170
11628
  })
11171
11629
  })
11172
11630
  }), jsxs(Menu, {
11173
- title: t("filter-" + id),
11174
11631
  open: Boolean(anchorEl),
11175
11632
  onClose: function onClose() {
11176
11633
  return setAnchorEl(null);
@@ -11244,11 +11701,7 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11244
11701
  return updateFilter(id, emptyFilterId, checked, only);
11245
11702
  },
11246
11703
  labelStyle: {
11247
- width: 'fit-content',
11248
- fontSize: '16px',
11249
- display: 'flex',
11250
- alignItems: 'center',
11251
- gap: 1
11704
+ fontSize: '16px'
11252
11705
  },
11253
11706
  label: jsx(Fragment, {
11254
11707
  children: t(getTranslationKey(emptyFilterId, id))
@@ -11265,14 +11718,29 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11265
11718
  return updateFilter(id, optionId, checked, only);
11266
11719
  },
11267
11720
  labelStyle: Object.assign({}, getLevelStyle(warningColor), {
11268
- width: 'fit-content',
11269
- fontSize: '16px',
11270
- display: 'flex',
11271
- alignItems: 'center',
11272
- gap: 1
11721
+ width: LevelColors[optionId] ? 'fit-content' : '100%',
11722
+ fontSize: '16px'
11273
11723
  }),
11274
- label: jsxs(Fragment, {
11275
- children: [getWarningPhenomenaIcon(optionId), ' ', t(getTranslationKey(optionId, id))]
11724
+ label: jsx(CustomTooltip, {
11725
+ title: t(getTranslationKey(optionId, id)),
11726
+ placement: "bottom",
11727
+ children: jsxs(Box, {
11728
+ "data-testid": "wrapper-" + optionId,
11729
+ sx: {
11730
+ display: 'flex',
11731
+ alignItems: 'center',
11732
+ gap: 1,
11733
+ maxWidth: 200
11734
+ },
11735
+ children: [getPhenomenaIcon(optionId), jsx(Typography, {
11736
+ noWrap: true,
11737
+ variant: "body2",
11738
+ sx: {
11739
+ fontSize: '16px'
11740
+ },
11741
+ children: t(getTranslationKey(optionId, id))
11742
+ })]
11743
+ })
11276
11744
  })
11277
11745
  }, id + "-" + optionId);
11278
11746
  })]
@@ -11429,6 +11897,8 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
11429
11897
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
11430
11898
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
11431
11899
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
11900
+ _ref$onRenewWarning = _ref.onRenewWarning,
11901
+ onRenewWarning = _ref$onRenewWarning === void 0 ? function () {} : _ref$onRenewWarning,
11432
11902
  t = _ref.t;
11433
11903
  var duplicate = {
11434
11904
  text: t('warning-list-button-duplicate'),
@@ -11495,11 +11965,42 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
11495
11965
  icon: jsx(Delete, {})
11496
11966
  }];
11497
11967
  default:
11498
- return [];
11968
+ switch (warning.productStatus) {
11969
+ case ProductStatus.PUBLISHED:
11970
+ if (warning.sigmetAirmetDetail && (isInstanceOfCancelSigmet(warning.sigmetAirmetDetail) || isInstanceOfCancelAirmet(warning.sigmetAirmetDetail))) {
11971
+ return [];
11972
+ }
11973
+ return [{
11974
+ text: t('warning-list-button-renew'),
11975
+ action: function action() {
11976
+ if (warning) {
11977
+ onRenewWarning(warning);
11978
+ }
11979
+ },
11980
+ icon: jsx(Update, {})
11981
+ }];
11982
+ case ProductStatus.CANCELLED:
11983
+ return [];
11984
+ case ProductStatus.EXPIRED:
11985
+ if (warning.sigmetAirmetDetail && (isInstanceOfCancelSigmet(warning.sigmetAirmetDetail) || isInstanceOfCancelAirmet(warning.sigmetAirmetDetail))) {
11986
+ return [];
11987
+ }
11988
+ return [{
11989
+ text: t('warning-list-button-renew'),
11990
+ action: function action() {
11991
+ if (warning) {
11992
+ onRenewWarning(warning);
11993
+ }
11994
+ },
11995
+ icon: jsx(Update, {})
11996
+ }];
11997
+ default:
11998
+ return [];
11999
+ }
11499
12000
  }
11500
12001
  };
11501
12002
 
11502
- var _excluded$2 = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning"];
12003
+ var _excluded$2 = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onRenewWarning"];
11503
12004
  var renderLevelText = function renderLevelText(levelString) {
11504
12005
  if (!levelString) {
11505
12006
  return null;
@@ -11536,10 +12037,10 @@ var renderStatusIcon = function renderStatusIcon(warning, status) {
11536
12037
  icon: icon
11537
12038
  });
11538
12039
  };
11539
- if (warning.productStatus === ProductStatus.PUBLISHED && warning.warningDetail.cancelId) {
11540
- return getStatusTag("Cnls " + warning.warningDetail.cancelId, 'red');
12040
+ if (warning.productStatus === ProductStatus.PUBLISHED && warning.sigmetAirmetDetail && (isCancelAirmet(warning.sigmetAirmetDetail) || isCancelSigmet(warning.sigmetAirmetDetail))) {
12041
+ return getStatusTag("Cnls " + (isCancelAirmet(warning.sigmetAirmetDetail) ? warning.sigmetAirmetDetail.cancelsAirmetSequenceId : warning.sigmetAirmetDetail.cancelsSigmetSequenceId), 'red');
11541
12042
  }
11542
- if (warning.productStatus === ProductStatus.CANCELLED && warning.warningDetail.cancelId === undefined) {
12043
+ if (warning.productStatus === ProductStatus.CANCELLED && warning.sigmetAirmetDetail) {
11543
12044
  return getStatusTag('Cnld', 'red');
11544
12045
  }
11545
12046
  switch (status) {
@@ -11578,7 +12079,7 @@ var renderStatusIcon = function renderStatusIcon(warning, status) {
11578
12079
  }
11579
12080
  };
11580
12081
  var WarningListItem = function WarningListItem(_ref) {
11581
- var _warning$warningDetai, _sx, _sx2, _Object$assign;
12082
+ var _warning$warningDetai, _warning$sigmetAirmet, _sx, _sx2, _Object$assign;
11582
12083
  var warning = _ref.warning,
11583
12084
  activeWarningId = _ref.activeWarningId,
11584
12085
  highlightedItem = _ref.highlightedItem,
@@ -11594,12 +12095,14 @@ var WarningListItem = function WarningListItem(_ref) {
11594
12095
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
11595
12096
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
11596
12097
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12098
+ _ref$onRenewWarning = _ref.onRenewWarning,
12099
+ onRenewWarning = _ref$onRenewWarning === void 0 ? function () {} : _ref$onRenewWarning,
11597
12100
  props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
11598
12101
  var _useWarningsTranslati = useWarningsTranslation(),
11599
12102
  t = _useWarningsTranslati.t;
11600
12103
  var phenomenonDetails = allPhenomenaDict[warning.warningDetail.phenomenon];
11601
12104
  var objectNameText = ((_warning$warningDetai = warning.warningDetail.areas) == null || (_warning$warningDetai = _warning$warningDetai[0]) == null ? void 0 : _warning$warningDetai.objectName) || '-';
11602
- var objectHoverText = warning.warningDetail.firName ? warning.warningDetail.firName : objectNameText;
12105
+ var objectHoverText = (_warning$sigmetAirmet = warning.sigmetAirmetDetail) != null && _warning$sigmetAirmet.firName ? warning.sigmetAirmetDetail.firName : objectNameText;
11603
12106
  var _useOverflowCheck = useOverflowCheck(objectNameText),
11604
12107
  objectNameRef = _useOverflowCheck.ref;
11605
12108
  var phenomenonText = phenomenonDetails != null && phenomenonDetails.translationKey ? t(phenomenonDetails.translationKey) : '-';
@@ -11647,7 +12150,8 @@ var WarningListItem = function WarningListItem(_ref) {
11647
12150
  onDeleteReviewWarning: onDeleteReviewWarning,
11648
12151
  onDeleteWarning: onDeleteWarning,
11649
12152
  onExpireWarning: onExpireWarning,
11650
- onWithdrawWarning: onWithdrawWarning
12153
+ onWithdrawWarning: onWithdrawWarning,
12154
+ onRenewWarning: onRenewWarning
11651
12155
  }),
11652
12156
  buttonIcon: jsx(Options, {})
11653
12157
  }),
@@ -12026,12 +12530,11 @@ var PublicWarningList = function PublicWarningList(_ref) {
12026
12530
  var _ref$warnings = _ref.warnings,
12027
12531
  warnings = _ref$warnings === void 0 ? [] : _ref$warnings,
12028
12532
  filterHookState = _ref.filterHookState,
12029
- filterState = _ref.filterState,
12030
12533
  _ref$isLoading = _ref.isLoading,
12031
12534
  isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
12032
12535
  error = _ref.error,
12033
- _ref$selectedPublicWa = _ref.selectedPublicWarningId,
12034
- selectedPublicWarningId = _ref$selectedPublicWa === void 0 ? '' : _ref$selectedPublicWa,
12536
+ _ref$selectedWarningI = _ref.selectedWarningId,
12537
+ selectedWarningId = _ref$selectedWarningI === void 0 ? '' : _ref$selectedWarningI,
12035
12538
  lastUpdatedTime = _ref.lastUpdatedTime,
12036
12539
  _ref$onSelectWarning = _ref.onSelectWarning,
12037
12540
  onSelectWarning = _ref$onSelectWarning === void 0 ? function () {} : _ref$onSelectWarning,
@@ -12049,11 +12552,14 @@ var PublicWarningList = function PublicWarningList(_ref) {
12049
12552
  onExpireWarning = _ref$onExpireWarning === void 0 ? function () {} : _ref$onExpireWarning,
12050
12553
  _ref$onWithdrawWarnin = _ref.onWithdrawWarning,
12051
12554
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
12555
+ _ref$onRenewWarning = _ref.onRenewWarning,
12556
+ onRenewWarning = _ref$onRenewWarning === void 0 ? function () {} : _ref$onRenewWarning,
12052
12557
  hoveredFeatureId = _ref.hoveredFeatureId,
12053
12558
  expandedSections = _ref.expandedSections,
12054
12559
  setExpandedSections = _ref.setExpandedSections;
12055
12560
  var updateFilter = filterHookState.updateFilter,
12056
- allSelected = filterHookState.allSelected;
12561
+ allSelected = filterHookState.allSelected,
12562
+ filterState = filterHookState.filterState;
12057
12563
  var _useWarningsTranslati = useWarningsTranslation(),
12058
12564
  t = _useWarningsTranslati.t;
12059
12565
  var _React$useState = React__default.useState({
@@ -12335,9 +12841,10 @@ var PublicWarningList = function PublicWarningList(_ref) {
12335
12841
  onEditWarning: onEditWarning,
12336
12842
  onDeleteWarning: onDeleteWarning,
12337
12843
  onDeleteReviewWarning: onDeleteReviewWarning,
12338
- activeWarningId: selectedPublicWarningId,
12844
+ activeWarningId: selectedWarningId,
12339
12845
  onExpireWarning: onExpireWarning,
12340
- onWithdrawWarning: onWithdrawWarning
12846
+ onWithdrawWarning: onWithdrawWarning,
12847
+ onRenewWarning: onRenewWarning
12341
12848
  }, key);
12342
12849
  }
12343
12850
  });
@@ -12348,6 +12855,51 @@ var PublicWarningList = function PublicWarningList(_ref) {
12348
12855
  });
12349
12856
  };
12350
12857
 
12858
+ /* *
12859
+ * Licensed under the Apache License, Version 2.0 (the "License");
12860
+ * you may not use this file except in compliance with the License.
12861
+ * You may obtain a copy of the License at
12862
+ *
12863
+ * http://www.apache.org/licenses/LICENSE-2.0
12864
+ *
12865
+ * Unless required by applicable law or agreed to in writing, software
12866
+ * distributed under the License is distributed on an "AS IS" BASIS,
12867
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12868
+ * See the License for the specific language governing permissions and
12869
+ * limitations under the License.
12870
+ *
12871
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
12872
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
12873
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
12874
+ * */
12875
+ var publicWarningsAdapter = createEntityAdapter({
12876
+ selectId: function selectId(warning) {
12877
+ return warning.id;
12878
+ }
12879
+ });
12880
+ var initialState = {
12881
+ warnings: publicWarningsAdapter.getInitialState(),
12882
+ isLoading: true,
12883
+ lastUpdatedTime: '',
12884
+ filterState: {}
12885
+ };
12886
+ var slice = createSlice({
12887
+ initialState: initialState,
12888
+ name: 'publicWarnings',
12889
+ reducers: {
12890
+ setWarningFilters: function setWarningFilters(draft, action) {
12891
+ var _action$payload = action.payload,
12892
+ filterState = _action$payload.filterState,
12893
+ panelId = _action$payload.panelId;
12894
+ if (panelId) {
12895
+ draft.filterState[panelId] = filterState;
12896
+ }
12897
+ }
12898
+ }
12899
+ });
12900
+ var reducer = slice.reducer;
12901
+ var publicWarningActions = slice.actions;
12902
+
12351
12903
  /* *
12352
12904
  * Licensed under the Apache License, Version 2.0 (the "License");
12353
12905
  * you may not use this file except in compliance with the License.
@@ -12520,6 +13072,11 @@ var getLevelsForDomainFilter = function getLevelsForDomainFilter(domainFilter) {
12520
13072
  return domainFilter[domain] ? domainLevels[domain] : [];
12521
13073
  });
12522
13074
  };
13075
+ var getPhenomenaForDomainFilter = function getPhenomenaForDomainFilter(domainFilter) {
13076
+ return Object.keys(domainFilter).flatMap(function (domain) {
13077
+ return domainFilter[domain] ? domainPhenomena[domain] : [];
13078
+ });
13079
+ };
12523
13080
  var getFilterOptions = function getFilterOptions(defaultFilter, allOptions, savedFilter) {
12524
13081
  var pickedFilterOptions = pick(defaultFilter, [emptyFilterId].concat(allOptions));
12525
13082
  // keep options state from savedFilter if it still exists
@@ -12528,7 +13085,7 @@ var getFilterOptions = function getFilterOptions(defaultFilter, allOptions, save
12528
13085
  allSelected = _getSelectedOptions.allSelected;
12529
13086
  return [updatedOptions, allSelected];
12530
13087
  };
12531
- var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, savedFilterState, presetFilterState, isLoading) {
13088
+ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, savedFilterState, presetFilterState) {
12532
13089
  var pickedDomainFilter = savedFilterState.domain,
12533
13090
  pickedPhenomenonFilter = savedFilterState.phenomenon,
12534
13091
  pickedLevelFilter = savedFilterState.level,
@@ -12542,20 +13099,18 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12542
13099
  updatedPickedLevels = _getFilterOptions[0],
12543
13100
  allLevelsSelected = _getFilterOptions[1];
12544
13101
  // phenomenon
13102
+ var domainPhenomena = useMemo(function () {
13103
+ return getPhenomenaForDomainFilter(pickedDomainFilter);
13104
+ }, [pickedDomainFilter]);
12545
13105
  var warningsPhenomena = useMemo(function () {
12546
13106
  return getFiltersFromWarnings(warnings, 'phenomenon');
12547
13107
  }, [warnings]);
12548
- // filter out aviation phenomena
12549
- var phenomenaKeysToFilter = new Set(Object.values(Phenomenon$1));
12550
- var relevantPhenomena = warningsPhenomena.filter(function (item) {
12551
- return phenomenaKeysToFilter.has(item);
12552
- });
13108
+ var relevantPhenomena = useMemo(function () {
13109
+ return domainPhenomena.filter(function (phenomenon) {
13110
+ return warningsPhenomena.includes(phenomenon);
13111
+ });
13112
+ }, [warningsPhenomena, domainPhenomena]);
12553
13113
  relevantPhenomena.push(emptyFilterId);
12554
- var defaultPhenomenonFilter = useMemo(function () {
12555
- return Object.fromEntries(relevantPhenomena.map(function (key) {
12556
- return [key, true];
12557
- }));
12558
- }, [relevantPhenomena]);
12559
13114
  var _getFilterOptions2 = getFilterOptions(defaultPhenomenonFilter, relevantPhenomena, pickedPhenomenonFilter),
12560
13115
  updatedPickedPhenomena = _getFilterOptions2[0],
12561
13116
  allPhenomenaSelected = _getFilterOptions2[1];
@@ -12583,28 +13138,25 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12583
13138
  var _getFilterOptions4 = getFilterOptions(defaultIncidentFilter, relevantIncidents, pickedIncidentFilter),
12584
13139
  updatedPickedIncidents = _getFilterOptions4[0],
12585
13140
  allIncidentsSelected = _getFilterOptions4[1];
12586
- useEffect(function () {
12587
- if (isLoading) {
12588
- return;
12589
- }
12590
- // when the warnings change, update the filters
12591
- onUpdateFilters({
12592
- incident: updatedPickedIncidents,
12593
- source: updatedPickedSources,
12594
- domain: pickedDomainFilter,
12595
- phenomenon: updatedPickedPhenomena,
12596
- level: updatedPickedLevels
12597
- }, 'system');
12598
- // eslint-disable-next-line react-hooks/exhaustive-deps
12599
- }, [warnings]);
12600
13141
  useEffect(function () {
12601
13142
  // when the preset changes, update the filters
12602
13143
  if (presetFilterState) {
12603
- onUpdateFilters(presetFilterState, 'system');
13144
+ var initialFiltersWithPresets = {
13145
+ incident: Object.assign({}, makeFilterFromList(relevantIncidents), presetFilterState.incident),
13146
+ source: Object.assign({}, makeFilterFromList(relevantSources), presetFilterState.source),
13147
+ domain: Object.assign({}, initialFilters.domain, presetFilterState.domain),
13148
+ phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState.phenomenon),
13149
+ level: Object.assign({}, initialFilters.level, presetFilterState.level)
13150
+ };
13151
+ onUpdateFilters(initialFiltersWithPresets, 'system');
12604
13152
  } else {
12605
13153
  // for a preset without filters saved use the initial filters
12606
- onUpdateFilters(initialFilters, 'system');
13154
+ onUpdateFilters(Object.assign({}, initialFilters, {
13155
+ incident: makeFilterFromList(relevantIncidents),
13156
+ source: makeFilterFromList(relevantSources)
13157
+ }), 'system');
12607
13158
  }
13159
+ // eslint-disable-next-line react-hooks/exhaustive-deps
12608
13160
  }, [presetFilterState, onUpdateFilters]);
12609
13161
  var _getSelectedOptions2 = getSelectedOptions(pickedDomainFilter),
12610
13162
  allDomainSelected = _getSelectedOptions2.allSelected;
@@ -12663,63 +13215,66 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
12663
13215
  if (!pickedLevelFilter[level]) {
12664
13216
  return false;
12665
13217
  }
12666
- var phenomenon = getValue(Phenomenon$1, warning.warningDetail.phenomenon);
13218
+ var phenomenon = getValue(AllPhenomenaKeys, warning.warningDetail.phenomenon);
12667
13219
  if (!pickedPhenomenonFilter[phenomenon]) {
12668
13220
  return false;
12669
13221
  }
12670
13222
  var source = relevantSources.find(function (source) {
12671
13223
  return source === warning.warningDetail.warningProposalSource;
12672
13224
  }) || emptyFilterId;
12673
- if (!pickedSourceFilter[source]) {
13225
+ if (!updatedPickedSources[source]) {
12674
13226
  return false;
12675
13227
  }
12676
13228
  var incident = relevantIncidents.find(function (incident) {
12677
13229
  return incident === warning.warningDetail.incident;
12678
13230
  }) || emptyFilterId;
12679
- if (!pickedIncidentFilter[incident]) {
13231
+ if (!updatedPickedIncidents[incident]) {
12680
13232
  return false;
12681
13233
  }
12682
13234
  return true;
12683
- }, [pickedDomainFilter, pickedLevelFilter, pickedPhenomenonFilter, relevantSources, pickedSourceFilter, relevantIncidents, pickedIncidentFilter]);
13235
+ }, [pickedDomainFilter, pickedLevelFilter, pickedPhenomenonFilter, relevantSources, updatedPickedSources, relevantIncidents, updatedPickedIncidents]);
12684
13236
  return {
12685
13237
  allSelected: allSelected,
12686
13238
  updateFilter: updateFilter,
12687
- byFilterState: byFilterState
13239
+ byFilterState: byFilterState,
13240
+ filterState: {
13241
+ domain: pickedDomainFilter,
13242
+ level: updatedPickedLevels,
13243
+ phenomenon: updatedPickedPhenomena,
13244
+ incident: updatedPickedIncidents,
13245
+ source: updatedPickedSources
13246
+ }
12688
13247
  };
12689
13248
  };
12690
13249
 
12691
13250
  var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12692
13251
  var panelId = _ref.panelId,
12693
13252
  presetFilterState = _ref.presetFilterState;
13253
+ var updatePublicWarningEditor = useMutatePublicWarningEditor();
12694
13254
  var _useWarningsTranslati = useWarningsTranslation(),
12695
13255
  t = _useWarningsTranslati.t;
12696
13256
  var dispatch = useDispatch();
12697
13257
  var confirmDialog = useConfirmationDialog();
12698
13258
  var _useAuthenticationCon = useAuthenticationContext$1(),
12699
13259
  auth = _useAuthenticationCon.auth;
12700
- var _useAirmetList = useAirmetList(),
12701
- airmetList = _useAirmetList.data,
12702
- refetchAirmetList = _useAirmetList.refetch,
12703
- isFetchingAirmet = _useAirmetList.isFetching;
12704
- var _useSigmetList = useSigmetList(),
12705
- sigmetList = _useSigmetList.data,
12706
- refetchSigmetList = _useSigmetList.refetch,
12707
- isFetchingSigmet = _useSigmetList.isFetching;
13260
+ var _useWarnings = useWarnings(),
13261
+ combinedWarnings = _useWarnings.combinedWarnings,
13262
+ refetchWarnings = _useWarnings.refetchWarnings,
13263
+ isFetching = _useWarnings.isFetching,
13264
+ error = _useWarnings.error,
13265
+ dataUpdatedAt = _useWarnings.dataUpdatedAt;
13266
+ var lastUpdateTime = dateUtils.dateToString(new Date(dataUpdatedAt), dateUtils.DATE_FORMAT_HOURS);
12708
13267
  var _React$useState = React__default.useState(undefined),
12709
13268
  confirmDialogOptions = _React$useState[0],
12710
13269
  setConfirmDialogOptions = _React$useState[1];
12711
- var publicWarnings = useSelector(selectAllPublicWarnings);
12712
- var selectedPublicWarningId = useSelector(getSelectedPublicWarningId);
12713
- var isLoading = useSelector(isPublicWarningsLoading) || isFetchingAirmet || isFetchingSigmet;
12714
- var error = useSelector(getPublicWarningsError);
12715
- var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12716
- var lastUpdatedTime = useSelector(getPublicWarningsLastUpdatedTime);
13270
+ var selectedWarningId = useSelector(getSelectedWarningId);
12717
13271
  var savedFilterState = useSelector(function (store) {
12718
13272
  return getWarningsFilterById(store, panelId);
12719
13273
  });
13274
+ var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12720
13275
  var warningsApi = getWarningsApi();
12721
13276
  var openPublicWarningDialog = /*#__PURE__*/function () {
12722
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, publicWarning, warningType) {
13277
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, warning, warningType) {
12723
13278
  var mayProceed;
12724
13279
  return _regeneratorRuntime().wrap(function _callee$(_context) {
12725
13280
  while (1) switch (_context.prev = _context.next) {
@@ -12742,8 +13297,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12742
13297
  }
12743
13298
  return _context.abrupt("return");
12744
13299
  case 6:
12745
- dispatch(publicWarningFormActions.openPublicWarningFormDialog(Object.assign({}, publicWarning && {
12746
- publicWarning: publicWarning
13300
+ dispatch(publicWarningFormActions.openPublicWarningFormDialog(Object.assign({}, warning && {
13301
+ warning: warning
12747
13302
  }, {
12748
13303
  formState: formAction,
12749
13304
  warningType: warningType,
@@ -12771,24 +13326,24 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12771
13326
  while (1) switch (_context2.prev = _context2.next) {
12772
13327
  case 0:
12773
13328
  if (!(publicWarning.id && auth != null && auth.username && !publicWarning.editor)) {
12774
- _context2.next = 6;
13329
+ _context2.next = 7;
12775
13330
  break;
12776
13331
  }
12777
- dispatch(publicWarningFormActions.toggleEditorWarning({
12778
- warningId: publicWarning.id,
12779
- isEditor: true,
12780
- username: auth == null ? void 0 : auth.username
12781
- }));
12782
- _context2.next = 4;
13332
+ refetchWarnings();
13333
+ updatePublicWarningEditor.mutate({
13334
+ id: publicWarning.id,
13335
+ isEditor: true
13336
+ });
13337
+ _context2.next = 5;
12783
13338
  return openPublicWarningDialog('', Object.assign({}, publicWarning, {
12784
13339
  editor: auth == null ? void 0 : auth.username
12785
13340
  }));
12786
- case 4:
12787
- _context2.next = 7;
13341
+ case 5:
13342
+ _context2.next = 8;
12788
13343
  break;
12789
- case 6:
12790
- void openPublicWarningDialog('', publicWarning);
12791
13344
  case 7:
13345
+ void openPublicWarningDialog('', publicWarning);
13346
+ case 8:
12792
13347
  case "end":
12793
13348
  return _context2.stop();
12794
13349
  }
@@ -12858,6 +13413,17 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12858
13413
  return _ref5.apply(this, arguments);
12859
13414
  };
12860
13415
  }();
13416
+ var warningType = useSelector(getWarningType);
13417
+ var _useProductConfig = useProductConfig(warningType, false),
13418
+ aviationConfig = _useProductConfig.data;
13419
+ var handleRenewProductClick = function handleRenewProductClick(warning, warningType) {
13420
+ if (!warning) {
13421
+ return;
13422
+ }
13423
+ var type = warningType || (warning.warningDetail.level === 'SIG' ? 'sigmet' : 'airmet');
13424
+ var renewedWarning = renewWarning(warning, aviationConfig);
13425
+ void openPublicWarningDialog('edit', renewedWarning, type);
13426
+ };
12861
13427
  var openSnackbar = function openSnackbar(message) {
12862
13428
  dispatch(snackbarActions.openSnackbar({
12863
13429
  type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
@@ -12899,29 +13465,15 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12899
13465
  // close confirm dialog
12900
13466
  setConfirmDialogOptions(undefined);
12901
13467
  // Close warning dialog if needed
12902
- if (selectedPublicWarningId === warningId) {
13468
+ if (selectedWarningId === warningId) {
12903
13469
  dispatch(uiActions.setToggleOpenDialog({
12904
13470
  setOpen: false,
12905
13471
  type: publicWarningDialogType
12906
13472
  }));
12907
13473
  }
12908
13474
  openSnackbar(snackbarMessage);
12909
- fetchWarnings();
13475
+ refetchWarnings();
12910
13476
  };
12911
- var fetchWarnings = React__default.useCallback(function () {
12912
- void refetchAirmetList();
12913
- void refetchSigmetList();
12914
- dispatch(publicWarningActions.fetchWarnings());
12915
- }, [dispatch, refetchAirmetList, refetchSigmetList]);
12916
- React__default.useEffect(function () {
12917
- // fetch warnings on mount
12918
- fetchWarnings();
12919
- }, [fetchWarnings]);
12920
- var combinedWarnings = React__default.useMemo(function () {
12921
- var transformedSigmets = (sigmetList == null ? void 0 : sigmetList.map(transformSigmetToWarningFormat)) || [];
12922
- var transformedAirmets = (airmetList == null ? void 0 : airmetList.map(transformAirmetToWarningFormat)) || [];
12923
- return publicWarnings.concat(transformedSigmets).concat(transformedAirmets);
12924
- }, [publicWarnings, sigmetList, airmetList]);
12925
13477
  var onUpdateFilters = React__default.useCallback(function (filterState, origin) {
12926
13478
  dispatch(publicWarningActions.setWarningFilters({
12927
13479
  filterState: filterState,
@@ -12929,7 +13481,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12929
13481
  origin: origin
12930
13482
  }));
12931
13483
  }, [dispatch, panelId]);
12932
- var filterHookState = useWarningFilters(combinedWarnings, onUpdateFilters, savedFilterState, presetFilterState, isLoading);
13484
+ var filterHookState = useWarningFilters(combinedWarnings, onUpdateFilters, savedFilterState, presetFilterState);
12933
13485
  var filteredWarnings = React__default.useMemo(function () {
12934
13486
  return combinedWarnings.filter(filterHookState.byFilterState);
12935
13487
  }, [combinedWarnings, filterHookState.byFilterState]);
@@ -12948,8 +13500,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12948
13500
  }, [filteredWarnings, expandedSections]);
12949
13501
  var allFeatures = React__default.useMemo(function () {
12950
13502
  return filteredWarningsByExpandedSections.flatMap(function (warning) {
12951
- var _warning$warningDetai;
12952
- 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) {
13503
+ return (warning == null ? void 0 : warning.id) && (warning != null && warning.warningDetail && 'areas' in warning.warningDetail ? warning.warningDetail.areas.filter(function (area) {
12953
13504
  return area.geoJSON;
12954
13505
  }).map(function (area) {
12955
13506
  var isAviationWarning = warning.warningDetail.level === 'SIG' || warning.warningDetail.level === 'AIR';
@@ -12959,7 +13510,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12959
13510
  originalId: warning.id,
12960
13511
  geoJSON: styledGeoJSON
12961
13512
  };
12962
- })) || [];
13513
+ }) : []) || [];
12963
13514
  }).filter(function (feature) {
12964
13515
  return feature.id;
12965
13516
  });
@@ -12973,8 +13524,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12973
13524
  warnings: filteredWarnings,
12974
13525
  expandedSections: expandedSections,
12975
13526
  setExpandedSections: setExpandedSections,
12976
- isLoading: isLoading,
12977
- error: error,
13527
+ isLoading: isFetching,
13528
+ error: error || undefined,
12978
13529
  onSelectWarning: selectWarning,
12979
13530
  onCreateWarning: createWarning,
12980
13531
  onEditWarning: editWarning,
@@ -12982,12 +13533,12 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12982
13533
  onDeleteReviewWarning: deleteReviewWarning,
12983
13534
  onExpireWarning: expireWarning,
12984
13535
  onWithdrawWarning: withdrawWarning,
12985
- selectedPublicWarningId: selectedPublicWarningId,
12986
- lastUpdatedTime: lastUpdatedTime,
12987
- onRefetchWarnings: fetchWarnings,
13536
+ selectedWarningId: selectedWarningId,
13537
+ lastUpdatedTime: lastUpdateTime,
13538
+ onRefetchWarnings: refetchWarnings,
12988
13539
  filterHookState: filterHookState,
12989
- filterState: savedFilterState,
12990
- hoveredFeatureId: hoveredFeatureId
13540
+ hoveredFeatureId: hoveredFeatureId,
13541
+ onRenewWarning: handleRenewProductClick
12991
13542
  }), confirmDialogOptions && jsx(ConfirmDeleteWarningDialog, {
12992
13543
  onClose: function onClose() {
12993
13544
  return setConfirmDialogOptions(undefined);
@@ -13058,48 +13609,49 @@ var componentsLookUp = function componentsLookUp(payload, apiProps) {
13058
13609
  var getErrorMessage = function getErrorMessage(error) {
13059
13610
  return isAxiosError(error) ? getAxiosErrorMessage(error) : error.message;
13060
13611
  };
13061
- var getToggleEditorSuccessMessage = function getToggleEditorSuccessMessage(isEditor) {
13062
- return isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor';
13063
- };
13064
13612
  var publicWarningFormListener = createListenerMiddleware();
13065
13613
  publicWarningFormListener.startListening({
13066
- actionCreator: publicWarningFormActions.toggleEditorWarning,
13614
+ actionCreator: publicWarningFormActions.publishWarning,
13067
13615
  effect: function () {
13068
13616
  var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
13069
- var payload, warningId, isEditor, username, warningsApi, isDialogOpen;
13617
+ var payload, publicWarning, refetchWarnings, publishedWarning, isDialogOpen;
13070
13618
  return _regeneratorRuntime().wrap(function _callee$(_context) {
13071
13619
  while (1) switch (_context.prev = _context.next) {
13072
13620
  case 0:
13073
13621
  payload = _ref.payload;
13074
13622
  listenerApi.cancelActiveListeners();
13075
13623
  _context.prev = 2;
13076
- warningId = payload.warningId, isEditor = payload.isEditor, username = payload.username;
13077
- warningsApi = getWarningsApi();
13078
- _context.next = 7;
13079
- return warningsApi.toggleEditorWarning(warningId, isEditor);
13080
- case 7:
13081
- // update list to show correct avatar
13082
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13083
- listenerApi.dispatch(publicWarningFormActions.toggleEditorWarningSuccess({
13084
- isEditor: isEditor,
13085
- username: username,
13624
+ publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13625
+ _context.next = 6;
13626
+ return saveOrUpdateWarning(publicWarning);
13627
+ case 6:
13628
+ publishedWarning = _context.sent;
13629
+ if (refetchWarnings) {
13630
+ refetchWarnings();
13631
+ }
13632
+ listenerApi.dispatch(publicWarningFormActions.publishWarningSuccess({
13633
+ publicWarning: publishedWarning,
13086
13634
  message: {
13087
13635
  type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13088
- key: getToggleEditorSuccessMessage(isEditor)
13636
+ key: 'warning-publish-succes'
13089
13637
  }
13090
13638
  }));
13091
- _context.next = 15;
13639
+ listenerApi.dispatch(uiActions.setToggleOpenDialog({
13640
+ type: publicWarningDialogType,
13641
+ setOpen: false
13642
+ }));
13643
+ _context.next = 16;
13092
13644
  break;
13093
- case 11:
13094
- _context.prev = 11;
13645
+ case 12:
13646
+ _context.prev = 12;
13095
13647
  _context.t0 = _context["catch"](2);
13096
13648
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13097
13649
  errorEffect(listenerApi.dispatch, getErrorMessage(_context.t0), isDialogOpen);
13098
- case 15:
13650
+ case 16:
13099
13651
  case "end":
13100
13652
  return _context.stop();
13101
13653
  }
13102
- }, _callee, null, [[2, 11]]);
13654
+ }, _callee, null, [[2, 12]]);
13103
13655
  }));
13104
13656
  function effect(_x, _x2) {
13105
13657
  return _effect.apply(this, arguments);
@@ -13108,32 +13660,31 @@ publicWarningFormListener.startListening({
13108
13660
  }()
13109
13661
  });
13110
13662
  publicWarningFormListener.startListening({
13111
- actionCreator: publicWarningFormActions.publishWarning,
13663
+ actionCreator: publicWarningFormActions.saveWarning,
13112
13664
  effect: function () {
13113
13665
  var _effect2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2, listenerApi) {
13114
- var payload, publicWarning, publishedWarning, isDialogOpen;
13666
+ var payload, publicWarning, refetchWarnings, savedWarning, isDialogOpen;
13115
13667
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
13116
13668
  while (1) switch (_context2.prev = _context2.next) {
13117
13669
  case 0:
13118
13670
  payload = _ref2.payload;
13119
13671
  listenerApi.cancelActiveListeners();
13120
13672
  _context2.prev = 2;
13121
- publicWarning = payload.publicWarning;
13673
+ publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13122
13674
  _context2.next = 6;
13123
13675
  return saveOrUpdateWarning(publicWarning);
13124
13676
  case 6:
13125
- publishedWarning = _context2.sent;
13126
- listenerApi.dispatch(publicWarningFormActions.publishWarningSuccess({
13127
- publicWarning: publishedWarning,
13677
+ savedWarning = _context2.sent;
13678
+ if (refetchWarnings) {
13679
+ refetchWarnings();
13680
+ }
13681
+ listenerApi.dispatch(publicWarningFormActions.saveWarningSuccess({
13682
+ publicWarning: savedWarning,
13128
13683
  message: {
13129
13684
  type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13130
- key: 'warning-publish-succes'
13685
+ key: 'warning-save-succes'
13131
13686
  }
13132
13687
  }));
13133
- listenerApi.dispatch(uiActions.setToggleOpenDialog({
13134
- type: publicWarningDialogType,
13135
- setOpen: false
13136
- }));
13137
13688
  _context2.next = 15;
13138
13689
  break;
13139
13690
  case 11:
@@ -13153,41 +13704,26 @@ publicWarningFormListener.startListening({
13153
13704
  return effect;
13154
13705
  }()
13155
13706
  });
13707
+ // Side effects/snackbar listeners
13156
13708
  publicWarningFormListener.startListening({
13157
- actionCreator: publicWarningFormActions.saveWarning,
13709
+ matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess),
13158
13710
  effect: function () {
13159
13711
  var _effect3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3, listenerApi) {
13160
- var payload, publicWarning, savedWarning, isDialogOpen;
13712
+ var payload, message, isDialogOpen;
13161
13713
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
13162
13714
  while (1) switch (_context3.prev = _context3.next) {
13163
13715
  case 0:
13164
13716
  payload = _ref3.payload;
13165
13717
  listenerApi.cancelActiveListeners();
13166
- _context3.prev = 2;
13167
- publicWarning = payload.publicWarning;
13168
- _context3.next = 6;
13169
- return saveOrUpdateWarning(publicWarning);
13170
- case 6:
13171
- savedWarning = _context3.sent;
13172
- listenerApi.dispatch(publicWarningFormActions.saveWarningSuccess({
13173
- publicWarning: savedWarning,
13174
- message: {
13175
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13176
- key: 'warning-save-succes'
13177
- }
13178
- }));
13179
- _context3.next = 14;
13180
- break;
13181
- case 10:
13182
- _context3.prev = 10;
13183
- _context3.t0 = _context3["catch"](2);
13718
+ message = payload.message;
13719
+ listenerApi.dispatch(snackbarActions.openSnackbar(message));
13184
13720
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13185
- errorEffect(listenerApi.dispatch, getErrorMessage(_context3.t0), isDialogOpen);
13186
- case 14:
13721
+ toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, false);
13722
+ case 6:
13187
13723
  case "end":
13188
13724
  return _context3.stop();
13189
13725
  }
13190
- }, _callee3, null, [[2, 10]]);
13726
+ }, _callee3);
13191
13727
  }));
13192
13728
  function effect(_x5, _x6) {
13193
13729
  return _effect3.apply(this, arguments);
@@ -13195,22 +13731,18 @@ publicWarningFormListener.startListening({
13195
13731
  return effect;
13196
13732
  }()
13197
13733
  });
13198
- // Side effects/snackbar listeners
13199
13734
  publicWarningFormListener.startListening({
13200
- matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess, publicWarningFormActions.toggleEditorWarningSuccess),
13735
+ matcher: isAnyOf(publicWarningFormActions.publishWarning, publicWarningFormActions.saveWarning),
13201
13736
  effect: function () {
13202
- var _effect4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref4, listenerApi) {
13203
- var payload, message, isDialogOpen;
13737
+ var _effect4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_, listenerApi) {
13738
+ var isDialogOpen;
13204
13739
  return _regeneratorRuntime().wrap(function _callee4$(_context4) {
13205
13740
  while (1) switch (_context4.prev = _context4.next) {
13206
13741
  case 0:
13207
- payload = _ref4.payload;
13208
13742
  listenerApi.cancelActiveListeners();
13209
- message = payload.message;
13210
- listenerApi.dispatch(snackbarActions.openSnackbar(message));
13211
13743
  isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13212
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, false);
13213
- case 6:
13744
+ toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, true);
13745
+ case 3:
13214
13746
  case "end":
13215
13747
  return _context4.stop();
13216
13748
  }
@@ -13222,38 +13754,15 @@ publicWarningFormListener.startListening({
13222
13754
  return effect;
13223
13755
  }()
13224
13756
  });
13225
- publicWarningFormListener.startListening({
13226
- matcher: isAnyOf(publicWarningFormActions.publishWarning, publicWarningFormActions.saveWarning),
13227
- effect: function () {
13228
- var _effect5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_, listenerApi) {
13229
- var isDialogOpen;
13230
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
13231
- while (1) switch (_context5.prev = _context5.next) {
13232
- case 0:
13233
- listenerApi.cancelActiveListeners();
13234
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13235
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, true);
13236
- case 3:
13237
- case "end":
13238
- return _context5.stop();
13239
- }
13240
- }, _callee5);
13241
- }));
13242
- function effect(_x9, _x10) {
13243
- return _effect5.apply(this, arguments);
13244
- }
13245
- return effect;
13246
- }()
13247
- });
13248
13757
  publicWarningFormListener.startListening({
13249
13758
  actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
13250
13759
  effect: function () {
13251
- var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(_ref5, listenerApi) {
13760
+ var _effect5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_ref4, listenerApi) {
13252
13761
  var payload, panelId;
13253
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
13254
- while (1) switch (_context6.prev = _context6.next) {
13762
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
13763
+ while (1) switch (_context5.prev = _context5.next) {
13255
13764
  case 0:
13256
- payload = _ref5.payload;
13765
+ payload = _ref4.payload;
13257
13766
  listenerApi.cancelActiveListeners();
13258
13767
  panelId = payload.panelId;
13259
13768
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
@@ -13263,35 +13772,35 @@ publicWarningFormListener.startListening({
13263
13772
  }));
13264
13773
  case 4:
13265
13774
  case "end":
13266
- return _context6.stop();
13775
+ return _context5.stop();
13267
13776
  }
13268
- }, _callee6);
13777
+ }, _callee5);
13269
13778
  }));
13270
- function effect(_x11, _x12) {
13271
- return _effect6.apply(this, arguments);
13779
+ function effect(_x9, _x10) {
13780
+ return _effect5.apply(this, arguments);
13272
13781
  }
13273
13782
  return effect;
13274
13783
  }()
13275
13784
  });
13276
13785
  var saveOrUpdateWarning = /*#__PURE__*/function () {
13277
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(publicWarning) {
13786
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(publicWarning) {
13278
13787
  var warningsApi, warningDetail, status, warning, newWarningId;
13279
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
13280
- while (1) switch (_context7.prev = _context7.next) {
13788
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
13789
+ while (1) switch (_context6.prev = _context6.next) {
13281
13790
  case 0:
13282
13791
  warningsApi = getWarningsApi();
13283
13792
  warningDetail = publicWarning.warningDetail, status = publicWarning.status;
13284
13793
  if (!warningDetail.id) {
13285
- _context7.next = 6;
13794
+ _context6.next = 6;
13286
13795
  break;
13287
13796
  }
13288
- _context7.next = 5;
13797
+ _context6.next = 5;
13289
13798
  return warningsApi.updateWarning(warningDetail.id, publicWarning);
13290
13799
  case 5:
13291
- return _context7.abrupt("return", publicWarning);
13800
+ return _context6.abrupt("return", publicWarning);
13292
13801
  case 6:
13293
13802
  if (!(status === 'PUBLISHED' && warningDetail.linked_to_id)) {
13294
- _context7.next = 11;
13803
+ _context6.next = 11;
13295
13804
  break;
13296
13805
  }
13297
13806
  warning = Object.assign({}, publicWarning, {
@@ -13299,28 +13808,28 @@ var saveOrUpdateWarning = /*#__PURE__*/function () {
13299
13808
  id: warningDetail.linked_to_id
13300
13809
  })
13301
13810
  });
13302
- _context7.next = 10;
13811
+ _context6.next = 10;
13303
13812
  return warningsApi.updateWarning(warningDetail.linked_to_id, warning);
13304
13813
  case 10:
13305
- return _context7.abrupt("return", warning);
13814
+ return _context6.abrupt("return", warning);
13306
13815
  case 11:
13307
- _context7.next = 13;
13816
+ _context6.next = 13;
13308
13817
  return warningsApi.saveWarningAs(publicWarning);
13309
13818
  case 13:
13310
- newWarningId = _context7.sent;
13311
- return _context7.abrupt("return", Object.assign({}, publicWarning, {
13819
+ newWarningId = _context6.sent;
13820
+ return _context6.abrupt("return", Object.assign({}, publicWarning, {
13312
13821
  warningDetail: Object.assign({}, warningDetail, {
13313
13822
  id: newWarningId
13314
13823
  })
13315
13824
  }));
13316
13825
  case 15:
13317
13826
  case "end":
13318
- return _context7.stop();
13827
+ return _context6.stop();
13319
13828
  }
13320
- }, _callee7);
13829
+ }, _callee6);
13321
13830
  }));
13322
- return function saveOrUpdateWarning(_x13) {
13323
- return _ref6.apply(this, arguments);
13831
+ return function saveOrUpdateWarning(_x11) {
13832
+ return _ref5.apply(this, arguments);
13324
13833
  };
13325
13834
  }();
13326
13835
  var toggleDialogLoadingEffect = function toggleDialogLoadingEffect(dispatch, isDialogOpen, isLoading) {
@@ -13340,12 +13849,12 @@ var errorEffect = function errorEffect(dispatch, message, isDialogOpen) {
13340
13849
  publicWarningFormListener.startListening({
13341
13850
  actionCreator: uiActions.setToggleOpenDialog,
13342
13851
  effect: function () {
13343
- var _effect7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(_ref7, listenerApi) {
13852
+ var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(_ref6, listenerApi) {
13344
13853
  var payload;
13345
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
13346
- while (1) switch (_context8.prev = _context8.next) {
13854
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
13855
+ while (1) switch (_context7.prev = _context7.next) {
13347
13856
  case 0:
13348
- payload = _ref7.payload;
13857
+ payload = _ref6.payload;
13349
13858
  if (!payload.setOpen && payload.type === publicWarningDialogType) {
13350
13859
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
13351
13860
  setOpen: false,
@@ -13354,93 +13863,35 @@ publicWarningFormListener.startListening({
13354
13863
  }
13355
13864
  case 2:
13356
13865
  case "end":
13357
- return _context8.stop();
13866
+ return _context7.stop();
13358
13867
  }
13359
- }, _callee8);
13868
+ }, _callee7);
13360
13869
  }));
13361
- function effect(_x14, _x15) {
13362
- return _effect7.apply(this, arguments);
13870
+ function effect(_x12, _x13) {
13871
+ return _effect6.apply(this, arguments);
13363
13872
  }
13364
13873
  return effect;
13365
13874
  }()
13366
13875
  });
13367
13876
 
13368
- var getLastUpdatedTimeFormatted = function getLastUpdatedTimeFormatted() {
13369
- return dateUtils.dateToString(dateUtils.utc(), dateUtils.DATE_FORMAT_HOURS);
13370
- };
13877
+ /* *
13878
+ * Licensed under the Apache License, Version 2.0 (the "License");
13879
+ * you may not use this file except in compliance with the License.
13880
+ * You may obtain a copy of the License at
13881
+ *
13882
+ * http://www.apache.org/licenses/LICENSE-2.0
13883
+ *
13884
+ * Unless required by applicable law or agreed to in writing, software
13885
+ * distributed under the License is distributed on an "AS IS" BASIS,
13886
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13887
+ * See the License for the specific language governing permissions and
13888
+ * limitations under the License.
13889
+ *
13890
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
13891
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
13892
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
13893
+ * */
13371
13894
  var publicWarningsListener = createListenerMiddleware();
13372
- publicWarningsListener.startListening({
13373
- actionCreator: publicWarningActions.fetchWarnings,
13374
- effect: function () {
13375
- var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_, listenerApi) {
13376
- var warningsApi, _yield$warningsApi$ge, warnings, lastUpdatedTime;
13377
- return _regeneratorRuntime().wrap(function _callee$(_context) {
13378
- while (1) switch (_context.prev = _context.next) {
13379
- case 0:
13380
- listenerApi.cancelActiveListeners();
13381
- _context.prev = 1;
13382
- warningsApi = getWarningsApi();
13383
- _context.next = 5;
13384
- return warningsApi.getWarnings();
13385
- case 5:
13386
- _yield$warningsApi$ge = _context.sent;
13387
- warnings = _yield$warningsApi$ge.data;
13388
- lastUpdatedTime = getLastUpdatedTimeFormatted();
13389
- listenerApi.dispatch(publicWarningActions.fetchWarningsSuccess({
13390
- warnings: warnings,
13391
- lastUpdatedTime: lastUpdatedTime
13392
- }));
13393
- _context.next = 11;
13394
- return listenerApi.delay(pollingIntervalTimeout);
13395
- case 11:
13396
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13397
- _context.next = 17;
13398
- break;
13399
- case 14:
13400
- _context.prev = 14;
13401
- _context.t0 = _context["catch"](1);
13402
- // Don't set an error if the cancelActiveListeners was invoked (which throws a TaskAbortError)
13403
- if ((_context.t0 == null ? void 0 : _context.t0.code) !== 'listener-cancelled') {
13404
- listenerApi.dispatch(publicWarningActions.fetchWarningsError({
13405
- error: {
13406
- name: _context.t0.name,
13407
- message: _context.t0.message
13408
- }
13409
- }));
13410
- }
13411
- case 17:
13412
- case "end":
13413
- return _context.stop();
13414
- }
13415
- }, _callee, null, [[1, 14]]);
13416
- }));
13417
- function effect(_x, _x2) {
13418
- return _effect.apply(this, arguments);
13419
- }
13420
- return effect;
13421
- }()
13422
- });
13423
- publicWarningsListener.startListening({
13424
- matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess),
13425
- effect: function () {
13426
- var _effect2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_, listenerApi) {
13427
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
13428
- while (1) switch (_context2.prev = _context2.next) {
13429
- case 0:
13430
- listenerApi.cancelActiveListeners();
13431
- listenerApi.dispatch(publicWarningActions.fetchWarnings());
13432
- case 2:
13433
- case "end":
13434
- return _context2.stop();
13435
- }
13436
- }, _callee2);
13437
- }));
13438
- function effect(_x3, _x4) {
13439
- return _effect2.apply(this, arguments);
13440
- }
13441
- return effect;
13442
- }()
13443
- });
13444
13895
 
13445
13896
  var _excluded = ["id"];
13446
13897
  var getSnackbarMessage = function getSnackbarMessage(objectName, id) {
@@ -13457,7 +13908,7 @@ drawingsListener.startListening({
13457
13908
  actionCreator: drawActions.submitDrawValues,
13458
13909
  effect: function () {
13459
13910
  var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
13460
- var payload, id, formValues, warningsApi, newID, errorMessage;
13911
+ var payload, id, formValues, warningsApi, newID, taskError, errorMessage;
13461
13912
  return _regeneratorRuntime().wrap(function _callee$(_context) {
13462
13913
  while (1) switch (_context.prev = _context.next) {
13463
13914
  case 0:
@@ -13498,24 +13949,25 @@ drawingsListener.startListening({
13498
13949
  isLoading: false,
13499
13950
  type: drawingDialogType
13500
13951
  }));
13501
- _context.next = 23;
13952
+ _context.next = 24;
13502
13953
  break;
13503
13954
  case 20:
13504
13955
  _context.prev = 20;
13505
13956
  _context.t0 = _context["catch"](3);
13506
13957
  // Don't do anything if the cancelActiveListeners was invoked (which throws a TaskAbortError)
13507
- if (_context.t0.code !== 'listener-cancelled') {
13958
+ taskError = _context.t0;
13959
+ if ((taskError == null ? void 0 : taskError.code) !== 'listener-cancelled') {
13508
13960
  listenerApi.dispatch(uiActions.toggleIsLoadingDialog({
13509
13961
  isLoading: false,
13510
13962
  type: drawingDialogType
13511
13963
  }));
13512
- errorMessage = isAxiosError$1(_context.t0) ? getAxiosErrorMessage(_context.t0) : _context.t0.message;
13964
+ errorMessage = isAxiosError$1(taskError) ? getAxiosErrorMessage(taskError) : taskError.message;
13513
13965
  listenerApi.dispatch(uiActions.setErrorDialog({
13514
13966
  type: drawingDialogType,
13515
13967
  error: errorMessage
13516
13968
  }));
13517
13969
  }
13518
- case 23:
13970
+ case 24:
13519
13971
  case "end":
13520
13972
  return _context.stop();
13521
13973
  }
@@ -13546,14 +13998,12 @@ drawingsListener.startListening({
13546
13998
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
13547
13999
  * */
13548
14000
  var drawingModuleConfig = {
13549
- // TODO: remove id in https://gitlab.com/opengeoweb/opengeoweb/-/issues/5561
13550
- id: 'drawing-module',
13551
14001
  reducersMap: {
13552
14002
  drawings: reducer$2,
13553
- publicWarningForm: reducer,
13554
- publicWarnings: reducer$1
14003
+ publicWarningForm: reducer$1,
14004
+ publicWarnings: reducer
13555
14005
  },
13556
14006
  middlewares: [drawingsListener.middleware, publicWarningsListener.middleware, publicWarningFormListener.middleware]
13557
14007
  };
13558
14008
 
13559
- 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 };
14009
+ export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningApiWrapper, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsModuleProvider, componentsLookUp, drawingModuleConfig, initialState, isAlreadyEdited, publicWarningActions, publicWarningFormListener, reducer$1 as publicWarningFormReducer, publicWarningsAdapter, publicWarningsListener, reducer as publicWarningsReducer, selectors as publicWarningsSelectors, reducer, useObjectDrawDialogAction, warningFormConfirmationOptions, drawingsListener as warningsDrawingsListener, reducer$2 as warningsDrawingsReducer, warningsTranslations };