@opengeoweb/warnings 12.12.0 → 12.13.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 (26) hide show
  1. package/index.esm.js +606 -401
  2. package/package.json +12 -12
  3. package/src/lib/Warnings.stories.d.ts +10 -1
  4. package/src/lib/api/warning-api/api.d.ts +6 -2
  5. package/src/lib/api/warning-api/hooks.d.ts +10 -2
  6. package/src/lib/components/MaritimeWarningsForm/AreaList/AreaList.d.ts +2 -2
  7. package/src/lib/components/MaritimeWarningsForm/AssignedAreas/AssignedAreas.d.ts +2 -2
  8. package/src/lib/components/MaritimeWarningsForm/MaritimeWarningsForm.d.ts +12 -2
  9. package/src/lib/components/MaritimeWarningsForm/MaritimeWarningsForm.stories.d.ts +2 -0
  10. package/src/lib/components/MaritimeWarningsForm/MaritimeWarningsFormConnect.stories.d.ts +2 -0
  11. package/src/lib/components/MaritimeWarningsForm/WarningList/WarningList.d.ts +3 -2
  12. package/src/lib/components/MaritimeWarningsForm/WarningList/WarningListItem.d.ts +4 -3
  13. package/src/lib/components/MaritimeWarningsForm/WarningList/WarningListSelect.d.ts +2 -1
  14. package/src/lib/components/MaritimeWarningsForm/types.d.ts +25 -0
  15. package/src/lib/components/MaritimeWarningsForm/useConfirmRetractDialog.d.ts +4 -3
  16. package/src/lib/components/MaritimeWarningsForm/useMaritimeWarningsFormState.d.ts +4 -1
  17. package/src/lib/components/MaritimeWarningsForm/utils.d.ts +2 -2
  18. package/src/lib/components/PublicWarningList/PublicWarningList.stories.d.ts +4 -0
  19. package/src/lib/components/PublicWarningList/PublicWarningListConnect.maritime.integration.spec.d.ts +1 -0
  20. package/src/lib/components/PublicWarningList/PublicWarningListConnect.stories.d.ts +9 -1
  21. package/src/lib/components/PublicWarningList/WarningListItemMenu.d.ts +3 -2
  22. package/src/lib/store/publicWarningForm/types.d.ts +4 -0
  23. package/src/lib/utils/fakeApi/index.d.ts +4 -2
  24. package/src/lib/utils/sig-airmet-util.d.ts +2 -2
  25. package/src/lib/components/MaritimeWarningsForm/areas.d.ts +0 -2
  26. package/src/lib/components/MaritimeWarningsForm/options.d.ts +0 -5
package/index.esm.js CHANGED
@@ -3,11 +3,11 @@ import { useDispatch, useSelector } from 'react-redux';
3
3
  import { Polygons, ExitDomain, Share, Edit, Delete, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, DrawPolygon, Visibility, Add, ArrowUpCompact, ArrowDownCompact, breakpoints, DragHandle, Options, Close, ChevronDown, ChevronUp, Copy, Update, Cancel, Success, Expire, Remove } from '@opengeoweb/theme';
4
4
  import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, mapListener, layersListener, drawingToolListener, syncGroupsListener, openlayersListener, syncGroupsReducer, drawingToolReducer, uiReducer, layerReducer, mapReducer, useSetupDialog, genericSelectors, useUpdateSharedData, genericActions, selectorMemoizationOptions } from '@opengeoweb/store';
5
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, dateUtils, ToggleMenu, calculateStartSize, ToolContainerDraggable, AlertBanner, sessionStorageProvider, ConfirmationDialog, usePrevious, CustomIconButton, CustomTooltip, Avatar, getInitials, SwitchButton, FilterChip, TooltipSelect, usePreventBrowserClose, CustomToggleButton, Filter, FilterOption, StatusTag, LastUpdateTime, getAxiosErrorMessage, ErrorBoundary } from '@opengeoweb/shared';
6
+ import { SHARED_NAMESPACE, useConfirmationDialog, dateUtils, ToggleMenu, calculateStartSize, ToolContainerDraggable, AlertBanner, sessionStorageProvider, ConfirmationDialog, usePrevious, CustomIconButton, CustomTooltip, Avatar, getInitials, SwitchButton, FilterChip, TooltipSelect, LastUpdateTime, usePreventBrowserClose, CustomToggleButton, Filter, FilterOption, StatusTag, getAxiosErrorMessage, ErrorBoundary } from '@opengeoweb/shared';
7
7
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, current, combineReducers, configureStore } from '@reduxjs/toolkit';
8
8
  import { defaultBbox } from '@opengeoweb/core';
9
9
  import { FORM_FIELDS_NAMESPACE, useDraftFormHelpers, ReactHookFormSelect, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, errorMessages, isEmpty, ReactHookFormDateTime, isXHoursAfter, isXHoursBefore } from '@opengeoweb/form-fields';
10
- import { SA_NAMESPACE, isInstanceOfCancelSigmet, getDefaultValidFromValue, isInstanceOfCancelAirmet, getTacGeometry, getMaxPolygonPoints, getDefaultValidUntilValue, useShortTestHelpers, ProductAction, SigmetForm, AirmetForm, getConfirmationDialogCancelLabel, getConfirmationDialogButtonLabel, getConfirmationDialogContent, getConfirmationDialogTitle, isVAPhenomenon, CancelSigmetVolcanicMovements, createAirmetPostParameter, createSigmetPostParameter, prepareCancelSigmet, getProductFormMode } from '@opengeoweb/sigmet-airmet';
10
+ import { SA_NAMESPACE, isInstanceOfCancelSigmet, getDefaultValidFromValue, isInstanceOfCancelAirmet, getDefaultValidUntilValue, useShortTestHelpers, ProductAction, SigmetForm, AirmetForm, getConfirmationDialogCancelLabel, getConfirmationDialogButtonLabel, getConfirmationDialogContent, getConfirmationDialogTitle, isVAPhenomenon, CancelSigmetVolcanicMovements, createAirmetPostParameter, createSigmetPostParameter, prepareCancelSigmet, getProductFormMode } from '@opengeoweb/sigmet-airmet';
11
11
  import { LayerType, generateMapId } from '@opengeoweb/webmap';
12
12
  import { t } from 'i18next';
13
13
  import { useTranslation } from 'react-i18next';
