@opengeoweb/warnings 11.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js CHANGED
@@ -2,14 +2,14 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
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
4
  import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, useSetupDialog, selectorMemoizationOptions, useUpdateSharedData, layersListener, drawingToolListener, layerReducer, uiReducer, drawingToolReducer } from '@opengeoweb/store';
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, isAxiosError as isAxiosError$1 } from '@opengeoweb/shared';
7
- import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf, combineReducers, configureStore } from '@reduxjs/toolkit';
5
+ import { defaultPolygon, emptyGeoJSON, MapControlButton, getIcon, rewindGeometry, getGeoJSONPropertyValue, currentlySupportedDrawModes, defaultLayers, viewUtils, OpenLayersMapView, MapControls, OpenLayersZoomControl, OpenLayersLayer, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle } 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, isAxiosError } from '@opengeoweb/shared';
7
+ import { createEntityAdapter, createSlice, createSelector, current, createListenerMiddleware, combineReducers, configureStore } from '@reduxjs/toolkit';
8
8
  import 'i18next';
9
9
  import { useTranslation } from 'react-i18next';
10
10
  import '@opengeoweb/core';
11
11
  import { FORM_FIELDS_NAMESPACE, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormSelect, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, useDraftFormHelpers, errorMessages, ReactHookFormDateTime, isXHoursBefore, isXHoursAfter, isEmpty } from '@opengeoweb/form-fields';
12
- import { LayerType, generateMapId, getWMJSMapById, getGeoCoordFromLatLong, WMBBOX } from '@opengeoweb/webmap';
12
+ import { LayerType, generateMapId } from '@opengeoweb/webmap';
13
13
  import { airmetConfig, sigmetConfig, SigmetForm, isInstanceOfCancelSigmet, AirmetForm, isInstanceOfCancelAirmet, getDefaultValidUntilValue, getProductFormMode, ProductAction } from '@opengeoweb/sigmet-airmet';
14
14
  import { snackbarActions, snackbarTypes, snackbarListener, snackbarReducer } from '@opengeoweb/snackbar';
15
15
  import * as React from 'react';
@@ -17,13 +17,12 @@ import React__default, { useState, useEffect, useRef, useMemo, useCallback } fro
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, AirmetPhenomena, SigmetPhenomena, getHeaders, handleResponse, useAuthQuery, useAuthenticationContext, ProductStatus, optimisticUpdate } from '@opengeoweb/api';
21
- import { rest } from 'msw';
22
- import { concat, isEqual, cloneDeep, clamp, groupBy, pick, assign } from 'lodash';
20
+ import { getApi, createApiInstance, createNonAuthApiInstance, createFakeApiInstance, ApiProvider, AirmetPhenomena, SigmetPhenomena, getHeaders, handleResponse, useAuthQuery, useAuthenticationContext, optimisticUpdate, ProductStatus } from '@opengeoweb/api';
21
+ import { http, HttpResponse, passthrough, delay } from 'msw';
22
+ import { concat, isEqual, cloneDeep, clamp, groupBy, pick } from 'lodash';
23
23
  import { useFormContext } from 'react-hook-form';
24
24
  import { getConfig, useAuthenticationContext as useAuthenticationContext$1 } from '@opengeoweb/authentication';
25
25
  import { useQueryClient, useMutation } from '@tanstack/react-query';
26
- import { isAxiosError } from 'axios';
27
26
 
