@opengeoweb/warnings 9.37.0 → 10.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/README.md CHANGED
@@ -5,3 +5,7 @@ This library was generated with [Nx](https://nx.dev).
5
5
  ## Running unit tests
6
6
 
7
7
  Run `nx test warnings` to execute the unit tests via [Jest](https://jestjs.io).
8
+
9
+ ### TypeScript Documentation
10
+
11
+ - [TypeScript Docs](https://opengeoweb.gitlab.io/opengeoweb/typescript-docs/warnings/)
package/index.esm.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
3
  import { Polygons, Share, ExitDomain, Edit, Delete, DrawPolygon, Visibility, Add, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, breakpoints, Options, Close, ChevronDown, ChevronUp, Copy, Success, Expire, Remove, ArrowUpCompact, ArrowDownCompact } from '@opengeoweb/theme';
4
- import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawtoolSelectors, layerSelectors, uiSelectors, drawtoolActions, mapStoreActions, layerActions, useSetupDialog, useUpdateSharedData } from '@opengeoweb/store';
4
+ import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawtoolSelectors, layerSelectors, uiSelectors, drawtoolActions, mapStoreActions, layerActions, useSetupDialog, selectorMemoizationOptions, useUpdateSharedData } from '@opengeoweb/store';
5
5
  import { defaultPolygon, emptyGeoJSON, MapControlButton, getIcon, rewindGeometry, getGeoJSONPropertyValue, currentlySupportedDrawModes, defaultLayers, MapView, MapViewLayer, getFeatureExtent } from '@opengeoweb/webmap-react';
6
6
  import { SHARED_NAMESPACE, useConfirmationDialog, ToggleMenu, dateUtils, calculateStartSize, ToolContainerDraggable, AlertBanner, ConfirmationDialog, getAxiosErrorMessage, usePrevious, CustomIconButton, CustomTooltip, Avatar, getInitials, SwitchButton, CustomToggleButton, Filter, FilterChip, FilterOption, StatusTag, LastUpdateTime, ErrorBoundary, pollingIntervalTimeout, isAxiosError as isAxiosError$1 } from '@opengeoweb/shared';
7
7
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit';
@@ -19,7 +19,7 @@ import { VariableSizeList } from 'react-window';
19
19
  import AutoSizer from 'react-virtualized-auto-sizer';
20
20
  import { getApi, createApiInstance, createNonAuthApiInstance, createFakeApiInstance, ApiProvider, getHeaders, useAuthQuery, useAuthenticationContext, ProductStatus } from '@opengeoweb/api';
21
21
  import { useFormContext } from 'react-hook-form';
22
- import { isEqual, cloneDeep, clamp, groupBy, pick } from 'lodash';
22
+ import { isEqual, cloneDeep, clamp, groupBy, pick, assign } from 'lodash';
23
23
  import { getConfig, useAuthenticationContext as useAuthenticationContext$1 } from '@opengeoweb/authentication';
24
24
  import { useQueryClient } from '@tanstack/react-query';
25
25
  import { isAxiosError } from 'axios';
@@ -2108,7 +2108,8 @@ var publicWarningsAdapter = createEntityAdapter({
2108
2108
  var initialState$1 = {
2109
2109
  warnings: publicWarningsAdapter.getInitialState(),
2110
2110
  isLoading: true,
2111
- lastUpdatedTime: ''
2111
+ lastUpdatedTime: '',
2112
+ filterState: {}
2112
2113
  };
2113
2114
  var slice$1 = createSlice({
2114
2115
  initialState: initialState$1,
@@ -2130,6 +2131,14 @@ var slice$1 = createSlice({
2130
2131
  var error = action.payload.error;
2131
2132
  draft.isLoading = false;
2132
2133
  draft.error = error;
2134
+ },
2135
+ setWarningFilters: function setWarningFilters(draft, action) {
2136
+ var _action$payload2 = action.payload,
2137
+ filterState = _action$payload2.filterState,
2138
+ panelId = _action$payload2.panelId;
2139
+ if (panelId) {
2140
+ draft.filterState[panelId] = filterState;
2141
+ }
2133
2142
  }
2134
2143
  }
2135
2144
  });
@@ -2204,12 +2213,14 @@ var slice = createSlice({
2204
2213
  _action$payload2$form = _action$payload2.formState,
2205
2214
  formState = _action$payload2$form === void 0 ? '' : _action$payload2$form,
2206
2215
  _action$payload2$warn = _action$payload2.warningType,
2207
- warningType = _action$payload2$warn === void 0 ? 'public' : _action$payload2$warn;
2216
+ warningType = _action$payload2$warn === void 0 ? 'public' : _action$payload2$warn,
2217
+ panelId = _action$payload2.panelId;
2208
2218
  draft.object = object;
2209
2219
  draft.publicWarning = publicWarning;
2210
2220
  draft.selectedPublicWarningId = publicWarning == null ? void 0 : publicWarning.id;
2211
2221
  draft.formState = formState;
2212
2222
  draft.warningType = warningType;
2223
+ draft.panelId = panelId;
2213
2224
  },
2214
2225
  toggleEditorWarning: function toggleEditorWarning(draft,
2215
2226
  // eslint-disable-next-line no-unused-vars
@@ -8239,9 +8250,16 @@ var domainLevels = {
8239
8250
  "public": [Level.extreme, Level.moderate, Level.severe]
8240
8251
  };
8241
8252
  var defaultLevelFilter = (_defaultLevelFilter = {}, _defaultLevelFilter[emptyFilterId] = true, _defaultLevelFilter.extreme = true, _defaultLevelFilter.moderate = true, _defaultLevelFilter.severe = true, _defaultLevelFilter.AIR = true, _defaultLevelFilter.SIG = true, _defaultLevelFilter);
8242
- (_defaultEmptyFilter = {}, _defaultEmptyFilter[emptyFilterId] = true, _defaultEmptyFilter);
8243
- var defaultPhenomenonFilter = (_defaultPhenomenonFil = {}, _defaultPhenomenonFil[emptyFilterId] = true, _defaultPhenomenonFil.coastalEvent = true, _defaultPhenomenonFil.fog = true, _defaultPhenomenonFil.highTemp = true, _defaultPhenomenonFil.lowTemp = true, _defaultPhenomenonFil.rain = true, _defaultPhenomenonFil.snowIce = true, _defaultPhenomenonFil.thunderstorm = true, _defaultPhenomenonFil.wind = true, _defaultPhenomenonFil);
8244
- var useSelectedOptions = function useSelectedOptions(options) {
8253
+ var defaultEmptyFilter = (_defaultEmptyFilter = {}, _defaultEmptyFilter[emptyFilterId] = true, _defaultEmptyFilter);
8254
+ (_defaultPhenomenonFil = {}, _defaultPhenomenonFil[emptyFilterId] = true, _defaultPhenomenonFil.coastalEvent = true, _defaultPhenomenonFil.fog = true, _defaultPhenomenonFil.highTemp = true, _defaultPhenomenonFil.lowTemp = true, _defaultPhenomenonFil.rain = true, _defaultPhenomenonFil.snowIce = true, _defaultPhenomenonFil.thunderstorm = true, _defaultPhenomenonFil.wind = true, _defaultPhenomenonFil);
8255
+ var initialFilters = {
8256
+ incident: defaultEmptyFilter,
8257
+ source: defaultEmptyFilter,
8258
+ domain: defaultDomainFilter,
8259
+ phenomenon: defaultEmptyFilter,
8260
+ level: defaultLevelFilter
8261
+ };
8262
+ var getSelectedOptions = function getSelectedOptions(options) {
8245
8263
  var selectedOptions = Object.keys(options).filter(function (k) {
8246
8264
  return options[k];
8247
8265
  });
@@ -8259,10 +8277,16 @@ var updateState = function updateState(state, optionKey, value, only) {
8259
8277
  return Object.assign({}, acc, (_Object$assign = {}, _Object$assign[k] = k === optionKey, _Object$assign));
8260
8278
  }, {});
8261
8279
  }
8262
- return optionKey === 'ALL' ? Object.keys(state).reduce(function (acc, k) {
8263
- var _Object$assign2;
8264
- return Object.assign({}, acc, (_Object$assign2 = {}, _Object$assign2[k] = value, _Object$assign2));
8265
- }, {}) : Object.assign({}, state, (_Object$assign3 = {}, _Object$assign3[optionKey] = value, _Object$assign3));
8280
+ if (optionKey === 'ALL') {
8281
+ if (Object.keys(state).length < 2) {
8282
+ return state;
8283
+ }
8284
+ return Object.keys(state).reduce(function (acc, k) {
8285
+ var _Object$assign2;
8286
+ return Object.assign({}, acc, (_Object$assign2 = {}, _Object$assign2[k] = value, _Object$assign2));
8287
+ }, {});
8288
+ }
8289
+ return Object.assign({}, state, (_Object$assign3 = {}, _Object$assign3[optionKey] = value, _Object$assign3));
8266
8290
  };
8267
8291
  /** Make sure our value is in the filter */
8268
8292
  var getValue = function getValue(values, value) {
@@ -10479,6 +10503,7 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
10479
10503
  * */
10480
10504
  var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(apiAirmet) {
10481
10505
  var airmet = apiAirmet.airmet;
10506
+ var cancelAirmet = apiAirmet == null ? void 0 : apiAirmet.airmet;
10482
10507
  var areas = [];
10483
10508
  if (airmet.startGeometry) {
10484
10509
  areas.push({
@@ -10508,12 +10533,14 @@ var transformAirmetToWarningFormat = function transformAirmetToWarningFormat(api
10508
10533
  level: 'AIR',
10509
10534
  probability: 0,
10510
10535
  incident: airmet.sequence,
10511
- firName: airmet.firName
10536
+ firName: airmet.firName,
10537
+ cancelId: isInstanceOfCancelAirmet(airmet) ? cancelAirmet.cancelsAirmetSequenceId : undefined
10512
10538
  }
10513
10539
  };
10514
10540
  };
10515
10541
  var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(apiSigmet) {
10516
10542
  var sigmet = apiSigmet.sigmet;
10543
+ var cancelSigmet = apiSigmet == null ? void 0 : apiSigmet.sigmet;
10517
10544
  var areas = [];
10518
10545
  if (sigmet.startGeometry) {
10519
10546
  areas.push({
@@ -10559,7 +10586,8 @@ var transformSigmetToWarningFormat = function transformSigmetToWarningFormat(api
10559
10586
  level: 'SIG',
10560
10587
  probability: 0,
10561
10588
  incident: sigmet.sequence,
10562
- firName: sigmet.firName
10589
+ firName: sigmet.firName,
10590
+ cancelId: isInstanceOfCancelSigmet(sigmet) ? cancelSigmet.cancelsSigmetSequenceId : undefined
10563
10591
  }
10564
10592
  };
10565
10593
  };
@@ -11103,9 +11131,9 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11103
11131
  var _useState = useState(null),
11104
11132
  anchorEl = _useState[0],
11105
11133
  setAnchorEl = _useState[1];
11106
- var _useSelectedOptions = useSelectedOptions(options),
11107
- noSelectedOptions = _useSelectedOptions.noSelectedOptions,
11108
- allSelected = _useSelectedOptions.allSelected;
11134
+ var _getSelectedOptions = getSelectedOptions(options),
11135
+ noSelectedOptions = _getSelectedOptions.noSelectedOptions,
11136
+ allSelected = _getSelectedOptions.allSelected;
11109
11137
  var isDisabled = Object.keys(options).length < 2;
11110
11138
  return jsxs(Fragment, {
11111
11139
  children: [jsx(CustomTooltip, {
@@ -11254,6 +11282,7 @@ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11254
11282
  });
11255
11283
  };
11256
11284
 
11285
+ var filterOrder = ['incident', 'source', 'domain', 'phenomenon', 'level'];
11257
11286
  var FilterList = function FilterList(_ref) {
11258
11287
  var _ref$onClickAll = _ref.onClickAll,
11259
11288
  onClickAll = _ref$onClickAll === void 0 ? function () {} : _ref$onClickAll,
@@ -11291,7 +11320,7 @@ var FilterList = function FilterList(_ref) {
11291
11320
  size: "medium"
11292
11321
  })
11293
11322
  })
11294
- }), Object.keys(filterState).map(function (filterId) {
11323
+ }), filterOrder.map(function (filterId) {
11295
11324
  return jsx(ExpandableFilterChip, {
11296
11325
  id: filterId,
11297
11326
  options: filterState[filterId],
@@ -11491,7 +11520,7 @@ var renderLevelText = function renderLevelText(levelString) {
11491
11520
  })]
11492
11521
  });
11493
11522
  };
11494
- var renderStatusIcon = function renderStatusIcon(status) {
11523
+ var renderStatusIcon = function renderStatusIcon(warning, status) {
11495
11524
  var getStatusTag = function getStatusTag(content, color, icon) {
11496
11525
  if (icon === void 0) {
11497
11526
  icon = null;
@@ -11507,6 +11536,12 @@ var renderStatusIcon = function renderStatusIcon(status) {
11507
11536
  icon: icon
11508
11537
  });
11509
11538
  };
11539
+ if (warning.productStatus === ProductStatus.PUBLISHED && warning.warningDetail.cancelId) {
11540
+ return getStatusTag("Cnls " + warning.warningDetail.cancelId, 'red');
11541
+ }
11542
+ if (warning.productStatus === ProductStatus.CANCELLED && warning.warningDetail.cancelId === undefined) {
11543
+ return getStatusTag('Cnld', 'red');
11544
+ }
11510
11545
  switch (status) {
11511
11546
  case PublicWarningStatus.TODO:
11512
11547
  return null;
@@ -11521,7 +11556,9 @@ var renderStatusIcon = function renderStatusIcon(status) {
11521
11556
  color: 'geowebColors.iconButtons.flat.default.color',
11522
11557
  marginRight: 2
11523
11558
  },
11524
- children: jsx(Edit, {})
11559
+ children: jsx(Edit, {
11560
+ "data-testid": "EditPencilIcon"
11561
+ })
11525
11562
  });
11526
11563
  case PublicWarningStatus.DRAFT_PUBLISHED:
11527
11564
  return getStatusTag('Pub', 'green', jsx(Edit, {
@@ -11770,7 +11807,7 @@ var WarningListItem = function WarningListItem(_ref) {
11770
11807
  sx: {
11771
11808
  position: 'relative'
11772
11809
  },
11773
- children: [renderStatusIcon(status), warning.editor && jsx(Box, {
11810
+ children: [renderStatusIcon(warning, status), warning.editor && jsx(Box, {
11774
11811
  sx: {
11775
11812
  width: '16px',
11776
11813
  position: 'absolute',
@@ -11989,6 +12026,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11989
12026
  var _ref$warnings = _ref.warnings,
11990
12027
  warnings = _ref$warnings === void 0 ? [] : _ref$warnings,
11991
12028
  filterHookState = _ref.filterHookState,
12029
+ filterState = _ref.filterState,
11992
12030
  _ref$isLoading = _ref.isLoading,
11993
12031
  isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
11994
12032
  error = _ref.error,
@@ -12014,8 +12052,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
12014
12052
  hoveredFeatureId = _ref.hoveredFeatureId,
12015
12053
  expandedSections = _ref.expandedSections,
12016
12054
  setExpandedSections = _ref.setExpandedSections;
12017
- var filterState = filterHookState.filterState,
12018
- updateFilter = filterHookState.updateFilter,
12055
+ var updateFilter = filterHookState.updateFilter,
12019
12056
  allSelected = filterHookState.allSelected;
12020
12057
  var _useWarningsTranslati = useWarningsTranslation(),
12021
12058
  t = _useWarningsTranslati.t;
@@ -12351,6 +12388,37 @@ var getPublicWarningsError = createSelector(getPublicWarningsStore, function (st
12351
12388
  var getPublicWarningsLastUpdatedTime = createSelector(getPublicWarningsStore, function (store) {
12352
12389
  return store == null ? void 0 : store.lastUpdatedTime;
12353
12390
  });
12391
+ var getWarningsFilterState = createSelector(getPublicWarningsStore, function (store) {
12392
+ return store == null ? void 0 : store.filterState;
12393
+ }, selectorMemoizationOptions);
12394
+ var getWarningsFilterById = createSelector(getWarningsFilterState, function (_store, panelId) {
12395
+ return panelId;
12396
+ }, function (filterState, panelId) {
12397
+ return panelId && filterState && filterState[panelId] ? filterState[panelId] : initialFilters;
12398
+ }, selectorMemoizationOptions);
12399
+ var getWarningsPresetById = createSelector(getWarningsFilterState, function (_store, panelId) {
12400
+ return panelId;
12401
+ }, function (filterState, panelId) {
12402
+ if (!panelId || !filterState || !filterState[panelId]) {
12403
+ return {
12404
+ filterState: null
12405
+ };
12406
+ }
12407
+ return {
12408
+ filterState: filterState[panelId]
12409
+ };
12410
+ }, selectorMemoizationOptions);
12411
+
12412
+ var selectors = /*#__PURE__*/Object.freeze({
12413
+ __proto__: null,
12414
+ getPublicWarningsError: getPublicWarningsError,
12415
+ getPublicWarningsLastUpdatedTime: getPublicWarningsLastUpdatedTime,
12416
+ getPublicWarningsStore: getPublicWarningsStore,
12417
+ getWarningsFilterById: getWarningsFilterById,
12418
+ getWarningsPresetById: getWarningsPresetById,
12419
+ isPublicWarningsLoading: isPublicWarningsLoading,
12420
+ selectAllPublicWarnings: selectAllPublicWarnings
12421
+ });
12354
12422
 
12355
12423
  var ConfirmDeleteWarningDialog = function ConfirmDeleteWarningDialog(_ref) {
12356
12424
  var _ref$onClose = _ref.onClose,
@@ -12447,35 +12515,51 @@ var ConfirmDeleteWarningDialog = function ConfirmDeleteWarningDialog(_ref) {
12447
12515
  * Copyright 2024 - Finnish Meteorological Institute (FMI)
12448
12516
  * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
12449
12517
  * */
12450
- var useFilter = function useFilter(defaultFilter, pickedOptions) {
12451
- var _useState = useState(defaultFilter),
12452
- filter = _useState[0],
12453
- setFilter = _useState[1];
12454
- var pickedFilterOptions = pick(filter, [emptyFilterId].concat(pickedOptions));
12455
- var _useSelectedOptions = useSelectedOptions(pickedFilterOptions),
12456
- allSelected = _useSelectedOptions.allSelected;
12457
- return [pickedFilterOptions, setFilter, allSelected];
12458
- };
12459
- var useWarningFilters = function useWarningFilters(warnings) {
12460
- var _useState2 = useState(defaultDomainFilter),
12461
- domainFilter = _useState2[0],
12462
- setDomainFilter = _useState2[1];
12463
- var relevantLevels = Object.keys(domainFilter).flatMap(function (domain) {
12518
+ var getLevelsForDomainFilter = function getLevelsForDomainFilter(domainFilter) {
12519
+ return Object.keys(domainFilter).flatMap(function (domain) {
12464
12520
  return domainFilter[domain] ? domainLevels[domain] : [];
12465
12521
  });
12466
- var _useFilter = useFilter(defaultLevelFilter, relevantLevels),
12467
- pickedLevelFilter = _useFilter[0],
12468
- setLevelFilter = _useFilter[1],
12469
- allLevelsSelected = _useFilter[2];
12470
- var existingPhenomenon = Object.values(Phenomenon$1).filter(function (p) {
12471
- return warnings.find(function (w) {
12472
- return w.warningDetail.phenomenon === p;
12473
- });
12522
+ };
12523
+ var getFilterOptions = function getFilterOptions(defaultFilter, allOptions, savedFilter) {
12524
+ var pickedFilterOptions = pick(defaultFilter, [emptyFilterId].concat(allOptions));
12525
+ // keep options state from savedFilter if it still exists
12526
+ var updatedOptions = assign(pickedFilterOptions, pick(savedFilter || {}, Object.keys(pickedFilterOptions)));
12527
+ var _getSelectedOptions = getSelectedOptions(updatedOptions),
12528
+ allSelected = _getSelectedOptions.allSelected;
12529
+ return [updatedOptions, allSelected];
12530
+ };
12531
+ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, savedFilterState, presetFilterState, isLoading) {
12532
+ var pickedDomainFilter = savedFilterState.domain,
12533
+ pickedPhenomenonFilter = savedFilterState.phenomenon,
12534
+ pickedLevelFilter = savedFilterState.level,
12535
+ pickedSourceFilter = savedFilterState.source,
12536
+ pickedIncidentFilter = savedFilterState.incident;
12537
+ /// level
12538
+ var relevantLevels = useMemo(function () {
12539
+ return getLevelsForDomainFilter(pickedDomainFilter);
12540
+ }, [pickedDomainFilter]);
12541
+ var _getFilterOptions = getFilterOptions(defaultLevelFilter, relevantLevels, pickedLevelFilter),
12542
+ updatedPickedLevels = _getFilterOptions[0],
12543
+ allLevelsSelected = _getFilterOptions[1];
12544
+ // phenomenon
12545
+ var warningsPhenomena = useMemo(function () {
12546
+ return getFiltersFromWarnings(warnings, 'phenomenon');
12547
+ }, [warnings]);
12548
+ // filter out aviation phenomena
12549
+ var phenomenaKeysToFilter = new Set(Object.values(Phenomenon$1));
12550
+ var relevantPhenomena = warningsPhenomena.filter(function (item) {
12551
+ return phenomenaKeysToFilter.has(item);
12474
12552
  });
12475
- var _useFilter2 = useFilter(defaultPhenomenonFilter, existingPhenomenon),
12476
- pickedPhenomenonFilter = _useFilter2[0],
12477
- setPhenomenonFilter = _useFilter2[1],
12478
- allPhenomenonSelected = _useFilter2[2];
12553
+ relevantPhenomena.push(emptyFilterId);
12554
+ var defaultPhenomenonFilter = useMemo(function () {
12555
+ return Object.fromEntries(relevantPhenomena.map(function (key) {
12556
+ return [key, true];
12557
+ }));
12558
+ }, [relevantPhenomena]);
12559
+ var _getFilterOptions2 = getFilterOptions(defaultPhenomenonFilter, relevantPhenomena, pickedPhenomenonFilter),
12560
+ updatedPickedPhenomena = _getFilterOptions2[0],
12561
+ allPhenomenaSelected = _getFilterOptions2[1];
12562
+ // source
12479
12563
  var relevantSources = useMemo(function () {
12480
12564
  return getFiltersFromWarnings(warnings, 'warningProposalSource');
12481
12565
  }, [warnings]);
@@ -12484,20 +12568,10 @@ var useWarningFilters = function useWarningFilters(warnings) {
12484
12568
  return [key, true];
12485
12569
  }));
12486
12570
  }, [relevantSources]);
12487
- var _useFilter3 = useFilter(defaultSourceFilter, relevantSources),
12488
- pickedSourceFilter = _useFilter3[0],
12489
- setSourceFilter = _useFilter3[1],
12490
- allSourcesSelected = _useFilter3[2];
12491
- useEffect(function () {
12492
- setSourceFilter(function (prevFilter) {
12493
- var newSourceFilter = Object.assign({}, defaultSourceFilter, prevFilter);
12494
- // Only update state if the new filter differs from the current one
12495
- if (JSON.stringify(newSourceFilter) !== JSON.stringify(prevFilter)) {
12496
- return newSourceFilter;
12497
- }
12498
- return prevFilter;
12499
- });
12500
- }, [defaultSourceFilter, setSourceFilter]);
12571
+ var _getFilterOptions3 = getFilterOptions(defaultSourceFilter, relevantSources, pickedSourceFilter),
12572
+ updatedPickedSources = _getFilterOptions3[0],
12573
+ allSourcesSelected = _getFilterOptions3[1];
12574
+ // incident
12501
12575
  var relevantIncidents = useMemo(function () {
12502
12576
  return getFiltersFromWarnings(warnings, 'incident');
12503
12577
  }, [warnings]);
@@ -12506,23 +12580,35 @@ var useWarningFilters = function useWarningFilters(warnings) {
12506
12580
  return [key, true];
12507
12581
  }));
12508
12582
  }, [relevantIncidents]);
12509
- var _useFilter4 = useFilter(defaultIncidentFilter, relevantIncidents),
12510
- pickedIncidentFilter = _useFilter4[0],
12511
- setIncidentFilter = _useFilter4[1],
12512
- allIncidentsSelected = _useFilter4[2];
12583
+ var _getFilterOptions4 = getFilterOptions(defaultIncidentFilter, relevantIncidents, pickedIncidentFilter),
12584
+ updatedPickedIncidents = _getFilterOptions4[0],
12585
+ allIncidentsSelected = _getFilterOptions4[1];
12513
12586
  useEffect(function () {
12514
- setIncidentFilter(function (prevFilter) {
12515
- var newIncidentFilter = Object.assign({}, defaultIncidentFilter, prevFilter);
12516
- // Only update state if the new filter differs from the current one
12517
- if (JSON.stringify(newIncidentFilter) !== JSON.stringify(prevFilter)) {
12518
- return newIncidentFilter;
12519
- }
12520
- return prevFilter;
12521
- });
12522
- }, [defaultIncidentFilter, setIncidentFilter]);
12523
- var _useSelectedOptions2 = useSelectedOptions(domainFilter),
12524
- allDomainSelected = _useSelectedOptions2.allSelected;
12525
- var allSelected = allDomainSelected && allLevelsSelected && allPhenomenonSelected && allIncidentsSelected && allSourcesSelected;
12587
+ if (isLoading) {
12588
+ return;
12589
+ }
12590
+ // when the warnings change, update the filters
12591
+ onUpdateFilters({
12592
+ incident: updatedPickedIncidents,
12593
+ source: updatedPickedSources,
12594
+ domain: pickedDomainFilter,
12595
+ phenomenon: updatedPickedPhenomena,
12596
+ level: updatedPickedLevels
12597
+ }, 'system');
12598
+ // eslint-disable-next-line react-hooks/exhaustive-deps
12599
+ }, [warnings]);
12600
+ useEffect(function () {
12601
+ // when the preset changes, update the filters
12602
+ if (presetFilterState) {
12603
+ onUpdateFilters(presetFilterState, 'system');
12604
+ } else {
12605
+ // for a preset without filters saved use the initial filters
12606
+ onUpdateFilters(initialFilters, 'system');
12607
+ }
12608
+ }, [presetFilterState, onUpdateFilters]);
12609
+ var _getSelectedOptions2 = getSelectedOptions(pickedDomainFilter),
12610
+ allDomainSelected = _getSelectedOptions2.allSelected;
12611
+ var allSelected = allDomainSelected && allLevelsSelected && allPhenomenaSelected && allIncidentsSelected && allSourcesSelected;
12526
12612
  /**
12527
12613
  * @param filterKey - Name of the filter | "ALL" filters
12528
12614
  * @param optionKey - Name of the option | "ALL" options
@@ -12530,49 +12616,47 @@ var useWarningFilters = function useWarningFilters(warnings) {
12530
12616
  * @param only - Flag that decides if all other options should be disabled
12531
12617
  */
12532
12618
  var updateFilter = function updateFilter(filterKey, optionKey, value, only) {
12619
+ var levelFilter = value ? defaultLevelFilter : defaultEmptyFilter;
12533
12620
  if (filterKey === 'ALL') {
12534
- setDomainFilter(function (state) {
12535
- return updateState(state, 'ALL', value);
12536
- });
12537
- setLevelFilter(function (state) {
12538
- return updateState(state, 'ALL', value);
12539
- });
12540
- setPhenomenonFilter(function (state) {
12541
- return updateState(state, 'ALL', value);
12542
- });
12543
- setSourceFilter(function (state) {
12544
- return updateState(state, 'ALL', value);
12545
- });
12546
- setIncidentFilter(function (state) {
12547
- return updateState(state, 'ALL', value);
12548
- });
12621
+ onUpdateFilters({
12622
+ domain: updateState(pickedDomainFilter, 'ALL', value),
12623
+ level: updateState(levelFilter, 'ALL', value),
12624
+ phenomenon: updateState(pickedPhenomenonFilter, 'ALL', value),
12625
+ incident: updateState(pickedIncidentFilter, 'ALL', value),
12626
+ source: updateState(pickedSourceFilter, 'ALL', value)
12627
+ }, 'user');
12549
12628
  } else if (filterKey === 'domain') {
12550
- setDomainFilter(function (state) {
12551
- return updateState(state, optionKey, value, only);
12552
- });
12629
+ var newDomain = updateState(pickedDomainFilter, optionKey, value, only);
12630
+ var _relevantLevels = getLevelsForDomainFilter(newDomain);
12631
+ var _getFilterOptions5 = getFilterOptions(defaultLevelFilter, _relevantLevels, pickedLevelFilter),
12632
+ newLevel = _getFilterOptions5[0];
12633
+ onUpdateFilters(Object.assign({}, savedFilterState, {
12634
+ domain: newDomain,
12635
+ level: newLevel // levels depend on selected domains
12636
+ }), 'user');
12553
12637
  } else if (filterKey === 'level') {
12554
- setLevelFilter(function (state) {
12555
- return updateState(state, optionKey, value, only);
12556
- });
12638
+ onUpdateFilters(Object.assign({}, savedFilterState, {
12639
+ level: updateState(pickedLevelFilter, optionKey, value, only)
12640
+ }), 'user');
12557
12641
  } else if (filterKey === 'phenomenon') {
12558
- setPhenomenonFilter(function (state) {
12559
- return updateState(state, optionKey, value, only);
12560
- });
12642
+ onUpdateFilters(Object.assign({}, savedFilterState, {
12643
+ phenomenon: updateState(pickedPhenomenonFilter, optionKey, value, only)
12644
+ }), 'user');
12561
12645
  } else if (filterKey === 'source') {
12562
- setSourceFilter(function (state) {
12563
- return updateState(state, optionKey, value, only);
12564
- });
12646
+ onUpdateFilters(Object.assign({}, savedFilterState, {
12647
+ source: updateState(pickedSourceFilter, optionKey, value, only)
12648
+ }), 'user');
12565
12649
  } else if (filterKey === 'incident') {
12566
- setIncidentFilter(function (state) {
12567
- return updateState(state, optionKey, value, only);
12568
- });
12650
+ onUpdateFilters(Object.assign({}, savedFilterState, {
12651
+ incident: updateState(pickedIncidentFilter, optionKey, value, only)
12652
+ }), 'user');
12569
12653
  }
12570
12654
  };
12571
12655
  var byFilterState = useCallback(function (warning) {
12572
12656
  var levelDomain = ['SIG', 'AIR'].find(function (d) {
12573
12657
  return d === warning.warningDetail.level;
12574
12658
  }) ? Domain.aviation : Domain["public"];
12575
- if (!domainFilter[levelDomain]) {
12659
+ if (!pickedDomainFilter[levelDomain]) {
12576
12660
  return false;
12577
12661
  }
12578
12662
  var level = getValue(Level, warning.warningDetail.level);
@@ -12596,15 +12680,8 @@ var useWarningFilters = function useWarningFilters(warnings) {
12596
12680
  return false;
12597
12681
  }
12598
12682
  return true;
12599
- }, [domainFilter, pickedLevelFilter, pickedPhenomenonFilter, relevantSources, pickedSourceFilter, relevantIncidents, pickedIncidentFilter]);
12683
+ }, [pickedDomainFilter, pickedLevelFilter, pickedPhenomenonFilter, relevantSources, pickedSourceFilter, relevantIncidents, pickedIncidentFilter]);
12600
12684
  return {
12601
- filterState: {
12602
- incident: pickedIncidentFilter,
12603
- source: pickedSourceFilter,
12604
- domain: domainFilter,
12605
- phenomenon: pickedPhenomenonFilter,
12606
- level: pickedLevelFilter
12607
- },
12608
12685
  allSelected: allSelected,
12609
12686
  updateFilter: updateFilter,
12610
12687
  byFilterState: byFilterState
@@ -12612,7 +12689,8 @@ var useWarningFilters = function useWarningFilters(warnings) {
12612
12689
  };
12613
12690
 
12614
12691
  var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12615
- var panelId = _ref.panelId;
12692
+ var panelId = _ref.panelId,
12693
+ presetFilterState = _ref.presetFilterState;
12616
12694
  var _useWarningsTranslati = useWarningsTranslation(),
12617
12695
  t = _useWarningsTranslati.t;
12618
12696
  var dispatch = useDispatch();
@@ -12632,10 +12710,13 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12632
12710
  setConfirmDialogOptions = _React$useState[1];
12633
12711
  var publicWarnings = useSelector(selectAllPublicWarnings);
12634
12712
  var selectedPublicWarningId = useSelector(getSelectedPublicWarningId);
12635
- var isLoading = useSelector(isPublicWarningsLoading || isFetchingAirmet || isFetchingSigmet);
12713
+ var isLoading = useSelector(isPublicWarningsLoading) || isFetchingAirmet || isFetchingSigmet;
12636
12714
  var error = useSelector(getPublicWarningsError);
12637
12715
  var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12638
12716
  var lastUpdatedTime = useSelector(getPublicWarningsLastUpdatedTime);
12717
+ var savedFilterState = useSelector(function (store) {
12718
+ return getWarningsFilterById(store, panelId);
12719
+ });
12639
12720
  var warningsApi = getWarningsApi();
12640
12721
  var openPublicWarningDialog = /*#__PURE__*/function () {
12641
12722
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, publicWarning, warningType) {
@@ -12665,7 +12746,8 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12665
12746
  publicWarning: publicWarning
12666
12747
  }, {
12667
12748
  formState: formAction,
12668
- warningType: warningType
12749
+ warningType: warningType,
12750
+ panelId: panelId
12669
12751
  })));
12670
12752
  case 7:
12671
12753
  case "end":
@@ -12840,7 +12922,14 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12840
12922
  var transformedAirmets = (airmetList == null ? void 0 : airmetList.map(transformAirmetToWarningFormat)) || [];
12841
12923
  return publicWarnings.concat(transformedSigmets).concat(transformedAirmets);
12842
12924
  }, [publicWarnings, sigmetList, airmetList]);
12843
- var filterHookState = useWarningFilters(combinedWarnings);
12925
+ var onUpdateFilters = React__default.useCallback(function (filterState, origin) {
12926
+ dispatch(publicWarningActions.setWarningFilters({
12927
+ filterState: filterState,
12928
+ panelId: panelId,
12929
+ origin: origin
12930
+ }));
12931
+ }, [dispatch, panelId]);
12932
+ var filterHookState = useWarningFilters(combinedWarnings, onUpdateFilters, savedFilterState, presetFilterState, isLoading);
12844
12933
  var filteredWarnings = React__default.useMemo(function () {
12845
12934
  return combinedWarnings.filter(filterHookState.byFilterState);
12846
12935
  }, [combinedWarnings, filterHookState.byFilterState]);
@@ -12897,6 +12986,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12897
12986
  lastUpdatedTime: lastUpdatedTime,
12898
12987
  onRefetchWarnings: fetchWarnings,
12899
12988
  filterHookState: filterHookState,
12989
+ filterState: savedFilterState,
12900
12990
  hoveredFeatureId: hoveredFeatureId
12901
12991
  }), confirmDialogOptions && jsx(ConfirmDeleteWarningDialog, {
12902
12992
  onClose: function onClose() {
@@ -12922,7 +13012,8 @@ var PublicWarningApiWrapper = function PublicWarningApiWrapper(_ref) {
12922
13012
  var config = _ref.config,
12923
13013
  auth = _ref.auth,
12924
13014
  onSetAuth = _ref.onSetAuth,
12925
- panelId = _ref.panelId;
13015
+ panelId = _ref.panelId,
13016
+ presetFilterState = _ref.presetFilterState;
12926
13017
  return config ? jsx(ApiProvider, {
12927
13018
  config: {
12928
13019
  baseURL: config.baseURL,
@@ -12935,25 +13026,29 @@ var PublicWarningApiWrapper = function PublicWarningApiWrapper(_ref) {
12935
13026
  createApi: createApi$1,
12936
13027
  children: jsx(ErrorBoundary, {
12937
13028
  children: jsx(PublicWarningListConnect, {
12938
- panelId: panelId
13029
+ panelId: panelId,
13030
+ presetFilterState: presetFilterState
12939
13031
  })
12940
13032
  })
12941
13033
  }) : null;
12942
13034
  };
12943
13035
  var componentsLookUp = function componentsLookUp(payload, apiProps) {
12944
13036
  var id = payload.id,
12945
- componentType = payload.componentType;
13037
+ componentType = payload.componentType,
13038
+ initialProps = payload.initialProps;
12946
13039
  switch (componentType) {
12947
13040
  case warningListViewPreset.componentType:
12948
13041
  if (apiProps && apiProps.config) {
12949
13042
  return jsx(PublicWarningApiWrapper, Object.assign({}, apiProps, {
12950
13043
  panelId: id,
12951
- "data-testid": "publicWarningModule"
13044
+ "data-testid": "publicWarningModule",
13045
+ presetFilterState: initialProps.filterState
12952
13046
  }));
12953
13047
  }
12954
13048
  return jsx(PublicWarningListConnect, {
12955
13049
  panelId: id,
12956
- "data-testid": "publicWarningList"
13050
+ "data-testid": "publicWarningList",
13051
+ presetFilterState: initialProps.filterState
12957
13052
  });
12958
13053
  default:
12959
13054
  return null;
@@ -13153,16 +13248,20 @@ publicWarningFormListener.startListening({
13153
13248
  publicWarningFormListener.startListening({
13154
13249
  actionCreator: publicWarningFormActions.openPublicWarningFormDialog,
13155
13250
  effect: function () {
13156
- var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(_, listenerApi) {
13251
+ var _effect6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(_ref5, listenerApi) {
13252
+ var payload, panelId;
13157
13253
  return _regeneratorRuntime().wrap(function _callee6$(_context6) {
13158
13254
  while (1) switch (_context6.prev = _context6.next) {
13159
13255
  case 0:
13256
+ payload = _ref5.payload;
13160
13257
  listenerApi.cancelActiveListeners();
13258
+ panelId = payload.panelId;
13161
13259
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
13162
13260
  setOpen: true,
13163
- type: publicWarningDialogType
13261
+ type: publicWarningDialogType,
13262
+ sourcePanelId: panelId
13164
13263
  }));
13165
- case 2:
13264
+ case 4:
13166
13265
  case "end":
13167
13266
  return _context6.stop();
13168
13267
  }
@@ -13175,7 +13274,7 @@ publicWarningFormListener.startListening({
13175
13274
  }()
13176
13275
  });
13177
13276
  var saveOrUpdateWarning = /*#__PURE__*/function () {
13178
- var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(publicWarning) {
13277
+ var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(publicWarning) {
13179
13278
  var warningsApi, warningDetail, status, warning, newWarningId;
13180
13279
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
13181
13280
  while (1) switch (_context7.prev = _context7.next) {
@@ -13221,7 +13320,7 @@ var saveOrUpdateWarning = /*#__PURE__*/function () {
13221
13320
  }, _callee7);
13222
13321
  }));
13223
13322
  return function saveOrUpdateWarning(_x13) {
13224
- return _ref5.apply(this, arguments);
13323
+ return _ref6.apply(this, arguments);
13225
13324
  };
13226
13325
  }();
13227
13326
  var toggleDialogLoadingEffect = function toggleDialogLoadingEffect(dispatch, isDialogOpen, isLoading) {
@@ -13241,12 +13340,12 @@ var errorEffect = function errorEffect(dispatch, message, isDialogOpen) {
13241
13340
  publicWarningFormListener.startListening({
13242
13341
  actionCreator: uiActions.setToggleOpenDialog,
13243
13342
  effect: function () {
13244
- var _effect7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(_ref6, listenerApi) {
13343
+ var _effect7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(_ref7, listenerApi) {
13245
13344
  var payload;
13246
13345
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
13247
13346
  while (1) switch (_context8.prev = _context8.next) {
13248
13347
  case 0:
13249
- payload = _ref6.payload;
13348
+ payload = _ref7.payload;
13250
13349
  if (!payload.setOpen && payload.type === publicWarningDialogType) {
13251
13350
  listenerApi.dispatch(uiActions.setToggleOpenDialog({
13252
13351
  setOpen: false,
@@ -13457,4 +13556,4 @@ var drawingModuleConfig = {
13457
13556
  middlewares: [drawingsListener.middleware, publicWarningsListener.middleware, publicWarningFormListener.middleware]
13458
13557
  };
13459
13558
 
13460
- export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningApiWrapper, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsModuleProvider, componentsLookUp, drawingModuleConfig, isAlreadyEdited, useObjectDrawDialogAction, warningFormConfirmationOptions, warningsTranslations };
13559
+ export { DrawingToolConnect, Wrapper as DrawingToolForm, DrawingToolFormConnect, DrawingToolMapButtonConnect, ObjectManagerConnect, ObjectManagerMapButtonConnect, PublicWarningApiWrapper, PublicWarningsFormDialog, PublicWarningsFormDialogConnect, WARN_NAMESPACE, WarningsModuleProvider, componentsLookUp, drawingModuleConfig, initialState$1 as initialState, isAlreadyEdited, publicWarningActions, publicWarningFormListener, reducer as publicWarningFormReducer, publicWarningsAdapter, publicWarningsListener, reducer$1 as publicWarningsReducer, selectors as publicWarningsSelectors, reducer$1 as reducer, useObjectDrawDialogAction, warningFormConfirmationOptions, drawingsListener as warningsDrawingsListener, reducer$2 as warningsDrawingsReducer, warningsTranslations };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/warnings",
3
- "version": "9.37.0",
3
+ "version": "10.0.0",
4
4
  "description": "GeoWeb warinings library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
package/src/index.d.ts CHANGED
@@ -6,5 +6,9 @@ export * from './lib/components/DrawingToolForm';
6
6
  export * from './lib/components/PublicWarningsFormDialog';
7
7
  export * from './lib/components/ComponentsLookUp';
8
8
  export * from './lib/store/config';
9
+ export * from './lib/store';
9
10
  export { WARN_NAMESPACE } from './lib/utils/i18n';
10
11
  export { warningsTranslations };
12
+ export * as publicWarningsSelectors from './lib/store/publicWarnings/selectors';
13
+ export * from './lib/store/types';
14
+ export * from './lib/store/publicWarnings/reducer';
@@ -1,6 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { ApiModule, ApiUrls } from '@opengeoweb/api';
3
- type WarningListComponentType = 'WarningList';
3
+ import { PublicWarningListConnectProps } from '../PublicWarningList';
4
+ export type WarningListComponentType = 'WarningList';
4
5
  export interface ComponentsLookUpPayload {
5
6
  componentType: WarningListComponentType;
6
7
  id: string;
@@ -10,8 +11,7 @@ export interface ComponentsLookUpPayload {
10
11
  export interface ApiModuleProps extends ApiModule {
11
12
  config: ApiUrls;
12
13
  }
13
- interface Props extends ApiModuleProps {
14
- panelId: string;
14
+ interface Props extends ApiModuleProps, PublicWarningListConnectProps {
15
15
  }
16
16
  export declare const PublicWarningApiWrapper: React.FC<Props>;
17
17
  export declare const componentsLookUp: (payload: ComponentsLookUpPayload, apiProps?: ApiModuleProps) => React.ReactElement;
@@ -1,5 +1,6 @@
1
1
  import { PublicWarning } from '../../store/publicWarningForm/types';
2
2
  import { defaultDomainFilter, defaultEmptyFilter, defaultLevelFilter, defaultPhenomenonFilter } from './filter-utils';
3
+ export type UpdateFiltersOrigin = 'user' | 'system';
3
4
  export interface PickedFilterState {
4
5
  incident: Partial<typeof defaultEmptyFilter>;
5
6
  source: Partial<typeof defaultEmptyFilter>;
@@ -18,10 +19,9 @@ export type FilterKeyType = keyof FilterState;
18
19
  export type OptionKey<T extends FilterKeyType> = keyof FilterState[T];
19
20
  export type UpdateFilter = <T extends FilterKeyType>(filterKey: T | 'ALL', optionKey: OptionKey<T> | 'ALL', value: boolean, only?: boolean) => void;
20
21
  export interface FilterHookState {
21
- filterState: PickedFilterState;
22
22
  allSelected: boolean;
23
23
  updateFilter: UpdateFilter;
24
24
  byFilterState: (warning: PublicWarning) => boolean;
25
25
  }
26
- export declare const useWarningFilters: (warnings: PublicWarning[]) => FilterHookState;
26
+ export declare const useWarningFilters: (warnings: PublicWarning[], onUpdateFilters: (filterState: PickedFilterState, origin: UpdateFiltersOrigin) => void, savedFilterState: PickedFilterState, presetFilterState?: PickedFilterState, isLoading?: boolean) => FilterHookState;
27
27
  export {};
@@ -27,6 +27,13 @@ export declare const domainLevels: Record<Domain, Level[]>;
27
27
  export declare const defaultLevelFilter: Record<Level | 'unspecified', boolean>;
28
28
  export declare const defaultEmptyFilter: Record<string, boolean>;
29
29
  export declare const defaultPhenomenonFilter: Record<Phenomenon | 'unspecified', boolean>;
30
+ export declare const initialFilters: {
31
+ incident: Record<string, boolean>;
32
+ source: Record<string, boolean>;
33
+ domain: Record<Domain, boolean>;
34
+ phenomenon: Record<string, boolean>;
35
+ level: Record<"unspecified" | Level, boolean>;
36
+ };
30
37
  type OptionsType = Partial<Record<Domain | Level | Phenomenon, boolean>>;
31
38
  interface OptionsMetadata {
32
39
  /** The number of selected options */
@@ -34,8 +41,8 @@ interface OptionsMetadata {
34
41
  /** Whether or not all options are selected */
35
42
  allSelected: boolean;
36
43
  }
37
- export declare const useSelectedOptions: (options: OptionsType) => OptionsMetadata;
38
- export declare const updateState: <T extends string>(state: Record<T, boolean>, optionKey: T | 'ALL', value: boolean, only?: boolean) => Record<T, boolean>;
44
+ export declare const getSelectedOptions: (options: OptionsType) => OptionsMetadata;
45
+ export declare const updateState: <T extends string>(state: Partial<Record<T, boolean>>, optionKey: T | 'ALL', value: boolean, only?: boolean) => Record<T, boolean>;
39
46
  /** Make sure our value is in the filter */
40
47
  export declare const getValue: <T>(values: Record<string, T>, value: string) => T | 'unspecified';
41
48
  export declare const getFiltersFromWarnings: (warnings: PublicWarning[], filterKey: string) => string[];
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { PublicWarning } from '../../store/publicWarningForm/types';
3
- import { FilterHookState } from '../FilterList/filter-hooks';
3
+ import { FilterHookState, PickedFilterState } from '../FilterList/filter-hooks';
4
4
  import { WarningListItemActions } from './WarningListItemMenu';
5
5
  export interface PublicWarningListProps extends WarningListItemActions {
6
6
  warnings: PublicWarning[];
@@ -12,6 +12,7 @@ export interface PublicWarningListProps extends WarningListItemActions {
12
12
  onCreateWarning?: () => void;
13
13
  onRefetchWarnings?: () => void;
14
14
  filterHookState: FilterHookState;
15
+ filterState: PickedFilterState;
15
16
  hoveredFeatureId?: string;
16
17
  expandedSections: Record<string, boolean>;
17
18
  setExpandedSections: (expandedSections: Record<string, boolean>) => void;
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
- interface Props {
3
- panelId?: string;
2
+ import { PickedFilterState } from '../FilterList/filter-hooks';
3
+ export interface PublicWarningListConnectProps {
4
+ panelId: string;
5
+ presetFilterState?: PickedFilterState;
4
6
  }
5
- export declare const PublicWarningListConnect: React.FC<Props>;
7
+ export declare const PublicWarningListConnect: React.FC<PublicWarningListConnectProps>;
6
8
  export default PublicWarningListConnect;
@@ -0,0 +1,2 @@
1
+ export { reducer as warningsDrawingsReducer } from './reducer';
2
+ export { drawingsListener as warningsDrawingsListener } from './listener';
@@ -0,0 +1,3 @@
1
+ export * from './publicWarningForm';
2
+ export * from './drawings';
3
+ export * from './publicWarnings';
@@ -0,0 +1,2 @@
1
+ export { reducer as publicWarningFormReducer } from './reducer';
2
+ export { publicWarningFormListener } from './listener';
@@ -16,6 +16,7 @@ export interface PublicWarningFormState {
16
16
  selectedPublicWarningId?: string;
17
17
  isFormDirty?: boolean;
18
18
  warningType?: WarningType;
19
+ panelId?: string;
19
20
  }
20
21
  export declare const TAKEOVER_MESSAGE = "You are no longer the editor of this warning";
21
22
  export declare const initialState: PublicWarningFormState;
@@ -37,6 +38,7 @@ export declare const publicWarningFormActions: import("@reduxjs/toolkit").CaseRe
37
38
  formState?: FormAction;
38
39
  publicWarning?: PublicWarning;
39
40
  warningType?: WarningType;
41
+ panelId?: string;
40
42
  }>) => void;
41
43
  toggleEditorWarning: (draft: Draft<PublicWarningFormState>, action: PayloadAction<{
42
44
  warningId: string;
@@ -23,6 +23,7 @@ export interface PublicWarningDetail {
23
23
  linked_to_id?: string;
24
24
  incident?: string;
25
25
  firName?: string;
26
+ cancelId?: string;
26
27
  }
27
28
  export declare enum PublicWarningStatus {
28
29
  DRAFT = "DRAFT",
@@ -0,0 +1,2 @@
1
+ export { reducer as publicWarningsReducer } from './reducer';
2
+ export { publicWarningsListener } from './listener';
@@ -1,6 +1,7 @@
1
1
  import { PayloadAction, Draft } from '@reduxjs/toolkit';
2
2
  import { PublicWarningsState } from './types';
3
3
  import { PublicWarning } from '../publicWarningForm/types';
4
+ import { PickedFilterState, UpdateFiltersOrigin } from '../../components/FilterList/filter-hooks';
4
5
  export declare const publicWarningsAdapter: import("@reduxjs/toolkit").EntityAdapter<PublicWarning>;
5
6
  export declare const initialState: PublicWarningsState;
6
7
  export declare const reducer: import("redux").Reducer<PublicWarningsState>;
@@ -16,4 +17,9 @@ export declare const publicWarningActions: import("@reduxjs/toolkit").CaseReduce
16
17
  message: string;
17
18
  };
18
19
  }>) => void;
20
+ setWarningFilters: (draft: Draft<PublicWarningsState>, action: PayloadAction<{
21
+ filterState: PickedFilterState;
22
+ panelId?: string;
23
+ origin: UpdateFiltersOrigin;
24
+ }>) => void;
19
25
  }, "publicWarnings">;
@@ -17,3 +17,33 @@ export declare const getPublicWarningsLastUpdatedTime: ((state: WarningModuleSto
17
17
  }> & {
18
18
  clearCache: () => void;
19
19
  };
20
+ export declare const getWarningsFilterById: ((state: WarningModuleStore, panelId?: string | undefined) => import("../../components/FilterList/filter-hooks").PickedFilterState | {
21
+ incident: Record<string, boolean>;
22
+ source: Record<string, boolean>;
23
+ domain: Record<import("../../components/FilterList/filter-utils").Domain, boolean>;
24
+ phenomenon: Record<string, boolean>;
25
+ level: Record<import("../../components/FilterList/filter-utils").Level | "unspecified", boolean>;
26
+ }) & import("reselect").OutputSelectorFields<(args_0: Record<string, import("../../components/FilterList/filter-hooks").PickedFilterState>, args_1: string | undefined) => import("../../components/FilterList/filter-hooks").PickedFilterState | {
27
+ incident: Record<string, boolean>;
28
+ source: Record<string, boolean>;
29
+ domain: Record<import("../../components/FilterList/filter-utils").Domain, boolean>;
30
+ phenomenon: Record<string, boolean>;
31
+ level: Record<import("../../components/FilterList/filter-utils").Level | "unspecified", boolean>;
32
+ }, {
33
+ clearCache: () => void;
34
+ }> & {
35
+ clearCache: () => void;
36
+ };
37
+ export declare const getWarningsPresetById: ((state: WarningModuleStore, panelId?: string | undefined) => {
38
+ filterState: null;
39
+ } | {
40
+ filterState: import("../../components/FilterList/filter-hooks").PickedFilterState;
41
+ }) & import("reselect").OutputSelectorFields<(args_0: Record<string, import("../../components/FilterList/filter-hooks").PickedFilterState>, args_1: string | undefined) => {
42
+ filterState: null;
43
+ } | {
44
+ filterState: import("../../components/FilterList/filter-hooks").PickedFilterState;
45
+ }, {
46
+ clearCache: () => void;
47
+ }> & {
48
+ clearCache: () => void;
49
+ };
@@ -1,5 +1,6 @@
1
1
  import { EntityState } from '@reduxjs/toolkit';
2
2
  import { PublicWarning } from '../publicWarningForm/types';
3
+ import { PickedFilterState } from '../../components/FilterList/filter-hooks';
3
4
  export interface FilterTranslation {
4
5
  translationKey: string;
5
6
  key: string;
@@ -14,4 +15,5 @@ export interface PublicWarningsState {
14
15
  isLoading: boolean;
15
16
  lastUpdatedTime: string;
16
17
  error?: PublicWarningError;
18
+ filterState: Record<string, PickedFilterState>;
17
19
  }