@opengeoweb/warnings 13.2.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,
@@ -2448,7 +2458,6 @@ var domainPhenomena = {
2448
2458
  };
2449
2459
  var defaultPhenomenonFilter = makeFilterFromList(Object.keys(AllPhenomenaKeys));
2450
2460
  var initialFilters = {
2451
- incident: defaultEmptyFilter,
2452
2461
  source: defaultEmptyFilter,
2453
2462
  domain: defaultDomainFilter,
2454
2463
  phenomenon: defaultPhenomenonFilter,
@@ -3206,15 +3215,12 @@ var useDrawings = function useDrawings(params, enabled) {
3206
3215
  }
3207
3216
  return useAuthQuery(['drawings', JSON.stringify(params)], function (auth) {
3208
3217
  return getDrawings(auth, params);
3209
- }, enabled);
3218
+ }, !enabled);
3210
3219
  };
3211
- var useDrawingDetails = function useDrawingDetails(drawingId, enabled) {
3212
- if (enabled === void 0) {
3213
- enabled = true;
3214
- }
3220
+ var useDrawingDetails = function useDrawingDetails(drawingId) {
3215
3221
  return useAuthQuery(['drawing-details', JSON.stringify(drawingId)], function (auth) {
3216
3222
  return getDrawingDetails(auth, drawingId);
3217
- }, enabled);
3223
+ }, !drawingId);
3218
3224
  };