28
27
  var en = {
29
28
  "drawing-tool-form-tools": "Tools",
@@ -2166,36 +2165,6 @@ var slice$1 = createSlice({
2166
2165
  draft.warningType = (warning == null ? void 0 : warning.type) || warningType;
2167
2166
  draft.panelId = panelId;
2168
2167
  },
2169
- // publish warning
2170
- publishWarning: function publishWarning(draft,
2171
- // eslint-disable-next-line no-unused-vars
2172
- action) {
2173
- draft.formState = 'publishing';
2174
- delete draft.error;
2175
- },
2176
- publishWarningSuccess: function publishWarningSuccess(draft, action) {
2177
- var publicWarning = action.payload.publicWarning;
2178
- draft.warning = publicWarning;
2179
- // If form has been published, set form to readonly
2180
- draft.formState = 'readonly';
2181
- },
2182
- // save warning
2183
- saveWarning: function saveWarning(draft,
2184
- // eslint-disable-next-line no-unused-vars
2185
- action) {
2186
- draft.formState = 'saving';
2187
- delete draft.error;
2188
- draft.warning = action.payload.publicWarning;
2189
- },
2190
- saveWarningSuccess: function saveWarningSuccess(draft, action) {
2191
- var _publicWarning$warnin;
2192
- var publicWarning = action.payload.publicWarning;
2193
- draft.warning = publicWarning;
2194
- if (publicWarning != null && (_publicWarning$warnin = publicWarning.warningDetail) != null && _publicWarning$warnin.id) {
2195
- draft.selectedWarningId = publicWarning.warningDetail.id;
2196
- }
2197
- draft.formState = '';
2198
- },
2199
2168
  setFormError: function setFormError(draft, action) {
2200
2169
  var _action$payload3 = action.payload,
2201
2170
  message = _action$payload3.message,
@@ -7438,39 +7407,22 @@ var airmetList$1 = airmetListJSON;
7438
7407
  var sigmetList$1 = sigmetListJSON;
7439
7408
  var fakeSigmetTAC = 'EHAA SIGMET 1 VALID 121249/121449 EHDB- EHAA AMSTERDAM FIR FRQ TS OBS ENTIRE FIR FL010 STNR WKN';
7440
7409
  var fakeAirmetTAC = 'EHAA AIRMET -1 VALID 310700/311100 EHDB- EHAA AMSTERDAM FIR ISOL CB OBS ENTIRE FIR FL020 STNR NC';
7441
- [rest.get(/^.*\/airmetlist$/, function (_, res, ctx) {
7442
- return res(ctx.status(200), ctx.json(airmetList$1));
7443
- }), rest.get(/^.*\/sigmetlist$/, function (_, res, ctx) {
7444
- return res(ctx.status(200), ctx.json(sigmetList$1));
7445
- }), rest.get(/^.*\/airmet-config$/, function (_, res, ctx) {
7446
- return res(ctx.status(200), ctx.json(airmetConfig));
7447
- }), rest.get(/^.*\/sigmet-config$/, function (_, res, ctx) {
7448
- return res(ctx.status(200), ctx.json(sigmetConfig));
7449
- }), rest.post(/^.*\/airmet2tac$/, function (_, res, ctx) {
7450
- return res(ctx.status(200), ctx.text(fakeAirmetTAC));
7451
- }), rest.post(/^.*\/sigmet2tac$/, function (_, res, ctx) {
7452
- return res(ctx.status(200), ctx.text(fakeSigmetTAC));
7453
- }), rest.get(/^(?!.*(sigmet|airmet)).*$/, function (req) {
7454
- return req.passthrough();
7410
+ [http.get(/^.*\/airmetlist$/, function () {
7411
+ return HttpResponse.json(airmetList$1);
7412
+ }), http.get(/^.*\/sigmetlist$/, function () {
7413
+ return HttpResponse.json(sigmetList$1);
7414
+ }), http.get(/^.*\/airmet-config$/, function () {
7415
+ return HttpResponse.json(airmetConfig);
7416
+ }), http.get(/^.*\/sigmet-config$/, function () {
7417
+ return HttpResponse.json(sigmetConfig);
7418
+ }), http.post(/^.*\/airmet2tac$/, function () {
7419
+ return HttpResponse.text(fakeAirmetTAC);
7420
+ }), http.post(/^.*\/sigmet2tac$/, function () {
7421
+ return HttpResponse.text(fakeSigmetTAC);
7422
+ }), http.get(/^(?!.*(sigmet|airmet)).*$/, function () {
7423
+ return passthrough();
7455
7424
  })];
7456
7425
 
7457
- /* *
7458
- * Licensed under the Apache License, Version 2.0 (the "License");
7459
- * you may not use this file except in compliance with the License.
7460
- * You may obtain a copy of the License at
7461
- *
7462
- * http://www.apache.org/licenses/LICENSE-2.0
7463
- *
7464
- * Unless required by applicable law or agreed to in writing, software
7465
- * distributed under the License is distributed on an "AS IS" BASIS,
7466
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
7467
- * See the License for the specific language governing permissions and
7468
- * limitations under the License.
7469
- *
7470
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
7471
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
7472
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
7473
- * */
7474
7426
  var drawingList = drawingListJSON;
7475
7427
  var drawingsListFullContent = drawingsListFullContentJSON;
7476
7428
  var warningList = warningListJSON.map(function (pw) {
@@ -7481,24 +7433,35 @@ var warningList = warningListJSON.map(function (pw) {
7481
7433
  warningList.filter(function (warning) {
7482
7434
  return warning.status !== 'EXPIRED' && warning.status !== 'WITHDRAWN';
7483
7435
  }).length;
7484
- var sigmetList = sigmetListJSON$1.map(function (s) {
7485
- return Object.assign({}, s, {
7436
+ var sigmetList = sigmetListJSON$1.map(function (sig) {
7437
+ return Object.assign({}, sig, {
7486
7438
  type: 'sigmet'
7487
7439
  });
7488
7440
  });
7489
- var airmetList = airmetListJSON$1.map(function (a) {
7490
- return Object.assign({}, a, {
7441
+ var airmetList = airmetListJSON$1.map(function (air) {
7442
+ return Object.assign({}, air, {
7491
7443
  type: 'airmet'
7492
7444
  });
7493
7445
  });
7494
7446
  concat(warningList, sigmetList, airmetList);
7495
7447
  var areaKeywordList = ['North Sea districts', 'Coastal Districts', 'KNMI Specific', 'Objects', 'Baltic areas', 'NL', 'FI', 'METNorway Specific', 'Provinces', 'FIR', 'Countries'];
7496
- [rest.get(/^.*\/warnings$/, function (req, res, ctx) {
7448
+ [http.get(/^.*\/warnings$/, function () {
7497
7449
  // respond using a mocked JSON body
7498
- return res(ctx.status(200), ctx.json(warningList));
7499
- }), rest.post(/^.*\/warnings\/(.*)$/, function (req, res, ctx) {
7500
- return res(ctx.status(200), ctx.json({}));
7501
- })];
7450
+ return HttpResponse.json(warningList);
7451
+ }), http.post(/^.*\/warnings\/(.*)$/, /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
7452
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
7453
+ while (1) switch (_context.prev = _context.next) {
7454
+ case 0:
7455
+ _context.next = 2;
7456
+ return delay();
7457
+ case 2:
7458
+ return _context.abrupt("return", HttpResponse.json(null));
7459
+ case 3:
7460
+ case "end":
7461
+ return _context.stop();
7462
+ }
7463
+ }, _callee);
7464
+ })))];
7502
7465
 
7503
7466
  /* *
7504
7467
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -8736,12 +8699,15 @@ var domainLevels = {
8736
8699
  };
8737
8700
  var defaultLevelFilter = (_defaultLevelFilter = {}, _defaultLevelFilter[emptyFilterId] = true, _defaultLevelFilter.extreme = true, _defaultLevelFilter.moderate = true, _defaultLevelFilter.severe = true, _defaultLevelFilter.AIR = true, _defaultLevelFilter.SIG = true, _defaultLevelFilter);
8738
8701
  var defaultEmptyFilter = (_defaultEmptyFilter = {}, _defaultEmptyFilter[emptyFilterId] = true, _defaultEmptyFilter);
8739
- var makeFilterFromList = function makeFilterFromList(options) {
8702
+ var makeFilterFromList = function makeFilterFromList(options, value) {
8740
8703
  var _options$reduce;
8704
+ if (value === void 0) {
8705
+ value = true;
8706
+ }
8741
8707
  return options.reduce(function (acc, p) {
8742
8708
  var _Object$assign;
8743
- return p ? Object.assign({}, acc, (_Object$assign = {}, _Object$assign[p] = true, _Object$assign)) : acc;
8744
- }, (_options$reduce = {}, _options$reduce[emptyFilterId] = true, _options$reduce));
8709
+ return p ? Object.assign({}, acc, (_Object$assign = {}, _Object$assign[p] = value, _Object$assign)) : acc;
8710
+ }, (_options$reduce = {}, _options$reduce[emptyFilterId] = value, _options$reduce));
8745
8711
  };
8746
8712
  var AllPhenomena = Object.assign({}, AirmetPhenomena, SigmetPhenomena, Phenomenon$1);
8747
8713
  var AllPhenomenaKeys = Object.fromEntries(Object.keys(AllPhenomena).map(function (key) {
@@ -8761,6 +8727,9 @@ var initialFilters = {
8761
8727
  level: defaultLevelFilter
8762
8728
  };
8763
8729
  var getSelectedOptions = function getSelectedOptions(options) {
8730
+ if (options === void 0) {
8731
+ options = {};
8732
+ }
8764
8733
  var selectedOptions = Object.keys(options).filter(function (k) {
8765
8734
  return options[k];
8766
8735
  });
@@ -9317,34 +9286,8 @@ var ValidUntil = function ValidUntil(_ref) {
9317
9286
  });
9318
9287
  };
9319
9288
 
9320
- var zoomToFeature = function zoomToFeature(mapId, geojsonFeature) {
9321
- var webmapjs = getWMJSMapById(mapId);
9322
- if (!webmapjs || !geojsonFeature) {
9323
- return;
9324
- }
9325
- var bboxGeoJSON = getFeatureExtent(geojsonFeature);
9326
- var projectedCoordinateBoxBottomLeft = getGeoCoordFromLatLong(webmapjs, {
9327
- x: bboxGeoJSON.left,
9328
- y: bboxGeoJSON.bottom
9329
- });
9330
- var projectedCoordinateBoxTopRight = getGeoCoordFromLatLong(webmapjs, {
9331
- x: bboxGeoJSON.right,
9332
- y: bboxGeoJSON.top
9333
- });
9334
- if (projectedCoordinateBoxBottomLeft && projectedCoordinateBoxTopRight) {
9335
- var transformedExtent = new WMBBOX({
9336
- left: projectedCoordinateBoxBottomLeft.x,
9337
- bottom: projectedCoordinateBoxBottomLeft.y,
9338
- right: projectedCoordinateBoxTopRight.x,
9339
- top: projectedCoordinateBoxTopRight.y
9340
- });
9341
- webmapjs.zoomTo(transformedExtent);
9342
- webmapjs.zoomOut(2);
9343
- webmapjs.draw();
9344
- }
9345
- };
9346
9289
  var WarningsMapView = function WarningsMapView(_ref) {
9347
- var _defaultMapPreset$lay, _defaultMapPreset$lay2;
9290
+ var _defaultMapPreset$lay, _defaultMapPreset$lay2, _viewRef$current;
9348
9291
  var geojsonFeature = _ref.geojsonFeature,
9349
9292
  defaultMapPreset = _ref.defaultMapPreset,
9350
9293
  _ref$isSnapshot = _ref.isSnapshot,
@@ -9362,35 +9305,35 @@ var WarningsMapView = function WarningsMapView(_ref) {
9362
9305
  geojson: geojsonFeature,
9363
9306
  layerType: LayerType.featureLayer
9364
9307
  };
9365
- if (!defaultBbox) {
9366
- // Zoom to the geojson when the geojsonFeature is updated in an already mounted map component
9367
- zoomToFeature(mapId, geojsonFeature);
9368
- }
9308
+ var viewRef = useRef(viewUtils.makeView());
9309
+ React.useEffect(function () {
9310
+ if (viewRef.current.getProjection().getCode() !== (defaultBbox == null ? void 0 : defaultBbox.srs)) {
9311
+ viewRef.current = viewUtils.makeView(defaultBbox == null ? void 0 : defaultBbox.srs);
9312
+ }
9313
+ defaultBbox && defaultBbox.bbox ? viewUtils.setViewFromExtent(viewRef.current, defaultBbox == null ? void 0 : defaultBbox.bbox) : viewUtils.setViewFromFeature(viewRef.current, geojsonFeature);
9314
+ }, [defaultBbox, geojsonFeature]);
9369
9315
  return jsx("div", {
9370
9316
  style: {
9371
9317
  height: '200px',
9372
9318
  width: '100%'
9373
9319
  },
9374
- children: jsxs(MapView, {
9375
- bbox: defaultBbox == null ? void 0 : defaultBbox.bbox,
9376
- srs: defaultBbox == null ? void 0 : defaultBbox.srs,
9377
- mapId: mapId,
9378
- showScaleBar: false,
9379
- onWMJSMount: function onWMJSMount(mapId) {
9380
- var webmapjs = getWMJSMapById(mapId);
9381
- if (!webmapjs) {
9382
- return;
9383
- }
9384
- webmapjs.hideMouseCursorProperties();
9385
- if (!defaultBbox) {
9386
- // Zoom to the geojson when the map is ready
9387
- zoomToFeature(mapId, geojsonFeature);
9388
- }
9389
- },
9320
+ children: jsxs(OpenLayersMapView, {
9321
+ view: viewRef.current,
9390
9322
  holdShiftToScroll: true,
9391
- children: [!isSnapshot && jsx(MapViewLayer, Object.assign({}, defaultBaseLayer, {
9323
+ children: [jsx(MapControls, {
9324
+ style: {
9325
+ top: 0
9326
+ },
9327
+ children: jsx(OpenLayersZoomControl, {
9328
+ homeExtent: (_viewRef$current = viewRef.current) == null ? void 0 : _viewRef$current.calculateExtent()
9329
+ })
9330
+ }), !isSnapshot && jsx(OpenLayersLayer, Object.assign({}, defaultBaseLayer, {
9392
9331
  id: mapId + "_baseLayer"
9393
- })), warningLayer.geojson && jsx(MapViewLayer, Object.assign({}, warningLayer)), !isSnapshot && jsx(MapViewLayer, Object.assign({}, defaultOverLayer, {
9332
+ })), warningLayer.geojson && jsx(OpenLayersFeatureLayer, {
9333
+ featureCollection: warningLayer.geojson,
9334
+ style: genericOpenLayersFeatureStyle,
9335
+ zIndex: 1000
9336
+ }), !isSnapshot && jsx(OpenLayersLayer, Object.assign({}, defaultOverLayer, {
9394
9337
  id: mapId + "_overlayer"
9395
9338
  }))]
9396
9339
  })
@@ -9800,14 +9743,32 @@ var Form = function Form(_ref5) {
9800
9743
  var _publicWarningDetails, _publicWarningDetails2;
9801
9744
  var defaultMapPreset = _ref5.defaultMapPreset,
9802
9745
  _ref5$onSaveForm = _ref5.onSaveForm,
9803
- onSaveForm = _ref5$onSaveForm === void 0 ? function () {} : _ref5$onSaveForm,
9746
+ onSaveForm = _ref5$onSaveForm === void 0 ? /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
9747
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
9748
+ while (1) switch (_context.prev = _context.next) {
9749
+ case 0:
9750
+ return _context.abrupt("return", null);
9751
+ case 1:
9752
+ case "end":
9753
+ return _context.stop();
9754
+ }
9755
+ }, _callee);
9756
+ })) : _ref5$onSaveForm,
9804
9757
  _ref5$onPublishForm = _ref5.onPublishForm,
9805
- onPublishForm = _ref5$onPublishForm === void 0 ? function () {} : _ref5$onPublishForm,
9758
+ onPublishForm = _ref5$onPublishForm === void 0 ? /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
9759
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
9760
+ while (1) switch (_context2.prev = _context2.next) {
9761
+ case 0:
9762
+ return _context2.abrupt("return", null);
9763
+ case 1:
9764
+ case "end":
9765
+ return _context2.stop();
9766
+ }
9767
+ }, _callee2);
9768
+ })) : _ref5$onPublishForm,
9806
9769
  _ref5$onClearForm = _ref5.onClearForm,
9807
9770
  onClearForm = _ref5$onClearForm === void 0 ? function () {} : _ref5$onClearForm,
9808
9771
  object = _ref5.object,
9809
- _ref5$formAction = _ref5.formAction,
9810
- formAction = _ref5$formAction === void 0 ? '' : _ref5$formAction,
9811
9772
  publicWarningDetails = _ref5.publicWarningDetails,
9812
9773
  _ref5$error = _ref5.error,
9813
9774
  error = _ref5$error === void 0 ? {
@@ -9825,14 +9786,25 @@ var Form = function Form(_ref5) {
9825
9786
  selectedAviationProduct = _ref5.selectedAviationProduct,
9826
9787
  _ref5$warningType = _ref5.warningType,
9827
9788
  warningType = _ref5$warningType === void 0 ? 'public' : _ref5$warningType,
9828
- mode = _ref5.mode;
9789
+ mode = _ref5.mode,
9790
+ _ref5$onSetViewModeRe = _ref5.onSetViewModeResetArea,
9791
+ onSetViewModeResetArea = _ref5$onSetViewModeRe === void 0 ? function () {} : _ref5$onSetViewModeRe;
9792
+ var _React$useState = React.useState(false),
9793
+ isPublishing = _React$useState[0],
9794
+ setIsPublishing = _React$useState[1];
9795
+ var _React$useState2 = React.useState(false),
9796
+ isSaving = _React$useState2[0],
9797
+ setIsSaving = _React$useState2[1];
9829
9798
  var _useTACApi = useTACApi(),
9830
9799
  fetchSigmetTAC = _useTACApi.fetchSigmetTAC,
9831
9800
  fetchAirmetTAC = _useTACApi.fetchAirmetTAC;
9832
9801
  var initialPublicWarningArea = (publicWarningDetails == null || (_publicWarningDetails = publicWarningDetails.areas) == null ? void 0 : _publicWarningDetails.length) && (publicWarningDetails == null || (_publicWarningDetails2 = publicWarningDetails.areas[0]) == null ? void 0 : _publicWarningDetails2.geoJSON);
9833
- var _React$useState = React.useState(initialPublicWarningArea),
9834
- warningGeoJSONFeature = _React$useState[0],
9835
- setWarningGeoJSONFeature = _React$useState[1];
9802
+ var _React$useState3 = React.useState(initialPublicWarningArea),
9803
+ warningGeoJSONFeature = _React$useState3[0],
9804
+ setWarningGeoJSONFeature = _React$useState3[1];
9805
+ var _React$useState4 = React.useState(publicWarningDetails == null ? void 0 : publicWarningDetails.areas),
9806
+ originalWarningAreas = _React$useState4[0],
9807
+ setOriginalWarningAreas = _React$useState4[1];
9836
9808
  var _useWarningsTranslati = useWarningsTranslation(),
9837
9809
  t = _useWarningsTranslati.t;
9838
9810
  var _useFormContext = useFormContext(),
@@ -9844,8 +9816,6 @@ var Form = function Form(_ref5) {
9844
9816
  var _useDraftFormHelpers = useDraftFormHelpers(),
9845
9817
  toggleIsDraft = _useDraftFormHelpers.toggleIsDraft,
9846
9818
  DraftFieldHelper = _useDraftFormHelpers.DraftFieldHelper;
9847
- var isPublishing = formAction === 'publishing';
9848
- var isSaving = formAction === 'saving';
9849
9819
  var areFieldsDisabled = isPublishing || isSaving;
9850
9820
  useFormDirty({
9851
9821
  isDirty: Object.keys(dirtyFields).length > 0,
@@ -9861,19 +9831,23 @@ var Form = function Form(_ref5) {
9861
9831
  if (!isPublishing) {
9862
9832
  toggleIsDraft(false);
9863
9833
  void handleSubmit( /*#__PURE__*/function () {
9864
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data) {
9865
- return _regeneratorRuntime().wrap(function _callee$(_context) {
9866
- while (1) switch (_context.prev = _context.next) {
9834
+ var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(data) {
9835
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
9836
+ while (1) switch (_context3.prev = _context3.next) {
9867
9837
  case 0:
9868
- onPublishForm(prepareFormValues(data));
9869
- case 1:
9838
+ setIsPublishing(true);
9839
+ _context3.next = 3;
9840
+ return onPublishForm(prepareFormValues(data))["catch"](function () {});
9841
+ case 3:
9842
+ setIsPublishing(false);
9843
+ case 4:
9870
9844
  case "end":
9871
- return _context.stop();
9845
+ return _context3.stop();
9872
9846
  }
9873
- }, _callee);
9847
+ }, _callee3);
9874
9848
  }));
9875
9849
  return function (_x) {
9876
- return _ref6.apply(this, arguments);
9850
+ return _ref8.apply(this, arguments);
9877
9851
  };
9878
9852
  }())();
9879
9853
  }
@@ -9882,19 +9856,23 @@ var Form = function Form(_ref5) {
9882
9856
  if (!isSaving) {
9883
9857
  toggleIsDraft(true);
9884
9858
  void handleSubmit( /*#__PURE__*/function () {
9885
- var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(data) {
9886
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
9887
- while (1) switch (_context2.prev = _context2.next) {
9859
+ var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(data) {
9860
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
9861
+ while (1) switch (_context4.prev = _context4.next) {
9888
9862
  case 0:
9889
- onSaveForm(prepareFormValues(data));
9890
- case 1:
9863
+ setIsSaving(true);
9864
+ _context4.next = 3;
9865
+ return onSaveForm(prepareFormValues(data))["catch"](function () {});
9866
+ case 3:
9867
+ setIsSaving(false);
9868
+ case 4:
9891
9869
  case "end":
9892
- return _context2.stop();
9870
+ return _context4.stop();
9893
9871
  }
9894
- }, _callee2);
9872
+ }, _callee4);
9895
9873
  }));
9896
9874
  return function (_x2) {
9897
- return _ref7.apply(this, arguments);
9875
+ return _ref9.apply(this, arguments);
9898
9876
  };
9899
9877
  }())();
9900
9878
  }
@@ -9904,6 +9882,7 @@ var Form = function Form(_ref5) {
9904
9882
  setWarningGeoJSONFeature(undefined);
9905
9883
  onClearForm();
9906
9884
  };
9885
+ // When switching warning, reset the form to the new values
9907
9886
  var publicWarningId = publicWarningDetails == null ? void 0 : publicWarningDetails.id;
9908
9887
  React.useEffect(function () {
9909
9888
  if (selectedAviationProduct) {
@@ -9911,8 +9890,27 @@ var Form = function Form(_ref5) {
9911
9890
  }
9912
9891
  // sync redux with react-hook-form
9913
9892
  reset(getFormData(publicWarningDetails, object));
9893
+ setOriginalWarningAreas(publicWarningDetails == null ? void 0 : publicWarningDetails.areas);
9914
9894
  // eslint-disable-next-line react-hooks/exhaustive-deps
9915
9895
  }, [publicWarningId]);
9896
+ // When the editor gets set back to viewer and the form is dirty, reset any changes made
9897
+ React.useEffect(function () {
9898
+ if (selectedAviationProduct) {
9899
+ return;
9900
+ }
9901
+ if (isReadOnly && (Object.keys(dirtyFields).length > 0 || (publicWarningDetails == null ? void 0 : publicWarningDetails.areas) !== originalWarningAreas)) {
9902
+ // // sync redux with react-hook-form
9903
+ var oldPublicWarning = Object.assign({}, publicWarningDetails, {
9904
+ areas: originalWarningAreas
9905
+ });
9906
+ reset(getFormData(oldPublicWarning, object));
9907
+ if ((publicWarningDetails == null ? void 0 : publicWarningDetails.areas) !== originalWarningAreas) {
9908
+ // update the store to contain the original area again
9909
+ onSetViewModeResetArea(originalWarningAreas || []);
9910
+ }
9911
+ }
9912
+ // eslint-disable-next-line react-hooks/exhaustive-deps
9913
+ }, [isReadOnly]);
9916
9914
  var areas = publicWarningDetails == null ? void 0 : publicWarningDetails.areas;
9917
9915
  React.useEffect(function () {
9918
9916
  if (selectedAviationProduct) {
@@ -9920,7 +9918,9 @@ var Form = function Form(_ref5) {
9920
9918
  }
9921
9919
  if (areas) {
9922
9920
  // sync redux with react-hook-form
9923
- setValue('areas', areas);
9921
+ setValue('areas', areas, {
9922
+ shouldDirty: true
9923
+ });
9924
9924
  }
9925
9925
  // eslint-disable-next-line react-hooks/exhaustive-deps
9926
9926
  }, [areas, setValue]);
@@ -10213,7 +10213,10 @@ var getPublicWarningStore = function getPublicWarningStore(store) {
10213
10213
  }
10214
10214
  return {};
10215
10215
  };
10216
- var getPublicWarningObject = createSelector(getPublicWarningStore, function (publicWarningStore) {
10216
+ var selectPublicWarningState = createSelector(getPublicWarningStore, function (state) {
10217
+ return state;
10218
+ });
10219
+ createSelector(getPublicWarningStore, function (publicWarningStore) {
10217
10220
  return publicWarningStore.object;
10218
10221
  });
10219
10222
  var getPublicWarning = createSelector(getPublicWarningStore, function (publicWarningStore) {
@@ -10234,7 +10237,7 @@ var getPublicWarningAreas = createSelector(getPublicWarningStore, function (publ
10234
10237
  var getPublicWarningFormState = createSelector(getPublicWarningStore, function (publicWarningStore) {
10235
10238
  return (publicWarningStore == null ? void 0 : publicWarningStore.formState) || '';
10236
10239
  });
10237
- var getPublicWarningFormError = createSelector(getPublicWarningStore, function (publicWarningStore) {
10240
+ createSelector(getPublicWarningStore, function (publicWarningStore) {
10238
10241
  return publicWarningStore == null ? void 0 : publicWarningStore.error;
10239
10242
  });
10240
10243
  var getSelectedWarningId = createSelector(getPublicWarningStore, function (publicWarningStore) {
@@ -10275,51 +10278,298 @@ var PublicWarningStatus;
10275
10278
  PublicWarningStatus["WITHDRAWN"] = "WITHDRAWN";
10276
10279
  })(PublicWarningStatus || (PublicWarningStatus = {}));
10277
10280
 
10281
+ /* *
10282
+ * Licensed under the Apache License, Version 2.0 (the "License");
10283
+ * you may not use this file except in compliance with the License.
10284
+ * You may obtain a copy of the License at
10285
+ *
10286
+ * http://www.apache.org/licenses/LICENSE-2.0
10287
+ *
10288
+ * Unless required by applicable law or agreed to in writing, software
10289
+ * distributed under the License is distributed on an "AS IS" BASIS,
10290
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10291
+ * See the License for the specific language governing permissions and
10292
+ * limitations under the License.
10293
+ *
10294
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10295
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
10296
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
10297
+ * */
10298
+ var config = getConfig();
10299
+ var publicWarningBaseUrl = config.GW_DRAWINGS_BASE_URL || '';
10300
+ // API
10301
+ var getPublicWarningList = function getPublicWarningList(auth) {
10302
+ return fetch(publicWarningBaseUrl + "/warnings", {
10303
+ headers: getHeaders(auth)
10304
+ }).then(handleResponse).then(function (warnings) {
10305
+ return warnings.map(function (warning) {
10306
+ return Object.assign({}, warning, {
10307
+ type: 'public'
10308
+ });
10309
+ });
10310
+ });
10311
+ };
10312
+ var updatePublicWarningEditor = function updatePublicWarningEditor(warningId, isEditor, auth) {
10313
+ return fetch(publicWarningBaseUrl + "/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false') + "&force=true", {
10314
+ headers: getHeaders(auth),
10315
+ method: 'POST'
10316
+ }).then(handleResponse);
10317
+ };
10318
+ var updatePublicWarning = function updatePublicWarning(warningId, auth, data) {
10319
+ return fetch(publicWarningBaseUrl + "/warnings/" + warningId, {
10320
+ headers: getHeaders(auth),
10321
+ method: 'POST',
10322
+ body: JSON.stringify(data)
10323
+ }).then(handleResponse);
10324
+ };
10325
+ var postPublicWarning = function postPublicWarning(auth, data) {
10326
+ return fetch(publicWarningBaseUrl + "/warnings/", {
10327
+ headers: getHeaders(auth),
10328
+ method: 'POST',
10329
+ body: JSON.stringify(data)
10330
+ }).then(handleResponse);
10331
+ };
10332
+
10333
+ /**
10334
+ * @param disabled - Disables fetching, but still returns cached values.
10335
+ * https://tanstack.com/query/v4/docs/framework/react/guides/disabling-queries
10336
+ */
10337
+ var usePublicWarnings = function usePublicWarnings(disabled) {
10338
+ if (disabled === void 0) {
10339
+ disabled = false;
10340
+ }
10341
+ return useAuthQuery(['public-warning-list'], getPublicWarningList, disabled, 1000 * 60 * 5);
10342
+ };
10343
+ var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
10344
+ var queryClient = useQueryClient();
10345
+ var _useAuthenticationCon = useAuthenticationContext(),
10346
+ auth = _useAuthenticationCon.auth;
10347
+ var dispatch = useDispatch();
10348
+ return useMutation(Object.assign({
10349
+ mutationFn: function mutationFn(_ref) {
10350
+ var id = _ref.id,
10351
+ isEditor = _ref.isEditor;
10352
+ if (!auth) {
10353
+ throw new Error('Authentication context not found');
10354
+ }
10355
+ return updatePublicWarningEditor(id, isEditor, auth);
10356
+ }
10357
+ }, optimisticUpdate(['public-warning-list'], queryClient, function (warning, _ref2) {
10358
+ var isEditor = _ref2.isEditor;
10359
+ return Object.assign({}, warning, {
10360
+ editor: isEditor ? auth.username : undefined
10361
+ });
10362
+ }, function (error) {
10363
+ dispatch(publicWarningFormActions.setFormError({
10364
+ message: error.message
10365
+ }));
10366
+ }), {
10367
+ onSuccess: function () {
10368
+ var _onSuccess = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data, _ref3) {
10369
+ var isEditor;
10370
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
10371
+ while (1) switch (_context.prev = _context.next) {
10372
+ case 0:
10373
+ isEditor = _ref3.isEditor;
10374
+ dispatch(snackbarActions.openSnackbar({
10375
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
10376
+ key: isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor'
10377
+ }));
10378
+ case 2:
10379
+ case "end":
10380
+ return _context.stop();
10381
+ }
10382
+ }, _callee);
10383
+ }));
10384
+ function onSuccess(_x, _x2) {
10385
+ return _onSuccess.apply(this, arguments);
10386
+ }
10387
+ return onSuccess;
10388
+ }()
10389
+ }));
10390
+ };
10391
+ var useMutateWarning = function useMutateWarning(snackBarMessage) {
10392
+ var queryClient = useQueryClient();
10393
+ var _useAuthenticationCon2 = useAuthenticationContext(),
10394
+ auth = _useAuthenticationCon2.auth;
10395
+ var dispatch = useDispatch();
10396
+ return useMutation(Object.assign({
10397
+ mutationFn: function mutationFn(_ref4) {
10398
+ var id = _ref4.id,
10399
+ data = _ref4.data;
10400
+ if (!auth) {
10401
+ throw new Error('Authentication context not found');
10402
+ }
10403
+ if (id) {
10404
+ return updatePublicWarning(id, auth, data);
10405
+ }
10406
+ return postPublicWarning(auth, data);
10407
+ }
10408
+ }, optimisticUpdate(['public-warning-list'], queryClient, function (_, _ref5) {
10409
+ var data = _ref5.data,
10410
+ id = _ref5.id;
10411
+ return Object.assign({}, data, {
10412
+ id: id,
10413
+ lastUpdatedTime: new Date().toISOString()
10414
+ });
10415
+ }, function (error) {
10416
+ dispatch(publicWarningFormActions.setFormError({
10417
+ message: error.message
10418
+ }));
10419
+ }), {
10420
+ onSuccess: function () {
10421
+ var _onSuccess2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(data, variables) {
10422
+ var location, _variables$data, warningDetail, status, newId, newWarning;
10423
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
10424
+ while (1) switch (_context2.prev = _context2.next) {
10425
+ case 0:
10426
+ location = data == null ? void 0 : data.get('location');
10427
+ _variables$data = variables.data, warningDetail = _variables$data.warningDetail, status = _variables$data.status;
10428
+ if (
10429
+ // DRAFT_PUBLISHED warnings have linked_to_id to the published warning it is based on
10430
+ // When publishing a DRAFT_PUBLISHED warning we need to update the published warning and delete the draft
10431
+ warningDetail.linked_to_id && status === PublicWarningStatus.PUBLISHED) {
10432
+ queryClient.setQueryData(['public-warning-list'], function (old) {
10433
+ return old == null ? void 0 : old.reduce(function (acc, warning) {
10434
+ if (warning.id === warningDetail.linked_to_id) {
10435
+ return acc;
10436
+ }
10437
+ var id = warning.id === warningDetail.id ? warningDetail.linked_to_id : warningDetail.id;
10438
+ return [].concat(acc, [Object.assign({}, warning, {
10439
+ id: id,
10440
+ warningDetail: Object.assign({}, warningDetail, {
10441
+ id: id
10442
+ })
10443
+ })]);
10444
+ }, []);
10445
+ });
10446
+ }
10447
+ if (location) {
10448
+ // When making a new warning we get it's ID from the location header
10449
+ newId = getIdFromUrl(location);
10450
+ newWarning = Object.assign({}, variables.data, {
10451
+ id: newId,
10452
+ lastUpdatedTime: new Date().toISOString(),
10453
+ warningDetail: Object.assign({}, warningDetail, {
10454
+ id: newId,
10455
+ domain: 'public'
10456
+ })
10457
+ });
10458
+ queryClient.setQueryData(['public-warning-list'], function (old) {
10459
+ return [].concat(old || [], [newWarning]);
10460
+ });
10461
+ dispatch(publicWarningFormActions.openPublicWarningFormDialog({
10462
+ warning: newWarning,
10463
+ formState: '',
10464
+ panelId: variables.panelId
10465
+ }));
10466
+ }
10467
+ dispatch(snackbarActions.openSnackbar({
10468
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
10469
+ key: snackBarMessage
10470
+ }));
10471
+ if (variables.data.status === PublicWarningStatus.PUBLISHED) {
10472
+ dispatch(uiActions.setToggleOpenDialog({
10473
+ type: publicWarningDialogType,
10474
+ setOpen: false
10475
+ }));
10476
+ }
10477
+ case 6:
10478
+ case "end":
10479
+ return _context2.stop();
10480
+ }
10481
+ }, _callee2);
10482
+ }));
10483
+ function onSuccess(_x3, _x4) {
10484
+ return _onSuccess2.apply(this, arguments);
10485
+ }
10486
+ return onSuccess;
10487
+ }()
10488
+ }));
10489
+ };
10490
+ var usePublishWarning = function usePublishWarning() {
10491
+ return useMutateWarning('warning-publish-succes');
10492
+ };
10493
+ var useSaveWarning = function useSaveWarning() {
10494
+ return useMutateWarning('warning-save-succes');
10495
+ };
10496
+
10278
10497
  var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10279
10498
  var editor = _ref.editor,
10280
10499
  defaultMapPreset = _ref.defaultMapPreset,
10281
10500
  selectedAviationProduct = _ref.selectedAviationProduct,
10282
10501
  _ref$warningType = _ref.warningType,
10283
10502
  warningType = _ref$warningType === void 0 ? 'public' : _ref$warningType,
10284
- mode = _ref.mode,
10285
- onFormSubmit = _ref.onFormSubmit;
10286
- var publicWarning = useSelector(getPublicWarning);
10287
- var publicWarningObject = useSelector(getPublicWarningObject);
10288
- var publicWarningFormAction = useSelector(getPublicWarningFormState);
10289
- var publicWarningFormError = useSelector(getPublicWarningFormError);
10503
+ mode = _ref.mode;
10504
+ var _useSelector = useSelector(selectPublicWarningState),
10505
+ warning = _useSelector.warning,
10506
+ object = _useSelector.object,
10507
+ formState = _useSelector.formState,
10508
+ error = _useSelector.error,
10509
+ panelId = _useSelector.panelId;
10510
+ var _usePublishWarning = usePublishWarning(),
10511
+ publishWarning = _usePublishWarning.mutateAsync;
10512
+ var _useSaveWarning = useSaveWarning(),
10513
+ saveWarning = _useSaveWarning.mutateAsync;
10290
10514
  var _useAuthenticationCon = useAuthenticationContext$1(),
10291
10515
  auth = _useAuthenticationCon.auth;
10292
10516
  var isEditor = editor === (auth == null ? void 0 : auth.username) || false;
10293
10517
  var dispatch = useDispatch();
10294
- var publishForm = function publishForm(newFormValues) {
10295
- if (warningType === 'public') {
10296
- dispatch(publicWarningFormActions.publishWarning({
10297
- publicWarning: {
10298
- warningDetail: newFormValues,
10299
- status: PublicWarningStatus.PUBLISHED,
10300
- type: warningType
10301
- },
10302
- refetchWarnings: onFormSubmit
10303
- }));
10304
- }
10305
- };
10518
+ var publishForm = /*#__PURE__*/function () {
10519
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(newFormValues) {
10520
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
10521
+ while (1) switch (_context.prev = _context.next) {
10522
+ case 0:
10523
+ return _context.abrupt("return", publishWarning({
10524
+ id: newFormValues.id || newFormValues.linked_to_id || '',
10525
+ data: {
10526
+ warningDetail: newFormValues.id ? newFormValues : Object.assign({}, newFormValues, {
10527
+ id: newFormValues.linked_to_id
10528
+ }),
10529
+ status: PublicWarningStatus.PUBLISHED,
10530
+ type: 'public'
10531
+ }
10532
+ }));
10533
+ case 1:
10534
+ case "end":
10535
+ return _context.stop();
10536
+ }
10537
+ }, _callee);
10538
+ }));
10539
+ return function publishForm(_x) {
10540
+ return _ref2.apply(this, arguments);
10541
+ };
10542
+ }();
10306
10543
  var clearForm = function clearForm() {
10307
10544
  dispatch(publicWarningFormActions.removeAllAreas());
10308
10545
  };