@@ -218,9 +218,7 @@ var en = {
218
218
  "maritime-add-area": "Add",
219
219
  "maritime-no-area-selected": "(no area selected)",
220
220
  "maritime-no-district-selected": "(no district selected)",
221
- "maritime-backing": "Backing",
222
- "maritime-veering": "Veering",
223
- "maritime-no-change": "No change",
221
+ "maritime-no-change-selected": "(no change selected)",
224
222
  "maritime-windforce": "{{value}} Bft",
225
223
  "maritime-header-direction": "Direction",
226
224
  "maritime-header-direction-from": "Direction from",
@@ -229,22 +227,25 @@ var en = {
229
227
  "maritime-header-areas": "Areas",
230
228
  "maritime-header-districts": "Districts",
231
229
  "maritime-header-change": "Change",
232
- "maritime-direction-n": "North",
233
- "maritime-direction-nne": "North to Northeast",
234
- "maritime-direction-ne": "Northeast",
235
- "maritime-direction-nen": "Northeast to North",
236
- "maritime-direction-e": "East",
237
- "maritime-direction-ese": "East to Southeast",
238
- "maritime-direction-se": "Southeast",
239
- "maritime-direction-ses": "Southeast to South",
240
- "maritime-direction-s": "South",
241
- "maritime-direction-ssw": "South to Southwest",
242
- "maritime-direction-sw": "Southwest",
243
- "maritime-direction-sww": "Southwest to West",
244
- "maritime-direction-w": "West",
245
- "maritime-direction-wnw": "West to Northwest",
246
- "maritime-direction-nw": "Northwest",
247
- "maritime-direction-nwn": "Northwest to North",
230
+ "maritime-direction-N": "North",
231
+ "maritime-direction-NNE": "North to Northeast",
232
+ "maritime-direction-NE": "Northeast",
233
+ "maritime-direction-ENE": "East to Northeast",
234
+ "maritime-direction-E": "East",
235
+ "maritime-direction-ESE": "East to Southeast",
236
+ "maritime-direction-SE": "Southeast",
237
+ "maritime-direction-SSE": "South to Southeast",
238
+ "maritime-direction-S": "South",
239
+ "maritime-direction-SSW": "South to Southwest",
240
+ "maritime-direction-SW": "Southwest",
241
+ "maritime-direction-WSW": "West to Southwest",
242
+ "maritime-direction-W": "West",
243
+ "maritime-direction-WNW": "West to Northwest",
244
+ "maritime-direction-NW": "Northwest",
245
+ "maritime-direction-NNW": "North to Northwest",
246
+ "maritime-change-NO_CHANGE": "No change",
247
+ "maritime-change-BACKING": "Backing",
248
+ "maritime-change-VEERING": "Veering",
248
249
  "maritime-delete-button": "Delete",
249
250
  "maritime-retract-warning": "Retract warning",
250
251
  "maritime-no-change-of-direction": "(no change of direction)",
@@ -252,17 +253,19 @@ var en = {
252
253
  "maritime-retract-dialog-description-suffix": "will be removed",
253
254
  "maritime-retract-dialog-empty-warning-description": "The warning will be retracted",
254
255
  "maritime-retract-dialog-confirm": "Retract",
255
- "maritime-retract-success": "Warning retracted successfully",
256
256
  "maritime-clear-dialog-title": "Clear all",
257
257
  "maritime-clear-dialog-description": "All warnings will be removed from the list",
258
- "maritime-clear-success": "Warning list cleared successfully",
259
258
  "maritime-warning-title-coastal": "Warning Maritime - Coastal Waters",
260
259
  "maritime-warning-title-northsea": "Warning Maritime - North Sea Districts",
261
260
  "maritime-domain-coastal": "Coastal Waters",
262
261
  "maritime-domain-northsea": "North Sea Districts",
263
262
  "maritime-editor-on": "You are now the editor of the Maritime Warnings for {{domain}}",
264
263
  "maritime-editor-off": "You are now no longer the editor of the Maritime Warnings for {{domain}}",
265
- "maritime-warning-post-success": "Warning published successfully"
264
+ "maritime-warning-post-success": "Warning published successfully",
265
+ "maritime-loading-config": "Loading config...",
266
+ "maritime-config-error": "Something went wrong with loading the configuration file",
267
+ "maritime-warning-validfrom": "Start time: ",
268
+ "maritime-warning-validuntil": "End time: "
266
269
  };
267
270
  var nl = {
268
271
  "drawing-tool-form-tools": "Gereedschap",
@@ -419,9 +422,10 @@ var nl = {
419
422
  "maritime-add-area": "Toevoegen",
420
423
  "maritime-no-area-selected": "(geen gebied geselecteerd)",
421
424
  "maritime-no-district-selected": "(geen district geselecteerd)",
422
- "maritime-backing": "Krimpend",
423
- "maritime-veering": "Ruimend",
424
- "maritime-no-change": "Geen wijziging",
425
+ "maritime-no-change-selected": "(geen wijziging geselecteerd)",
426
+ "maritime-change-NO_CHANGE": "Geen wijziging",
427
+ "maritime-change-BACKING": "Krimpend",
428
+ "maritime-change-VEERING": "Ruimend",
425
429
  "maritime-windforce": "{{value}} Bft",
426
430
  "maritime-header-direction": "Richting",
427
431
  "maritime-header-direction-from": "Richting van",
@@ -430,35 +434,37 @@ var nl = {
430
434
  "maritime-header-areas": "Gebieden",
431
435
  "maritime-header-districts": "Districten",
432
436
  "maritime-header-change": "Wijziging",
433
- "maritime-direction-n": "Noord",
434
- "maritime-direction-nne": "Noord tot noordoost",
435
- "maritime-direction-ne": "Noordoost",
436
- "maritime-direction-nen": "Noordoost tot noord",
437
- "maritime-direction-e": "Oost",
438
- "maritime-direction-ese": "Oost tot zuidoost",
439
- "maritime-direction-se": "Zuidoost",
440
- "maritime-direction-ses": "Zuidoost tot zuid",
441
- "maritime-direction-s": "Zuid",
442
- "maritime-direction-ssw": "Zuid tot zuidwest",
443
- "maritime-direction-sw": "Zuidwest",
444
- "maritime-direction-sww": "Zuidwest tot west",
445
- "maritime-direction-w": "West",
446
- "maritime-direction-wnw": "West tot noordwest",
447
- "maritime-direction-nw": "Noordwest",
448
- "maritime-direction-nwn": "Noordwest tot noord",
437
+ "maritime-direction-N": "Noord",
438
+ "maritime-direction-NNE": "Noord tot noordoost",
439
+ "maritime-direction-NE": "Noordoost",
440
+ "maritime-direction-ENE": "Oost tot noordoost",
441
+ "maritime-direction-E": "Oost",
442
+ "maritime-direction-ESE": "Oost tot zuidoost",
443
+ "maritime-direction-SE": "Zuidoost",
444
+ "maritime-direction-SSE": "Zuid tot zuidoost",
445
+ "maritime-direction-S": "Zuid",
446
+ "maritime-direction-SSW": "Zuid tot zuidwest",
447
+ "maritime-direction-SW": "Zuidwest",
448
+ "maritime-direction-WSW": "West tot zuidwest",
449
+ "maritime-direction-W": "West",
450
+ "maritime-direction-WNW": "West tot noordwest",
451
+ "maritime-direction-NW": "Noordwest",
452
+ "maritime-direction-NNW": "Noord tot noordwest",
449
453
  "maritime-delete-button": "Verwijderen",
450
454
  "maritime-retract-warning": "Waarschuwing intrekken",
451
455
  "maritime-retract-dialog-no-change": "(geen wijziging in richting)",
452
456
  "maritime-retract-dialog-empty-warning-description": "De waarschuwing wordt verwijderd",
453
457
  "maritime-retract-dialog-description-suffix": "wordt verwijderd",
454
458
  "maritime-retract-dialog-confirm": "Intrekken",
455
- "maritime-retract-success": "Waarschuwing succesvol ingetrokken",
456
459
  "maritime-clear-dialog-title": "Wissen",
457
460
  "maritime-clear-dialog-description": "Alle waarschuwingen worden verwijderd",
458
- "maritime-clear-success": "Alle waarchuwingen zijn verwijderd",
459
461
  "maritime-warning-title-coastal": "Maritieme Waarschuwing - Kustgebieden",
460
462
  "maritime-warning-title-northsea": "Maritieme Waarschuwing - Noordzee Districten",
461
- "maritime-warning-post-success": "Waarschuwing succesvol gepubliceerd"
463
+ "maritime-warning-post-success": "Waarschuwing succesvol gepubliceerd",
464
+ "maritime-loading-config": "Laden van configuratie...",
465
+ "maritime-config-error": "Er is iets misgegaan bij het laden van het configuratiebestand",
466
+ "maritime-warning-validfrom": "Start tijd: ",
467
+ "maritime-warning-validuntil": "Eind tijd: "
462
468
  };
463
469
  var fi = {
464
470
  "drawing-tool-form-tools": "Työkalut",
@@ -2008,8 +2014,9 @@ var getPublicWarningList = function getPublicWarningList(auth) {
2008
2014
  headers: getHeaders(auth)
2009
2015
  }).then(handleResponse).then(function (warnings) {
2010
2016
  return warnings.map(function (warning) {
2017
+ var _warning$warningDetai;
2011
2018
  return Object.assign({}, warning, {
2012
- type: 'public'
2019
+ type: ((_warning$warningDetai = warning.warningDetail) == null ? void 0 : _warning$warningDetai.domain) || 'public'
2013
2020
  });
2014
2021
  });
2015
2022
  });
@@ -2027,13 +2034,26 @@ var updatePublicWarning = function updatePublicWarning(warningId, auth, data) {
2027
2034
  body: JSON.stringify(data)
2028
2035
  }).then(handleResponse);
2029
2036
  };
2030
- var postWarning = function postWarning(auth, data) {
2037
+ var postPublicWarning = function postPublicWarning(auth, data) {
2031
2038
  return fetch(publicWarningBaseUrl + "/warnings/", {
2032
2039
  headers: getHeaders(auth),
2033
2040
  method: 'POST',
2034
2041
  body: JSON.stringify(data)
2035
2042
  }).then(handleResponse);
2036
2043
  };
2044
+ var postMaritimeWarnings = function postMaritimeWarnings(auth, data) {
2045
+ return fetch(publicWarningBaseUrl + "/maritime/", {
2046
+ headers: getHeaders(auth),
2047
+ method: 'POST',
2048
+ body: JSON.stringify(data)
2049
+ }).then(handleResponse);
2050
+ };
2051
+ var updateMaritimeWarningsEditor = function updateMaritimeWarningsEditor(domain, isEditor, auth, force) {
2052
+ return fetch(publicWarningBaseUrl + "/maritime/" + domain + "?editor=" + (isEditor ? 'true' : 'false') + "&force=" + (force ? 'true' : 'false'), {
2053
+ headers: getHeaders(auth),
2054
+ method: 'POST'
2055
+ }).then(handleResponse);
2056
+ };
2037
2057
  var deleteWarning = function deleteWarning(warningId, auth) {
2038
2058
  return fetch(publicWarningBaseUrl + "/warnings/" + warningId + "?delete=true", {
2039
2059
  headers: getHeaders(auth),
@@ -2117,6 +2137,12 @@ var deleteDrawing = function deleteDrawing(auth, drawingId) {
2117
2137
  headers: getHeaders(auth)
2118
2138
  }).then(handleResponse);
2119
2139
  };
2140
+ var getMaritimeWarningsConfig = function getMaritimeWarningsConfig(auth) {
2141
+ var url = publicWarningBaseUrl + "/maritime-warnings-config";
2142
+ return fetch(url, {
2143
+ headers: getHeaders(auth)
2144
+ }).then(handleResponse);
2145
+ };
2120
2146
 
2121
2147
  /* *
2122
2148
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2145,6 +2171,11 @@ var PublicWarningStatus;
2145
2171
  PublicWarningStatus["IGNORED"] = "IGNORED";
2146
2172
  PublicWarningStatus["WITHDRAWN"] = "WITHDRAWN";
2147
2173
  })(PublicWarningStatus || (PublicWarningStatus = {}));
2174
+ var MaritimeWarningAction;
2175
+ (function (MaritimeWarningAction) {
2176
+ MaritimeWarningAction["SELECT"] = "SELECT";
2177
+ MaritimeWarningAction["UPDATE"] = "UPDATE";
2178
+ })(MaritimeWarningAction || (MaritimeWarningAction = {}));
2148
2179
 
2149
2180
  /* *
2150
2181
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -3052,7 +3083,7 @@ var useMutateWarning = function useMutateWarning(snackBarMessage) {
3052
3083
  if (id) {
3053
3084
  return updatePublicWarning(id, auth, data);
3054
3085
  }
3055
- return postWarning(auth, data);
3086
+ return postPublicWarning(auth, data);
3056
3087
  },
3057
3088
  onError: function onError(error) {
3058
3089
  void queryClient.invalidateQueries({
@@ -3311,7 +3342,7 @@ var useMutateDeleteDrawing = function useMutateDeleteDrawing() {
3311
3342
  }
3312
3343
  });
3313
3344
  };
3314
- var usePostMaritimeWarning = function usePostMaritimeWarning() {
3345
+ var usePostMaritimeWarnings = function usePostMaritimeWarnings() {
3315
3346
  var _useAuthenticationCon6 = useAuthenticationContext(),
3316
3347
  auth = _useAuthenticationCon6.auth;
3317
3348
  var queryClient = useQueryClient();
@@ -3321,10 +3352,16 @@ var usePostMaritimeWarning = function usePostMaritimeWarning() {
3321
3352
  if (!auth) {
3322
3353
  throw new Error('Authentication context not found');
3323
3354
  }
3324
- return postWarning(auth, data);
3355
+ return postMaritimeWarnings(auth, data);
3325
3356
  },
3326
- onSuccess: function () {
3327
- var _onSuccess4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
3357
+ onSuccess: function onSuccess() {
3358
+ dispatch(snackbarActions.openSnackbar({
3359
+ type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
3360
+ key: 'maritime-warning-post-success'
3361
+ }));
3362
+ },
3363
+ onSettled: function () {
3364
+ var _onSettled = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
3328
3365
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
3329
3366
  while (1) switch (_context6.prev = _context6.next) {
3330
3367
  case 0:
@@ -3333,23 +3370,40 @@ var usePostMaritimeWarning = function usePostMaritimeWarning() {
3333
3370
  queryKey: ['public-warning-list']
3334
3371
  });
3335
3372
  case 2:
3336
- dispatch(snackbarActions.openSnackbar({
3337
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
3338
- key: 'maritime-warning-post-success'
3339
- }));
3340
- case 3:
3341
3373
  case "end":
3342
3374
  return _context6.stop();
3343
3375
  }
3344
3376
  }, _callee6);
3345
3377
  }));
3346
- function onSuccess() {
3347
- return _onSuccess4.apply(this, arguments);
3378
+ function onSettled() {
3379
+ return _onSettled.apply(this, arguments);
3348
3380
  }
3349
- return onSuccess;
3381
+ return onSettled;
3350
3382
  }()
3351
3383
  });
3352
3384
  };
3385
+ var useMutateMaritimeWarningsEditor = function useMutateMaritimeWarningsEditor() {
3386
+ var _useAuthenticationCon7 = useAuthenticationContext(),
3387
+ auth = _useAuthenticationCon7.auth;
3388
+ return useMutation({
3389
+ mutationFn: function mutationFn(_ref0) {
3390
+ var domain = _ref0.domain,
3391
+ isEditor = _ref0.isEditor,
3392
+ force = _ref0.force;
3393
+ if (!auth) {
3394
+ throw new Error('Authentication context not found');
3395
+ }
3396
+ return updateMaritimeWarningsEditor(domain, isEditor, auth, force);
3397
+ }
3398
+ });
3399
+ };
3400
+ var useMaritimeWarningsConfig = function useMaritimeWarningsConfig(disabled) {
3401
+ if (disabled === void 0) {
3402
+ disabled = false;
3403
+ }
3404
+ var maritimeConfigQuery = useAuthQuery(['maritime-warnings-config'], getMaritimeWarningsConfig, disabled);
3405
+ return maritimeConfigQuery;
3406
+ };
3353
3407
 
3354
3408
  var getDeleteDescription = function getDeleteDescription(objectName, t) {
3355
3409
  return t('delete-dialog-description') + " \"" + objectName + "\"?";
@@ -4757,15 +4811,12 @@ var flattenPublicWarning = function flattenPublicWarning(publicWarning) {
4757
4811
  }
4758
4812
  return {};
4759
4813
  };
4760
- var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(apiAirmet, productConfig) {
4814
+ var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(apiAirmet) {
4815
+ var _airmet$startGeometry;
4761
4816
  var airmet = apiAirmet.airmet;
4762
- var tacGeometry = getTacGeometry({
4763
- startGeometry: airmet.startGeometry,
4764
- startGeometryIntersect: airmet.startGeometryIntersect,
4765
- maxPoints: getMaxPolygonPoints(airmet.locationIndicatorATSR, productConfig)
4766
- });
4817
+ var tacGeometry = (_airmet$startGeometry = airmet.startGeometryIntersect) != null ? _airmet$startGeometry : airmet.startGeometry;
4767
4818
  var areas = [];
4768
- if (airmet.startGeometry) {
4819
+ if (airmet.startGeometry && tacGeometry.features.length > 0) {
4769
4820
  areas.push({
4770
4821
  areaId: airmet.uuid + "-start",
4771
4822
  geoJSON: Object.assign({}, tacGeometry, {
@@ -4802,18 +4853,11 @@ var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(api
4802
4853
  type: 'airmet'
4803
4854
  };
4804
4855
  };
4805
- var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(apiSigmet, productConfig) {
4856
+ var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(apiSigmet) {
4857
+ var _sigmet$startGeometry, _sigmet$endGeometryIn;
4806
4858
  var sigmet = apiSigmet.sigmet;
4807
- var tacGeometryStart = getTacGeometry({
4808
- startGeometry: sigmet.startGeometry,
4809
- startGeometryIntersect: sigmet.startGeometryIntersect,
4810
- maxPoints: getMaxPolygonPoints(sigmet.locationIndicatorATSR, productConfig)
4811
- });
4812
- var tacGeometryEnd = getTacGeometry({
4813
- startGeometry: sigmet.endGeometry,
4814
- startGeometryIntersect: sigmet.endGeometryIntersect,
4815
- maxPoints: getMaxPolygonPoints(sigmet.locationIndicatorATSR, productConfig)
4816
- });
4859
+ var tacGeometryStart = (_sigmet$startGeometry = sigmet.startGeometryIntersect) != null ? _sigmet$startGeometry : sigmet.startGeometry;
4860
+ var tacGeometryEnd = (_sigmet$endGeometryIn = sigmet.endGeometryIntersect) != null ? _sigmet$endGeometryIn : sigmet.endGeometry;
4817
4861
  var areas = [];
4818
4862
  if (sigmet.startGeometry) {
4819
4863
  areas.push({
@@ -5729,7 +5773,7 @@ var AreaList = /*#__PURE__*/React__default.memo(function (_ref2) {
5729
5773
  var _useFilterChipSelect = useFilterChipSelect({
5730
5774
  selectedIds: selected,
5731
5775
  assignedIds: areas.map(function (area) {
5732
- return area.id;
5776
+ return area.districtName;
5733
5777
  }),
5734
5778
  onSelectMultiple: onSelectMultipleAreas,
5735
5779
  onToggleSelect: onToggleSelectArea
@@ -5751,20 +5795,20 @@ var AreaList = /*#__PURE__*/React__default.memo(function (_ref2) {
5751
5795
  }
5752
5796
  },
5753
5797
  children: areas.map(function (area) {
5754
- var isDisabled = disabled.includes(area.id);
5755
- var isSelected = !isDisabled && selected.includes(area.id);
5798
+ var isDisabled = disabled.includes(area.districtName);
5799
+ var isSelected = !isDisabled && selected.includes(area.districtName);
5756
5800
  return jsx(FilterChip, {
5757
- id: area.id,
5758
- label: area.label,
5801
+ id: area.districtName,
5802
+ label: area.districtName,
5759
5803
  isSelected: isSelected,
5760
5804
  isDisabled: isDisabled,
5761
5805
  onClick: function onClick(_ref, event) {
5762
5806
  if (!isReadOnly) {
5763
- handleChipClick == null || handleChipClick(area.id, event);
5807
+ handleChipClick == null || handleChipClick(area.districtName, event);
5764
5808
  }
5765
5809
  },
5766
5810
  size: "medium"
5767
- }, area.id);
5811
+ }, area.districtName);
5768
5812
  })
5769
5813
  });
5770
5814
  });
@@ -5838,7 +5882,7 @@ var AssignedAreas = function AssignedAreas(_ref) {
5838
5882
  t = _useWarningsTranslati.t;
5839
5883
  var assignedAreaIds = React__default.useMemo(function () {
5840
5884
  return new Set(assignedAreas.map(function (area) {
5841
- return area.id;
5885
+ return area.districtName;
5842
5886
  }));
5843
5887
  }, [assignedAreas]);
5844
5888
  // can add the selected areas when they don't appear in the assigned area list
@@ -5895,21 +5939,21 @@ var AssignedAreas = function AssignedAreas(_ref) {
5895
5939
  pointerEvents: !isReadOnly ? 'auto' : 'none'
5896
5940
  },
5897
5941
  children: assignedAreas.map(function (area) {
5898
- var isSelected = selectedAreaIds.includes(area.id);
5942
+ var isSelected = selectedAreaIds.includes(area.districtName);
5899
5943
  return jsx(FilterChip, {
5900
5944
  size: "small",
5901
- id: area.id,
5902
- label: area.label,
5945
+ id: area.districtName,
5946
+ label: area.districtName,
5903
5947
  isSelected: isSelected,
5904
5948
  onClick: function onClick(_chipRef, event) {
5905
5949
  if (!isReadOnly) {
5906
- handleChipClick(area.id, event);
5950
+ handleChipClick(area.districtName, event);
5907
5951
  }
5908
5952
  },
5909
5953
  onClickIcon: isSelected && !isReadOnly ? function () {
5910
- onDeleteClick(area.id);
5954
+ onDeleteClick(area.districtName);
5911
5955
  } : undefined
5912
- }, area.id);
5956
+ }, area.districtName);
5913
5957
  })
5914
5958
  }), !isReadOnly && jsx(AddButton, {
5915
5959
  show: canAddSelectedAreas,
@@ -5951,7 +5995,9 @@ var WarningListSelect = /*#__PURE__*/React__default.memo(function (_ref) {
5951
5995
  gridArea = _ref.gridArea,
5952
5996
  additionalStyling = _ref.additionalStyling,
5953
5997
  _ref$isReadOnly = _ref.isReadOnly,
5954
- isReadOnly = _ref$isReadOnly === void 0 ? false : _ref$isReadOnly;
5998
+ isReadOnly = _ref$isReadOnly === void 0 ? false : _ref$isReadOnly,
5999
+ _ref$displayEmpty = _ref.displayEmpty,
6000
+ displayEmpty = _ref$displayEmpty === void 0 ? false : _ref$displayEmpty;
5955
6001
  var currentIndex = options.findIndex(function (option) {
5956
6002
  return option.value === value;
5957
6003
  });
@@ -5969,6 +6015,7 @@ var WarningListSelect = /*#__PURE__*/React__default.memo(function (_ref) {
5969
6015
  isEnabled: !isReadOnly,
5970
6016
  disabled: isReadOnly,
5971
6017
  value: value != null ? value : '',
6018
+ displayEmpty: displayEmpty,
5972
6019
  SelectDisplayProps: {
5973
6020
  'aria-label': label
5974
6021
  },
@@ -6124,126 +6171,6 @@ var WindForceSelect = function WindForceSelect(_ref) {
6124
6171
  });
6125
6172
  };
6126
6173
 
6127
- var windDirections = [{
6128
- value: 'NORTH',
6129
- label: function label(t) {
6130
- return t('maritime-direction-n');
6131
- }
6132
- }, {
6133
- value: 'NORTH_TO_NORTHEAST',
6134
- label: function label(t) {
6135
- return t('maritime-direction-nne');
6136
- }
6137
- }, {
6138
- value: 'NORTHEAST',
6139
- label: function label(t) {
6140
- return t('maritime-direction-ne');
6141
- }
6142
- }, {
6143
- value: 'NORTHEAST_TO_NORTH',
6144
- label: function label(t) {
6145
- return t('maritime-direction-nen');
6146
- }
6147
- }, {
6148
- value: 'EAST',
6149
- label: function label(t) {
6150
- return t('maritime-direction-e');
6151
- }
6152
- }, {
6153
- value: 'EAST_TO_SOUTHEAST',
6154
- label: function label(t) {
6155
- return t('maritime-direction-ese');
6156
- }
6157
- }, {
6158
- value: 'SOUTHEAST',
6159
- label: function label(t) {
6160
- return t('maritime-direction-se');
6161
- }
6162
- }, {
6163
- value: 'SOUTHEAST_TO_SOUTH',
6164
- label: function label(t) {
6165
- return t('maritime-direction-ses');
6166
- }
6167
- }, {
6168
- value: 'SOUTH',
6169
- label: function label(t) {
6170
- return t('maritime-direction-s');
6171
- }
6172
- }, {
6173
- value: 'SOUTH_TO_SOUTHWEST',
6174
- label: function label(t) {
6175
- return t('maritime-direction-ssw');
6176
- }
6177
- }, {
6178
- value: 'SOUTHWEST',
6179
- label: function label(t) {
6180
- return t('maritime-direction-sw');
6181
- }
6182
- }, {
6183
- value: 'SOUTHWEST_TO_WEST',
6184
- label: function label(t) {
6185
- return t('maritime-direction-sww');
6186
- }
6187
- }, {
6188
- value: 'WEST',
6189
- label: function label(t) {
6190
- return t('maritime-direction-w');
6191
- }
6192
- }, {
6193
- value: 'WEST_TO_NORTHWEST',
6194
- label: function label(t) {
6195
- return t('maritime-direction-wnw');
6196
- }
6197
- }, {
6198
- value: 'NORTHWEST',
6199
- label: function label(t) {
6200
- return t('maritime-direction-nw');
6201
- }
6202
- }, {
6203
- value: 'NORTHWEST_TO_NORTH',
6204
- label: function label(t) {
6205
- return t('maritime-direction-nwn');
6206
- }
6207
- }];
6208
- var change = [{
6209
- value: 'NO_CHANGE',
6210
- label: function label(t) {
6211
- return t('maritime-no-change');
6212
- }
6213
- }, {
6214
- value: 'BACKING',
6215
- label: function label(t) {
6216
- return t('maritime-backing');
6217
- }
6218
- }, {
6219
- value: 'VEERING',
6220
- label: function label(t) {
6221
- return t('maritime-veering');
6222
- }
6223
- }];
6224
- var windForce = [{
6225
- level: WindForceLevel.extreme,
6226
- value: '12'
6227
- }, {
6228
- level: WindForceLevel.extreme,
6229
- value: '11'
6230
- }, {
6231
- level: WindForceLevel.extreme,
6232
- value: '10'
6233
- }, {
6234
- level: WindForceLevel.severe,
6235
- value: '9'
6236
- }, {
6237
- level: WindForceLevel.severe,
6238
- value: '8'
6239
- }, {
6240
- level: WindForceLevel.moderate,
6241
- value: '7'
6242
- }, {
6243
- level: WindForceLevel.moderate,
6244
- value: '6'
6245
- }];
6246
-
6247
6174
  var WarningListDragHandle = function WarningListDragHandle() {
6248
6175
  return jsx(CustomIconButton, {
6249
6176
  className: "handle",
@@ -6260,6 +6187,38 @@ var WarningListDragHandle = function WarningListDragHandle() {
6260
6187
  });
6261
6188
  };
6262
6189
 
6190
+ var getWindDirectionsFromConfig = function getWindDirectionsFromConfig(directionConfig, t) {
6191
+ return directionConfig.map(function (direction) {
6192
+ return {
6193
+ value: direction.value,
6194
+ label: t("maritime-direction-" + direction.value) || direction.label
6195
+ };
6196
+ });
6197
+ };
6198
+ var getWindForceFromConfig = function getWindForceFromConfig(forceConfig) {
6199
+ if (forceConfig.maritimeLevelsSummer) {
6200
+ return forceConfig.maritimeLevelsSummer.map(function (force) {
6201
+ return {
6202
+ value: force.windForce,
6203
+ level: force.level
6204
+ };
6205
+ });
6206
+ }
6207
+ return forceConfig.maritimeLevelsWinter.map(function (force) {
6208
+ return {
6209
+ value: force.windForce,
6210
+ level: force.level
6211
+ };
6212
+ });
6213
+ };
6214
+ var getChangeTypeFromConfig = function getChangeTypeFromConfig(changeConfig, t) {
6215
+ return changeConfig.map(function (change) {
6216
+ return {
6217
+ value: change.key,
6218
+ label: t("maritime-change-" + change.key) || change.label
6219
+ };
6220
+ });
6221
+ };
6263
6222
  var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6264
6223
  var warning = _ref.warning,
6265
6224
  areas = _ref.areas,
@@ -6272,10 +6231,11 @@ var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6272
6231
  onRemoveArea = _ref.onRemoveArea,
6273
6232
  isReadOnly = _ref.isReadOnly,
6274
6233
  _ref$shouldShowDistri = _ref.shouldShowDistricts,
6275
- shouldShowDistricts = _ref$shouldShowDistri === void 0 ? false : _ref$shouldShowDistri;
6234
+ shouldShowDistricts = _ref$shouldShowDistri === void 0 ? false : _ref$shouldShowDistri,
6235
+ maritimeConfig = _ref.maritimeConfig;
6276
6236
  var areasById = React__default.useMemo(function () {
6277
6237
  return new Map(areas.map(function (area) {
6278
- return [area.id, area];
6238
+ return [area.districtName, area];
6279
6239
  }));
6280
6240
  }, [areas]);
6281
6241
  var assignedAreas = React__default.useMemo(function () {
@@ -6316,19 +6276,20 @@ var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6316
6276
  onAddClick(warning.id);
6317
6277
  }, [warning.id, onAddClick]);
6318
6278
  var shouldDisableDirTo = warning.changeType === 'NO_CHANGE' || isReadOnly;
6279
+ var changeOptions = getChangeTypeFromConfig(maritimeConfig.changeType, t);
6319
6280
  return jsxs(StyledItem, {
6320
6281
  "data-testid": "maritime-warning",
6321
6282
  children: [!isReadOnly && jsx(WarningListDragHandle, {}), jsx(WarningListSelect, {
6322
6283
  gridArea: "dirFrom",
6323
6284
  label: t('maritime-header-direction-from'),
6324
- options: windDirections,
6285
+ options: getWindDirectionsFromConfig(maritimeConfig.windDirectionDefinition, t),
6325
6286
  onChange: handleChangeFromDirection,
6326
6287
  value: warning.windDirectionFrom,
6327
6288
  isReadOnly: isReadOnly
6328
6289
  }), jsx(WindForceSelect, {
6329
6290
  gridArea: "windForce",
6330
6291
  value: warning.windForce,
6331
- options: windForce,
6292
+ options: getWindForceFromConfig(maritimeConfig.maritimeLevelDefinition),
6332
6293
  onChange: handleChangeWindForce,
6333
6294
  isReadOnly: isReadOnly
6334
6295
  }), jsx(AssignedAreas, {
@@ -6343,14 +6304,31 @@ var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6343
6304
  }), jsx(WarningListSelect, {
6344
6305
  gridArea: "changeType",
6345
6306
  label: t('maritime-header-change'),
6346
- options: change,
6307
+ options: changeOptions,
6347
6308
  onChange: handleChangeWindChangeType,
6348
6309
  value: warning.changeType,
6349
- isReadOnly: isReadOnly
6310
+ isReadOnly: isReadOnly,
6311
+ renderValue: function renderValue(value) {
6312
+ if (value === '') {
6313
+ return jsx(Typography, {
6314
+ variant: "caption",
6315
+ color: "textSecondary",
6316
+ sx: {
6317
+ alignSelf: 'center'
6318
+ },
6319
+ children: t('maritime-no-change-selected')
6320
+ });
6321
+ }
6322
+ var option = changeOptions.find(function (item) {
6323
+ return item.value === value;
6324
+ });
6325
+ return typeof (option == null ? void 0 : option.label) === 'function' ? option.label(t) : option == null ? void 0 : option.label;
6326
+ },
6327
+ displayEmpty: true
6350
6328
  }), jsx(WarningListSelect, {
6351
6329
  gridArea: "dirTo",
6352
6330
  label: t('maritime-header-direction-to'),
6353
- options: windDirections,
6331
+ options: getWindDirectionsFromConfig(maritimeConfig.windDirectionDefinition, t),
6354
6332
  onChange: handleChangeToDirection,
6355
6333
  value: warning.windDirectionTo,
6356
6334
  isReadOnly: shouldDisableDirTo
@@ -6408,7 +6386,8 @@ var WarningList = function WarningList(_ref) {
6408
6386
  onMoveWarning = _ref.onMoveWarning,
6409
6387
  isReadOnly = _ref.isReadOnly,
6410
6388
  _ref$shouldShowDistri = _ref.shouldShowDistricts,
6411
- shouldShowDistricts = _ref$shouldShowDistri === void 0 ? false : _ref$shouldShowDistri;
6389
+ shouldShowDistricts = _ref$shouldShowDistri === void 0 ? false : _ref$shouldShowDistri,
6390
+ maritimeConfig = _ref.maritimeConfig;
6412
6391
  var _useWarningsTranslati = useWarningsTranslation(),
6413
6392
  t = _useWarningsTranslati.t;
6414
6393
  var onSort = React__default.useCallback(function (event) {
@@ -6421,7 +6400,7 @@ var WarningList = function WarningList(_ref) {
6421
6400
  flexDirection: 'column',
6422
6401
  minHeight: 0,
6423
6402
  marginBottom: 1,
6424
- '--grid-columns': '30px 150px 60px 2fr 100px 150px 1fr'
6403
+ '--grid-columns': '30px 150px 60px 2fr 150px 150px 1fr'
6425
6404
  },
6426
6405
  children: [jsxs(Box, {
6427
6406
  sx: (_sx = {
@@ -6469,7 +6448,8 @@ var WarningList = function WarningList(_ref) {
6469
6448
  onRemove: onRemoveWarning,
6470
6449
  onChange: onChangeWarning,
6471
6450
  onRemoveArea: onRemoveArea,
6472
- shouldShowDistricts: shouldShowDistricts
6451
+ shouldShowDistricts: shouldShowDistricts,
6452
+ maritimeConfig: maritimeConfig
6473
6453
  }, warning.id);
6474
6454
  })
6475
6455
  })]
@@ -6667,6 +6647,12 @@ function reducer(state, action) {
6667
6647
  selectedAreaIds: []
6668
6648
  });
6669
6649
  }
6650
+ case 'submitWarnings':
6651
+ {
6652
+ return Object.assign({}, state, {
6653
+ modified: false
6654
+ });
6655
+ }
6670
6656
  default:
6671
6657
  {
6672
6658
  return state;
@@ -6680,36 +6666,46 @@ function useMaritimeWarningsFormState() {
6680
6666
  function useConfirmRetractDialog(_ref) {
6681
6667
  var areas = _ref.areas,
6682
6668
  warnings = _ref.warnings,
6669
+ maritimeConfig = _ref.maritimeConfig,
6683
6670
  onRemoveWarning = _ref.onRemoveWarning;
6684
6671
  var confirmDialog = useConfirmationDialog();
6685
6672
  var _useWarningsTranslati = useWarningsTranslation(),
6686
6673
  t = _useWarningsTranslati.t;
6687
- var getLabelFromOption = React__default.useCallback(function (options, value) {
6688
- var option = options.find(function (option) {
6689
- return option.value === value;
6674
+ var getLabelFromWindDirectionConfig = React__default.useCallback(function (directionConfig, value) {
6675
+ var option = directionConfig.find(function (direction) {
6676
+ return direction.value === value;
6690
6677
  });
6691
6678
  if (!option) {
6692
6679
  return '';
6693
6680
  }
6694
- return typeof option.label === 'function' ? option.label(t) : option.label;
6681
+ return t("maritime-direction-" + option.value);
6682
+ }, [t]);
6683
+ var getLabelFromChangeConfig = React__default.useCallback(function (changeConfig, value) {
6684
+ var option = changeConfig.find(function (change) {
6685
+ return change.key === value;
6686
+ });
6687
+ if (!option) {
6688
+ return '';
6689
+ }
6690
+ return t("maritime-change-" + option.key);
6695
6691
  }, [t]);
6696
6692
  var getWarningDescription = React__default.useCallback(function (warning) {
6697
6693
  if (!isPublishedWarning(warning)) {
6698
6694
  return t('maritime-retract-dialog-empty-warning-description');
6699
6695
  }
6700
- var windDirectionFromLabel = getLabelFromOption(windDirections, warning.windDirectionFrom);
6696
+ var windDirectionFromLabel = getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionFrom);
6701
6697
  var areasById = new Map(areas.map(function (area) {
6702
- return [area.id, area];
6698
+ return [area.districtName, area];
6703
6699
  }));
6704
6700
  var areaLabels = warning.assignedAreaIds.map(function (areaId) {
6705
- return areasById.get(areaId).label;
6701
+ return areasById.get(areaId).districtName;
6706
6702
  });
6707
- var changeToLabel = warning.changeType === 'NO_CHANGE' ? t('maritime-retract-dialog-no-change') : getLabelFromOption(change, warning.changeType) + " " + getLabelFromOption(windDirections, warning.windDirectionTo);
6703
+ var changeToLabel = warning.changeType === 'NO_CHANGE' ? t('maritime-retract-dialog-no-change') : getLabelFromChangeConfig(maritimeConfig.changeType, warning.changeType) + " " + getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionTo);
6708
6704
  var warningDescription = [windDirectionFromLabel + " " + t('maritime-windforce', {
6709
6705
  value: warning.windForce
6710
6706
  })].concat(areaLabels, [changeToLabel]).join(', ');
6711
6707
  return warningDescription + ". " + t('maritime-retract-dialog-description-suffix');
6712
- }, [areas, t, getLabelFromOption]);
6708
+ }, [getLabelFromWindDirectionConfig, maritimeConfig.windDirectionDefinition, maritimeConfig.changeType, areas, t, getLabelFromChangeConfig]);
6713
6709
  return {
6714
6710
  onRemoveWarningWithConfirmation: React__default.useCallback(/*#__PURE__*/function () {
6715
6711
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(id) {
@@ -6798,19 +6794,13 @@ var isWarningsValid = function isWarningsValid(warnings) {
6798
6794
  return !isWarningEmpty(warning) && isWarningValid(warning);
6799
6795
  });
6800
6796
  };
6801
- // FIXME: should be based on the config from BE
6802
- var getLevelFromWindForce = function getLevelFromWindForce(windForce) {
6803
- var force = parseInt(windForce, 10);
6804
- if (isNaN(force)) {
6805
- return '';
6806
- }
6807
- if (force < 8) {
6808
- return 'moderate';
6809
- }
6810
- if (force < 10) {
6811
- return 'severe';
6812
- }
6813
- return 'extreme';
6797
+ var getLevelFromWindForce = function getLevelFromWindForce(maritimeConfig, windForce) {
6798
+ var _maritimeConfig$marit;
6799
+ var period = maritimeConfig.maritimeLevelDefinition.maritimeLevelsSummer ? 'maritimeLevelsSummer' : 'maritimeLevelsWinter';
6800
+ var levelInfo = (_maritimeConfig$marit = maritimeConfig.maritimeLevelDefinition) == null ? void 0 : _maritimeConfig$marit[period].find(function (level) {
6801
+ return (level == null ? void 0 : level.windForce) === windForce;
6802
+ });
6803
+ return (levelInfo == null ? void 0 : levelInfo.level) || 'extreme';
6814
6804
  };
6815
6805
  var getType = function getType(domain) {
6816
6806
  switch (domain) {
@@ -6821,8 +6811,20 @@ var getType = function getType(domain) {
6821
6811
  return 'maritimeWarningNorthSea';
6822
6812
  }
6823
6813
  };
6824
- var mapItemsToMaritimeWarnings = function mapItemsToMaritimeWarnings(warnings, domain, editor) {
6814
+ var mapItemsToMaritimeWarnings = function mapItemsToMaritimeWarnings(warnings, domain, maritimeConfig, editor) {
6825
6815
  var type = getType(domain);
6816
+ if (warnings.length === 1 && warnings[0].assignedAreaIds.length === 0) {
6817
+ // 1 warning without any areas means cancel/withdraw all warnings
6818
+ return [{
6819
+ type: type,
6820
+ editor: editor,
6821
+ status: PublicWarningStatus.PUBLISHED,
6822
+ warningDetail: {
6823
+ areas: [],
6824
+ domain: type
6825
+ }
6826
+ }];
6827
+ }
6826
6828
  return warnings.map(function (warning) {
6827
6829
  return {
6828
6830
  type: type,
@@ -6832,12 +6834,15 @@ var mapItemsToMaritimeWarnings = function mapItemsToMaritimeWarnings(warnings, d
6832
6834
  phenomenon: 'wind',
6833
6835
  validFrom: new Date().toISOString(),
6834
6836
  validUntil: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
6835
- level: getLevelFromWindForce(warning.windForce || ''),
6837
+ level: getLevelFromWindForce(maritimeConfig, warning.windForce || ''),
6836
6838
  probability: 100,
6837
6839
  areas: warning.assignedAreaIds.map(function (areaId) {
6840
+ var areaDetails = maritimeConfig.districtList[domain].find(function (district) {
6841
+ return district.districtName === areaId;
6842
+ });
6838
6843
  return {
6839
6844
  objectName: areaId,
6840
- geoJSON: {
6845
+ geoJSON: (areaDetails == null ? void 0 : areaDetails.geoJSON) || {
6841
6846
  type: 'FeatureCollection',
6842
6847
  features: []
6843
6848
  }
@@ -6845,7 +6850,7 @@ var mapItemsToMaritimeWarnings = function mapItemsToMaritimeWarnings(warnings, d
6845
6850
  }),
6846
6851
  windDirectionFrom: warning.windDirectionFrom,
6847
6852
  windForce: warning.windForce,
6848
- changeType: warning.changeType,
6853
+ changeType: warning.changeType || 'NO_CHANGE',
6849
6854
  windDirectionTo: warning.windDirectionTo,
6850
6855
  descriptionOriginal: '',
6851
6856
  descriptionTranslation: '',
@@ -6865,7 +6870,9 @@ var mapMaritimeWarningsToItems = function mapMaritimeWarningsToItems(warnings) {
6865
6870
  windDirectionFrom: warning.warningDetail.windDirectionFrom,
6866
6871
  windDirectionTo: warning.warningDetail.windDirectionTo,
6867
6872
  windForce: warning.warningDetail.windForce,
6868
- changeType: warning.warningDetail.changeType
6873
+ changeType: warning.warningDetail.changeType,
6874
+ validFrom: warning.warningDetail.validFrom,
6875
+ validUntil: warning.warningDetail.validUntil
6869
6876
  };
6870
6877
  });
6871
6878
  };
@@ -6886,6 +6893,11 @@ var MaritimeWarningAvatar = function MaritimeWarningAvatar(_ref) {
6886
6893
  });
6887
6894
  };
6888
6895
 
6896
+ var getWarningsValidity = function getWarningsValidity(t, warnings) {
6897
+ var validFrom = warnings.length > 0 && warnings[0].validFrom ? dateUtils.dateToString(dateUtils.createDate(warnings[0].validFrom), dateUtils.DATE_FORMAT_NAME_OF_DAY_MONTH) : '';
6898
+ var validUntil = warnings.length > 0 && warnings[0].validUntil ? dateUtils.dateToString(dateUtils.createDate(warnings[0].validUntil), dateUtils.DATE_FORMAT_NAME_OF_DAY_MONTH) : '';
6899
+ return validFrom && validUntil ? "" + t('maritime-warning-validfrom') + validFrom + " - " + t('maritime-warning-validuntil') + validUntil : '';
6900
+ };
6889
6901
  var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6890
6902
  var _sx, _sx2, _sx3, _sx4;
6891
6903
  var areas = _ref.areas,
@@ -6904,9 +6916,14 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6904
6916
  onMoveWarning = _ref.onMoveWarning,
6905
6917
  onToggleReadOnly = _ref.onToggleReadOnly,
6906
6918
  isReadOnly = _ref.isReadOnly,
6919
+ shouldHideEditorToggle = _ref.shouldHideEditorToggle,
6907
6920
  _ref$shouldShowDistri = _ref.shouldShowDistricts,
6908
6921
  shouldShowDistricts = _ref$shouldShowDistri === void 0 ? false : _ref$shouldShowDistri,
6909
- editor = _ref.editor;
6922
+ editor = _ref.editor,
6923
+ error = _ref.error,
6924
+ maritimeConfig = _ref.maritimeConfig,
6925
+ _ref$lastUpdatedTime = _ref.lastUpdatedTime,
6926
+ lastUpdatedTime = _ref$lastUpdatedTime === void 0 ? '' : _ref$lastUpdatedTime;
6910
6927
  var _useWarningsTranslati = useWarningsTranslation(),
6911
6928
  t = _useWarningsTranslati.t;
6912
6929
  var showConfirmDialog = useConfirmationDialog();
@@ -6916,6 +6933,7 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6916
6933
  var _useConfirmRetractDia = useConfirmRetractDialog({
6917
6934
  areas: areas,
6918
6935
  warnings: warnings,
6936
+ maritimeConfig: maritimeConfig,
6919
6937
  onRemoveWarning: onRemoveWarning
6920
6938
  }),
6921
6939
  onRemoveWarningWithConfirmation = _useConfirmRetractDia.onRemoveWarningWithConfirmation;
@@ -6970,6 +6988,7 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6970
6988
  return _ref3.apply(this, arguments);
6971
6989
  };
6972
6990
  }();
6991
+ var validTimes = getWarningsValidity(t, warnings);
6973
6992
  return jsxs(Box, {
6974
6993
  sx: (_sx = {
6975
6994
  display: 'flex',
@@ -6986,26 +7005,61 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6986
7005
  }, _sx["@container maritime (min-width: " + breakpoints.tablet + "px)"] = {
6987
7006
  padding: 3
6988
7007
  }, _sx),
6989
- children: [jsxs(Box, {
7008
+ children: [error && jsx(AlertBanner, {
7009
+ title: error.title,
7010
+ severity: error.severity,
7011
+ shouldClose: true
7012
+ }), jsxs(Box, {
6990
7013
  sx: (_sx2 = {
6991
7014
  display: 'flex',
7015
+ flexWrap: 'wrap',
6992
7016
  gap: 1,
6993
- alignItems: 'center'
7017
+ alignItems: 'center',
7018
+ width: '100%'
6994
7019
  }, _sx2["@container maritime (min-width: " + breakpoints.tablet + "px)"] = {
6995
- justifyContent: 'flex-end'
7020
+ justifyContent: 'space-between'
6996
7021
  }, _sx2),
6997
- children: [jsx(SwitchButton, {
6998
- inActiveLabel: t('warning-editor-user-viewer'),
6999
- activeLabel: t('warning-editor-user-editor'),
7000
- checked: !isReadOnly,
7001
- onChange: onSwitchMode
7022
+ children: [jsx(Typography, {
7023
+ sx: {
7024
+ color: 'geowebColors.captions.captionStatus.rgba',
7025
+ fontSize: '10px',
7026
+ lineHeight: '1.6',
7027
+ letterSpacing: '0.33px',
7028
+ minWidth: '300px'
7029
+ },
7030
+ children: validTimes
7002
7031
  }), jsx(Box, {
7003
7032
  sx: {
7004
- width: '16px',
7005
- marginLeft: 1
7033
+ display: 'flex',
7034
+ flexWrap: 'wrap',
7035
+ gap: 1,
7036
+ alignItems: 'center',
7037
+ height: '38px'
7006
7038
  },
7007
- children: editor && jsx(MaritimeWarningAvatar, {
7008
- editor: editor
7039
+ children: !shouldHideEditorToggle && jsxs(Fragment, {
7040
+ children: [jsx(SwitchButton, {
7041
+ inActiveLabel: t('warning-editor-user-viewer'),
7042
+ activeLabel: t('warning-editor-user-editor'),
7043
+ checked: !isReadOnly,
7044
+ onChange: onSwitchMode
7045
+ }), jsx(Box, {
7046
+ sx: {
7047
+ width: '16px',
7048
+ marginLeft: 1
7049
+ },
7050
+ children: editor && jsx(MaritimeWarningAvatar, {
7051
+ editor: editor
7052
+ })
7053
+ }), lastUpdatedTime && jsx(Box, {
7054
+ sx: {
7055
+ "float": 'left',
7056
+ paddingTop: 0.5
7057
+ },
7058
+ children: jsx(LastUpdateTime, {
7059
+ lastUpdateTime: lastUpdatedTime,
7060
+ showRefreshButton: false
7061
+ })
7062
+ })]
7009
7063
  })
7010
7064
  })]
7011
7065
  }), jsx(AreaList, {
@@ -7027,7 +7081,8 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
7027
7081
  onRemoveArea: onRemoveArea,
7028
7082
  onMoveWarning: onMoveWarning,
7029
7083
  shouldShowDistricts: shouldShowDistricts,
7030
- isReadOnly: isReadOnly
7084
+ isReadOnly: isReadOnly,
7085
+ maritimeConfig: maritimeConfig
7031
7086
  }), !isReadOnly && jsxs(Button, {
7032
7087
  onClick: onAddWarning,
7033
7088
  variant: "tertiary",
@@ -7075,82 +7130,62 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
7075
7130
  });
7076
7131
  };
7077
7132
 
7078
- var areasByDomain = {
7079
- northSeaDistricts: [{
7080
- id: 'DOVER',
7081
- label: 'Dover'
7082
- }, {
7083
- id: 'THAMES',
7084
- label: 'Thames'
7085
- }, {
7086
- id: 'HUMBER',
7087
- label: 'Humber'
7088
- }, {
7089
- id: 'DOGGER',
7090
- label: 'Dogger'
7091
- }, {
7092
- id: 'GERMAN_BIGHT',
7093
- label: 'German Bight'
7094
- }],
7095
- coastalWaters: [{
7096
- id: 'VLISSINGEN',
7097
- label: 'Vlissingen'
7098
- }, {
7099
- id: 'ZIERIKZEE',
7100
- label: 'Zierikzee'
7101
- }, {
7102
- id: 'HOEK_VAN_HOLLAND',
7103
- label: 'Hoek van Holland'
7104
- }, {
7105
- id: 'IJMUIDEN',
7106
- label: 'IJmuiden'
7107
- }, {
7108
- id: 'TEXEL',
7109
- label: 'Texel'
7110
- }, {
7111
- id: 'HARLINGEN',
7112
- label: 'Harlingen'
7113
- }, {
7114
- id: 'ROTTUM',
7115
- label: 'Rottum'
7116
- }, {
7117
- id: 'DELFZIJL',
7118
- label: 'Delfzijl'
7119
- }, {
7120
- id: 'IJSSELMEER',
7121
- label: 'IJsselmeer'
7122
- }, {
7123
- id: 'MARKERMEER',
7124
- label: 'Markermeer'
7125
- }]
7126
- };
7127
-
7128
7133
  var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7129
7134
  var domain = _ref.domain,
7130
7135
  onPreventCloseView = _ref.onPreventCloseView,
7131
7136
  onModifyForm = _ref.onModifyForm;
7132
- var areas = areasByDomain[domain];
7133
- var shouldShowDistricts = domain === 'northSeaDistricts';
7134
7137
  var _useWarningsTranslati = useWarningsTranslation(),
7135
7138
  t = _useWarningsTranslati.t;
7136
7139
  var _useAuthenticationCon = useAuthenticationContext$1(),
7137
- auth = _useAuthenticationCon.auth;
7140
+ auth = _useAuthenticationCon.auth,
7141
+ isLoggedIn = _useAuthenticationCon.isLoggedIn;
7142
+ var confirmDialog = useConfirmationDialog();
7143
+ var _useState = useState(),
7144
+ error = _useState[0],
7145
+ setError = _useState[1];
7146
+ var domainLabel = React__default.useMemo(function () {
7147
+ return domain === 'coastalWaters' ? t('maritime-domain-coastal') : t('maritime-domain-northsea');
7148
+ }, [domain, t]);
7149
+ var _useMaritimeWarningsC = useMaritimeWarningsConfig(),
7150
+ maritimeConfig = _useMaritimeWarningsC.data,
7151
+ isFetchingConfig = _useMaritimeWarningsC.isFetching,
7152
+ configError = _useMaritimeWarningsC.error,
7153
+ refetchConfig = _useMaritimeWarningsC.refetch;
7154
+ var _usePublicWarnings = usePublicWarnings(),
7155
+ data = _usePublicWarnings.data,
7156
+ isFetchingWarnings = _usePublicWarnings.isFetching,
7157
+ refetchWarnings = _usePublicWarnings.refetch,
7158
+ dataUpdatedAt = _usePublicWarnings.dataUpdatedAt;
7159
+ var _usePostMaritimeWarni = usePostMaritimeWarnings(),
7160
+ postWarnings = _usePostMaritimeWarni.mutate,
7161
+ publishError = _usePostMaritimeWarni.error;
7162
+ var _useMutateMaritimeWar = useMutateMaritimeWarningsEditor(),
7163
+ mutateEditor = _useMutateMaritimeWar.mutate,
7164
+ editorError = _useMutateMaritimeWar.error;
7165
+ var _useState2 = useState(isFetchingWarnings),
7166
+ hasFetched = _useState2[0],
7167
+ setHasFetched = _useState2[1];
7168
+ React__default.useEffect(function () {
7169
+ if (isFetchingWarnings) {
7170
+ setHasFetched(true);
7171
+ }
7172
+ }, [isFetchingWarnings]);
7173
+ var lastUpdateTime = dateUtils.dateToString(new Date(dataUpdatedAt), dateUtils.DATE_FORMAT_HOURS);
7174
+ var areas = maritimeConfig == null ? void 0 : maritimeConfig.districtList[domain];
7175
+ var shouldShowDistricts = domain === 'northSeaDistricts';
7138
7176
  var maritimeWarningsType = getType(domain);
7139
- // TODO this should be retrieved (and updated) from the api using a react-query
7140
- var _React$useState = React__default.useState(auth == null ? void 0 : auth.username),
7141
- editor = _React$useState[0],
7142
- setEditor = _React$useState[1];
7143
- var isReadOnly = editor !== undefined && editor !== (auth == null ? void 0 : auth.username);
7144
7177
  var _useMaritimeWarningsF = useMaritimeWarningsFormState(),
7145
7178
  state = _useMaritimeWarningsF[0],
7146
7179
  dispatch = _useMaritimeWarningsF[1];
7147
- var _usePublicWarnings = usePublicWarnings(),
7148
- data = _usePublicWarnings.data;
7149
7180
  var warningsFromApi = React__default.useMemo(function () {
7150
- return (data == null ? void 0 : data.filter(function (warning) {
7151
- return warning.warningDetail.domain === maritimeWarningsType && warning.status === 'PUBLISHED';
7152
- })) || [];
7181
+ return ((data == null ? void 0 : data.filter(function (warning) {
7182
+ return warning.type === maritimeWarningsType && warning.status === 'PUBLISHED';
7183
+ })) || []).reverse();
7153
7184
  }, [data, maritimeWarningsType]);
7185
+ var isNew = warningsFromApi.length === 0;
7186
+ var editor = warningsFromApi && warningsFromApi.length > 0 ? warningsFromApi[0].editor : undefined;
7187
+ var previousEditor = usePrevious(editor);
7188
+ var isReadOnly = !isNew && editor !== (auth == null ? void 0 : auth.username);
7154
7189
  var warningItemsFromApi = React__default.useMemo(function () {
7155
7190
  return mapMaritimeWarningsToItems(warningsFromApi || []);
7156
7191
  }, [warningsFromApi]);
@@ -7203,11 +7238,7 @@ var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7203
7238
  id: id
7204
7239
  });
7205
7240
  });
7206
- showSnackbar({
7207
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
7208
- key: 'maritime-retract-success'
7209
- });
7210
- }, [dispatch, showSnackbar]);
7241
+ }, [dispatch]);
7211
7242
  var onAddWarning = React__default.useCallback(function () {
7212
7243
  React__default.startTransition(function () {
7213
7244
  dispatch({
@@ -7238,11 +7269,7 @@ var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7238
7269
  type: 'clearWarnings'
7239
7270
  });
7240
7271
  });
7241
- showSnackbar({
7242
- type: snackbarTypes.SnackbarMessageType.TRANSLATABLE_MESSAGE,
7243
- key: 'maritime-clear-success'
7244
- });
7245
- }, [dispatch, showSnackbar]);
7272
+ }, [dispatch]);
7246
7273
  var onMoveWarning = React__default.useCallback(function (oldIndex, newIndex) {
7247
7274
  dispatch({
7248
7275
  type: 'moveWarning',
@@ -7250,57 +7277,169 @@ var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7250
7277
  newIndex: newIndex
7251
7278
  });
7252
7279
  }, [dispatch]);
7253
- var _usePostMaritimeWarni = usePostMaritimeWarning(),
7254
- postWarning = _usePostMaritimeWarni.mutate;
7255
- var onSubmit = React__default.useCallback(function () {
7256
- dispatch({
7257
- type: 'mergeWarnings'
7258
- });
7259
- var nextState = reducer(state, {
7260
- type: 'mergeWarnings'
7261
- });
7262
- var maritimeWarnings = mapItemsToMaritimeWarnings(nextState.warnings, domain, auth == null ? void 0 : auth.username);
7263
- maritimeWarnings.forEach(function (warning) {
7264
- postWarning(warning);
7265
- });
7266
- }, [dispatch, state, domain, auth == null ? void 0 : auth.username, postWarning]);
7280
+ var onSubmit = React__default.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
7281
+ var nextState, maritimeWarnings;
7282
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
7283
+ while (1) switch (_context.prev = _context.next) {
7284
+ case 0:
7285
+ dispatch({
7286
+ type: 'mergeWarnings'
7287
+ });
7288
+ nextState = reducer(state, {
7289
+ type: 'mergeWarnings'
7290
+ });
7291
+ maritimeWarnings = mapItemsToMaritimeWarnings(nextState.warnings, domain, maritimeConfig, auth == null ? void 0 : auth.username);
7292
+ postWarnings(maritimeWarnings, {
7293
+ onSuccess: function onSuccess() {
7294
+ dispatch({
7295
+ type: 'submitWarnings'
7296
+ });
7297
+ }
7298
+ });
7299
+ case 4:
7300
+ case "end":
7301
+ return _context.stop();
7302
+ }
7303
+ }, _callee);
7304
+ })), [dispatch, state, domain, maritimeConfig, auth == null ? void 0 : auth.username, postWarnings]);
7267
7305
  var onToggleReadOnly = React__default.useCallback(function (isReadOnly) {
7268
- // FIXME: do a api call here
7269
- if (isReadOnly) {
7270
- setEditor('');
7306
+ var message = isReadOnly ? t('maritime-editor-off', {
7307
+ domain: domainLabel
7308
+ }) : t('maritime-editor-on', {
7309
+ domain: domainLabel
7310
+ });
7311
+ var updateEditor = function updateEditor(force) {
7312
+ return mutateEditor({
7313
+ domain: getType(domain),
7314
+ isEditor: !isReadOnly,
7315
+ force: force
7316
+ }, {
7317
+ onError: function onError(e) {
7318
+ if (e.cause === 409) {
7319
+ void refetchWarnings();
7320
+ void confirmDialog({
7321
+ title: t('warning-edit-mode-title'),
7322
+ description: t('warning-edit-mode-description'),
7323
+ confirmLabel: t('warning-edit-mode-confirm'),
7324
+ cancelLabel: t('warning-dialog-cancel')
7325
+ }).then(function () {
7326
+ return void updateEditor(true);
7327
+ }); // force update editor
7328
+ } else {
7329
+ void refetchWarnings();
7330
+ }
7331
+ },
7332
+ onSuccess: function () {
7333
+ var _onSuccess = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
7334
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
7335
+ while (1) switch (_context2.prev = _context2.next) {
7336
+ case 0:
7337
+ void refetchWarnings();
7338
+ showSnackbar({
7339
+ type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
7340
+ message: message
7341
+ });
7342
+ case 2:
7343
+ case "end":
7344
+ return _context2.stop();
7345
+ }
7346
+ }, _callee2);
7347
+ }));
7348
+ function onSuccess() {
7349
+ return _onSuccess.apply(this, arguments);
7350
+ }
7351
+ return onSuccess;
7352
+ }()
7353
+ });
7354
+ };
7355
+ void updateEditor(false);
7356
+ }, [t, domainLabel, mutateEditor, domain, refetchWarnings, confirmDialog, showSnackbar]);
7357
+ useEffect(function () {
7358
+ if (publishError) {
7359
+ setError({
7360
+ title: publishError.message,
7361
+ severity: 'error'
7362
+ });
7363
+ } else if (editorError && editorError.cause !== 409) {
7364
+ setError({
7365
+ title: editorError.message,
7366
+ severity: 'error'
7367
+ });
7271
7368
  } else {
7272
- setEditor(auth == null ? void 0 : auth.username);
7369
+ setError(undefined);
7273
7370
  }
7274
- // FIXME: reset warnings to latest known api state
7275
- var domainLabel = domain === 'coastalWaters' ? t('maritime-domain-coastal') : t('maritime-domain-northsea');
7276
- showSnackbar({
7277
- type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
7278
- message: isReadOnly ? t('maritime-editor-off', {
7279
- domain: domainLabel
7280
- }) : t('maritime-editor-on', {
7281
- domain: domainLabel
7282
- })
7371
+ }, [publishError, editorError]);
7372
+ var shouldGiveEditorWarning = React__default.useCallback(function (newEditor, oldEditor) {
7373
+ var oldEditorIsYou = oldEditor && oldEditor === (auth == null ? void 0 : auth.username);
7374
+ if (oldEditorIsYou && newEditor && newEditor !== oldEditor) {
7375
+ setError({
7376
+ title: t('maritime-editor-off', {
7377
+ domain: domainLabel
7378
+ }),
7379
+ severity: 'warning'
7380
+ });
7381
+ }
7382
+ }, [auth == null ? void 0 : auth.username, domainLabel, t]);
7383
+ useEffect(function () {
7384
+ // Only give editor warning when the change in editor is from a refetch
7385
+ if (hasFetched) {
7386
+ setHasFetched(false);
7387
+ shouldGiveEditorWarning(editor, previousEditor);
7388
+ }
7389
+ // eslint-disable-next-line react-hooks/exhaustive-deps
7390
+ }, [editor]);
7391
+ if (!isLoggedIn) {
7392
+ return jsx(AlertBanner, {
7393
+ title: t('error-auth-login')
7283
7394
  });
7284
- }, [showSnackbar, t, domain, auth]);
7285
- return jsx(MaritimeWarningsForm, {
7286
- areas: areas,
7287
- selectedAreaIds: state.selectedAreaIds,
7288
- warnings: state.warnings,
7289
- modified: state.modified,
7290
- isReadOnly: isReadOnly,
7291
- shouldShowDistricts: shouldShowDistricts,
7292
- editor: editor,
7293
- onToggleSelectArea: onToggleSelectArea,
7294
- onSelectMultipleAreas: onSelectMultipleAreas,
7295
- onAddSelectedAreas: onAddSelectedAreas,
7296
- onRemoveWarning: onRemoveWarning,
7297
- onRemoveArea: onRemoveArea,
7298
- onAddWarning: onAddWarning,
7299
- onChangeWarning: onChangeWarning,
7300
- onMoveWarning: onMoveWarning,
7301
- onToggleReadOnly: onToggleReadOnly,
7302
- onClear: onClear,
7303
- onSubmit: onSubmit
7395
+ }
7396
+ if (configError) {
7397
+ return jsx(AlertBanner, {
7398
+ title: t('maritime-config-error'),
7399
+ info: configError.message,
7400
+ actionButtonProps: {
7401
+ title: t('error-title-retry'),
7402
+ onClick: function onClick() {
7403
+ void refetchConfig();
7404
+ }
7405
+ }
7406
+ });
7407
+ }
7408
+ return jsxs(Fragment, {
7409
+ children: [(isFetchingConfig || isFetchingWarnings || !maritimeConfig) && jsx(LinearProgress, {
7410
+ "data-testid": "loading-bar",
7411
+ color: "secondary",
7412
+ sx: {
7413
+ position: 'absolute',
7414
+ width: '100%',
7415
+ top: 0
7416
+ }
7417
+ }), !maritimeConfig ? jsxs("div", {
7418
+ children: [" ", t('maritime-loading-config')]
7419
+ }) : jsx(MaritimeWarningsForm, {
7420
+ areas: areas || [],
7421
+ selectedAreaIds: state.selectedAreaIds,
7422
+ warnings: state.warnings,
7423
+ modified: state.modified,
7424
+ isReadOnly: isReadOnly,
7425
+ shouldShowDistricts: shouldShowDistricts,
7426
+ editor: editor,
7427
+ onToggleSelectArea: onToggleSelectArea,
7428
+ onSelectMultipleAreas: onSelectMultipleAreas,
7429
+ onAddSelectedAreas: onAddSelectedAreas,
7430
+ onRemoveWarning: onRemoveWarning,
7431
+ onRemoveArea: onRemoveArea,
7432
+ onAddWarning: onAddWarning,
7433
+ onChangeWarning: onChangeWarning,
7434
+ onMoveWarning: onMoveWarning,
7435
+ onToggleReadOnly: onToggleReadOnly,
7436
+ onClear: onClear,
7437
+ onSubmit: onSubmit,
7438
+ maritimeConfig: maritimeConfig,
7439
+ lastUpdatedTime: lastUpdateTime,
7440
+ error: error,
7441
+ shouldHideEditorToggle: isNew
7442
+ })]
7304
7443
  });
7305
7444
  };
7306
7445
 
@@ -8227,7 +8366,7 @@ var PublicWarningsForm = function PublicWarningsForm(props) {
8227
8366
  var defaultValues = selectedAviationProduct || getFormData(publicWarningDetails, object);
8228
8367
  return jsx(ReactHookFormProvider, {
8229
8368
  options: Object.assign({}, defaultFormOptions, {
8230
- mode: 'onSubmit',
8369
+ mode: selectedAviationProduct ? defaultFormOptions.mode : 'onSubmit',
8231
8370
  defaultValues: defaultValues
8232
8371
  }),
8233
8372
  children: jsx(Form, Object.assign({}, props))
@@ -9199,18 +9338,15 @@ var useWarnings = function useWarnings(disabled) {
9199
9338
  sigmetWarnings = _useSigmetList.data,
9200
9339
  refetchSigmet = _useSigmetList.refetch,
9201
9340
  isFetchingSigmet = _useSigmetList.isFetching;
9202
- var warningType = useSelector(getWarningType);
9203
- var _useProductConfig = useProductConfig(warningType, false),
9204
- aviationConfig = _useProductConfig.data;
9205
9341
  var combinedWarnings = useMemo(function () {
9206
9342
  var transformedSigmets = (sigmetWarnings == null ? void 0 : sigmetWarnings.map(function (sigmet) {
9207
- return transformSigmetToWarningFormat(sigmet, aviationConfig);
9343
+ return transformSigmetToWarningFormat(sigmet);
9208
9344
  })) || [];
9209
9345
  var transformedAirmets = (airmetWarnings == null ? void 0 : airmetWarnings.map(function (airmet) {
9210
- return transformAirmetToWarningFormat(airmet, aviationConfig);
9346
+ return transformAirmetToWarningFormat(airmet);
9211
9347
  })) || [];
9212
9348
  return concat(publicWarnings || [], transformedSigmets, transformedAirmets);
9213
- }, [sigmetWarnings, airmetWarnings, publicWarnings, aviationConfig]);
9349
+ }, [sigmetWarnings, airmetWarnings, publicWarnings]);
9214
9350
  var refetchWarnings = function refetchWarnings() {
9215
9351
  void refetchPublicWarnings();
9216
9352
  void refetchAirmet();
@@ -9877,9 +10013,17 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
9877
10013
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
9878
10014
  _ref$onActionAviation = _ref.onActionAviationWarning,
9879
10015
  onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
10016
+ _ref$onActionMaritime = _ref.onActionMaritimeWarning,
10017
+ onActionMaritimeWarning = _ref$onActionMaritime === void 0 ? function () {} : _ref$onActionMaritime,
9880
10018
  t = _ref.t;
9881
- if (warning.warningDetail.domain === 'maritimeWarningCoastal' || warning.warningDetail.domain === 'maritimeWarningNorthSea') {
9882
- return [];
10019
+ if (warning.type === 'maritimeWarningCoastal' || warning.type === 'maritimeWarningNorthSea') {
10020
+ return [{
10021
+ text: t('warning-list-button-update'),
10022
+ action: function action() {
10023
+ return onActionMaritimeWarning(warning, MaritimeWarningAction.UPDATE);
10024
+ },
10025
+ icon: jsx(Edit, {})
10026
+ }];
9883
10027
  }
9884
10028
  var duplicate = {
9885
10029
  text: t('warning-list-button-duplicate'),
@@ -10012,7 +10156,7 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
10012
10156
  }
10013
10157
  };
10014
10158
 
10015
- var _excluded = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onActionAviationWarning"];
10159
+ var _excluded = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onActionAviationWarning", "onActionMaritimeWarning"];
10016
10160
  var renderLevelText = function renderLevelText(levelString) {
10017
10161
  if (!levelString) {
10018
10162
  return null;
@@ -10109,6 +10253,8 @@ var WarningListItem = function WarningListItem(_ref) {
10109
10253
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
10110
10254
  _ref$onActionAviation = _ref.onActionAviationWarning,
10111
10255
  onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
10256
+ _ref$onActionMaritime = _ref.onActionMaritimeWarning,
10257
+ onActionMaritimeWarning = _ref$onActionMaritime === void 0 ? function () {} : _ref$onActionMaritime,
10112
10258
  props = _objectWithoutPropertiesLoose(_ref, _excluded);
10113
10259
  var _useWarningsTranslati = useWarningsTranslation(),
10114
10260
  t = _useWarningsTranslati.t;
@@ -10163,7 +10309,8 @@ var WarningListItem = function WarningListItem(_ref) {
10163
10309
  onDeleteWarning: onDeleteWarning,
10164
10310
  onExpireWarning: onExpireWarning,
10165
10311
  onWithdrawWarning: onWithdrawWarning,
10166
- onActionAviationWarning: onActionAviationWarning
10312
+ onActionAviationWarning: onActionAviationWarning,
10313
+ onActionMaritimeWarning: onActionMaritimeWarning
10167
10314
  }),
10168
10315
  buttonIcon: jsx(Options, {})
10169
10316
  }),
@@ -10532,6 +10679,8 @@ var PublicWarningList = function PublicWarningList(_ref) {
10532
10679
  onWithdrawWarning = _ref$onWithdrawWarnin === void 0 ? function () {} : _ref$onWithdrawWarnin,
10533
10680
  _ref$onActionAviation = _ref.onActionAviationWarning,
10534
10681
  onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
10682
+ _ref$onActionMaritime = _ref.onActionMaritimeWarning,
10683
+ onActionMaritimeWarning = _ref$onActionMaritime === void 0 ? function () {} : _ref$onActionMaritime,
10535
10684
  hoveredFeatureId = _ref.hoveredFeatureId,
10536
10685
  expandedSections = _ref.expandedSections,
10537
10686
  setExpandedSections = _ref.setExpandedSections;
@@ -10805,7 +10954,8 @@ var PublicWarningList = function PublicWarningList(_ref) {
10805
10954
  activeWarningId: selectedWarningId,
10806
10955
  onExpireWarning: onExpireWarning,
10807
10956
  onWithdrawWarning: onWithdrawWarning,
10808
- onActionAviationWarning: onActionAviationWarning
10957
+ onActionAviationWarning: onActionAviationWarning,
10958
+ onActionMaritimeWarning: onActionMaritimeWarning
10809
10959
  }, key);
10810
10960
  }
10811
10961
  });
@@ -11055,7 +11205,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11055
11205
  if (['SIG', 'AIR'].includes(warning.warningDetail.level)) {
11056
11206
  return Domain.aviation;
11057
11207
  }
11058
- if (warning.warningDetail.domain === 'maritimeWarningCoastal' || warning.warningDetail.domain === 'maritimeWarningNorthSea') {
11208
+ if (warning.type === 'maritimeWarningCoastal' || warning.type === 'maritimeWarningNorthSea') {
11059
11209
  return Domain.maritime;
11060
11210
  }
11061
11211
  return Domain["public"];
@@ -11179,6 +11329,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11179
11329
  var panelId = _ref.panelId,
11180
11330
  presetFilterState = _ref.presetFilterState;
11181
11331
  var updatePublicWarningEditor = useMutatePublicWarningEditor();
11332
+ var _useMutateMaritimeWar = useMutateMaritimeWarningsEditor(),
11333
+ updateMaritimeWarningEditor = _useMutateMaritimeWar.mutateAsync;
11182
11334
  var _useMutateDeleteWarni = useMutateDeleteWarning(),
11183
11335
  deletePublicWarning = _useMutateDeleteWarni.mutateAsync;
11184
11336
  var _useSaveWarning = useSaveWarning(),
@@ -11245,8 +11397,12 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11245
11397
  return _ref2.apply(this, arguments);
11246
11398
  };
11247
11399
  }();
11248
- var selectWarning = function selectWarning(publicWarning) {
11249
- void openPublicWarningDialog('readonly', publicWarning);
11400
+ var selectWarning = function selectWarning(warning) {
11401
+ if ((warning == null ? void 0 : warning.type) === 'maritimeWarningCoastal' || (warning == null ? void 0 : warning.type) === 'maritimeWarningNorthSea') {
11402
+ handleMaritimeProductClick(warning, MaritimeWarningAction.SELECT);
11403
+ } else {
11404
+ void openPublicWarningDialog('readonly', warning);
11405
+ }
11250
11406
  };
11251
11407
  var createWarning = function createWarning(warningType) {
11252
11408
  void openPublicWarningDialog('', undefined, warningType);
@@ -11416,6 +11572,54 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11416
11572
  }
11417
11573
  }
11418
11574
  };
11575
+ var editMaritimeWarning = /*#__PURE__*/function () {
11576
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(warning) {
11577
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
11578
+ while (1) switch (_context4.prev = _context4.next) {
11579
+ case 0:
11580
+ if (!(warning && auth != null && auth.username && !warning.editor)) {
11581
+ _context4.next = 9;
11582
+ break;
11583
+ }
11584
+ _context4.prev = 1;
11585
+ _context4.next = 4;
11586
+ return updateMaritimeWarningEditor({
11587
+ domain: warning.type,
11588
+ isEditor: true
11589
+ });
11590
+ case 4:
11591
+ _context4.next = 8;
11592
+ break;
11593
+ case 6:
11594
+ _context4.prev = 6;
11595
+ _context4.t0 = _context4["catch"](1);
11596
+ case 8:
11597
+ refetchWarnings();
11598
+ case 9:
11599
+ void openPublicWarningDialog('', undefined, warning.type);
11600
+ case 10:
11601
+ case "end":
11602
+ return _context4.stop();
11603
+ }
11604
+ }, _callee4, null, [[1, 6]]);
11605
+ }));
11606
+ return function editMaritimeWarning(_x8) {
11607
+ return _ref5.apply(this, arguments);
11608
+ };
11609
+ }();
11610
+ var handleMaritimeProductClick = function handleMaritimeProductClick(warning, actionType) {
11611
+ if (!warning) {
11612
+ return;
11613
+ }
11614
+ switch (actionType) {
11615
+ case MaritimeWarningAction.SELECT:
11616
+ void openPublicWarningDialog('', undefined, warning.type);
11617
+ break;
11618
+ case MaritimeWarningAction.UPDATE:
11619
+ void editMaritimeWarning(warning);
11620
+ break;
11621
+ }
11622
+ };
11419
11623
  var openSnackbar = function openSnackbar(message) {
11420
11624
  dispatch(snackbarActions.openSnackbar({
11421
11625
  type: snackbarTypes.SnackbarMessageType.VERBATIM_MESSAGE,
@@ -11558,7 +11762,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11558
11762
  onRefetchWarnings: refetchWarnings,
11559
11763
  filterHookState: filterHookState,
11560
11764
  hoveredFeatureId: hoveredFeatureId,
11561
- onActionAviationWarning: handleAviationProductClick
11765
+ onActionAviationWarning: handleAviationProductClick,
11766
+ onActionMaritimeWarning: handleMaritimeProductClick
11562
11767
  }), confirmDialogOptions && jsx(ConfirmDeleteWarningDialog, {
11563
11768
  onClose: function onClose() {
11564
11769
  return setConfirmDialogOptions(undefined);