3219
3225
  var useAreaKeywords = function useAreaKeywords(enabled) {
3220
3226
  if (enabled === void 0) {
@@ -3469,9 +3475,9 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3469
3475
  var _useState = useState(),
3470
3476
  selectedDrawingId = _useState[0],
3471
3477
  setSelectedDrawingId = _useState[1];
3472
- var _useDrawingDetails = useDrawingDetails(selectedDrawingId, !selectedDrawingId),
3478
+ var _useDrawingDetails = useDrawingDetails(selectedDrawingId),
3473
3479
  drawingDetails = _useDrawingDetails.data,
3474
- isLoadingDetails = _useDrawingDetails.isLoading,
3480
+ isFetchingDetails = _useDrawingDetails.isFetching,
3475
3481
  drawingError = _useDrawingDetails.error;
3476
3482
  var dispatch = useDispatch();
3477
3483
  var mapId = useSelector(function (store) {
@@ -3494,7 +3500,8 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3494
3500
  var _useDrawings = useDrawings({}, isDialogOpen),
3495
3501
  _useDrawings$data = _useDrawings.data,
3496
3502
  drawings = _useDrawings$data === void 0 ? [] : _useDrawings$data,
3497
- error = _useDrawings.error;
3503
+ error = _useDrawings.error,
3504
+ isFetchingList = _useDrawings.isFetching;
3498
3505
  useEffect(function () {
3499
3506
  if (error || !isLoggedIn) {
3500
3507
  var _error$message;
@@ -3655,7 +3662,7 @@ var ObjectManagerConnect = function ObjectManagerConnect(_ref) {
3655
3662
  onCreateNewObject: onCreateNewObject,
3656
3663
  activeDrawingId: activeDrawingId,
3657
3664
  error: uiError,
3658
- isLoading: isLoadingDetails
3665
+ isLoading: isFetchingDetails || isFetchingList
3659
3666
  }), confirmDialogOptions && jsx(ConfirmDeleteDialog, Object.assign({}, confirmDialogOptions, {
3660
3667
  onDeleteSucces: onDeleteSuccess,
3661
3668
  onClose: function onClose() {
@@ -4585,6 +4592,77 @@ var getSigmetTAC = function getSigmetTAC(auth, product) {
4585
4592
  };
4586
4593
  }());
4587
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
+ };
4588
4666
  var postSigmet = function postSigmet(auth, data) {
4589
4667
  return fetch(sigmetBaseUrl + "/sigmet", {
4590
4668
  headers: getHeaders(auth),
@@ -4661,9 +4739,29 @@ var useTACApi = function useTACApi() {
4661
4739
  staleTime: 1000 * 15
4662
4740
  });
4663
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
+ };
4664
4760
  return {
4665
4761
  fetchSigmetTAC: fetchSigmetTAC,
4666
- fetchAirmetTAC: fetchAirmetTAC
4762
+ fetchAirmetTAC: fetchAirmetTAC,
4763
+ fetchSigmetCancelTAC: fetchSigmetCancelTAC,
4764
+ fetchAirmetCancelTAC: fetchAirmetCancelTAC
4667
4765
  };
4668
4766
  };
4669
4767
  /**
@@ -5194,6 +5292,8 @@ var AreaField = function AreaField(_ref) {
5194
5292
  var geoJSON = getValues('areas[0].geoJSON');
5195
5293
  var objectName = getObjectName(geoJSON, getValues('areas[0].objectName'), t);
5196
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');
5197
5297
  return jsxs(Fragment, {
5198
5298
  children: [jsx(Typography, Object.assign({
5199
5299
  variant: "h3",
@@ -5283,7 +5383,7 @@ var AreaField = function AreaField(_ref) {
5283
5383
  size: "small",
5284
5384
  onClick: onAddObject,
5285
5385
  disabled: isDisabled,
5286
- children: t('warning-button-add-object')
5386
+ children: areaButtonTitle
5287
5387
  })]
5288
5388
  });
5289
5389
  };
@@ -5596,6 +5696,7 @@ var ProbabilityField = function ProbabilityField(_ref) {
5596
5696
  };
5597
5697
 
5598
5698
  var VALID_FROM_MAX_HOURS_AFTER_CURRENT = 192;
5699
+ var VALID_UNTIL_DEFAULT_OFFSET = 6;
5599
5700
  var _isValueBeforeCurrentTime$1 = function isValueBeforeCurrentTime(value, t) {
5600
5701
  return isXHoursBefore(value, dateUtils.getCurrentTimeAsString(), 0) || t('warning-valid-from-error-before-current');
5601
5702
  };
@@ -5605,6 +5706,16 @@ var _isMaxHoursAfterCurrentTime$1 = function isMaxHoursAfterCurrentTime(value, t
5605
5706
  MAX_HOURS: VALID_FROM_MAX_HOURS_AFTER_CURRENT
5606
5707
  });
5607
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
+ };
5608
5719
  var ValidFrom = function ValidFrom(_ref) {
5609
5720
  var isDisabled = _ref.isDisabled,
5610
5721
  isReadOnly = _ref.isReadOnly;
@@ -5613,8 +5724,22 @@ var ValidFrom = function ValidFrom(_ref) {
5613
5724
  var _useDraftFormHelpers = useDraftFormHelpers(),
5614
5725
  isRequired = _useDraftFormHelpers.isRequired;
5615
5726
  var _useFormContext = useFormContext(),
5616
- trigger = _useFormContext.trigger;
5617
- 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
5618
5743
  void trigger(['validFrom', 'validUntil']);
5619
5744
  };
5620
5745
  return jsx(ReactHookFormDateTime, {
@@ -6335,7 +6460,7 @@ var WarningListItem$1 = /*#__PURE__*/React__default.memo(function (_ref) {
6335
6460
  return onRemove(warning.id);
6336
6461
  },
6337
6462
  "aria-label": t('maritime-delete-button'),
6338
- tooltipTitle: t('maritime-retract-warning'),
6463
+ tooltipTitle: t('maritime-delete-warning'),
6339
6464
  children: jsx(Delete, {})
6340
6465
  })]
6341
6466
  });
@@ -6654,7 +6779,7 @@ function useMaritimeWarningsFormState() {
6654
6779
  return React__default.useReducer(reducer, initialState);
6655
6780
  }
6656
6781
 
6657
- function useConfirmRetractDialog(_ref) {
6782
+ function useConfirmDeleteDialog(_ref) {
6658
6783
  var areas = _ref.areas,
6659
6784
  warnings = _ref.warnings,
6660
6785
  maritimeConfig = _ref.maritimeConfig,
@@ -6682,7 +6807,7 @@ function useConfirmRetractDialog(_ref) {
6682
6807
  }, [t]);
6683
6808
  var getWarningDescription = React__default.useCallback(function (warning) {
6684
6809
  if (!isPublishedWarning(warning)) {
6685
- return t('maritime-retract-dialog-empty-warning-description');
6810
+ return t('maritime-delete-dialog-empty-warning-description');
6686
6811
  }
6687
6812
  var windDirectionFromLabel = getLabelFromWindDirectionConfig(maritimeConfig.windDirectionDefinition, warning.windDirectionFrom);
6688
6813
  var areasById = new Map(areas.map(function (area) {
@@ -6691,11 +6816,11 @@ function useConfirmRetractDialog(_ref) {
6691
6816
  var areaLabels = warning.assignedAreaIds.map(function (areaId) {
6692
6817
  return areasById.get(areaId).districtName;
6693
6818
  });
6694
- 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);
6695
6820
  var warningDescription = [windDirectionFromLabel + " " + t('maritime-windforce', {
6696
6821
  value: warning.windForce
6697
6822
  })].concat(areaLabels, [changeToLabel]).join(', ');
6698
- return warningDescription + ". " + t('maritime-retract-dialog-description-suffix');
6823
+ return warningDescription + ". " + t('maritime-delete-dialog-description-suffix');
6699
6824
  }, [getLabelFromWindDirectionConfig, maritimeConfig.windDirectionDefinition, maritimeConfig.changeType, areas, t, getLabelFromChangeConfig]);
6700
6825
  return {
6701
6826
  onRemoveWarningWithConfirmation: React__default.useCallback(/*#__PURE__*/function () {
@@ -6709,9 +6834,9 @@ function useConfirmRetractDialog(_ref) {
6709
6834
  });
6710
6835
  _context.next = 3;
6711
6836
  return confirmDialog({
6712
- title: t('maritime-retract-warning'),
6837
+ title: t('maritime-delete-warning'),
6713
6838
  description: '',
6714
- confirmLabel: t('maritime-retract-dialog-confirm'),
6839
+ confirmLabel: t('maritime-delete-dialog-confirm'),
6715
6840
  cancelLabel: t('close-dialog-cancel'),
6716
6841
  content: getWarningDescription(warning)
6717
6842
  });
@@ -6932,13 +7057,13 @@ var MaritimeWarningsForm = function MaritimeWarningsForm(_ref) {
6932
7057
  var disabledAreaIds = warnings.flatMap(function (warning) {
6933
7058
  return warning.assignedAreaIds;
6934
7059
  });
6935
- var _useConfirmRetractDia = useConfirmRetractDialog({
7060
+ var _useConfirmDeleteDial = useConfirmDeleteDialog({
6936
7061
  areas: areas,
6937
7062
  warnings: warnings,
6938
7063
  maritimeConfig: maritimeConfig,
6939
7064
  onRemoveWarning: onRemoveWarning
6940
7065
  }),
6941
- onRemoveWarningWithConfirmation = _useConfirmRetractDia.onRemoveWarningWithConfirmation;
7066
+ onRemoveWarningWithConfirmation = _useConfirmDeleteDial.onRemoveWarningWithConfirmation;
6942
7067
  var onClearWithConfirmation = React__default.useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
6943
7068
  return _regeneratorRuntime().wrap(function _callee$(_context) {
6944
7069
  while (1) switch (_context.prev = _context.next) {
@@ -7489,6 +7614,173 @@ var MaritimeWarningsFormConnect = function MaritimeWarningsFormConnect(_ref) {
7489
7614
  });
7490
7615
  };
7491
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
+
7492
7784
  var _excluded$3 = ["IS_DRAFT", "object", "translation-select"];
7493
7785
  var useScrollTopOnError = function useScrollTopOnError(error) {
7494
7786
  var ref = React.useRef(null);
@@ -7760,12 +8052,12 @@ var Form = function Form(_ref5) {
7760
8052
  var _useTACApi = useTACApi(),
7761
8053
  fetchSigmetTAC = _useTACApi.fetchSigmetTAC,
7762
8054
  fetchAirmetTAC = _useTACApi.fetchAirmetTAC;
7763
- var _useShortTestHelpers = useShortTestHelpers(),
7764
- isShortTest = _useShortTestHelpers.isShortTest;
7765
8055
  var confirmationDialog = useConfirmationDialog();
7766
8056
  var formMethods = useForm({
7767
8057
  defaultValues: {}
7768
8058
  });
8059
+ var _useShortTestHelpers = useShortTestHelpers(),
8060
+ isShortTest = _useShortTestHelpers.isShortTest;
7769
8061
  var endOfWarningValidity = publicWarningDetails == null ? void 0 : publicWarningDetails.validUntil;
7770
8062
  React.useEffect(function () {
7771
8063
  if (!endOfWarningValidity || formState !== 'amending') {
@@ -7872,7 +8164,12 @@ var Form = function Form(_ref5) {
7872
8164
  confirmLabel: getConfirmationDialogButtonLabel(t, action, warningType || 'airmet'),
7873
8165
  cancelLabel: getConfirmationDialogCancelLabel(t, action),
7874
8166
  catchOnCancel: action === ProductAction.CLOSE,
7875
- 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, {
7876
8173
  children: jsx(CancelSigmetVolcanicMovements, {
7877
8174
  sigmet: selectedAviationProduct,
7878
8175
  productConfig: aviationConfig
@@ -8798,6 +9095,12 @@ var getListInclHeaders = function getListInclHeaders(items, translateFn) {
8798
9095
  }
8799
9096
  };
8800
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
+ };
8801
9104
  var getDisplayDate = function getDisplayDate(date) {
8802
9105
  return dateUtils.dateToString(dateUtils.utc(date), dateUtils.DATE_FORMAT_NAME_OF_DAY) + " UTC";
8803
9106
  };
@@ -8807,26 +9110,41 @@ var ListItemAction = function ListItemAction(_ref2) {
8807
9110
  onAddArea = _ref2.onAddArea,
8808
9111
  onRemoveArea = _ref2.onRemoveArea,
8809
9112
  isDisabled = _ref2.isDisabled,
8810
- t = _ref2.t;
9113
+ t = _ref2.t,
9114
+ _ref2$shouldDisableRe = _ref2.shouldDisableRemoveWarning,
9115
+ shouldDisableRemoveWarning = _ref2$shouldDisableRe === void 0 ? false : _ref2$shouldDisableRe;
8811
9116
  var isAreaSelected = !!selectedAreas.find(function (area) {
8812
9117
  return area.objectName === listItem.objectName;
8813
9118
  });
8814
- var label = t(!isAreaSelected ? 'add-button' : 'remove-button');
9119
+ var label = t(getLabel(selectedAreas, isAreaSelected));
8815
9120
  var onClick = function onClick() {
8816
9121
  isAreaSelected ? onRemoveArea(listItem) : onAddArea(listItem);
8817
9122
  };
8818
- return jsx(CustomToggleButton, {
8819
- sx: {
8820
- fontSize: '12px',
8821
- height: '22px!important',
8822
- minWidth: '60px'
8823
- },
8824
- variant: "tool",
8825
- onClick: onClick,
8826
- selected: isAreaSelected,
8827
- disabled: isDisabled,
8828
- children: label
8829
- });
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();
8830
9148
  };
8831
9149
  var ContainerDiv = styled('div')(function () {
8832
9150
  return {
@@ -8864,7 +9182,9 @@ var AreasObjects = function AreasObjects(_ref3) {
8864
9182
  _ref3$selectedAreas = _ref3.selectedAreas,
8865
9183
  selectedAreas = _ref3$selectedAreas === void 0 ? [] : _ref3$selectedAreas,
8866
9184
  _ref3$isChangeAreaDis = _ref3.isChangeAreaDisabled,
8867
- 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;
8868
9188
  var _useWarningsTranslati = useWarningsTranslation(),
8869
9189
  t = _useWarningsTranslati.t;
8870
9190
  var listRef = React__default.useRef(null);
@@ -8951,7 +9271,8 @@ var AreasObjects = function AreasObjects(_ref3) {
8951
9271
  onAddArea: onAddArea,
8952
9272
  onRemoveArea: onRemoveArea,
8953
9273
  t: t,
8954
- isDisabled: isChangeAreaDisabled
9274
+ isDisabled: isChangeAreaDisabled,
9275
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
8955
9276
  }),
8956
9277
  children: jsx(Paper, {
8957
9278
  elevation: 0,
@@ -9069,7 +9390,9 @@ var AreaObjectLoader = function AreaObjectLoader(_ref) {
9069
9390
  _ref$onRetryRequest = _ref.onRetryRequest,
9070
9391
  onRetryRequest = _ref$onRetryRequest === void 0 ? function () {} : _ref$onRetryRequest,
9071
9392
  _ref$isChangeAreaDisa = _ref.isChangeAreaDisabled,
9072
- 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;
9073
9396
  var _useWarningsTranslati = useWarningsTranslation(),
9074
9397
  t = _useWarningsTranslati.t;
9075
9398
  var minSize = DEFAULT_LOADER_MIN_SIZE;
@@ -9146,7 +9469,8 @@ var AreaObjectLoader = function AreaObjectLoader(_ref) {
9146
9469
  onAddArea: onAddArea,
9147
9470
  onRemoveArea: onRemoveArea,
9148
9471
  selectedAreas: selectedAreas,
9149
- isChangeAreaDisabled: isChangeAreaDisabled
9472
+ isChangeAreaDisabled: isChangeAreaDisabled,
9473
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
9150
9474
  })]
9151
9475
  })]
9152
9476
  });
@@ -9357,6 +9681,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
9357
9681
  type: areaObjectLoaderType,
9358
9682
  error: uiError
9359
9683
  } : undefined;
9684
+ var shouldDisableRemoveWarning = warningStatus !== undefined && warningStatus !== PublicWarningStatus.DRAFT && areas.length > 0;
9360
9685
  return jsx(AreaObjectLoader, {
9361
9686
  title: t('area-object-loader-title'),
9362
9687
  bounds: bounds,
@@ -9381,7 +9706,8 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
9381
9706
  onRemoveArea: onRemoveArea,
9382
9707
  selectedAreas: selectedAreas,
9383
9708
  isChangeAreaDisabled: isChangeAreaDisabled,
9384
- onRetryRequest: onRetryRequest
9709
+ onRetryRequest: onRetryRequest,
9710
+ shouldDisableRemoveWarning: shouldDisableRemoveWarning
9385
9711
  });
9386
9712
  };
9387
9713
 
@@ -9852,10 +10178,12 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9852
10178
  return setAnchorEl(null);
9853
10179
  },
9854
10180
  anchorEl: anchorEl,
9855
- BackdropProps: {
9856
- style: {
9857
- opacity: 0,
9858
- transition: 'none'
10181
+ slotProps: {
10182
+ backdrop: {
10183
+ style: {
10184
+ opacity: 0,
10185
+ transition: 'none'
10186
+ }
9859
10187
  }
9860
10188
  },
9861
10189
  sx: {
@@ -9900,8 +10228,10 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9900
10228
  justifyContent: "space-between",
9901
10229
  alignItems: "center",
9902
10230
  children: [t('filter-select-all'), jsx(Switch, {
9903
- inputProps: {
9904
- 'aria-label': t('filter-select-all')
10231
+ slotProps: {
10232
+ input: {
10233
+ 'aria-label': t('filter-select-all')
10234
+ }
9905
10235
  },
9906
10236
  checked: allSelected,
9907
10237
  onChange: function onChange() {
@@ -9969,7 +10299,7 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
9969
10299
  });
9970
10300
  };
9971
10301
 
9972
- var filterOrder = ['incident', 'source', 'domain', 'phenomenon', 'level'];
10302
+ var filterOrder = ['source', 'domain', 'phenomenon', 'level'];
9973
10303
  var FilterList = function FilterList(_ref) {
9974
10304
  var _ref$onClickAll = _ref.onClickAll,
9975
10305
  onClickAll = _ref$onClickAll === void 0 ? function () {} : _ref$onClickAll,
@@ -10053,6 +10383,7 @@ var WarningListItemSeperator = function WarningListItemSeperator(_ref) {
10053
10383
  },
10054
10384
  onClick: onClick,
10055
10385
  "data-testid": "warninglist-" + status,
10386
+ "aria-expanded": isExpanded,
10056
10387
  children: [isExpanded ? jsx(ChevronDown, {}) : jsx(ChevronUp, {}), jsx(Typography, {
10057
10388
  variant: "caption",
10058
10389
  sx: {
@@ -10390,6 +10721,16 @@ var WarningListItem = function WarningListItem(_ref) {
10390
10721
  }
10391
10722
  return 'geowebColors.cards.cardContainer';
10392
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]);
10393
10734
  return jsx(ListItem, Object.assign({
10394
10735
  sx: {
10395
10736
  marginBottom: 0.25,
@@ -10467,7 +10808,7 @@ var WarningListItem = function WarningListItem(_ref) {
10467
10808
  }), jsx(WarningListColumnContent, {
10468
10809
  title: t('warning-list-header-domain'),
10469
10810
  status: status,
10470
- children: warning.warningDetail.domain
10811
+ children: domain
10471
10812
  }), jsx(WarningListColumnContent, {
10472
10813
  title: t('warning-list-header-phenomenon'),
10473
10814
  status: status,
@@ -10535,8 +10876,8 @@ var WarningListItem = function WarningListItem(_ref) {
10535
10876
  display: 'none'
10536
10877
  }
10537
10878
  }, _Object$assign)),
10538
- children: function (_warning$warningDetai2) {
10539
- 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) {
10540
10881
  // Show sigmet-airmet level
10541
10882
  return warning.warningDetail.level;
10542
10883
  }
@@ -10671,11 +11012,11 @@ var NewWarningButton = function NewWarningButton(_ref) {
10671
11012
  }
10672
11013
  }
10673
11014
  }
10674
- }
10675
- },
10676
- MenuListProps: {
10677
- style: {
10678
- padding: '0px'
11015
+ },
11016
+ list: {
11017
+ style: {
11018
+ padding: '0px'
11019
+ }
10679
11020
  }
10680
11021
  },
10681
11022
  children: [jsx(MenuItem, {
@@ -11186,8 +11527,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11186
11527
  var savedDomainFilter = savedFilterState.domain,
11187
11528
  savedPhenomenonFilter = savedFilterState.phenomenon,
11188
11529
  savedLevelFilter = savedFilterState.level,
11189
- savedSourceFilter = savedFilterState.source,
11190
- savedIncidentFilter = savedFilterState.incident;
11530
+ savedSourceFilter = savedFilterState.source;
11191
11531
  /** Levels for selected domain(s) */
11192
11532
  var relevantLevels = useMemo(function () {
11193
11533
  return getLevelsForDomainFilter(savedDomainFilter);
@@ -11225,28 +11565,14 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11225
11565
  [relevantSources]);
11226
11566
  var _getSelectedOptions2 = getSelectedOptions(savedSourceFilter),
11227
11567
  allSourcesSelected = _getSelectedOptions2.allSelected;
11228
- /** Incidents in the warnings */
11229
- var relevantIncidents = useMemo(function () {
11230
- return getFiltersFromWarnings(warnings, 'incident');
11231
- }, [warnings]);
11232
- /** FilterObject based on relevant incidents with values from the preset */
11233
- var defaultIncidentFilter = useMemo(function () {
11234
- return Object.fromEntries(relevantIncidents.map(function (key) {
11235
- var presetValue = presetFilterState == null ? void 0 : presetFilterState.incident[key];
11236
- return [key, presetValue === undefined ? true : presetValue];
11237
- }));
11238
- }, [relevantIncidents, presetFilterState == null ? void 0 : presetFilterState.incident]);
11239
- var _getSelectedOptions3 = getSelectedOptions(savedIncidentFilter),
11240
- allIncidentsSelected = _getSelectedOptions3.allSelected;
11241
11568
  var populatedIncidentAndSourceFilter = useMemo(function () {
11242
11569
  return {
11243
- incident: defaultIncidentFilter,
11570
+ // incident: defaultIncidentFilter,
11244
11571
  source: defaultSourceFilter
11245
11572
  };
11246
- }, [defaultIncidentFilter, defaultSourceFilter]);
11573
+ }, [defaultSourceFilter]);
11247
11574
  var initialFiltersWithPresets = useMemo(function () {
11248
11575
  return {
11249
- incident: defaultIncidentFilter || defaultEmptyFilter,
11250
11576
  source: defaultSourceFilter || defaultEmptyFilter,
11251
11577
  domain: Object.assign({}, initialFilters.domain, presetFilterState == null ? void 0 : presetFilterState.domain),
11252
11578
  phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState == null ? void 0 : presetFilterState.phenomenon),
@@ -11261,11 +11587,10 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11261
11587
  useEffect(function () {
11262
11588
  // when the preset changes, update the filters
11263
11589
  onUpdateFilters(initialFiltersWithPresets, true);
11264
- // eslint-disable-next-line react-hooks/exhaustive-deps
11265
11590
  }, [initialFiltersWithPresets, onUpdateFilters]);
11266
- var _getSelectedOptions4 = getSelectedOptions(savedDomainFilter),
11267
- allDomainSelected = _getSelectedOptions4.allSelected;
11268
- var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allIncidentsSelected && allSourcesSelected;
11591
+ var _getSelectedOptions3 = getSelectedOptions(savedDomainFilter),
11592
+ allDomainSelected = _getSelectedOptions3.allSelected;
11593
+ var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allSourcesSelected;
11269
11594
  /**
11270
11595
  * @param filterKey - Name of the filter | "ALL" filters
11271
11596
  * @param optionKey - Name of the option | "ALL" options
@@ -11279,7 +11604,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11279
11604
  domain: updateState(savedDomainFilter, 'ALL', value),
11280
11605
  level: updateState(levelFilter, 'ALL', value),
11281
11606
  phenomenon: updateState(savedPhenomenonFilter, 'ALL', value),
11282
- incident: updateState(savedIncidentFilter, 'ALL', value),
11607
+ // incident: updateState(savedIncidentFilter, 'ALL', value),
11283
11608
  source: updateState(savedSourceFilter, 'ALL', value)
11284
11609
  });
11285
11610
  } else if (filterKey === 'domain') {
@@ -11299,10 +11624,6 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11299
11624
  onUpdateFilters({
11300
11625
  source: updateState(savedSourceFilter, optionKey, value, only)
11301
11626
  });
11302
- } else if (filterKey === 'incident') {
11303
- onUpdateFilters({
11304
- incident: updateState(savedIncidentFilter, optionKey, value, only)
11305
- });
11306
11627
  }
11307
11628
  };
11308
11629
  var byFilterState = useCallback(function (warning) {
@@ -11332,14 +11653,8 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11332
11653
  if (!savedSourceFilter[source]) {
11333
11654
  return false;
11334
11655
  }
11335
- var incident = relevantIncidents.find(function (incident) {
11336
- return incident === warning.warningDetail.incident;
11337
- }) || emptyFilterId;
11338
- if (!savedIncidentFilter[incident]) {
11339
- return false;
11340
- }
11341
11656
  return true;
11342
- }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter, relevantIncidents, savedIncidentFilter]);
11657
+ }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter]);
11343
11658
  return {
11344
11659
  allSelected: allSelected,
11345
11660
  updateFilter: updateFilter,
@@ -11348,7 +11663,6 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11348
11663
  domain: savedDomainFilter,
11349
11664
  level: pickedLevelFilter,
11350
11665
  phenomenon: pickedPhenomenaFilter,
11351
- incident: savedIncidentFilter,
11352
11666
  source: savedSourceFilter
11353
11667
  }
11354
11668
  };
@@ -11813,8 +12127,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
11813
12127
  return combinedWarnings.filter(filterHookState.byFilterState);
11814
12128
  }, [combinedWarnings, filterHookState.byFilterState]);
11815
12129
  var _React$useState2 = React__default.useState({
11816
- TODO: true,
11817
- DRAFT: true,
12130
+ TODO: false,
12131
+ DRAFT: false,
11818
12132
  PUBLISHED: true,
11819
12133
  EXPIRED: false
11820
12134
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/warnings",
3
- "version": "13.2.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.2.1",
12
- "@opengeoweb/shared": "13.2.1",
13
- "@opengeoweb/store": "13.2.1",
14
- "@opengeoweb/webmap-react": "13.2.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.2.1",
18
- "@opengeoweb/form-fields": "13.2.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.2.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.2.1",
27
- "@opengeoweb/webmap": "13.2.1",
28
- "@opengeoweb/authentication": "13.2.1",
29
- "@opengeoweb/sigmet-airmet": "13.2.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;