10309
- var saveForm = function saveForm(newFormValues) {
10310
- var status = newFormValues.linked_to_id ? PublicWarningStatus.DRAFT_PUBLISHED : PublicWarningStatus.DRAFT;
10311
- if (warningType === 'public') {
10312
- dispatch(publicWarningFormActions.saveWarning({
10313
- publicWarning: {
10314
- warningDetail: newFormValues,
10315
- status: status,
10316
- editor: auth == null ? void 0 : auth.username,
10317
- type: warningType
10318
- },
10319
- refetchWarnings: onFormSubmit
10320
- }));
10321
- }
10322
- };
10546
+ var saveForm = /*#__PURE__*/function () {
10547
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(newFormValues) {
10548
+ var status;
10549
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
10550
+ while (1) switch (_context2.prev = _context2.next) {
10551
+ case 0:
10552
+ status = newFormValues.linked_to_id ? PublicWarningStatus.DRAFT_PUBLISHED : PublicWarningStatus.DRAFT;
10553
+ return _context2.abrupt("return", saveWarning({
10554
+ id: newFormValues.id,
10555
+ data: {
10556
+ warningDetail: newFormValues,
10557
+ status: status,
10558
+ editor: auth == null ? void 0 : auth.username,
10559
+ type: 'public'
10560
+ },
10561
+ panelId: panelId
10562
+ }));
10563
+ case 2:
10564
+ case "end":
10565
+ return _context2.stop();
10566
+ }
10567
+ }, _callee2);
10568
+ }));
10569
+ return function saveForm(_x2) {
10570
+ return _ref3.apply(this, arguments);
10571
+ };
10572
+ }();
10323
10573
  var onFormDirty = function onFormDirty(isFormDirty) {
10324
10574
  dispatch(publicWarningFormActions.setFormDirty({
10325
10575
  isFormDirty: isFormDirty
@@ -10328,20 +10578,20 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10328
10578
  var getIsReadOnly = function getIsReadOnly() {
10329
10579
  // public warning related
10330
10580
  if (warningType === 'public') {
10331
- if (publicWarningFormAction === 'readonly') {
10581
+ if (formState === 'readonly') {
10332
10582
  return true;
10333
10583
  }
10334
- if ((publicWarning == null ? void 0 : publicWarning.status) === 'TODO') {
10584
+ if ((warning == null ? void 0 : warning.status) === 'TODO') {
10335
10585
  return false;
10336
10586
  }
10337
10587
  // Readonly in case you are not creating a new warning and you are not set as the editor
10338
- return !isEditor && (publicWarning == null ? void 0 : publicWarning.status) !== undefined;
10588
+ return !isEditor && (warning == null ? void 0 : warning.status) !== undefined;
10339
10589
  }
10340
10590
  // aviation related
10341
10591
  if ((selectedAviationProduct == null ? void 0 : selectedAviationProduct.status) === 'DRAFT') {
10342
10592
  return false;
10343
10593
  }
10344
- if (publicWarningFormAction === 'edit') {
10594
+ if (formState === 'edit') {
10345
10595
  return false;
10346
10596
  }
10347
10597
  if (mode === 'new') {
@@ -10350,28 +10600,33 @@ var PublicWarningsFormConnect = function PublicWarningsFormConnect(_ref) {
10350
10600
  return true;
10351
10601
  };
10352
10602
  var isReadOnly = getIsReadOnly();
10353
- var formMode = publicWarningFormAction === 'edit' ? 'edit' : mode;
10603
+ var formMode = formState === 'edit' ? 'edit' : mode;
10354
10604
  var onAddObject = function onAddObject() {
10355
10605
  dispatch(uiActions.setToggleOpenDialog({
10356
10606
  type: uiTypes.DialogTypes.AreaObjectLoader,
10357
10607
  setOpen: true
10358
10608
  }));
10359
10609
  };
10610
+ var onSetViewModeResetArea = function onSetViewModeResetArea(area) {
10611
+ dispatch(publicWarningFormActions.addArea({
10612
+ area: area[0]
10613
+ }));
10614
+ };
10360
10615
  return jsx(PublicWarningsForm, {
10361
- object: publicWarningObject,
10362
- publicWarningDetails: publicWarning == null ? void 0 : publicWarning.warningDetail,
10616
+ object: object,
10617
+ publicWarningDetails: warning == null ? void 0 : warning.warningDetail,
10363
10618
  onPublishForm: publishForm,
10364
10619
  onSaveForm: saveForm,
10365
10620
  onClearForm: clearForm,
10366
- formAction: publicWarningFormAction,
10367
10621
  isReadOnly: isReadOnly,
10368
- error: publicWarningFormError,
10622
+ error: error,
10369
10623
  onFormDirty: onFormDirty,
10370
10624
  defaultMapPreset: defaultMapPreset,
10371
10625
  onAddObject: onAddObject,
10372
10626
  selectedAviationProduct: selectedAviationProduct,
10373
10627
  warningType: warningType,
10374
- mode: formMode
10628
+ mode: formMode,
10629
+ onSetViewModeResetArea: onSetViewModeResetArea
10375
10630
  });
10376
10631
  };
10377
10632
 
@@ -11296,103 +11551,6 @@ var duplicateAviationProduct = function duplicateAviationProduct(aviationWarning
11296
11551
  });
11297
11552
  };
11298
11553
 
11299
- /* *
11300
- * Licensed under the Apache License, Version 2.0 (the "License");
11301
- * you may not use this file except in compliance with the License.
11302
- * You may obtain a copy of the License at
11303
- *
11304
- * http://www.apache.org/licenses/LICENSE-2.0
11305
- *
11306
- * Unless required by applicable law or agreed to in writing, software
11307
- * distributed under the License is distributed on an "AS IS" BASIS,
11308
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11309
- * See the License for the specific language governing permissions and
11310
- * limitations under the License.
11311
- *
11312
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11313
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
11314
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
11315
- * */
11316
- var config = getConfig();
11317
- var publicWarningBaseUrl = config.GW_DRAWINGS_BASE_URL || '';
11318
- // API
11319
- var getPublicWarningList = function getPublicWarningList(auth) {
11320
- return fetch(publicWarningBaseUrl + "/warnings", {
11321
- headers: getHeaders(auth)
11322
- }).then(handleResponse).then(function (warnings) {
11323
- return warnings.map(function (warning) {
11324
- return Object.assign({}, warning, {
11325
- type: 'public'
11326
- });
11327
- });
11328
- });
11329
- };
11330
- var updatePublicWarningEditor = function updatePublicWarningEditor(warningId, isEditor, auth) {
11331
- return fetch(publicWarningBaseUrl + "/warnings/" + warningId + "?editor=" + (isEditor ? 'true' : 'false') + "&force=true", {
11332
- headers: getHeaders(auth),
11333
- method: 'POST'
11334
- }).then(handleResponse);
11335
- };
11336
-
11337
- /**
11338
- * @param disabled - Disables fetching, but still returns cached values.
11339
- * https://tanstack.com/query/v4/docs/framework/react/guides/disabling-queries
11340
- */
11341
- var usePublicWarnings = function usePublicWarnings(disabled) {
11342
- if (disabled === void 0) {
11343
- disabled = false;
11344
- }
11345
- return useAuthQuery(['public-warning-list'], getPublicWarningList, disabled, 1000 * 60 * 5);
11346
- };
11347
- var useMutatePublicWarningEditor = function useMutatePublicWarningEditor() {
11348
- var queryClient = useQueryClient();
11349
- var _useAuthenticationCon = useAuthenticationContext(),
11350
- auth = _useAuthenticationCon.auth;
11351
- var dispatch = useDispatch();
11352
- return useMutation(Object.assign({
11353
- mutationFn: function mutationFn(_ref) {
11354
- var id = _ref.id,
11355
- isEditor = _ref.isEditor;
11356
- if (!auth) {
11357
- throw new Error('Authentication context not found');
11358
- }
11359
- return updatePublicWarningEditor(id, isEditor, auth);
11360
- }
11361
- }, optimisticUpdate(['public-warning-list'], queryClient, function (w, _ref2) {
11362
- var isEditor = _ref2.isEditor;
11363
- return Object.assign({}, w, {
11364
- editor: isEditor ? auth.username : undefined
11365
- });
11366
- }, function (error) {
11367
- dispatch(publicWarningFormActions.setFormError({
11368
- message: error.message
11369
- }));
11370
- }), {
11371
- onSettled: function () {
11372
- var _onSettled = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(data, e, _ref3) {
11373
- var isEditor;
11374
- return _regeneratorRuntime().wrap(function _callee$(_context) {
11375
- while (1) switch (_context.prev = _context.next) {
11376
- case 0:
11377
- isEditor = _ref3.isEditor;
11378
- dispatch(snackbarActions.openSnackbar({
11379
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
11380
- key: isEditor ? 'warning-editor-add-editor' : 'warning-editor-remove-editor'
11381
- }));
11382
- case 2:
11383
- case "end":
11384
- return _context.stop();
11385
- }
11386
- }, _callee);
11387
- }));
11388
- function onSettled(_x, _x2, _x3) {
11389
- return _onSettled.apply(this, arguments);
11390
- }
11391
- return onSettled;
11392
- }()
11393
- }));
11394
- };
11395
-
11396
11554
  /* *
11397
11555
  * Licensed under the Apache License, Version 2.0 (the "License");
11398
11556
  * you may not use this file except in compliance with the License.
@@ -11602,12 +11760,16 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11602
11760
  dispatch(publicWarningFormActions.setFormValues({
11603
11761
  formState: isReadOnly ? 'readonly' : ''
11604
11762
  }));
11763
+ dispatch(uiActions.setToggleOpenDialog({
11764
+ type: uiTypes.DialogTypes.AreaObjectLoader,
11765
+ setOpen: false
11766
+ }));
11605
11767
  updatePublicWarningEditor.mutate({
11606
11768
  id: selectedWarningId,
11607
11769
  isEditor: !isReadOnly
11608
11770
  });
11609
11771
  return _context2.abrupt("return", true);
11610
- case 14:
11772
+ case 15:
11611
11773
  case "end":
11612
11774
  return _context2.stop();
11613
11775
  }
@@ -11729,10 +11891,7 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
11729
11891
  defaultMapPreset: defaultMapPreset,
11730
11892
  selectedAviationProduct: selectedAviationProduct,
11731
11893
  warningType: updatedWarningType,
11732
- mode: mode,
11733
- onFormSubmit: function onFormSubmit() {
11734
- return refetchWarnings();
11735
- }
11894
+ mode: mode
11736
11895
  })
11737
11896
  }), jsx(AreaObjectLoaderConnect, {})]
11738
11897
  });
@@ -13174,7 +13333,9 @@ var slice = createSlice({
13174
13333
  filterState = _action$payload.filterState,
13175
13334
  panelId = _action$payload.panelId;
13176
13335
  if (panelId) {
13177
- draft.filterState[panelId] = filterState;
13336
+ var _current;
13337
+ var currentFilterState = ((_current = current(draft)) == null ? void 0 : _current.filterState[panelId]) || initialFilters;
13338
+ draft.filterState[panelId] = Object.assign({}, currentFilterState, filterState);
13178
13339
  }
13179
13340
  }
13180
13341
  }
@@ -13254,6 +13415,23 @@ var selectors = /*#__PURE__*/Object.freeze({
13254
13415
  selectAllPublicWarnings: selectAllPublicWarnings
13255
13416
  });
13256
13417
 
13418
+ /* *
13419
+ * Licensed under the Apache License, Version 2.0 (the "License");
13420
+ * you may not use this file except in compliance with the License.
13421
+ * You may obtain a copy of the License at
13422
+ *
13423
+ * http://www.apache.org/licenses/LICENSE-2.0
13424
+ *
13425
+ * Unless required by applicable law or agreed to in writing, software
13426
+ * distributed under the License is distributed on an "AS IS" BASIS,
13427
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13428
+ * See the License for the specific language governing permissions and
13429
+ * limitations under the License.
13430
+ *
13431
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
13432
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
13433
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
13434
+ * */
13257
13435
  var getLevelsForDomainFilter = function getLevelsForDomainFilter(domainFilter) {
13258
13436
  return Object.keys(domainFilter).flatMap(function (domain) {
13259
13437
  return domainFilter[domain] ? domainLevels[domain] : [];
@@ -13264,31 +13442,36 @@ var getPhenomenaForDomainFilter = function getPhenomenaForDomainFilter(domainFil
13264
13442
  return domainFilter[domain] ? domainPhenomena[domain] : [];
13265
13443
  });
13266
13444
  };
13267
- var getFilterOptions = function getFilterOptions(defaultFilter, allOptions, savedFilter) {
13268
- var pickedFilterOptions = pick(defaultFilter, [emptyFilterId].concat(allOptions));
13269
- // keep options state from savedFilter if it still exists
13270
- var updatedOptions = assign(pickedFilterOptions, pick(savedFilter || {}, Object.keys(pickedFilterOptions)));
13271
- var _getSelectedOptions = getSelectedOptions(updatedOptions),
13445
+ /** Get filter object
13446
+ * @param savedFilter The savedFilter with all options
13447
+ * @param visibleOptions The options that should be shown
13448
+ * @returns pickedFilterObject - The filter object with only the relevant options
13449
+ * @returns allSelected - A value for whether or not every visible option is selected
13450
+ */
13451
+ var getFilterOptions = function getFilterOptions(savedFilter, visibleOptions) {
13452
+ var pickedFilterObject = pick(savedFilter, [emptyFilterId].concat(visibleOptions));
13453
+ var _getSelectedOptions = getSelectedOptions(pickedFilterObject),
13272
13454
  allSelected = _getSelectedOptions.allSelected;
13273
- return [updatedOptions, allSelected];
13455
+ return [pickedFilterObject, allSelected];
13274
13456
  };
13275
13457
  var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, savedFilterState, presetFilterState) {
13276
- var pickedDomainFilter = savedFilterState.domain,
13277
- pickedPhenomenonFilter = savedFilterState.phenomenon,
13278
- pickedLevelFilter = savedFilterState.level,
13279
- pickedSourceFilter = savedFilterState.source,
13280
- pickedIncidentFilter = savedFilterState.incident;
13281
- /// level
13458
+ var savedDomainFilter = savedFilterState.domain,
13459
+ savedPhenomenonFilter = savedFilterState.phenomenon,
13460
+ savedLevelFilter = savedFilterState.level,
13461
+ savedSourceFilter = savedFilterState.source,
13462
+ savedIncidentFilter = savedFilterState.incident;
13463
+ /** Levels for selected domain(s) */
13282
13464
  var relevantLevels = useMemo(function () {
13283
- return getLevelsForDomainFilter(pickedDomainFilter);
13284
- }, [pickedDomainFilter]);
13285
- var _getFilterOptions = getFilterOptions(defaultLevelFilter, relevantLevels, pickedLevelFilter),
13286
- updatedPickedLevels = _getFilterOptions[0],
13465
+ return getLevelsForDomainFilter(savedDomainFilter);
13466
+ }, [savedDomainFilter]);
13467
+ var _getFilterOptions = getFilterOptions(savedLevelFilter, relevantLevels),
13468
+ pickedLevelFilter = _getFilterOptions[0],
13287
13469
  allLevelsSelected = _getFilterOptions[1];
13288
- // phenomenon
13470
+ /** Phenomena for selected domain(s) */
13289
13471
  var domainPhenomena = useMemo(function () {
13290
- return getPhenomenaForDomainFilter(pickedDomainFilter);
13291
- }, [pickedDomainFilter]);
13472
+ return getPhenomenaForDomainFilter(savedDomainFilter);
13473
+ }, [savedDomainFilter]);
13474
+ /** Phenomena in the warnings */
13292
13475
  var warningsPhenomena = useMemo(function () {
13293
13476
  return getFiltersFromWarnings(warnings, 'phenomenon');
13294
13477
  }, [warnings]);
@@ -13297,9 +13480,8 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
13297
13480
  return warningsPhenomena.includes(phenomenon);
13298
13481
  });
