@opengeoweb/warnings 13.1.1 → 14.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
@@ -7,7 +7,7 @@ import { SHARED_NAMESPACE, useConfirmationDialog, dateUtils, ToggleMenu, calcula
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, 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, findSequenceNumber, getSequenceStyling, 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';
@@ -74,6 +74,7 @@ var en = {
74
74
  "warning-button-publishing": "Publishing",
75
75
  "warning-area": "Area",
76
76
  "warning-button-add-object": "Add Areas & Objects",
77
+ "warning-button-replace-object": "Replace Areas & Objects",
77
78
  "warning-description-original": "Description original",
78
79
  "warning-description-translation": "Description translation",
79
80
  "warning-unspecified": "(not specified)",
@@ -137,9 +138,11 @@ var en = {
137
138
  "warning-list-header-levels": "Levels",
138
139
  "warning-list-header-status": "Status",
139
140
  "warning-list-header-draft": "DRAFT",
140
- "area-object-loader-title": "Add Areas & Objects",
141
+ "area-object-loader-title": "Areas & Objects",
141
142
  "add-button": "Add",
143
+ "replace-button": "Replace",
142
144
  "remove-button": "Remove",
145
+ "disabled-button-tooltip": "Removing an area/object is only allowed for draft warnings",
143
146
  "area-object-loader-no-areas-objects": "No areas or objects found",
144
147
  objects: "Objects",
145
148
  areas: "Areas",
@@ -209,6 +212,9 @@ var en = {
209
212
  "publish-this-product": "Are you sure you want to publish this {{product}}?",
210
213
  "yes-cancel": "Yes, cancel {{product}}",
211
214
  "cancel-this-product": "Are you sure you want to cancel this {{product}}?",
215
+ "cancel-message": "Cancel message",
216
+ "will-cancel-message": "Will cancel warning",
217
+ "tac-label": "TAC:",
212
218
  "aviation-cancel-success": "{{warningType}} has succesfully been cancelled!",
213
219
  "aviation-discard-success": "{{warningType}} has been discarded!",
214
220
  "error-auth-login": "This feature is protected by authentication. Please log in to proceed",
@@ -247,12 +253,11 @@ var en = {
247
253
  "maritime-change-BACKING": "Backing",
248
254
  "maritime-change-VEERING": "Veering",
249
255
  "maritime-delete-button": "Delete",
250
- "maritime-retract-warning": "Retract warning",
251
- "maritime-no-change-of-direction": "(no change of direction)",
252
- "maritime-retract-dialog-no-change": "(no change in direction)",
253
- "maritime-retract-dialog-description-suffix": "will be removed",
254
- "maritime-retract-dialog-empty-warning-description": "The warning will be retracted",
255
- "maritime-retract-dialog-confirm": "Retract",
256
+ "maritime-delete-warning": "Delete warning",
257
+ "maritime-delete-dialog-no-change": "(no change in direction)",
258
+ "maritime-delete-dialog-description-suffix": "will be removed",
259
+ "maritime-delete-dialog-empty-warning-description": "The warning will be deleted",
260
+ "maritime-delete-dialog-confirm": "Delete",
256
261
  "maritime-clear-dialog-title": "Clear all",
257
262
  "maritime-clear-dialog-description": "All warnings will be removed from the list",
258
263
  "maritime-warning-title-coastal": "Warning Maritime - Coastal Waters",
@@ -316,6 +321,7 @@ var nl = {
316
321
  "warning-button-publishing": "Publiceren",
317
322
  "warning-area": "Gebied",
318
323
  "warning-button-add-object": "Gebieden & Objecten toevoegen",
324
+ "warning-button-replace-object": "Vervang Gebieden & Objecten",
319
325
  "warning-description-original": "Beschrijving origineel",
320
326
  "warning-description-translation": "Beschrijving vertaling",
321
327
  "warning-level": "Niveau",
@@ -376,9 +382,11 @@ var nl = {
376
382
  "warning-list-header-levels": "Niveaus",
377
383
  "warning-list-header-status": "Status",
378
384
  "warning-list-header-draft": "CONCEPT",
379
- "area-object-loader-title": "Gebieden & Objecten toevoegen",
385
+ "area-object-loader-title": "Gebieden & Objecten",
380
386
  "add-button": "Toevoegen",
387
+ "replace-button": "Vervangen",
381
388
  "remove-button": "Verwijderen",
389
+ "disabled-button-tooltip": "Het verwijderen van een gebied/object is alleen toegestaan voor CONCEPT waarschuwingen",
382
390
  "area-object-loader-no-areas-objects": "Geen gebieden of objecten gevonden",
383
391
  objects: "Objecten",
384
392
  areas: "Gebieden",
@@ -450,11 +458,11 @@ var nl = {
450
458
  "maritime-direction-NW": "Noordwest",
451
459
  "maritime-direction-NNW": "Noord tot noordwest",
452
460
  "maritime-delete-button": "Verwijderen",
453
- "maritime-retract-warning": "Waarschuwing intrekken",
454
- "maritime-retract-dialog-no-change": "(geen wijziging in richting)",
455
- "maritime-retract-dialog-empty-warning-description": "De waarschuwing wordt verwijderd",
456
- "maritime-retract-dialog-description-suffix": "wordt verwijderd",
457
- "maritime-retract-dialog-confirm": "Intrekken",
461
+ "maritime-delete-warning": "Waarschuwing verwijderen",
462
+ "maritime-delete-dialog-no-change": "(geen wijziging in richting)",
463
+ "maritime-delete-dialog-empty-warning-description": "De waarschuwing wordt verwijderd",
464
+ "maritime-delete-dialog-description-suffix": "wordt verwijderd",
465
+ "maritime-delete-dialog-confirm": "Verwijderen",
458
466
  "maritime-clear-dialog-title": "Wissen",
459
467
  "maritime-clear-dialog-description": "Alle waarschuwingen worden verwijderd",
460
468
  "maritime-warning-title-coastal": "Maritieme Waarschuwing - Kustgebieden",
@@ -514,6 +522,7 @@ var fi = {
514
522
  "warning-button-publishing": "Julkaisu",
515
523
  "warning-area": "Alue",
516
524
  "warning-button-add-object": "Lisää objekti",
525
+ "warning-button-replace-object": "ei käännetty",
517
526
  "warning-description-original": "Alkuperäinen kuvaus",
518
527
  "warning-description-translation": "Kuvauksen käännös",
519
528
  "warning-level": "Taso",
@@ -576,7 +585,9 @@ var fi = {
576
585
  "warning-list-header-draft": "LUONNOS",
577
586
  "area-object-loader-title": "ei käännetty",
578
587
  "add-button": "ei käännetty",
588
+ "replace-button": "ei käännetty",
579
589
  "remove-button": "Poista",
590
+ "disabled-button-tooltip": "Alueen tai objektin poistaminen on sallittua vain luonnosvaroituksille",
580
591
  "area-object-loader-no-areas-objects": "ei käännetty",
581
592
  objects: "ei käännetty",
582
593
  areas: "ei käännetty",
@@ -668,6 +679,7 @@ var no = {
668
679
  "warning-button-publishing": "Publiserer",
669
680
  "warning-area": "Område",
670
681
  "warning-button-add-object": "Legg til objekt",
682
+ "warning-button-replace-object": "Legg til objekt",
671
683
  "warning-description-original": "Original beskrivelse",
672
684
  "warning-description-translation": "Oversatt beskrivelse",
673
685
  "warning-level": "Grad",
@@ -728,9 +740,11 @@ var no = {
728
740
  "warning-list-header-levels": "Grad",
729
741
  "warning-list-header-status": "Status",
730
742
  "warning-list-header-draft": "UTKAST",
731
- "area-object-loader-title": "Legg til områder og objekter",
743
+ "area-object-loader-title": "Områder og objekter",
732
744
  "add-button": "Legg til",
745
+ "replace-button": "Bytt ut",
733
746
  "remove-button": "Fjerne",
747
+ "disabled-button-tooltip": "Fjerning av et område/objekt er kun tillatt for kladdvarsler",
734
748
  "area-object-loader-no-areas-objects": "Ingen områder eller objekter funnet",
735
749
  objects: "Objekter",
736
750
  areas: "Områder",
@@ -1112,11 +1126,7 @@ var slice$2 = createSlice({
1112
1126
  }
1113
1127
  },
1114
1128
  // action caught in drawings/listener
1115
- submitDrawValues: function submitDrawValues(
1116
- // eslint-disable-next-line no-unused-vars
1117
- draft,
1118
- // eslint-disable-next-line no-unused-vars
1119
- action) {},
1129
+ submitDrawValues: function submitDrawValues(draft, action) {},
1120
1130
  setFormDirty: function setFormDirty(draft, action) {
1121
1131
  var _action$payload = action.payload,
1122
1132
  drawingInstanceId = _action$payload.drawingInstanceId,
@@ -1187,12 +1197,13 @@ var warningsDrawingsReducer = slice$2.reducer,
1187
1197
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
1188
1198
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1189
1199
  * */
1200
+ var EMPTY_DRAW_STATE = {
1201
+ entities: {},
1202
+ ids: []
1203
+ };
1190
1204
  var _drawAdapter$getSelec = drawAdapter.getSelectors(function (state) {
1191
1205
  var _state$drawings;
1192
- return (_state$drawings = state == null ? void 0 : state.drawings) != null ? _state$drawings : {
1193
- entities: {},
1194
- ids: []
1195
- };
1206
+ return (_state$drawings = state == null ? void 0 : state.drawings) != null ? _state$drawings : EMPTY_DRAW_STATE;
1196
1207
  }),
1197
1208
  selectDrawByInstanceId = _drawAdapter$getSelec.selectById;
1198
1209
  var getWarningFormDirty = createSelector(selectDrawByInstanceId, function (drawing) {
@@ -2447,7 +2458,6 @@ var domainPhenomena = {
2447
2458
  };
2448
2459
  var defaultPhenomenonFilter = makeFilterFromList(Object.keys(AllPhenomenaKeys));
2449
2460
  var initialFilters = {
2450
- incident: defaultEmptyFilter,
2451
2461
  source: defaultEmptyFilter,
2452
2462
  domain: defaultDomainFilter,
2453
2463
  phenomenon: defaultPhenomenonFilter,
@@ -3205,15 +3215,12 @@ var useDrawings = function useDrawings(params, enabled) {
3205
3215
  }
3206
3216
  return useAuthQuery(['drawings', JSON.stringify(params)], function (auth) {
3207
3217
  return getDrawings(auth, params);
3208
- }, enabled);
3218
+ }, !enabled);
3209
3219
  };
3210
- var useDrawingDetails = function useDrawingDetails(drawingId, enabled) {
3211
- if (enabled === void 0) {
3212
- enabled = true;
3213
- }
3220
+ var useDrawingDetails = function useDrawingDetails(drawingId) {
3214
3221
  return useAuthQuery(['drawing-details', JSON.stringify(drawingId)], function (auth) {
3215
3222
  return getDrawingDetails(auth, drawingId);
3216
- }, enabled);
3223
+ }, !drawingId);
3217
3224
  };
3218
3225
  var useAreaKeywords = function useAreaKeywords(enabled) {
3219
3226
  if (enabled === void 0) {
@@ -3468,9 +3475,9 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3468
3475
  var _useState = useState(),
3469
3476
  selectedDrawingId = _useState[0],
3470
3477
  setSelectedDrawingId = _useState[1];
3471
- var _useDrawingDetails = useDrawingDetails(selectedDrawingId, !selectedDrawingId),
3478
+ var _useDrawingDetails = useDrawingDetails(selectedDrawingId),
3472
3479
  drawingDetails = _useDrawingDetails.data,
3473
- isLoadingDetails = _useDrawingDetails.isLoading,
3480
+ isFetchingDetails = _useDrawingDetails.isFetching,
3474
3481
  drawingError = _useDrawingDetails.error;
3475
3482
  var dispatch = useDispatch();
3476
3483
  var mapId = useSelector(function (store) {
@@ -3493,7 +3500,8 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3493
3500
  var _useDrawings = useDrawings({}, isDialogOpen),
3494
3501
  _useDrawings$data = _useDrawings.data,
3495
3502
  drawings = _useDrawings$data === void 0 ? [] : _useDrawings$data,
3496
- error = _useDrawings.error;
3503
+ error = _useDrawings.error,
3504
+ isFetchingList = _useDrawings.isFetching;
3497
3505
  useEffect(function () {
3498
3506
  if (error || !isLoggedIn) {
3499
3507
  var _error$message;
@@ -3654,7 +3662,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3654
3662
  onCreateNewObject: onCreateNewObject,
3655
3663
  activeDrawingId: activeDrawingId,
3656
3664
  error: uiError,
3657
- isLoading: isLoadingDetails
3665
+ isLoading: isFetchingDetails || isFetchingList
3658
3666
  }), confirmDialogOptions && jsx(ConfirmDeleteDialog, Object.assign({}, confirmDialogOptions, {
3659
3667
  onDeleteSucces: onDeleteSuccess,
3660
3668
  onClose: function onClose() {
@@ -4584,6 +4592,77 @@ var getSigmetTAC = function getSigmetTAC(auth, product) {
4584
4592
  };
4585
4593
  }());
4586
4594
  };
4595
+ // For cancel TAC (not normal TAC)
4596
+ var getAirmetCancelTAC = function getAirmetCancelTAC(auth, product) {
4597
+ return fetch(airmetBaseUrl + "/airmet2cancel2tac", {
4598
+ body: JSON.stringify(product),
4599
+ method: 'POST',
4600
+ headers: getHeaders(auth)
4601
+ }).then(/*#__PURE__*/function () {
4602
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(result) {
4603
+ var textData;
4604
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
4605
+ while (1) switch (_context3.prev = _context3.next) {
4606
+ case 0:
4607
+ if (!(result.status === 200)) {
4608
+ _context3.next = 5;
4609
+ break;
4610
+ }
4611
+ _context3.next = 3;
4612
+ return result.text();
4613
+ case 3:
4614
+ textData = _context3.sent;
4615
+ return _context3.abrupt("return", {
4616
+ data: textData
4617
+ });
4618
+ case 5:
4619
+ throw new Error("Failed to fetch Cancel TAC data: " + result.statusText);
4620
+ case 6:
4621
+ case "end":
4622
+ return _context3.stop();
4623
+ }
4624
+ }, _callee3);
4625
+ }));
4626
+ return function (_x3) {
4627
+ return _ref3.apply(this, arguments);
4628
+ };
4629
+ }());
4630
+ };
4631
+ var getSigmetCancelTAC = function getSigmetCancelTAC(auth, product) {
4632
+ return fetch(sigmetBaseUrl + "/sigmet2cancel2tac", {
4633
+ body: JSON.stringify(product),
4634
+ method: 'POST',
4635
+ headers: getHeaders(auth)
4636
+ }).then(/*#__PURE__*/function () {
4637
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(result) {
4638
+ var textData;
4639
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
4640
+ while (1) switch (_context4.prev = _context4.next) {
4641
+ case 0:
4642
+ if (!(result.status === 200)) {
4643
+ _context4.next = 5;
4644
+ break;
4645
+ }
4646
+ _context4.next = 3;
4647
+ return result.text();
4648
+ case 3:
4649
+ textData = _context4.sent;
4650
+ return _context4.abrupt("return", {
4651
+ data: textData
4652
+ });
4653
+ case 5:
4654
+ throw new Error("Failed to fetch Cancel TAC data: " + result.statusText);
4655
+ case 6:
4656
+ case "end":
4657
+ return _context4.stop();
4658
+ }
4659
+ }, _callee4);
4660
+ }));
4661
+ return function (_x4) {
4662
+ return _ref4.apply(this, arguments);
4663
+ };
4664
+ }());
4665
+ };
4587
4666
  var postSigmet = function postSigmet(auth, data) {
4588
4667
  return fetch(sigmetBaseUrl + "/sigmet", {
4589
4668
  headers: getHeaders(auth),
@@ -4660,9 +4739,29 @@ var useTACApi = function useTACApi() {
4660
4739
  staleTime: 1000 * 15
4661
4740
  });
4662
4741
  };
4742
+ var fetchSigmetCancelTAC = function fetchSigmetCancelTAC(product) {
4743
+ return queryClient.fetchQuery({
4744
+ queryKey: ['sigmet-cancel-tac', product],
4745
+ queryFn: function queryFn() {
4746
+ return getSigmetCancelTAC(auth, product);
4747
+ },
4748
+ staleTime: 1000 * 15
4749
+ });
4750
+ };
4751
+ var fetchAirmetCancelTAC = function fetchAirmetCancelTAC(product) {
4752
+ return queryClient.fetchQuery({
4753
+ queryKey: ['airmet-cancel-tac', product],
4754
+ queryFn: function queryFn() {
4755
+ return getAirmetCancelTAC(auth, product);
4756
+ },
4757
+ staleTime: 1000 * 15
4758
+ });
4759
+ };
4663
4760
  return {
4664
4761
  fetchSigmetTAC: fetchSigmetTAC,
4665
- fetchAirmetTAC: fetchAirmetTAC
4762
+ fetchAirmetTAC: fetchAirmetTAC,
4763
+ fetchSigmetCancelTAC: fetchSigmetCancelTAC,
4764
+ fetchAirmetCancelTAC: fetchAirmetCancelTAC
4666
4765
  };
4667
4766
  };
4668
4767
  /**
@@ -5193,6 +5292,8 @@ var AreaField = function AreaField(_ref) {
5193
5292
  var geoJSON = getValues('areas[0].geoJSON');
5194
5293
  var objectName = getObjectName(geoJSON, getValues('areas[0].objectName'), t);
5195
5294
  var hasErrors = (errors == null ? void 0 : errors.areas) !== undefined;
5295
+ var hasExistingGeoJSON = geoJSON !== undefined && geoJSON !== null;
5296
+ var areaButtonTitle = t(!hasExistingGeoJSON ? 'warning-button-add-object' : 'warning-button-replace-object');
5196
5297
  return jsxs(Fragment, {
5197
5298
  children: [jsx(Typography, Object.assign({
5198
5299
  variant: "h3",
@@ -5282,7 +5383,7 @@ var AreaField = function AreaField(_ref) {
5282
5383
  size: "small",
5283
5384
  onClick: onAddObject,
5284
5385
  disabled: isDisabled,
5285
- children: t('warning-button-add-object')
5386
+ children: areaButtonTitle
5286
5387
  })]
5287
5388
  });
5288
5389
  };
@@ -5595,6 +5696,7 @@ var ProbabilityField = function ProbabilityField(_ref) {
5595
5696
  };
5596
5697
 
5597
5698
  var VALID_FROM_MAX_HOURS_AFTER_CURRENT = 192;
5699
+ var VALID_UNTIL_DEFAULT_OFFSET = 6;
5598
5700
  var _isValueBeforeCurrentTime$1 = function isValueBeforeCurrentTime(value, t) {
5599
5701
  return isXHoursBefore(value, dateUtils.getCurrentTimeAsString(), 0) || t('warning-valid-from-error-before-current');
5600
5702
  };
@@ -5604,6 +5706,16 @@ var _isMaxHoursAfterCurrentTime$1 = function isMaxHoursAfterCurrentTime(value, t
5604
5706
  MAX_HOURS: VALID_FROM_MAX_HOURS_AFTER_CURRENT
5605
5707
  });
5606
5708
  };
5709
+ var offsetTimeValidUntilField = function offsetTimeValidUntilField(validFrom, validUntil) {
5710
+ var validUntilValue = dateUtils.getUtcFromString(validUntil);
5711
+ var valueFrom = dateUtils.getUtcFromString(validFrom);
5712
+ if (valueFrom && validUntilValue && dateUtils.isAfter(valueFrom, validUntilValue)) {
5713
+ return dateUtils.add(valueFrom, {
5714
+ hours: VALID_UNTIL_DEFAULT_OFFSET
5715
+ }).toISOString();
5716
+ }
5717
+ return null;
5718
+ };
5607
5719
  var ValidFrom = function ValidFrom(_ref) {
5608
5720
  var isDisabled = _ref.isDisabled,
5609
5721
  isReadOnly = _ref.isReadOnly;
@@ -5612,8 +5724,22 @@ var ValidFrom = function ValidFrom(_ref) {
5612
5724
  var _useDraftFormHelpers = useDraftFormHelpers(),
5613
5725
  isRequired = _useDraftFormHelpers.isRequired;
5614
5726
  var _useFormContext = useFormContext(),
5615
- trigger = _useFormContext.trigger;
5616
- var onChangeValidFrom = function onChangeValidFrom() {
5727
+ trigger = _useFormContext.trigger,
5728
+ getValues = _useFormContext.getValues,
5729
+ setValue = _useFormContext.setValue;
5730
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5731
+ var onChangeValidFrom = function onChangeValidFrom(value) {
5732
+ if (!value) {
5733
+ return;
5734
+ }
5735
+ var newValidUntilOffset = offsetTimeValidUntilField(value, getValues('validUntil'));
5736
+ if (newValidUntilOffset) {
5737
+ setValue('validUntil', newValidUntilOffset, {
5738
+ shouldValidate: true,
5739
+ shouldDirty: true
5740
+ });
5741
+ }
5742
+ // If the new value is after the current valid until, trigger validation
5617
5743
  void trigger(['validFrom', 'validUntil']);
5618
5744
  };
5619
5745
  return jsx(ReactHookFormDateTime, {
@@ -6334,7 +6460,7 @@ var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6334
6460
  return onRemove(warning.id);
6335
6461
  },
6336
6462
  "aria-label": t('maritime-delete-button'),
6337
- tooltipTitle: t('maritime-retract-warning'),
6463
+ tooltipTitle: t('maritime-delete-warning'),
6338
6464
  children: jsx(Delete, {})
6339
6465
  })]
6340
6466
  });
@@ -6653,7 +6779,7 @@ function useMaritimeWarningsFormState() {
6653
6779
  return React__default.useReducer(reducer, initialState);
6654
6780
  }
6655
6781
 
6656
- function useConfirmRetractDialog(_ref) {
6782
+ function useConfirmDeleteDialog(_ref) {
6657
6783
  var areas = _ref.areas,
6658
6784
  warnings = _ref.warnings,
6659
6785
  maritimeConfig = _ref.maritimeConfig,
@@ -6681,7 +6807,7 @@ function useConfirmRetractDialog(_ref) {
6681
6807
  }, [t]);
6682
6808
  var getWarningDescription = React__default.useCallback(function (warning) {
6683
6809
  if (!isPublishedWarning(warning)) {
6684
- return t('maritime-retract-dialog-empty-warning-description');
6810
+ return t('maritime-delete-dialog-empty-warning-description');
6685
6811
  }
6686
6812
  var windDirectionFromLabel = getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionFrom);
6687
6813
  var areasById = new Map(areas.map(function (area) {
@@ -6690,11 +6816,11 @@ function useConfirmRetractDialog(_ref) {
6690
6816
  var areaLabels = warning.assignedAreaIds.map(function (areaId) {
6691
6817
  return areasById.get(areaId).districtName;
6692
6818
  });
6693
- var changeToLabel = warning.changeType === 'NO_CHANGE' ? t('maritime-retract-dialog-no-change') : getLabelFromChangeConfig(maritimeConfig.changeType, warning.changeType) + " " + getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionTo);
6819
+ var changeToLabel = warning.changeType === 'NO_CHANGE' ? t('maritime-delete-dialog-no-change') : getLabelFromChangeConfig(maritimeConfig.changeType, warning.changeType) + " " + getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionTo);
6694
6820
  var warningDescription = [windDirectionFromLabel + " " + t('maritime-windforce', {
6695
6821
  value: warning.windForce
6696
6822
  })].concat(areaLabels, [changeToLabel]).join(', ');
6697
- return warningDescription + ". " + t('maritime-retract-dialog-description-suffix');
6823
+ return warningDescription + ". " + t('maritime-delete-dialog-description-suffix');
6698
6824
  }, [getLabelFromWindDirectionConfig, maritimeConfig.windDirectionDefinition, maritimeConfig.changeType, areas, t, getLabelFromChangeConfig]);
6699
6825
  return {
6700
6826
  onRemoveWarningWithConfirmation: React__default.useCallback(/*#__PURE__*/function () {
@@ -6708,9 +6834,9 @@ function useConfirmRetractDialog(_ref) {
6708
6834
  });
6709
6835
  _context.next = 3;
6710
6836
  return confirmDialog({
6711
- title: t('maritime-retract-warning'),
6837
+ title: t('maritime-delete-warning'),
6712
6838
  description: '',
6713
- confirmLabel: t('maritime-retract-dialog-confirm'),
6839
+ confirmLabel: t('maritime-delete-dialog-confirm'),
6714
6840
  cancelLabel: t('close-dialog-cancel'),
6715
6841
  content: getWarningDescription(warning)
6716
6842
  });
@@ -6931,13 +7057,13 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6931
7057
  var disabledAreaIds = warnings.flatMap(function (warning) {
6932
7058
  return warning.assignedAreaIds;
6933
7059
  });
6934
- var _useConfirmRetractDia = useConfirmRetractDialog({
7060
+ var _useConfirmDeleteDial = useConfirmDeleteDialog({
6935
7061
  areas: areas,
6936
7062
  warnings: warnings,
6937
7063
  maritimeConfig: maritimeConfig,
6938
7064
  onRemoveWarning: onRemoveWarning
6939
7065
  }),
6940
- onRemoveWarningWithConfirmation = _useConfirmRetractDia.onRemoveWarningWithConfirmation;
7066
+ onRemoveWarningWithConfirmation = _useConfirmDeleteDial.onRemoveWarningWithConfirmation;
6941
7067
  var onClearWithConfirmation = React__default.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
6942
7068
  return _regeneratorRuntime().wrap(function _callee$(_context) {
6943
7069
  while (1) switch (_context.prev = _context.next) {
@@ -7488,6 +7614,173 @@ var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7488
7614
  });
7489
7615
  };
7490
7616
 
7617
+ var CancelAviationDialogContent = function CancelAviationDialogContent(_ref) {
7618
+ var product = _ref.product,
7619
+ warningType = _ref.warningType;
7620
+ var _useTACApi = useTACApi(),
7621
+ fetchSigmetCancelTAC = _useTACApi.fetchSigmetCancelTAC,
7622
+ fetchAirmetCancelTAC = _useTACApi.fetchAirmetCancelTAC,
7623
+ fetchSigmetTAC = _useTACApi.fetchSigmetTAC,
7624
+ fetchAirmetTAC = _useTACApi.fetchAirmetTAC;
7625
+ var _React$useState = React__default.useState(null),
7626
+ cancelTAC = _React$useState[0],
7627
+ setCancelTAC = _React$useState[1];
7628
+ var _React$useState2 = React__default.useState(null),
7629
+ currentTAC = _React$useState2[0],
7630
+ setCurrentTAC = _React$useState2[1];
7631
+ var _useWarningsTranslati = useWarningsTranslation(),
7632
+ t = _useWarningsTranslati.t;
7633
+ React__default.useEffect(function () {
7634
+ var fetchData = /*#__PURE__*/function () {
7635
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
7636
+ var cancelResult, currentResult;
7637
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
7638
+ while (1) switch (_context.prev = _context.next) {
7639
+ case 0:
7640
+ _context.prev = 0;
7641
+ if (!(warningType === 'sigmet')) {
7642
+ _context.next = 7;
7643
+ break;
7644
+ }
7645
+ _context.next = 4;
7646
+ return fetchSigmetCancelTAC(product);
7647
+ case 4:
7648
+ _context.t0 = _context.sent;
7649
+ _context.next = 10;
7650
+ break;
7651
+ case 7:
7652
+ _context.next = 9;
7653
+ return fetchAirmetCancelTAC(product);
7654
+ case 9:
7655
+ _context.t0 = _context.sent;
7656
+ case 10:
7657
+ cancelResult = _context.t0;
7658
+ setCancelTAC(cancelResult.data);
7659
+ if (!(warningType === 'sigmet')) {
7660
+ _context.next = 18;
7661
+ break;
7662
+ }
7663
+ _context.next = 15;
7664
+ return fetchSigmetTAC(product);
7665
+ case 15:
7666
+ _context.t1 = _context.sent;
7667
+ _context.next = 21;
7668
+ break;
7669
+ case 18:
7670
+ _context.next = 20;
7671
+ return fetchAirmetTAC(product);
7672
+ case 20:
7673
+ _context.t1 = _context.sent;
7674
+ case 21:
7675
+ currentResult = _context.t1;
7676
+ setCurrentTAC(currentResult.data);
7677
+ _context.next = 27;
7678
+ break;
7679
+ case 25:
7680
+ _context.prev = 25;
7681
+ _context.t2 = _context["catch"](0);
7682
+ case 27:
7683
+ case "end":
7684
+ return _context.stop();
7685
+ }
7686
+ }, _callee, null, [[0, 25]]);
7687
+ }));
7688
+ return function fetchData() {
7689
+ return _ref2.apply(this, arguments);
7690
+ };
7691
+ }();
7692
+ void fetchData();
7693
+ }, [fetchAirmetCancelTAC, fetchAirmetTAC, fetchSigmetCancelTAC, fetchSigmetTAC, product, warningType]);
7694
+ var tacBlockStyle = {
7695
+ whiteSpace: 'pre-wrap',
7696
+ wordBreak: 'break-word',
7697
+ overflowX: 'auto',
7698
+ overflowY: 'auto',
7699
+ maxWidth: '100%',
7700
+ fontFamily: 'monospace',
7701
+ fontSize: '0.9rem',
7702
+ minHeight: 120,
7703
+ maxHeight: 140
7704
+ };
7705
+ var renderTacWithSequence = function renderTacWithSequence(tac, noTacKey, product) {
7706
+ if (!tac) {
7707
+ return jsx(Box, {
7708
+ component: "pre",
7709
+ sx: tacBlockStyle,
7710
+ children: t(noTacKey)
7711
+ });
7712
+ }
7713
+ var noTac = t(noTacKey);
7714
+ var hasTac = tac.split('\n').length > 0 && tac !== noTac;
7715
+ var sequenceNumberInTac = findSequenceNumber(tac, noTac);
7716
+ var sequenceStyle = getSequenceStyling(product, hasTac);
7717
+ var words = tac.split(' ');
7718
+ return jsxs(Box, {
7719
+ component: "pre",
7720
+ sx: tacBlockStyle,
7721
+ children: [jsx(Box, {
7722
+ component: "span",
7723
+ sx: {
7724
+ fontWeight: 'bold',
7725
+ fontSize: 12,
7726
+ mr: 1.5
7727
+ },
7728
+ children: t('tac-label')
7729
+ }), words.map(function (word, i) {
7730
+ return jsx(Box
7731
+ // eslint-disable-next-line react/no-array-index-key
7732
+ , {
7733
+ component: "span",
7734
+ sx: hasTac && word === sequenceNumberInTac ? sequenceStyle : {},
7735
+ children: word + (i < words.length - 1 ? ' ' : '')
7736
+ }, word + "-" + i);
7737
+ })]
7738
+ });
7739
+ };
7740
+ return jsxs(Box, {
7741
+ sx: {
7742
+ width: '500px',
7743
+ maxWidth: '600px'
7744
+ },
7745
+ children: [jsx(Typography, {
7746
+ variant: "subtitle2",
7747
+ marginTop: "15px",
7748
+ children: jsx("strong", {
7749
+ children: t('cancel-message')
7750
+ })
7751
+ }), jsx("div", {
7752
+ style: {
7753
+ display: 'flex',
7754
+ alignItems: 'flex-start'
7755
+ },
7756
+ children: renderTacWithSequence(cancelTAC, 'tac-missing-data')
7757
+ }), jsx(Typography, {
7758
+ variant: "subtitle2",
7759
+ children: jsx("strong", {
7760
+ children: t('will-cancel-message')
7761
+ })
7762
+ }), jsx("div", {
7763
+ style: {
7764
+ display: 'flex',
7765
+ alignItems: 'flex-start'
7766
+ },
7767
+ children: jsxs(Box, {
7768
+ component: "pre",
7769
+ sx: tacBlockStyle,
7770
+ children: [jsx(Box, {
7771
+ component: "span",
7772
+ sx: {
7773
+ fontWeight: 'bold',
7774
+ fontSize: 12,
7775
+ mr: 1.5
7776
+ },
7777
+ children: t('tac-label')
7778
+ }), currentTAC != null ? currentTAC : t('tac-missing-data')]
7779
+ })
7780
+ })]
7781
+ });
7782
+ };
7783
+
7491
7784
  var _excluded$3 = ["IS_DRAFT", "object", "translation-select"];
7492
7785
  var useScrollTopOnError = function useScrollTopOnError(error) {
7493
7786
  var ref = React.useRef(null);
@@ -7759,12 +8052,12 @@ var Form = function Form(_ref5) {
7759
8052
  var _useTACApi = useTACApi(),
7760
8053
  fetchSigmetTAC = _useTACApi.fetchSigmetTAC,
7761
8054
  fetchAirmetTAC = _useTACApi.fetchAirmetTAC;
7762
- var _useShortTestHelpers = useShortTestHelpers(),
7763
- isShortTest = _useShortTestHelpers.isShortTest;
7764
8055
  var confirmationDialog = useConfirmationDialog();
7765
8056
  var formMethods = useForm({
7766
8057
  defaultValues: {}
7767
8058
  });
8059
+ var _useShortTestHelpers = useShortTestHelpers(),
8060
+ isShortTest = _useShortTestHelpers.isShortTest;
7768
8061
  var endOfWarningValidity = publicWarningDetails == null ? void 0 : publicWarningDetails.validUntil;
7769
8062
  React.useEffect(function () {
7770
8063
  if (!endOfWarningValidity || formState !== 'amending') {
@@ -7871,7 +8164,12 @@ var Form = function Form(_ref5) {
7871
8164
  confirmLabel: getConfirmationDialogButtonLabel(t, action, warningType || 'airmet'),
7872
8165
  cancelLabel: getConfirmationDialogCancelLabel(t, action),
7873
8166
  catchOnCancel: action === ProductAction.CLOSE,
7874
- content: isVAPhenomenon(selectedAviationProduct, action) && !isShortTest() ? jsx(FormProvider, Object.assign({}, formMethods, {
8167
+ content:
8168
+ // eslint-disable-next-line no-nested-ternary
8169
+ action === ProductAction.CANCEL ? jsx(CancelAviationDialogContent, {
8170
+ product: selectedAviationProduct,
8171
+ warningType: warningType
8172
+ }) : isVAPhenomenon(selectedAviationProduct, action) && !isShortTest() ? jsx(FormProvider, Object.assign({}, formMethods, {
7875
8173
  children: jsx(CancelSigmetVolcanicMovements, {
7876
8174
  sigmet: selectedAviationProduct,
7877
8175
  productConfig: aviationConfig
@@ -8470,11 +8768,12 @@ var PublicWarningsForm = function PublicWarningsForm(props) {
8470
8768
  * Copyright 2023 - Finnish Meteorological Institute (FMI)
8471
8769
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
8472
8770
  * */
8771
+ var EMPTY_WARNING_FORM_STATE = {};
8473
8772
  var selectPublicWarningState = function selectPublicWarningState(store) {
8474
8773
  if (store && store.publicWarningForm) {
8475
8774
  return store.publicWarningForm;
8476
8775
  }
8477
- return {};
8776
+ return EMPTY_WARNING_FORM_STATE;
8478
8777
  };
8479
8778
  createSelector(selectPublicWarningState, function (publicWarningStore) {
8480
8779
  return publicWarningStore.object;
@@ -8796,6 +9095,12 @@ var getListInclHeaders = function getListInclHeaders(items, translateFn) {
8796
9095
  }
8797
9096
  };
8798
9097
  };
9098
+ var getLabel = function getLabel(selectedAreas, isAreaSelected) {
9099
+ if (isAreaSelected) {
9100
+ return 'remove-button';
9101
+ }
9102
+ return selectedAreas.length === 0 ? 'add-button' : 'replace-button';
9103
+ };
8799
9104
  var getDisplayDate = function getDisplayDate(date) {
8800
9105
  return dateUtils.dateToString(dateUtils.utc(date), dateUtils.DATE_FORMAT_NAME_OF_DAY) + " UTC";
8801
9106
  };
@@ -8805,26 +9110,41 @@ var ListItemAction = function ListItemAction(_ref2) {
8805
9110
  onAddArea = _ref2.onAddArea,
8806
9111
  onRemoveArea = _ref2.onRemoveArea,
8807
9112
  isDisabled = _ref2.isDisabled,
8808
- t = _ref2.t;
9113
+ t = _ref2.t,
9114
+ _ref2$shouldDisableRe = _ref2.shouldDisableRemoveWarning,
9115
+ shouldDisableRemoveWarning = _ref2$shouldDisableRe === void 0 ? false : _ref2$shouldDisableRe;
8809
9116
  var isAreaSelected = !!selectedAreas.find(function (area) {
8810
9117
  return area.objectName === listItem.objectName;
8811
9118
  });
8812
- var label = t(!isAreaSelected ? 'add-button' : 'remove-button');
9119
+ var label = t(getLabel(selectedAreas, isAreaSelected));
8813
9120
  var onClick = function onClick() {
8814
9121
  isAreaSelected ? onRemoveArea(listItem) : onAddArea(listItem);
8815
9122
  };
8816
- return jsx(CustomToggleButton, {
8817
- sx: {
8818
- fontSize: '12px',
8819
- height: '22px!important',
8820
- minWidth: '60px'
8821
- },
8822
- variant: "tool",
8823
- onClick: onClick,
8824
- selected: isAreaSelected,
8825
- disabled: isDisabled,
8826
- children: label
8827
- });
9123
+ var shouldDisableRemove = shouldDisableRemoveWarning && isAreaSelected;
9124
+ var render = function render() {
9125
+ return jsx(CustomToggleButton, {
9126
+ sx: {
9127
+ fontSize: '12px',
9128
+ height: '22px!important',
9129
+ minWidth: '60px'
9130
+ },
9131
+ variant: "tool",
9132
+ onClick: onClick,
9133
+ selected: isAreaSelected,
9134
+ disabled: isDisabled || shouldDisableRemove,
9135
+ children: label
9136
+ });
9137
+ };
9138
+ if (shouldDisableRemove) {
9139
+ return jsx(CustomTooltip, {
9140
+ title: t('disabled-button-tooltip'),
9141
+ placement: "top",
9142
+ children: jsx("span", {
9143
+ children: render()
9144
+ })
9145
+ });
9146
+ }
9147
+ return render();
8828
9148
  };
8829
9149
  var ContainerDiv = styled('div')(function () {
8830
9150
  return {
@@ -8862,7 +9182,9 @@ var AreasObjects = function AreasObjects(_ref3) {
8862
9182
  _ref3$selectedAreas = _ref3.selectedAreas,
8863
9183
  selectedAreas = _ref3$selectedAreas === void 0 ? [] : _ref3$selectedAreas,
8864
9184
  _ref3$isChangeAreaDis = _ref3.isChangeAreaDisabled,
8865
- isChangeAreaDisabled = _ref3$isChangeAreaDis === void 0 ? true : _ref3$isChangeAreaDis;
9185
+ isChangeAreaDisabled = _ref3$isChangeAreaDis === void 0 ? true : _ref3$isChangeAreaDis,
9186
+ _ref3$shouldDisableRe = _ref3.shouldDisableRemoveWarning,
9187
+ shouldDisableRemoveWarning = _ref3$shouldDisableRe === void 0 ? false : _ref3$shouldDisableRe;
8866
9188
  var _useWarningsTranslati = useWarningsTranslation(),
8867
9189
  t = _useWarningsTranslati.t;
8868
9190
  var listRef = React__default.useRef(null);
@@ -8949,7 +9271,8 @@ var AreasObjects = function AreasObjects(_ref3) {
8949
9271
  onAddArea: onAddArea,
8950
9272
  onRemoveArea: onRemoveArea,
8951
9273
  t: t,
8952
- isDisabled: isChangeAreaDisabled
9274
+ isDisabled: isChangeAreaDisabled,
9275
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
8953
9276
  }),
8954
9277
  children: jsx(Paper, {
8955
9278
  elevation: 0,
@@ -9067,7 +9390,9 @@ var AreaObjectLoader = function AreaObjectLoader(_ref) {
9067
9390
  _ref$onRetryRequest = _ref.onRetryRequest,
9068
9391
  onRetryRequest = _ref$onRetryRequest === void 0 ? function () {} : _ref$onRetryRequest,
9069
9392
  _ref$isChangeAreaDisa = _ref.isChangeAreaDisabled,
9070
- isChangeAreaDisabled = _ref$isChangeAreaDisa === void 0 ? true : _ref$isChangeAreaDisa;
9393
+ isChangeAreaDisabled = _ref$isChangeAreaDisa === void 0 ? true : _ref$isChangeAreaDisa,
9394
+ _ref$shouldDisableRem = _ref.shouldDisableRemoveWarning,
9395
+ shouldDisableRemoveWarning = _ref$shouldDisableRem === void 0 ? false : _ref$shouldDisableRem;
9071
9396
  var _useWarningsTranslati = useWarningsTranslation(),
9072
9397
  t = _useWarningsTranslati.t;
9073
9398
  var minSize = DEFAULT_LOADER_MIN_SIZE;
@@ -9144,7 +9469,8 @@ var AreaObjectLoader = function AreaObjectLoader(_ref) {
9144
9469
  onAddArea: onAddArea,
9145
9470
  onRemoveArea: onRemoveArea,
9146
9471
  selectedAreas: selectedAreas,
9147
- isChangeAreaDisabled: isChangeAreaDisabled
9472
+ isChangeAreaDisabled: isChangeAreaDisabled,
9473
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
9148
9474
  })]
9149
9475
  })]
9150
9476
  });
@@ -9355,6 +9681,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
9355
9681
  type: areaObjectLoaderType,
9356
9682
  error: uiError
9357
9683
  } : undefined;
9684
+ var shouldDisableRemoveWarning = warningStatus !== undefined && warningStatus !== PublicWarningStatus.DRAFT && areas.length > 0;
9358
9685
  return jsx(AreaObjectLoader, {
9359
9686
  title: t('area-object-loader-title'),
9360
9687
  bounds: bounds,
@@ -9379,7 +9706,8 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
9379
9706
  onRemoveArea: onRemoveArea,
9380
9707
  selectedAreas: selectedAreas,
9381
9708
  isChangeAreaDisabled: isChangeAreaDisabled,
9382
- onRetryRequest: onRetryRequest
9709
+ onRetryRequest: onRetryRequest,
9710
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
9383
9711
  });
9384
9712
  };
9385
9713
 
@@ -9850,10 +10178,12 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9850
10178
  return setAnchorEl(null);
9851
10179
  },
9852
10180
  anchorEl: anchorEl,
9853
- BackdropProps: {
9854
- style: {
9855
- opacity: 0,
9856
- transition: 'none'
10181
+ slotProps: {
10182
+ backdrop: {
10183
+ style: {
10184
+ opacity: 0,
10185
+ transition: 'none'
10186
+ }
9857
10187
  }
9858
10188
  },
9859
10189
  sx: {
@@ -9898,8 +10228,10 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9898
10228
  justifyContent: "space-between",
9899
10229
  alignItems: "center",
9900
10230
  children: [t('filter-select-all'), jsx(Switch, {
9901
- inputProps: {
9902
- 'aria-label': t('filter-select-all')
10231
+ slotProps: {
10232
+ input: {
10233
+ 'aria-label': t('filter-select-all')
10234
+ }
9903
10235
  },
9904
10236
  checked: allSelected,
9905
10237
  onChange: function onChange() {
@@ -9967,7 +10299,7 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9967
10299
  });
9968
10300
  };
9969
10301
 
9970
- var filterOrder = ['incident', 'source', 'domain', 'phenomenon', 'level'];
10302
+ var filterOrder = ['source', 'domain', 'phenomenon', 'level'];
9971
10303
  var FilterList = function FilterList(_ref) {
9972
10304
  var _ref$onClickAll = _ref.onClickAll,
9973
10305
  onClickAll = _ref$onClickAll === void 0 ? function () {} : _ref$onClickAll,
@@ -10051,6 +10383,7 @@ var WarningListItemSeperator = function WarningListItemSeperator(_ref) {
10051
10383
  },
10052
10384
  onClick: onClick,
10053
10385
  "data-testid": "warninglist-" + status,
10386
+ "aria-expanded": isExpanded,
10054
10387
  children: [isExpanded ? jsx(ChevronDown, {}) : jsx(ChevronUp, {}), jsx(Typography, {
10055
10388
  variant: "caption",
10056
10389
  sx: {
@@ -10388,6 +10721,16 @@ var WarningListItem = function WarningListItem(_ref) {
10388
10721
  }
10389
10722
  return 'geowebColors.cards.cardContainer';
10390
10723
  }, [highlightedItem, status]);
10724
+ var domain = React__default.useMemo(function () {
10725
+ var _warning$warningDetai2;
10726
+ if ((_warning$warningDetai2 = warning.warningDetail.domain) != null && _warning$warningDetai2.includes(Domain.maritime)) {
10727
+ return t('warning-domain-maritime');
10728
+ }
10729
+ if (warning.warningDetail.domain === Domain["public"]) {
10730
+ return t('warning-domain-public');
10731
+ }
10732
+ return t('warning-domain-aviation');
10733
+ }, [t, warning.warningDetail.domain]);
10391
10734
  return jsx(ListItem, Object.assign({
10392
10735
  sx: {
10393
10736
  marginBottom: 0.25,
@@ -10465,7 +10808,7 @@ var WarningListItem = function WarningListItem(_ref) {
10465
10808
  }), jsx(WarningListColumnContent, {
10466
10809
  title: t('warning-list-header-domain'),
10467
10810
  status: status,
10468
- children: warning.warningDetail.domain
10811
+ children: domain
10469
10812
  }), jsx(WarningListColumnContent, {
10470
10813
  title: t('warning-list-header-phenomenon'),
10471
10814
  status: status,
@@ -10533,8 +10876,8 @@ var WarningListItem = function WarningListItem(_ref) {
10533
10876
  display: 'none'
10534
10877
  }
10535
10878
  }, _Object$assign)),
10536
- children: function (_warning$warningDetai2) {
10537
- if ((_warning$warningDetai2 = warning.warningDetail) != null && _warning$warningDetai2.level && !levelTranslation) {
10879
+ children: function (_warning$warningDetai3) {
10880
+ if ((_warning$warningDetai3 = warning.warningDetail) != null && _warning$warningDetai3.level && !levelTranslation) {
10538
10881
  // Show sigmet-airmet level
10539
10882
  return warning.warningDetail.level;
10540
10883
  }
@@ -10669,11 +11012,11 @@ var NewWarningButton = function NewWarningButton(_ref) {
10669
11012
  }
10670
11013
  }
10671
11014
  }
10672
- }
10673
- },
10674
- MenuListProps: {
10675
- style: {
10676
- padding: '0px'
11015
+ },
11016
+ list: {
11017
+ style: {
11018
+ padding: '0px'
11019
+ }
10677
11020
  }
10678
11021
  },
10679
11022
  children: [jsx(MenuItem, {
@@ -11184,8 +11527,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11184
11527
  var savedDomainFilter = savedFilterState.domain,
11185
11528
  savedPhenomenonFilter = savedFilterState.phenomenon,
11186
11529
  savedLevelFilter = savedFilterState.level,
11187
- savedSourceFilter = savedFilterState.source,
11188
- savedIncidentFilter = savedFilterState.incident;
11530
+ savedSourceFilter = savedFilterState.source;
11189
11531
  /** Levels for selected domain(s) */
11190
11532
  var relevantLevels = useMemo(function () {
11191
11533
  return getLevelsForDomainFilter(savedDomainFilter);
@@ -11223,28 +11565,14 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11223
11565
  [relevantSources]);
11224
11566
  var _getSelectedOptions2 = getSelectedOptions(savedSourceFilter),
11225
11567
  allSourcesSelected = _getSelectedOptions2.allSelected;
11226
- /** Incidents in the warnings */
11227
- var relevantIncidents = useMemo(function () {
11228
- return getFiltersFromWarnings(warnings, 'incident');
11229
- }, [warnings]);
11230
- /** FilterObject based on relevant incidents with values from the preset */
11231
- var defaultIncidentFilter = useMemo(function () {
11232
- return Object.fromEntries(relevantIncidents.map(function (key) {
11233
- var presetValue = presetFilterState == null ? void 0 : presetFilterState.incident[key];
11234
- return [key, presetValue === undefined ? true : presetValue];
11235
- }));
11236
- }, [relevantIncidents, presetFilterState == null ? void 0 : presetFilterState.incident]);
11237
- var _getSelectedOptions3 = getSelectedOptions(savedIncidentFilter),
11238
- allIncidentsSelected = _getSelectedOptions3.allSelected;
11239
11568
  var populatedIncidentAndSourceFilter = useMemo(function () {
11240
11569
  return {
11241
- incident: defaultIncidentFilter,
11570
+ // incident: defaultIncidentFilter,
11242
11571
  source: defaultSourceFilter
11243
11572
  };
11244
- }, [defaultIncidentFilter, defaultSourceFilter]);
11573
+ }, [defaultSourceFilter]);
11245
11574
  var initialFiltersWithPresets = useMemo(function () {
11246
11575
  return {
11247
- incident: defaultIncidentFilter || defaultEmptyFilter,
11248
11576
  source: defaultSourceFilter || defaultEmptyFilter,
11249
11577
  domain: Object.assign({}, initialFilters.domain, presetFilterState == null ? void 0 : presetFilterState.domain),
11250
11578
  phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState == null ? void 0 : presetFilterState.phenomenon),
@@ -11259,11 +11587,10 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11259
11587
  useEffect(function () {
11260
11588
  // when the preset changes, update the filters
11261
11589
  onUpdateFilters(initialFiltersWithPresets, true);
11262
- // eslint-disable-next-line react-hooks/exhaustive-deps
11263
11590
  }, [initialFiltersWithPresets, onUpdateFilters]);
11264
- var _getSelectedOptions4 = getSelectedOptions(savedDomainFilter),
11265
- allDomainSelected = _getSelectedOptions4.allSelected;
11266
- var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allIncidentsSelected && allSourcesSelected;
11591
+ var _getSelectedOptions3 = getSelectedOptions(savedDomainFilter),
11592
+ allDomainSelected = _getSelectedOptions3.allSelected;
11593
+ var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allSourcesSelected;
11267
11594
  /**
11268
11595
  * @param filterKey - Name of the filter | "ALL" filters
11269
11596
  * @param optionKey - Name of the option | "ALL" options
@@ -11277,7 +11604,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11277
11604
  domain: updateState(savedDomainFilter, 'ALL', value),
11278
11605
  level: updateState(levelFilter, 'ALL', value),
11279
11606
  phenomenon: updateState(savedPhenomenonFilter, 'ALL', value),
11280
- incident: updateState(savedIncidentFilter, 'ALL', value),
11607
+ // incident: updateState(savedIncidentFilter, 'ALL', value),
11281
11608
  source: updateState(savedSourceFilter, 'ALL', value)
11282
11609
  });
11283
11610
  } else if (filterKey === 'domain') {
@@ -11297,10 +11624,6 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11297
11624
  onUpdateFilters({
11298
11625
  source: updateState(savedSourceFilter, optionKey, value, only)
11299
11626
  });
11300
- } else if (filterKey === 'incident') {
11301
- onUpdateFilters({
11302
- incident: updateState(savedIncidentFilter, optionKey, value, only)
11303
- });
11304
11627
  }
11305
11628
  };
11306
11629
  var byFilterState = useCallback(function (warning) {
@@ -11330,14 +11653,8 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11330
11653
  if (!savedSourceFilter[source]) {
11331
11654
  return false;
11332
11655
  }
11333
- var incident = relevantIncidents.find(function (incident) {
11334
- return incident === warning.warningDetail.incident;
11335
- }) || emptyFilterId;
11336
- if (!savedIncidentFilter[incident]) {
11337
- return false;
11338
- }
11339
11656
  return true;
11340
- }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter, relevantIncidents, savedIncidentFilter]);
11657
+ }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter]);
11341
11658
  return {
11342
11659
  allSelected: allSelected,
11343
11660
  updateFilter: updateFilter,
@@ -11346,7 +11663,6 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11346
11663
  domain: savedDomainFilter,
11347
11664
  level: pickedLevelFilter,
11348
11665
  phenomenon: pickedPhenomenaFilter,
11349
- incident: savedIncidentFilter,
11350
11666
  source: savedSourceFilter
11351
11667
  }
11352
11668
  };
@@ -11811,8 +12127,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11811
12127
  return combinedWarnings.filter(filterHookState.byFilterState);
11812
12128
  }, [combinedWarnings, filterHookState.byFilterState]);
11813
12129
  var _React$useState2 = React__default.useState({
11814
- TODO: true,
11815
- DRAFT: true,
12130
+ TODO: false,
12131
+ DRAFT: false,
11816
12132
  PUBLISHED: true,
11817
12133
  EXPIRED: false
11818
12134
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/warnings",
3
- "version": "13.1.1",
3
+ "version": "14.0.0",
4
4
  "description": "GeoWeb warinings library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,25 +8,25 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "@opengeoweb/api": "13.1.1",
12
- "@opengeoweb/shared": "13.1.1",
13
- "@opengeoweb/store": "13.1.1",
14
- "@opengeoweb/webmap-react": "13.1.1",
11
+ "@opengeoweb/api": "14.0.0",
12
+ "@opengeoweb/shared": "14.0.0",
13
+ "@opengeoweb/store": "14.0.0",
14
+ "@opengeoweb/webmap-react": "14.0.0",
15
15
  "@tanstack/react-query": "^5.85.5",
16
16
  "react-redux": "^9.2.0",
17
- "@opengeoweb/theme": "13.1.1",
18
- "@opengeoweb/form-fields": "13.1.1",
17
+ "@opengeoweb/theme": "14.0.0",
18
+ "@opengeoweb/form-fields": "14.0.0",
19
19
  "react-hook-form": "^7.50.1",
20
20
  "lodash": "^4.17.21",
21
21
  "@reduxjs/toolkit": "^2.6.1",
22
- "@opengeoweb/snackbar": "13.1.1",
22
+ "@opengeoweb/snackbar": "14.0.0",
23
23
  "react-window": "^1.8.10",
24
24
  "react-virtualized-auto-sizer": "^1.0.20",
25
25
  "axios": "^1.7.7",
26
- "@opengeoweb/core": "13.1.1",
27
- "@opengeoweb/webmap": "13.1.1",
28
- "@opengeoweb/authentication": "13.1.1",
29
- "@opengeoweb/sigmet-airmet": "13.1.1",
26
+ "@opengeoweb/core": "14.0.0",
27
+ "@opengeoweb/webmap": "14.0.0",
28
+ "@opengeoweb/authentication": "14.0.0",
29
+ "@opengeoweb/sigmet-airmet": "14.0.0",
30
30
  "react-i18next": "^15.1.1",
31
31
  "i18next": "^25.0.1",
32
32
  "@mui/material": "^7.0.1",
@@ -13,5 +13,11 @@ export declare const getAirmetTAC: (auth: Credentials, product: AviationProduct)
13
13
  export declare const getSigmetTAC: (auth: Credentials, product: AviationProduct) => Promise<{
14
14
  data: string;
15
15
  }>;
16
+ export declare const getAirmetCancelTAC: (auth: Credentials, product: AviationProduct) => Promise<{
17
+ data: string;
18
+ }>;
19
+ export declare const getSigmetCancelTAC: (auth: Credentials, product: AviationProduct) => Promise<{
20
+ data: string;
21
+ }>;
16
22
  export declare const postSigmet: (auth: Credentials, data: SigmetFromFrontend) => Promise<SigmetFromBackend>;
17
23
  export declare const postAirmet: (auth: Credentials, data: AirmetFromFrontend) => Promise<AirmetFromBackend>;
@@ -3,4 +3,6 @@ export declare const airmetList: AirmetFromBackend[];
3
3
  export declare const sigmetList: SigmetFromBackend[];
4
4
  export declare const fakeSigmetTAC = "EHAA SIGMET 1 VALID 121249/121449 EHDB- EHAA AMSTERDAM FIR FRQ TS OBS ENTIRE FIR FL010 STNR WKN";
5
5
  export declare const fakeAirmetTAC = "EHAA AIRMET -1 VALID 310700/311100 EHDB- EHAA AMSTERDAM FIR ISOL CB OBS ENTIRE FIR FL020 STNR NC";
6
+ export declare const fakeDraftCancelSigmetTAC = "EHAA SIGMET 2 121249/121449 EHDB- EHAA AMSTERDAM FIR";
7
+ export declare const fakeDraftCancelAirmetTAC = "EHAA AIRMET 2 310700/311100 EHDB- EHAA AMSTERDAM FIR ";
6
8
  export declare const aviationEndpoints: import("msw").HttpHandler[];
@@ -12,6 +12,8 @@ type FetchTACData = Promise<{
12
12
  export declare const useTACApi: () => {
13
13
  fetchSigmetTAC: (product: AviationProduct) => FetchTACData;
14
14
  fetchAirmetTAC: (product: AviationProduct) => FetchTACData;
15
+ fetchSigmetCancelTAC: (product: AviationProduct) => FetchTACData;
16
+ fetchAirmetCancelTAC: (product: AviationProduct) => FetchTACData;
15
17
  };
16
18
  /**
17
19
  * Hook for posting a SIGMET, with feedback.
@@ -31,7 +31,7 @@ export declare const useMutateDeleteWarning: () => MutationReturnType<{
31
31
  export declare const usePublishWarning: () => MutationReturnType<UpdateWarningProps>;
32
32
  export declare const useSaveWarning: () => MutationReturnType<UpdateWarningProps>;
33
33
  export declare const useDrawings: (params?: FetchDrawingParams, enabled?: boolean) => UseQueryResult<DrawingListItem[]>;
34
- export declare const useDrawingDetails: (drawingId: string, enabled?: boolean) => UseQueryResult<DrawingFromBE>;
34
+ export declare const useDrawingDetails: (drawingId: string) => UseQueryResult<DrawingFromBE>;
35
35
  export declare const useAreaKeywords: (enabled?: boolean) => UseQueryResult<string[]>;
36
36
  export declare const useMutateSaveOrUpdateDrawing: () => DrawingMutationReturnType<{
37
37
  data: DrawingFromFE;
@@ -24,4 +24,5 @@ export declare const AreaObjectLoader: React.FC<{
24
24
  selectedAreas?: Area[];
25
25
  isChangeAreaDisabled?: boolean;
26
26
  onRetryRequest?: (errorType: string) => void;
27
+ shouldDisableRemoveWarning?: boolean;
27
28
  } & AreaObjectFilterProps>;
@@ -11,6 +11,7 @@ export declare const getListInclHeaders: (items: DrawingListItem[], translateFn:
11
11
  objects: ObjectAreaList;
12
12
  areas: ObjectAreaList;
13
13
  };
14
+ export declare const getLabel: (selectedAreas: Area[], isAreaSelected: boolean) => string;
14
15
  export declare const getDisplayDate: (date: string) => string;
15
16
  export declare const AreasObjects: FC<{
16
17
  drawingListItems: DrawingListItem[];
@@ -21,5 +22,6 @@ export declare const AreasObjects: FC<{
21
22
  onRemoveArea?: (drawingListItem: DrawingListItem) => void;
22
23
  selectedAreas?: Area[];
23
24
  isChangeAreaDisabled?: boolean;
25
+ shouldDisableRemoveWarning?: boolean;
24
26
  }>;
25
27
  export {};
@@ -1,14 +1,12 @@
1
1
  import { Warning } from '../../store/publicWarningForm/types';
2
2
  import { AllPhenomenaKeys, defaultDomainFilter, defaultEmptyFilter, defaultLevelFilter, defaultPhenomenonFilter, Domain } from './filter-utils';
3
3
  export interface PickedFilterState {
4
- incident: Partial<typeof defaultEmptyFilter>;
5
4
  source: Partial<typeof defaultEmptyFilter>;
6
5
  domain: Partial<typeof defaultDomainFilter>;
7
6
  phenomenon: Partial<typeof defaultPhenomenonFilter>;
8
7
  level: Partial<typeof defaultLevelFilter>;
9
8
  }
10
9
  export interface FilterState extends PickedFilterState {
11
- incident: typeof defaultEmptyFilter;
12
10
  source: typeof defaultEmptyFilter;
13
11
  domain: typeof defaultDomainFilter;
14
12
  phenomenon: typeof defaultPhenomenonFilter;
@@ -76,7 +76,6 @@ export declare const AllPhenomenaKeys: Record<keyof typeof AllPhenomena, keyof t
76
76
  export declare const domainPhenomena: Record<Domain, Partial<keyof typeof AllPhenomenaKeys>[]>;
77
77
  export declare const defaultPhenomenonFilter: Record<string, boolean>;
78
78
  export declare const initialFilters: {
79
- incident: Record<string, boolean>;
80
79
  source: Record<string, boolean>;
81
80
  domain: Record<Domain, boolean>;
82
81
  phenomenon: Record<string, boolean>;
@@ -1,12 +1,12 @@
1
1
  import { DistrictsType, MaritimeWarningItem, MaritimeWarningsConfig } from './types';
2
- interface UseConfirmRetractDialogProps {
2
+ interface UseConfirmDeleteDialogProps {
3
3
  areas: DistrictsType[];
4
4
  warnings: MaritimeWarningItem[];
5
5
  maritimeConfig: MaritimeWarningsConfig;
6
6
  onRemoveWarning: (id: string) => void;
7
7
  }
8
- interface UseConfirmRetractDialog {
8
+ interface UseConfirmDeleteDialog {
9
9
  onRemoveWarningWithConfirmation(id: string): Promise<void>;
10
10
  }
11
- export declare function useConfirmRetractDialog({ areas, warnings, maritimeConfig, onRemoveWarning, }: UseConfirmRetractDialogProps): UseConfirmRetractDialog;
11
+ export declare function useConfirmDeleteDialog({ areas, warnings, maritimeConfig, onRemoveWarning, }: UseConfirmDeleteDialogProps): UseConfirmDeleteDialog;
12
12
  export {};
@@ -25,3 +25,11 @@ export declare const PublicWarningsFormAirmetCancels: () => React.ReactElement;
25
25
  export declare const PublicWarningsFormAirmetCancelled: () => React.ReactElement;
26
26
  export declare const PublicWarningsFormSigmetCancels: () => React.ReactElement;
27
27
  export declare const PublicWarningsFormSigmetCancelled: () => React.ReactElement;
28
+ export declare const PublicWarningsFormCancelAirmet: {
29
+ (): React.ReactElement;
30
+ tags: string[];
31
+ };
32
+ export declare const PublicWarningsFormCancelSigmet: {
33
+ (): React.ReactElement;
34
+ tags: string[];
35
+ };
@@ -1,8 +1,18 @@
1
1
  import * as React from 'react';
2
2
  import { TFunction } from 'i18next';
3
3
  export declare const VALID_FROM_MAX_HOURS_AFTER_CURRENT = 192;
4
+ export declare const VALID_UNTIL_DEFAULT_OFFSET = 6;
4
5
  export declare const isValueBeforeCurrentTime: (value: string, t: TFunction) => boolean | string;
5
6
  export declare const isMaxHoursAfterCurrentTime: (value: string, t: TFunction) => boolean | string;
7
+ /**
8
+ * Automatically adjusts the valid until field when valid from is changed
9
+ * If the new valid from time is after the current valid until time,
10
+ * it sets valid until to 6 hours after valid from
11
+ * @param validFrom - The new valid from ISO date string
12
+ * @param validUntil - The current valid until ISO date string
13
+ * @returns The adjusted valid until ISO date string, or null if no adjustment needed
14
+ */
15
+ export declare const offsetTimeValidUntilField: (validFrom: string, validUntil: string) => string | null;
6
16
  export declare const ValidFrom: React.FC<{
7
17
  isDisabled?: boolean;
8
18
  isReadOnly?: boolean;
@@ -0,0 +1,7 @@
1
+ import { AviationProduct } from '@opengeoweb/sigmet-airmet';
2
+ import React from 'react';
3
+ import { WarningType } from '../../store/publicWarningForm/types';
4
+ export declare const CancelAviationDialogContent: ({ product, warningType, }: {
5
+ product: AviationProduct;
6
+ warningType: WarningType;
7
+ }) => React.ReactElement;