13299
13482
  }, [warningsPhenomena, domainPhenomena]);
13300
- relevantPhenomena.push(emptyFilterId);
13301
- var _getFilterOptions2 = getFilterOptions(defaultPhenomenonFilter, relevantPhenomena, pickedPhenomenonFilter),
13302
- updatedPickedPhenomena = _getFilterOptions2[0],
13483
+ var _getFilterOptions2 = getFilterOptions(savedPhenomenonFilter, relevantPhenomena),
13484
+ pickedPhenomenaFilter = _getFilterOptions2[0],
13303
13485
  allPhenomenaSelected = _getFilterOptions2[1];
13304
13486
  // source
13305
13487
  var relevantSources = useMemo(function () {
@@ -13307,46 +13489,54 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
13307
13489
  }, [warnings]);
13308
13490
  var defaultSourceFilter = useMemo(function () {
13309
13491
  return Object.fromEntries(relevantSources.map(function (key) {
13310
- return [key, true];
13492
+ var presetValue = presetFilterState == null ? void 0 : presetFilterState.source[key];
13493
+ return [key, presetValue === undefined ? true : presetValue];
13311
13494
  }));
13312
- }, [relevantSources]);
13313
- var _getFilterOptions3 = getFilterOptions(defaultSourceFilter, relevantSources, pickedSourceFilter),
13314
- updatedPickedSources = _getFilterOptions3[0],
13315
- allSourcesSelected = _getFilterOptions3[1];
13316
- // incident
13495
+ },
13496
+ // eslint-disable-next-line react-hooks/exhaustive-deps
13497
+ [relevantSources]);
13498
+ var _getSelectedOptions2 = getSelectedOptions(savedSourceFilter),
13499
+ allSourcesSelected = _getSelectedOptions2.allSelected;
13500
+ /** Incidents in the warnings */
13317
13501
  var relevantIncidents = useMemo(function () {
13318
13502
  return getFiltersFromWarnings(warnings, 'incident');
13319
13503
  }, [warnings]);
13504
+ /** FilterObject based on relevant incidents with values from the preset */
13320
13505
  var defaultIncidentFilter = useMemo(function () {
13321
13506
  return Object.fromEntries(relevantIncidents.map(function (key) {
13322
- return [key, true];
13507
+ var presetValue = presetFilterState == null ? void 0 : presetFilterState.incident[key];
13508
+ return [key, presetValue === undefined ? true : presetValue];
13323
13509
  }));
13324
- }, [relevantIncidents]);
13325
- var _getFilterOptions4 = getFilterOptions(defaultIncidentFilter, relevantIncidents, pickedIncidentFilter),
13326
- updatedPickedIncidents = _getFilterOptions4[0],
13327
- allIncidentsSelected = _getFilterOptions4[1];
13510
+ }, [relevantIncidents, presetFilterState == null ? void 0 : presetFilterState.incident]);
13511
+ var _getSelectedOptions3 = getSelectedOptions(savedIncidentFilter),
13512
+ allIncidentsSelected = _getSelectedOptions3.allSelected;
13513
+ var populatedIncidentAndSourceFilter = useMemo(function () {
13514
+ return {
13515
+ incident: defaultIncidentFilter,
13516
+ source: defaultSourceFilter
13517
+ };
13518
+ }, [defaultIncidentFilter, defaultSourceFilter]);
13519
+ var initialFiltersWithPresets = useMemo(function () {
13520
+ return {
13521
+ incident: defaultIncidentFilter || defaultEmptyFilter,
13522
+ source: defaultSourceFilter || defaultEmptyFilter,
13523
+ domain: Object.assign({}, initialFilters.domain, presetFilterState == null ? void 0 : presetFilterState.domain),
13524
+ phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState == null ? void 0 : presetFilterState.phenomenon),
13525
+ level: Object.assign({}, initialFilters.level, presetFilterState == null ? void 0 : presetFilterState.level)
13526
+ };
13527
+ },
13528
+ // eslint-disable-next-line react-hooks/exhaustive-deps
13529
+ [presetFilterState]);
13530
+ useEffect(function () {
13531
+ onUpdateFilters(populatedIncidentAndSourceFilter, true);
13532
+ }, [populatedIncidentAndSourceFilter, onUpdateFilters]);
13328
13533
  useEffect(function () {
13329
13534
  // when the preset changes, update the filters
13330
- if (presetFilterState) {
13331
- var initialFiltersWithPresets = {
13332
- incident: Object.assign({}, makeFilterFromList(relevantIncidents), presetFilterState.incident),
13333
- source: Object.assign({}, makeFilterFromList(relevantSources), presetFilterState.source),
13334
- domain: Object.assign({}, initialFilters.domain, presetFilterState.domain),
13335
- phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState.phenomenon),
13336
- level: Object.assign({}, initialFilters.level, presetFilterState.level)
13337
- };
13338
- onUpdateFilters(initialFiltersWithPresets, 'system');
13339
- } else {
13340
- // for a preset without filters saved use the initial filters
13341
- onUpdateFilters(Object.assign({}, initialFilters, {
13342
- incident: makeFilterFromList(relevantIncidents),
13343
- source: makeFilterFromList(relevantSources)
13344
- }), 'system');
13345
- }
13535
+ onUpdateFilters(initialFiltersWithPresets, true);
13346
13536
  // eslint-disable-next-line react-hooks/exhaustive-deps
13347
- }, [presetFilterState, onUpdateFilters]);
13348
- var _getSelectedOptions2 = getSelectedOptions(pickedDomainFilter),
13349
- allDomainSelected = _getSelectedOptions2.allSelected;
13537
+ }, [initialFiltersWithPresets, onUpdateFilters]);
13538
+ var _getSelectedOptions4 = getSelectedOptions(savedDomainFilter),
13539
+ allDomainSelected = _getSelectedOptions4.allSelected;
13350
13540
  var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allIncidentsSelected && allSourcesSelected;
13351
13541
  /**
13352
13542
  * @param filterKey - Name of the filter | "ALL" filters
@@ -13358,44 +13548,40 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
13358
13548
  var levelFilter = value ? defaultLevelFilter : defaultEmptyFilter;
13359
13549
  if (filterKey === 'ALL') {
13360
13550
  onUpdateFilters({
13361
- domain: updateState(pickedDomainFilter, 'ALL', value),
13551
+ domain: updateState(savedDomainFilter, 'ALL', value),
13362
13552
  level: updateState(levelFilter, 'ALL', value),
13363
- phenomenon: updateState(pickedPhenomenonFilter, 'ALL', value),
13364
- incident: updateState(pickedIncidentFilter, 'ALL', value),
13365
- source: updateState(pickedSourceFilter, 'ALL', value)
13366
- }, 'user');
13553
+ phenomenon: updateState(savedPhenomenonFilter, 'ALL', value),
13554
+ incident: updateState(savedIncidentFilter, 'ALL', value),
13555
+ source: updateState(savedSourceFilter, 'ALL', value)
13556
+ });
13367
13557
  } else if (filterKey === 'domain') {
13368
- var newDomain = updateState(pickedDomainFilter, optionKey, value, only);
13369
- var _relevantLevels = getLevelsForDomainFilter(newDomain);
13370
- var _getFilterOptions5 = getFilterOptions(defaultLevelFilter, _relevantLevels, pickedLevelFilter),
13371
- newLevel = _getFilterOptions5[0];
13372
- onUpdateFilters(Object.assign({}, savedFilterState, {
13373
- domain: newDomain,
13374
- level: newLevel // levels depend on selected domains
13375
- }), 'user');
13558
+ var newDomain = updateState(savedDomainFilter, optionKey, value, only);
13559
+ onUpdateFilters({
13560
+ domain: newDomain
13561
+ });
13376
13562
  } else if (filterKey === 'level') {
13377
- onUpdateFilters(Object.assign({}, savedFilterState, {
13378
- level: updateState(pickedLevelFilter, optionKey, value, only)
13379
- }), 'user');
13563
+ onUpdateFilters({
13564
+ level: updateState(savedLevelFilter, optionKey, value, only)
13565
+ });
13380
13566
  } else if (filterKey === 'phenomenon') {
13381
- onUpdateFilters(Object.assign({}, savedFilterState, {
13382
- phenomenon: updateState(pickedPhenomenonFilter, optionKey, value, only)
13383
- }), 'user');
13567
+ onUpdateFilters({
13568
+ phenomenon: updateState(savedPhenomenonFilter, optionKey, value, only)
13569
+ });
13384
13570
  } else if (filterKey === 'source') {
13385
- onUpdateFilters(Object.assign({}, savedFilterState, {
13386
- source: updateState(pickedSourceFilter, optionKey, value, only)
13387
- }), 'user');
13571
+ onUpdateFilters({
13572
+ source: updateState(savedSourceFilter, optionKey, value, only)
13573
+ });
13388
13574
  } else if (filterKey === 'incident') {
13389
- onUpdateFilters(Object.assign({}, savedFilterState, {
13390
- incident: updateState(pickedIncidentFilter, optionKey, value, only)
13391
- }), 'user');
13575
+ onUpdateFilters({
13576
+ incident: updateState(savedIncidentFilter, optionKey, value, only)
13577
+ });
13392
13578
  }
13393
13579
  };
13394
13580
  var byFilterState = useCallback(function (warning) {
13395
- var levelDomain = ['SIG', 'AIR'].find(function (d) {
13396
- return d === warning.warningDetail.level;
13581
+ var levelDomain = ['SIG', 'AIR'].find(function (dom) {
13582
+ return dom === warning.warningDetail.level;
13397
13583
  }) ? Domain.aviation : Domain["public"];
13398
- if (!pickedDomainFilter[levelDomain]) {
13584
+ if (!savedDomainFilter[levelDomain]) {
13399
13585
  return false;
13400
13586
  }
13401
13587
  var level = getValue(Level, warning.warningDetail.level);
@@ -13403,33 +13589,33 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
13403
13589
  return false;
13404
13590
  }
13405
13591
  var phenomenon = getValue(AllPhenomenaKeys, warning.warningDetail.phenomenon);
13406
- if (!pickedPhenomenonFilter[phenomenon]) {
13592
+ if (!pickedPhenomenaFilter[phenomenon]) {
13407
13593
  return false;
13408
13594
  }
13409
13595
  var source = relevantSources.find(function (source) {
13410
13596
  return source === warning.warningDetail.warningProposalSource;
13411
13597
  }) || emptyFilterId;
13412
- if (!updatedPickedSources[source]) {
13598
+ if (!savedSourceFilter[source]) {
13413
13599
  return false;
13414
13600
  }
13415
13601
  var incident = relevantIncidents.find(function (incident) {
13416
13602
  return incident === warning.warningDetail.incident;
13417
13603
  }) || emptyFilterId;
13418
- if (!updatedPickedIncidents[incident]) {
13604
+ if (!savedIncidentFilter[incident]) {
13419
13605
  return false;
13420
13606
  }
13421
13607
  return true;
13422
- }, [pickedDomainFilter, pickedLevelFilter, pickedPhenomenonFilter, relevantSources, updatedPickedSources, relevantIncidents, updatedPickedIncidents]);
13608
+ }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter, relevantIncidents, savedIncidentFilter]);
13423
13609
  return {
13424
13610
  allSelected: allSelected,
13425
13611
  updateFilter: updateFilter,
13426
13612
  byFilterState: byFilterState,
13427
13613
  filterState: {
13428
- domain: pickedDomainFilter,
13429
- level: updatedPickedLevels,
13430
- phenomenon: updatedPickedPhenomena,
13431
- incident: updatedPickedIncidents,
13432
- source: updatedPickedSources
13614
+ domain: savedDomainFilter,
13615
+ level: pickedLevelFilter,
13616
+ phenomenon: pickedPhenomenaFilter,
13617
+ incident: savedIncidentFilter,
13618
+ source: savedSourceFilter
13433
13619
  }
13434
13620
  };
13435
13621
  };
@@ -13747,11 +13933,14 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
13747
13933
  openSnackbar(snackbarMessage);
13748
13934
  refetchWarnings();
13749
13935
  };
13750
- var onUpdateFilters = React__default.useCallback(function (filterState, origin) {
13936
+ var onUpdateFilters = React__default.useCallback(function (filterState, systemUpdate) {
13937
+ if (systemUpdate === void 0) {
13938
+ systemUpdate = false;
13939
+ }
13751
13940
  dispatch(publicWarningActions.setWarningFilters({
13752
13941
  filterState: filterState,
13753
13942
  panelId: panelId,
13754
- origin: origin
13943
+ systemUpdate: systemUpdate
13755
13944
  }));
13756
13945
  }, [dispatch, panelId]);
13757
13946
  var filterHookState = useWarningFilters(combinedWarnings, onUpdateFilters, savedFilterState, presetFilterState);
@@ -13879,52 +14068,28 @@ var componentsLookUp = function componentsLookUp(payload, apiProps) {
13879
14068
  }
13880
14069
  };
13881
14070
 
13882
- var getErrorMessage = function getErrorMessage(error) {
13883
- return isAxiosError(error) ? getAxiosErrorMessage(error) : error.message;
13884
- };
13885
14071
  var publicWarningFormListener = createListenerMiddleware();
13886
14072
  publicWarningFormListener.startListening({
13887
- actionCreator: publicWarningFormActions.publishWarning,
14073
+ actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
13888
14074
  effect: function () {
13889
14075
  var _effect = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
13890
- var payload, publicWarning, refetchWarnings, publishedWarning, isDialogOpen;
14076
+ var payload, panelId;
13891
14077
  return _regeneratorRuntime().wrap(function _callee$(_context) {
13892
14078
  while (1) switch (_context.prev = _context.next) {
13893
14079
  case 0:
13894
14080
  payload = _ref.payload;
13895
14081
  listenerApi.cancelActiveListeners();
13896
- _context.prev = 2;
13897
- publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13898
- _context.next = 6;
13899
- return saveOrUpdateWarning(publicWarning);
13900
- case 6:
13901
- publishedWarning = _context.sent;
13902
- if (refetchWarnings) {
13903
- refetchWarnings();
13904
- }
13905
- listenerApi.dispatch(publicWarningFormActions.publishWarningSuccess({
13906
- publicWarning: publishedWarning,
13907
- message: {
13908
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13909
- key: 'warning-publish-succes'
13910
- }
13911
- }));
14082
+ panelId = payload.panelId;
13912
14083
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
14084
+ setOpen: true,
13913
14085
  type: publicWarningDialogType,
13914
- setOpen: false
14086
+ sourcePanelId: panelId
13915
14087
  }));
13916
- _context.next = 16;
13917
- break;
13918
- case 12:
13919
- _context.prev = 12;
13920
- _context.t0 = _context["catch"](2);
13921
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13922
- errorEffect(listenerApi.dispatch, getErrorMessage(_context.t0), isDialogOpen);
13923
- case 16:
14088
+ case 4:
13924
14089
  case "end":
13925
14090
  return _context.stop();
13926
14091
  }
13927
- }, _callee, null, [[2, 12]]);
14092
+ }, _callee);
13928
14093
  }));
13929
14094
  function effect(_x, _x2) {
13930
14095
  return _effect.apply(this, arguments);
@@ -13933,201 +14098,14 @@ publicWarningFormListener.startListening({
13933
14098
  }()
13934
14099
  });
13935
14100
  publicWarningFormListener.startListening({
13936
- actionCreator: publicWarningFormActions.saveWarning,
14101
+ actionCreator: uiActions.setToggleOpenDialog,
13937
14102
  effect: function () {
13938
14103
  var _effect2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref2, listenerApi) {
13939
- var payload, publicWarning, refetchWarnings, savedWarning, isDialogOpen;
14104
+ var payload;
13940
14105
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
13941
14106
  while (1) switch (_context2.prev = _context2.next) {
13942
14107
  case 0:
13943
14108
  payload = _ref2.payload;
13944
- listenerApi.cancelActiveListeners();
13945
- _context2.prev = 2;
13946
- publicWarning = payload.publicWarning, refetchWarnings = payload.refetchWarnings;
13947
- _context2.next = 6;
13948
- return saveOrUpdateWarning(publicWarning);
13949
- case 6:
13950
- savedWarning = _context2.sent;
13951
- if (refetchWarnings) {
13952
- refetchWarnings();
13953
- }
13954
- listenerApi.dispatch(publicWarningFormActions.saveWarningSuccess({
13955
- publicWarning: savedWarning,
13956
- message: {
13957
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
13958
- key: 'warning-save-succes'
13959
- }
13960
- }));
13961
- _context2.next = 15;
13962
- break;
13963
- case 11:
13964
- _context2.prev = 11;
13965
- _context2.t0 = _context2["catch"](2);
13966
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13967
- errorEffect(listenerApi.dispatch, getErrorMessage(_context2.t0), isDialogOpen);
13968
- case 15:
13969
- case "end":
13970
- return _context2.stop();
13971
- }
13972
- }, _callee2, null, [[2, 11]]);
13973
- }));
13974
- function effect(_x3, _x4) {
13975
- return _effect2.apply(this, arguments);
13976
- }
13977
- return effect;
13978
- }()
13979
- });
13980
- // Side effects/snackbar listeners
13981
- publicWarningFormListener.startListening({
13982
- matcher: isAnyOf(publicWarningFormActions.publishWarningSuccess, publicWarningFormActions.saveWarningSuccess),
13983
- effect: function () {
13984
- var _effect3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3, listenerApi) {
13985
- var payload, message, isDialogOpen;
13986
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
13987
- while (1) switch (_context3.prev = _context3.next) {
13988
- case 0:
13989
- payload = _ref3.payload;
13990
- listenerApi.cancelActiveListeners();
13991
- message = payload.message;
13992
- listenerApi.dispatch(snackbarActions.openSnackbar(message));
13993
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
13994
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, false);
13995
- case 6:
13996
- case "end":
13997
- return _context3.stop();
13998
- }
13999
- }, _callee3);
14000
- }));
14001
- function effect(_x5, _x6) {
14002
- return _effect3.apply(this, arguments);
14003
- }
14004
- return effect;
14005
- }()
14006
- });
14007
- publicWarningFormListener.startListening({
14008
- matcher: isAnyOf(publicWarningFormActions.publishWarning, publicWarningFormActions.saveWarning),
14009
- effect: function () {
14010
- var _effect4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_, listenerApi) {
14011
- var isDialogOpen;
14012
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
14013
- while (1) switch (_context4.prev = _context4.next) {
14014
- case 0:
14015
- listenerApi.cancelActiveListeners();
14016
- isDialogOpen = uiSelectors.getisDialogOpen(listenerApi.getState(), publicWarningDialogType);
14017
- toggleDialogLoadingEffect(listenerApi.dispatch, isDialogOpen, true);
14018
- case 3:
14019
- case "end":
14020
- return _context4.stop();
14021
- }
14022
- }, _callee4);
14023
- }));
14024
- function effect(_x7, _x8) {
14025
- return _effect4.apply(this, arguments);
14026
- }
14027
- return effect;
14028
- }()
14029
- });
14030
- publicWarningFormListener.startListening({
14031
- actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
14032
- effect: function () {
14033
- var _effect5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_ref4, listenerApi) {
14034
- var payload, panelId;
14035
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
14036
- while (1) switch (_context5.prev = _context5.next) {
14037
- case 0:
14038
- payload = _ref4.payload;
14039
- listenerApi.cancelActiveListeners();
14040
- panelId = payload.panelId;
14041
- listenerApi.dispatch(uiActions.setToggleOpenDialog({
14042
- setOpen: true,
14043
- type: publicWarningDialogType,
14044
- sourcePanelId: panelId
14045
- }));
14046
- case 4:
14047
- case "end":
14048
- return _context5.stop();
14049
- }
14050
- }, _callee5);
14051
- }));
14052
- function effect(_x9, _x10) {
14053
- return _effect5.apply(this, arguments);
14054
- }
14055
- return effect;
14056
- }()
14057
- });
14058
- var saveOrUpdateWarning = /*#__PURE__*/function () {
14059
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(publicWarning) {
14060
- var warningsApi, warningDetail, status, warning, newWarningId;
14061
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
14062
- while (1) switch (_context6.prev = _context6.next) {
14063
- case 0:
14064
- warningsApi = getWarningsApi();
14065
- warningDetail = publicWarning.warningDetail, status = publicWarning.status;
14066
- if (!warningDetail.id) {
14067
- _context6.next = 6;
14068
- break;
14069
- }
14070
- _context6.next = 5;
14071
- return warningsApi.updateWarning(warningDetail.id, publicWarning);
14072
- case 5:
14073
- return _context6.abrupt("return", publicWarning);
14074
- case 6:
14075
- if (!(status === 'PUBLISHED' && warningDetail.linked_to_id)) {
14076
- _context6.next = 11;
14077
- break;
14078
- }
14079
- warning = Object.assign({}, publicWarning, {
14080
- warningDetail: Object.assign({}, warningDetail, {
14081
- id: warningDetail.linked_to_id
14082
- })
14083
- });
14084
- _context6.next = 10;
14085
- return warningsApi.updateWarning(warningDetail.linked_to_id, warning);
14086
- case 10:
14087
- return _context6.abrupt("return", warning);
14088
- case 11:
14089
- _context6.next = 13;
14090
- return warningsApi.saveWarningAs(publicWarning);
14091
- case 13:
14092
- newWarningId = _context6.sent;
14093
- return _context6.abrupt("return", Object.assign({}, publicWarning, {
14094
- warningDetail: Object.assign({}, warningDetail, {
14095
- id: newWarningId
14096
- })
14097
- }));
14098
- case 15:
14099
- case "end":
14100
- return _context6.stop();
14101
- }
14102
- }, _callee6);
14103
- }));
14104
- return function saveOrUpdateWarning(_x11) {
14105
- return _ref5.apply(this, arguments);
14106
- };
14107
- }();
14108
- var toggleDialogLoadingEffect = function toggleDialogLoadingEffect(dispatch, isDialogOpen, isLoading) {
14109
- if (isDialogOpen) {
14110
- dispatch(uiActions.toggleIsLoadingDialog({
14111
- isLoading: isLoading,
14112
- type: publicWarningDialogType
14113
- }));
14114
- }
14115
- };
14116
- var errorEffect = function errorEffect(dispatch, message, isDialogOpen) {
14117
- dispatch(publicWarningFormActions.setFormError({
14118
- message: message
14119
- }));
14120
- toggleDialogLoadingEffect(dispatch, isDialogOpen, false);
14121
- };
14122
- publicWarningFormListener.startListening({
14123
- actionCreator: uiActions.setToggleOpenDialog,
14124
- effect: function () {
14125
- var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(_ref6, listenerApi) {
14126
- var payload;
14127
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
14128
- while (1) switch (_context7.prev = _context7.next) {
14129
- case 0:
14130
- payload = _ref6.payload;
14131
14109
  if (!payload.setOpen && payload.type === publicWarningDialogType) {
14132
14110
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
14133
14111
  setOpen: false,
@@ -14136,12 +14114,12 @@ publicWarningFormListener.startListening({
14136
14114
  }
14137
14115
  case 2:
14138
14116
  case "end":
14139
- return _context7.stop();
14117
+ return _context2.stop();
14140
14118
  }
14141
- }, _callee7);
14119
+ }, _callee2);
14142
14120
  }));
14143
- function effect(_x12, _x13) {
14144
- return _effect6.apply(this, arguments);
14121
+ function effect(_x3, _x4) {
14122
+ return _effect2.apply(this, arguments);
14145
14123
  }
14146
14124
  return effect;
14147
14125
  }()
@@ -14215,7 +14193,7 @@ warningsDrawingsListener.startListening({
14215
14193
  isLoading: false,
14216
14194
  type: drawingDialogType
14217
14195
  }));
14218
- errorMessage = isAxiosError$1(taskError) ? getAxiosErrorMessage(taskError) : taskError.message;
14196
+ errorMessage = isAxiosError(taskError) ? getAxiosErrorMessage(taskError) : taskError.message;
14219
14197
  listenerApi.dispatch(uiActions.setErrorDialog({
14220
14198
  type: drawingDialogType,
14221
14199
  error: errorMessage