@opengeoweb/warnings 14.1.0 → 14.2.1

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
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
- import { Polygons, ExitDomain, Share, Edit, Delete, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, SevereMountainWaves, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, DrawPolygon, Visibility, Add, ArrowUpCompact, ArrowDownCompact, breakpoints, DragHandle, Info, Options, Close, ChevronDown, ChevronUp, Copy, Update, Cancel, Success, Expire, Remove } from '@opengeoweb/theme';
3
+ import { Polygons, ExitDomain, Share, Edit, Delete, CoastalEvent, TemperatureLow, TemperatureHigh, Rain, Snow, Lightning, Fog, Wind, Thunderstorm, SevereMountainWaves, VulcanicEruption, Haze, FreezingPrecipitation, ModerateAircraftIcing, SevereAircraftIcing, ModerateTurbulence, SevereTurbulence, SandStorm, RadioactiveMaterials, DrawPolygon, Visibility, Add, ArrowUpCompact, ArrowDownCompact, breakpoints, DragHandle, Info, Copy, Update, Cancel, Success, Expire, Remove, Options, ChevronDown, ChevronUp, Close, Clock } from '@opengeoweb/theme';
4
4
  import { uiTypes, uiActions, getSingularDrawtoolDrawLayerId, drawingToolSelectors, layerSelectors, uiSelectors, drawingToolActions, layerActions, mapListener, layersListener, drawingToolListener, syncGroupsListener, openlayersListener, syncGroupsReducer, drawingToolReducer, uiReducer, layerReducer, mapReducer, useSetupDialog, genericSelectors, useUpdateSharedData, genericActions, selectorMemoizationOptions } from '@opengeoweb/store';
5
5
  import { defaultPolygon, emptyGeoJSON, MapControlButton, getIcon, rewindGeometry, getGeoJSONPropertyValue, currentlySupportedDrawModes, defaultLayers, viewUtils, OpenLayersMapView, MapControls, OpenLayersZoomControl, OpenLayersLayer, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle } from '@opengeoweb/webmap-react';
6
- import { SHARED_NAMESPACE, useConfirmationDialog, dateUtils, ToggleMenu, calculateStartSize, ToolContainerDraggable, AlertBanner, sessionStorageProvider, ConfirmationDialog, usePrevious, CustomIconButton, usePreventBrowserClose, CustomTooltip, Avatar, getInitials, SwitchButton, FilterChip, TooltipSelect, LastUpdateTime, CustomToggleButton, Filter, FilterOption, StatusTag, getAxiosErrorMessage, CustomDialog, ConfirmationButtons, ErrorBoundary } from '@opengeoweb/shared';
6
+ import { SHARED_NAMESPACE, useConfirmationDialog, dateUtils, ToggleMenu, calculateStartSize, ToolContainerDraggable, AlertBanner, sessionStorageProvider, ConfirmationDialog, usePrevious, CustomIconButton, usePreventBrowserClose, CustomTooltip, Avatar, getInitials, SwitchButton, FilterChip, TooltipSelect, LastUpdateTime, CustomToggleButton, Filter, StatusTag, FilterOption, getAxiosErrorMessage, CustomDialog, ConfirmationButtons, ErrorBoundary } from '@opengeoweb/shared';
7
7
  import { createEntityAdapter, createSlice, createSelector, createListenerMiddleware, current, combineReducers, configureStore } from '@reduxjs/toolkit';
8
8
  import { defaultBbox } from '@opengeoweb/core';
9
9
  import { FORM_FIELDS_NAMESPACE, useDraftFormHelpers, ReactHookFormSelect, ReactHookFormHiddenInput, isValidGeoJsonCoordinates, ReactHookFormTextField, ReactHookFormProvider, defaultFormOptions, errorMessages, isEmpty, ReactHookFormDateTime, isXHoursAfter, isXHoursBefore } from '@opengeoweb/form-fields';
@@ -14,7 +14,7 @@ import { useTranslation } from 'react-i18next';
14
14
  import * as React from 'react';
15
15
  import React__default, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
16
16
  import { useAuthenticationContext as useAuthenticationContext$1 } from '@opengeoweb/authentication';
17
- import { styled, Box, Typography, ListItem, Paper, ListItemButton, Stack, Grid, LinearProgress, Button, MenuItem, FormHelperText, Card, CardContent, Tabs, Tab, useTheme, FormControl, CircularProgress, Menu, DialogTitle, DialogContent, Switch, ListItemText, Collapse } from '@mui/material';
17
+ import { styled, Box, Typography, ListItem, Paper, ListItemButton, Stack, Grid, LinearProgress, Button, MenuItem, FormHelperText, Card, CardContent, Tabs, Tab, useTheme, FormControl, CircularProgress, Menu, ListItemText, DialogTitle, DialogContent, Switch, RadioGroup, FormControlLabel, Radio, InputAdornment, Collapse } from '@mui/material';
18
18
  import { VariableSizeList } from 'react-window';
19
19
  import AutoSizer from 'react-virtualized-auto-sizer';
20
20
  import { getHeaders, handleResponse, AirmetPhenomena, SigmetPhenomena, useAuthQuery, useAuthenticationContext, optimisticUpdate, ProductStatus } from '@opengeoweb/api';
@@ -23,6 +23,9 @@ import { snackbarListener, snackbarReducer, snackbarActions, snackbarTypes } fro
23
23
  import { useFormContext, useForm, FormProvider } from 'react-hook-form';
24
24
  import { isEqual, cloneDeep, clamp, concat, groupBy, pick } from 'lodash';
25
25
  import { ReactSortable } from 'react-sortablejs';
26
+ import { LocalizationProvider } from '@mui/x-date-pickers';
27
+ import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns';
28
+ import { DateTimePicker } from '@mui/x-date-pickers/DateTimePicker';
26
29
 
27
30
  var en = {
28
31
  "drawing-tool-form-tools": "Tools",
@@ -125,6 +128,7 @@ var en = {
125
128
  "warning-list-status-published": "Published",
126
129
  "warning-list-status-todo": "Reviews",
127
130
  "warning-list-status-expired": "Expired & Withdrawn (last 24 hours)",
131
+ "warning-list-status-expired-custom-time": "Expired & Withdrawn",
128
132
  "warning-list-header-incident": "Incident",
129
133
  "warning-list-header-incidents": "Incidents",
130
134
  "warning-list-header-last-update": "Last update",
@@ -159,6 +163,15 @@ var en = {
159
163
  "filter-source": "Sources",
160
164
  "filter-hide": "Hide {{subject}}",
161
165
  "filter-show": "Show {{subject}}",
166
+ "filter-time": "Timefilter",
167
+ "filter-time-no-filter": "No filter",
168
+ "filter-time-today": "Today",
169
+ "filter-time-tomorrow": "Tomorrow",
170
+ "filter-time-custom": "Select time span",
171
+ "filter-time-apply": "Apply",
172
+ "filter-choose-date-time": "Choose a date and time",
173
+ "filter-start": "Start",
174
+ "filter-end": "End",
162
175
  "warning-domain-aviation": "Aviation",
163
176
  "warning-domain-maritime": "Maritime",
164
177
  "warning-domain-public": "Public",
@@ -371,6 +384,7 @@ var nl = {
371
384
  "warning-list-status-published": "Gepubliceerd",
372
385
  "warning-list-status-todo": "Te doen",
373
386
  "warning-list-status-expired": "Verlopen en Ingetrokken (laatste 24 uur)",
387
+ "warning-list-status-expired-custom-time": "Verlopen en Ingetrokken",
374
388
  "warning-list-header-incident": "Incident",
375
389
  "warning-list-header-incidents": "Incidenten",
376
390
  "warning-list-header-last-update": "Laatste update",
@@ -403,6 +417,15 @@ var nl = {
403
417
  "filter-phenomenon": "Fenomenen",
404
418
  "filter-level": "Niveaus",
405
419
  "filter-source": "Bronnen",
420
+ "filter-time": "Tijdsfilter",
421
+ "filter-time-no-filter": "Geen filter",
422
+ "filter-time-today": "Vandaag",
423
+ "filter-time-tomorrow": "Morgen",
424
+ "filter-time-custom": "Selecteer een tijdsspanne",
425
+ "filter-time-apply": "Pas toe",
426
+ "filter-choose-date-time": "Kies een datum en tijd",
427
+ "filter-start": "Start",
428
+ "filter-end": "Eind",
406
429
  "warning-dialog-expire-succes": "Waarschuwing laten verlopen is succesvol",
407
430
  "warning-dialog-expire-title": "Waarschuwing laten verlopen",
408
431
  "warning-dialog-expire-confirm": "Verlopen",
@@ -575,6 +598,7 @@ var fi = {
575
598
  "warning-list-status-published": "Julkaistua",
576
599
  "warning-list-status-todo": "Arvostelua",
577
600
  "warning-list-status-expired": "Vanhentunutta (viimeiset 24 tuntia)",
601
+ "warning-list-status-expired-custom-time": "Vanhentunutta",
578
602
  "warning-list-header-incident": "Ongelmaa",
579
603
  "warning-list-header-incidents": "Ongelmia",
580
604
  "warning-list-header-last-update": "Viimeisin päivitys",
@@ -607,6 +631,15 @@ var fi = {
607
631
  "filter-phenomenon": "ei käännetty",
608
632
  "filter-level": "ei käännetty",
609
633
  "filter-source": "ei käännetty",
634
+ "filter-time": "Aikarajaus",
635
+ "filter-time-no-filter": "Ei rajausta",
636
+ "filter-time-today": "Tänään",
637
+ "filter-time-tomorrow": "Huomenna",
638
+ "filter-time-custom": "Valitse aikaväli",
639
+ "filter-time-apply": "Käytä",
640
+ "filter-choose-date-time": "Valitse päivämäärä ja aika",
641
+ "filter-start": "Alku",
642
+ "filter-end": "Loppu",
610
643
  "warning-dialog-expire-succes": "ei käännetty",
611
644
  "warning-dialog-expire-title": "ei käännetty",
612
645
  "warning-dialog-expire-confirm": "ei käännetty",
@@ -733,6 +766,7 @@ var no = {
733
766
  "warning-list-status-published": "Publisert",
734
767
  "warning-list-status-todo": "Til sjekk",
735
768
  "warning-list-status-expired": "Utgått (siste 24 timer)",
769
+ "warning-list-status-expired-custom-time": "Utgått",
736
770
  "warning-list-header-incident": "Hendelse",
737
771
  "warning-list-header-incidents": "Hendelser",
738
772
  "warning-list-header-last-update": "Sist oppdatert",
@@ -765,6 +799,15 @@ var no = {
765
799
  "filter-phenomenon": "Fenomen",
766
800
  "filter-level": "Grad",
767
801
  "filter-source": "Kilder",
802
+ "filter-time": "Tidsfilter",
803
+ "filter-time-no-filter": "Ingen filter",
804
+ "filter-time-today": "I dag",
805
+ "filter-time-tomorrow": "I morgen",
806
+ "filter-time-custom": "Velg tidsintervall",
807
+ "filter-time-apply": "Bruk",
808
+ "filter-choose-date-time": "Velg data og tid",
809
+ "filter-start": "Start",
810
+ "filter-end": "Slutt",
768
811
  "warning-dialog-expire-succes": "Varselet er utgått",
769
812
  "warning-dialog-expire-title": "Opphør varsel",
770
813
  "warning-dialog-expire-confirm": "Opphør",
@@ -2464,12 +2507,6 @@ var domainPhenomena = {
2464
2507
  "public": [].concat(Object.keys(Phenomenon$1))
2465
2508
  };
2466
2509
  var defaultPhenomenonFilter = makeFilterFromList(Object.keys(AllPhenomenaKeys));
2467
- var initialFilters = {
2468
- source: defaultEmptyFilter,
2469
- domain: defaultDomainFilter,
2470
- phenomenon: defaultPhenomenonFilter,
2471
- level: defaultLevelFilter
2472
- };
2473
2510
  var getSelectedOptions = function getSelectedOptions(options) {
2474
2511
  if (options === void 0) {
2475
2512
  options = {};
@@ -2504,13 +2541,14 @@ var updateState = function updateState(state, optionKey, value, only) {
2504
2541
  };
2505
2542
  /** Make sure our value is in the filter */
2506
2543
  var getValue = function getValue(values, value) {
2507
- return Object.values(values).find(function (existingValue) {
2544
+ var _Object$values$find;
2545
+ return (_Object$values$find = Object.values(values).find(function (existingValue) {
2508
2546
  return existingValue === value;
2509
- }) || emptyFilterId;
2547
+ })) != null ? _Object$values$find : emptyFilterId;
2510
2548
  };
2511
2549
  var getFiltersFromWarnings = function getFiltersFromWarnings(warnings, filterKey) {
2512
2550
  var filterOptions = [emptyFilterId];
2513
- if (!warnings || !warnings.length) {
2551
+ if (!(warnings != null && warnings.length)) {
2514
2552
  // return default list
2515
2553
  return filterOptions;
2516
2554
  }
@@ -2524,6 +2562,84 @@ var getFiltersFromWarnings = function getFiltersFromWarnings(warnings, filterKey
2524
2562
  });
2525
2563
  return filterOptions;
2526
2564
  };
2565
+ var TimeFilterMode;
2566
+ (function (TimeFilterMode) {
2567
+ TimeFilterMode["all"] = "all";
2568
+ TimeFilterMode["today"] = "today";
2569
+ TimeFilterMode["tomorrow"] = "tomorrow";
2570
+ TimeFilterMode["custom"] = "custom";
2571
+ })(TimeFilterMode || (TimeFilterMode = {}));
2572
+ var defaultTimeFilter = {
2573
+ mode: TimeFilterMode.all
2574
+ };
2575
+ var isWarningWithinInterval = function isWarningWithinInterval(warning, timeFilter) {
2576
+ // "NO FILTER"
2577
+ if (timeFilter.mode === TimeFilterMode.all) {
2578
+ return true;
2579
+ }
2580
+ var warningStart = new Date(warning.warningDetail.validFrom);
2581
+ var warningEnd = new Date(warning.warningDetail.validUntil);
2582
+ // CUSTOM TIME SPAN
2583
+ if (timeFilter.mode === TimeFilterMode.custom) {
2584
+ if (!timeFilter.customStart || !timeFilter.customEnd) {
2585
+ return true;
2586
+ }
2587
+ var filterStart = new Date(timeFilter.customStart);
2588
+ var filterEnd = new Date(timeFilter.customEnd);
2589
+ return warningEnd >= filterStart && warningStart <= filterEnd;
2590
+ }
2591
+ // TODAY or TOMORROW
2592
+ var now = new Date();
2593
+ var rangeStart;
2594
+ var rangeEnd;
2595
+ if (timeFilter.mode === TimeFilterMode.today) {
2596
+ // TODAY
2597
+ rangeStart = dateUtils.startOfDayUTC(now);
2598
+ rangeEnd = dateUtils.set(rangeStart, {
2599
+ date: rangeStart.getUTCDate() + 1,
2600
+ hours: 0,
2601
+ minutes: 0,
2602
+ seconds: 0
2603
+ });
2604
+ } else {
2605
+ // TOMORROW
2606
+ rangeStart = dateUtils.set(now, {
2607
+ date: now.getUTCDate() + 1,
2608
+ hours: 0,
2609
+ minutes: 0,
2610
+ seconds: 0
2611
+ });
2612
+ rangeEnd = dateUtils.set(rangeStart, {
2613
+ date: rangeStart.getUTCDate() + 1,
2614
+ hours: 0,
2615
+ minutes: 0,
2616
+ seconds: 0
2617
+ });
2618
+ }
2619
+ return warningEnd >= rangeStart && warningStart <= rangeEnd;
2620
+ };
2621
+ var getApiParams = function getApiParams(timeFilter) {
2622
+ if (timeFilter.mode === TimeFilterMode.all) {
2623
+ return {};
2624
+ }
2625
+ if (timeFilter.mode === TimeFilterMode.custom) {
2626
+ if (!timeFilter.customStart || !timeFilter.customEnd) {
2627
+ return {};
2628
+ }
2629
+ return {
2630
+ start_time: new Date(timeFilter.customStart).toISOString(),
2631
+ end_time: new Date(timeFilter.customEnd).toISOString()
2632
+ };
2633
+ }
2634
+ return {};
2635
+ };
2636
+ var initialFilters = {
2637
+ source: defaultEmptyFilter,
2638
+ domain: defaultDomainFilter,
2639
+ phenomenon: defaultPhenomenonFilter,
2640
+ level: defaultLevelFilter,
2641
+ time: defaultTimeFilter
2642
+ };
2527
2643
 
2528
2644
  /* *
2529
2645
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4509,16 +4625,70 @@ var config = sessionStorageProvider.getConfig();
4509
4625
  var airmetBaseUrl = config.GW_AIRMET_BASE_URL || '';
4510
4626
  var sigmetBaseUrl = config.GW_SIGMET_BASE_URL || '';
4511
4627
  // API
4512
- var getAirmetList = function getAirmetList(auth) {
4513
- return fetch(airmetBaseUrl + "/airmetlist", {
4514
- headers: getHeaders(auth)
4515
- }).then(handleResponse);
4516
- };
4517
- var getSigmetList = function getSigmetList(auth) {
4518
- return fetch(sigmetBaseUrl + "/sigmetlist", {
4519
- headers: getHeaders(auth)
4520
- }).then(handleResponse);
4521
- };
4628
+ var getAirmetList = /*#__PURE__*/function () {
4629
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(auth, params) {
4630
+ var queryParams, url, response, data;
4631
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
4632
+ while (1) switch (_context.prev = _context.next) {
4633
+ case 0:
4634
+ if (params === void 0) {
4635
+ params = {};
4636
+ }
4637
+ queryParams = new URLSearchParams(params);
4638
+ url = airmetBaseUrl + "/airmetlist" + (queryParams.toString() ? "?" + queryParams.toString() : '');
4639
+ _context.next = 5;
4640
+ return fetch(url, {
4641
+ headers: getHeaders(auth)
4642
+ });
4643
+ case 5:
4644
+ response = _context.sent;
4645
+ _context.next = 8;
4646
+ return handleResponse(response);
4647
+ case 8:
4648
+ data = _context.sent;
4649
+ return _context.abrupt("return", data);
4650
+ case 10:
4651
+ case "end":
4652
+ return _context.stop();
4653
+ }
4654
+ }, _callee);
4655
+ }));
4656
+ return function getAirmetList(_x, _x2) {
4657
+ return _ref.apply(this, arguments);
4658
+ };
4659
+ }();
4660
+ var getSigmetList = /*#__PURE__*/function () {
4661
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(auth, params) {
4662
+ var queryParams, url, response, data;
4663
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
4664
+ while (1) switch (_context2.prev = _context2.next) {
4665
+ case 0:
4666
+ if (params === void 0) {
4667
+ params = {};
4668
+ }
4669
+ queryParams = new URLSearchParams(params);
4670
+ url = sigmetBaseUrl + "/sigmetlist" + (queryParams.toString() ? "?" + queryParams.toString() : '');
4671
+ _context2.next = 5;
4672
+ return fetch(url, {
4673
+ headers: getHeaders(auth)
4674
+ });
4675
+ case 5:
4676
+ response = _context2.sent;
4677
+ _context2.next = 8;
4678
+ return handleResponse(response);
4679
+ case 8:
4680
+ data = _context2.sent;
4681
+ return _context2.abrupt("return", data);
4682
+ case 10:
4683
+ case "end":
4684
+ return _context2.stop();
4685
+ }
4686
+ }, _callee2);
4687
+ }));
4688
+ return function getSigmetList(_x3, _x4) {
4689
+ return _ref2.apply(this, arguments);
4690
+ };
4691
+ }();
4522
4692
  var getAirmetConfig = function getAirmetConfig(auth) {
4523
4693
  return fetch(airmetBaseUrl + "/airmet-config", {
4524
4694
  headers: getHeaders(auth)
@@ -4539,32 +4709,32 @@ var getAirmetTAC = function getAirmetTAC(product, auth) {
4539
4709
  method: 'POST',
4540
4710
  headers: getHeaders(auth)
4541
4711
  }).then(/*#__PURE__*/function () {
4542
- var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(result) {
4712
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(result) {
4543
4713
  var textData;
4544
- return _regeneratorRuntime().wrap(function _callee$(_context) {
4545
- while (1) switch (_context.prev = _context.next) {
4714
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
4715
+ while (1) switch (_context3.prev = _context3.next) {
4546
4716
  case 0:
4547
4717
  if (!(result.status === 200)) {
4548
- _context.next = 5;
4718
+ _context3.next = 5;
4549
4719
  break;
4550
4720
  }
4551
- _context.next = 3;
4721
+ _context3.next = 3;
4552
4722
  return result.text();
4553
4723
  case 3:
4554
- textData = _context.sent;
4555
- return _context.abrupt("return", {
4724
+ textData = _context3.sent;
4725
+ return _context3.abrupt("return", {
4556
4726
  data: textData
4557
4727
  });
4558
4728
  case 5:
4559
4729
  throw new Error("Failed to fetch TAC data: " + result.statusText);
4560
4730
  case 6:
4561
4731
  case "end":
4562
- return _context.stop();
4732
+ return _context3.stop();
4563
4733
  }
4564
- }, _callee);
4734
+ }, _callee3);
4565
4735
  }));
4566
- return function (_x) {
4567
- return _ref.apply(this, arguments);
4736
+ return function (_x5) {
4737
+ return _ref3.apply(this, arguments);
4568
4738
  };
4569
4739
  }());
4570
4740
  };
@@ -4574,32 +4744,32 @@ var getSigmetTAC = function getSigmetTAC(product, auth) {
4574
4744
  method: 'POST',
4575
4745
  headers: getHeaders(auth)
4576
4746
  }).then(/*#__PURE__*/function () {
4577
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(result) {
4747
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(result) {
4578
4748
  var textData;
4579
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
4580
- while (1) switch (_context2.prev = _context2.next) {
4749
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
4750
+ while (1) switch (_context4.prev = _context4.next) {
4581
4751
  case 0:
4582
4752
  if (!(result.status === 200)) {
4583
- _context2.next = 5;
4753
+ _context4.next = 5;
4584
4754
  break;
4585
4755
  }
4586
- _context2.next = 3;
4756
+ _context4.next = 3;
4587
4757
  return result.text();
4588
4758
  case 3:
4589
- textData = _context2.sent;
4590
- return _context2.abrupt("return", {
4759
+ textData = _context4.sent;
4760
+ return _context4.abrupt("return", {
4591
4761
  data: textData
4592
4762
  });
4593
4763
  case 5:
4594
4764
  throw new Error("Failed to fetch TAC data: " + result.statusText);
4595
4765
  case 6:
4596
4766
  case "end":
4597
- return _context2.stop();
4767
+ return _context4.stop();
4598
4768
  }
4599
- }, _callee2);
4769
+ }, _callee4);
4600
4770
  }));
4601
- return function (_x2) {
4602
- return _ref2.apply(this, arguments);
4771
+ return function (_x6) {
4772
+ return _ref4.apply(this, arguments);
4603
4773
  };
4604
4774
  }());
4605
4775
  };
@@ -4610,32 +4780,32 @@ var getAirmetCancelTAC = function getAirmetCancelTAC(product, auth) {
4610
4780
  method: 'POST',
4611
4781
  headers: getHeaders(auth)
4612
4782
  }).then(/*#__PURE__*/function () {
4613
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(result) {
4783
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(result) {
4614
4784
  var textData;
4615
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
4616
- while (1) switch (_context3.prev = _context3.next) {
4785
+ return _regeneratorRuntime().wrap(function _callee5$(_context5) {
4786
+ while (1) switch (_context5.prev = _context5.next) {
4617
4787
  case 0:
4618
4788
  if (!(result.status === 200)) {
4619
- _context3.next = 5;
4789
+ _context5.next = 5;
4620
4790
  break;
4621
4791
  }
4622
- _context3.next = 3;
4792
+ _context5.next = 3;
4623
4793
  return result.text();
4624
4794
  case 3:
4625
- textData = _context3.sent;
4626
- return _context3.abrupt("return", {
4795
+ textData = _context5.sent;
4796
+ return _context5.abrupt("return", {
4627
4797
  data: textData
4628
4798
  });
4629
4799
  case 5:
4630
4800
  throw new Error("Failed to fetch Cancel TAC data: " + result.statusText);
4631
4801
  case 6:
4632
4802
  case "end":
4633
- return _context3.stop();
4803
+ return _context5.stop();
4634
4804
  }
4635
- }, _callee3);
4805
+ }, _callee5);
4636
4806
  }));
4637
- return function (_x3) {
4638
- return _ref3.apply(this, arguments);
4807
+ return function (_x7) {
4808
+ return _ref5.apply(this, arguments);
4639
4809
  };
4640
4810
  }());
4641
4811
  };
@@ -4645,32 +4815,32 @@ var getSigmetCancelTAC = function getSigmetCancelTAC(product, auth) {
4645
4815
  method: 'POST',
4646
4816
  headers: getHeaders(auth)
4647
4817
  }).then(/*#__PURE__*/function () {
4648
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(result) {
4818
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee6(result) {
4649
4819
  var textData;
4650
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
4651
- while (1) switch (_context4.prev = _context4.next) {
4820
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
4821
+ while (1) switch (_context6.prev = _context6.next) {
4652
4822
  case 0:
4653
4823
  if (!(result.status === 200)) {
4654
- _context4.next = 5;
4824
+ _context6.next = 5;
4655
4825
  break;
4656
4826
  }
4657
- _context4.next = 3;
4827
+ _context6.next = 3;
4658
4828
  return result.text();
4659
4829
  case 3:
4660
- textData = _context4.sent;
4661
- return _context4.abrupt("return", {
4830
+ textData = _context6.sent;
4831
+ return _context6.abrupt("return", {
4662
4832
  data: textData
4663
4833
  });
4664
4834
  case 5:
4665
4835
  throw new Error("Failed to fetch Cancel TAC data: " + result.statusText);
4666
4836
  case 6:
4667
4837
  case "end":
4668
- return _context4.stop();
4838
+ return _context6.stop();
4669
4839
  }
4670
- }, _callee4);
4840
+ }, _callee6);
4671
4841
  }));
4672
- return function (_x4) {
4673
- return _ref4.apply(this, arguments);
4842
+ return function (_x8) {
4843
+ return _ref6.apply(this, arguments);
4674
4844
  };
4675
4845
  }());
4676
4846
  };
@@ -4832,17 +5002,23 @@ var getAviationSnackbarKey = function getAviationSnackbarKey(status) {
4832
5002
  return 'aviation-save-success';
4833
5003
  }
4834
5004
  };
4835
- var useAirmetList = function useAirmetList(disabled) {
5005
+ var useAirmetList = function useAirmetList(disabled, timeFilter) {
4836
5006
  if (disabled === void 0) {
4837
5007
  disabled = false;
4838
5008
  }
4839
- return useAuthQuery(['airmet-list'], getAirmetList, disabled);
5009
+ var apiParams = timeFilter ? getApiParams(timeFilter) : {};
5010
+ return useAuthQuery(['airmet-list', JSON.stringify(apiParams)], function (auth) {
5011
+ return getAirmetList(auth, apiParams);
5012
+ }, disabled);
4840
5013
  };
4841
- var useSigmetList = function useSigmetList(disabled) {
5014
+ var useSigmetList = function useSigmetList(disabled, timeFilter) {
4842
5015
  if (disabled === void 0) {
4843
5016
  disabled = false;
4844
5017
  }
4845
- return useAuthQuery(['sigmet-list'], getSigmetList, disabled);
5018
+ var apiParams = timeFilter ? getApiParams(timeFilter) : {};
5019
+ return useAuthQuery(['sigmet-list', JSON.stringify(apiParams)], function (auth) {
5020
+ return getSigmetList(auth, apiParams);
5021
+ }, disabled);
4846
5022
  };
4847
5023
  var useAviationWarnings = function useAviationWarnings() {
4848
5024
  var _useAirmetList = useAirmetList(),
@@ -5424,8 +5600,13 @@ var renewAviationProduct = function renewAviationProduct(aviationWarning, produc
5424
5600
  };
5425
5601
  var amendAviationProduct = function amendAviationProduct(aviationWarning, productConfig) {
5426
5602
  var warningDetail = aviationWarning.sigmetAirmetDetails;
5427
- var newValidStart = dateUtils.dateToString(new Date());
5428
- var newValidUntil = 'phenomenon' in warningDetail ? getDefaultValidUntilValue(productConfig, warningDetail.phenomenon, warningDetail.locationIndicatorATSR, newValidStart) : warningDetail.validDateEnd;
5603
+ // Use your shared util to get an ISO "now" in UTC
5604
+ var nowIso = dateUtils.getCurrentTimeAsString();
5605
+ // Active if published start has passed (you can also include end > now if you prefer)
5606
+ var hasStarted = !!warningDetail.validDateStart && new Date(warningDetail.validDateStart).getTime() <= new Date(nowIso).getTime();
5607
+ // Only when already active do we snap start to now and recompute end
5608
+ var newValidStart = hasStarted ? nowIso : warningDetail.validDateStart;
5609
+ var newValidUntil = hasStarted && 'phenomenon' in warningDetail ? getDefaultValidUntilValue(productConfig, warningDetail.phenomenon, warningDetail.locationIndicatorATSR, newValidStart) : warningDetail.validDateEnd;
5429
5610
  var amendedWarningDetail = Object.assign({}, warningDetail, {
5430
5611
  validDateStart: newValidStart,
5431
5612
  validDateEnd: newValidUntil,
@@ -8519,6 +8700,9 @@ var Form = function Form(_ref5) {
8519
8700
  // eslint-disable-next-line react-hooks/exhaustive-deps
8520
8701
  }, [initialPublicWarningArea]);
8521
8702
  var aviationId = selectedAviationProduct == null ? void 0 : selectedAviationProduct.uuid;
8703
+ var publishedStart = publicWarningDetails == null ? void 0 : publicWarningDetails.validFrom;
8704
+ var nowIso = dateUtils.getCurrentTimeAsString();
8705
+ var lockValidFrom = formState === 'amending' && !!publishedStart && new Date(publishedStart).getTime() <= new Date(nowIso).getTime();
8522
8706
  React.useEffect(function () {
8523
8707
  if (!selectedAviationProduct) {
8524
8708
  return;
@@ -8559,7 +8743,7 @@ var Form = function Form(_ref5) {
8559
8743
  },
8560
8744
  storedGeoJSON: storedStartGeoJSON,
8561
8745
  storedEndGeoJSON: storedEndGeoJSON,
8562
- isAmending: formState === 'amending'
8746
+ lockValidFrom: lockValidFrom
8563
8747
  })
8564
8748
  });
8565
8749
  }
@@ -8583,7 +8767,7 @@ var Form = function Form(_ref5) {
8583
8767
  return fetchAirmetTAC(product);
8584
8768
  },
8585
8769
  storedGeoJSON: storedStartGeoJSON,
8586
- isAmending: formState === 'amending'
8770
+ lockValidFrom: lockValidFrom
8587
8771
  })
8588
8772
  });
8589
8773
  }
@@ -9843,18 +10027,18 @@ var AreaObjectLoaderConnect = function AreaObjectLoaderConnect(_ref) {
9843
10027
  * Copyright 2025 - Finnish Meteorological Institute (FMI)
9844
10028
  * Copyright 2025 - The Norwegian Meteorological Institute (MET Norway)
9845
10029
  * */
9846
- var useWarnings = function useWarnings(disabled) {
10030
+ var useWarnings = function useWarnings(disabled, timeFilter) {
9847
10031
  var _usePublicWarnings = usePublicWarnings(disabled),
9848
10032
  publicWarnings = _usePublicWarnings.data,
9849
10033
  refetchPublicWarnings = _usePublicWarnings.refetch,
9850
10034
  isFetchingPublicWarnings = _usePublicWarnings.isFetching,
9851
10035
  publicWarningsError = _usePublicWarnings.error,
9852
10036
  dataUpdatedAt = _usePublicWarnings.dataUpdatedAt;
9853
- var _useAirmetList = useAirmetList(disabled),
10037
+ var _useAirmetList = useAirmetList(disabled, timeFilter),
9854
10038
  airmetWarnings = _useAirmetList.data,
9855
10039
  refetchAirmet = _useAirmetList.refetch,
9856
10040
  isFetchingAirmet = _useAirmetList.isFetching;
9857
- var _useSigmetList = useSigmetList(disabled),
10041
+ var _useSigmetList = useSigmetList(disabled, timeFilter),
9858
10042
  sigmetWarnings = _useSigmetList.data,
9859
10043
  refetchSigmet = _useSigmetList.refetch,
9860
10044
  isFetchingSigmet = _useSigmetList.isFetching;
@@ -9995,6 +10179,9 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
9995
10179
  // eslint-disable-next-line react-hooks/exhaustive-deps
9996
10180
  }, [dispatch, linkedMaps == null ? void 0 : linkedMaps.join(',')]);
9997
10181
  React__default.useEffect(function () {
10182
+ if (updatedWarningType === 'airmet' || updatedWarningType === 'sigmet') {
10183
+ return;
10184
+ }
9998
10185
  if (editor !== (selectedWarning == null ? void 0 : selectedWarning.editor) && status !== 'TODO') {
9999
10186
  void setIsEditor(editor !== (auth == null ? void 0 : auth.username));
10000
10187
  }
@@ -10219,300 +10406,133 @@ var PublicWarningsFormDialogConnect = function PublicWarningsFormDialogConnect(_
10219
10406
  });
10220
10407
  };
10221
10408
 
10222
- /* *
10223
- * Licensed under the Apache License, Version 2.0 (the "License");
10224
- * you may not use this file except in compliance with the License.
10225
- * You may obtain a copy of the License at
10226
- *
10227
- * http://www.apache.org/licenses/LICENSE-2.0
10228
- *
10229
- * Unless required by applicable law or agreed to in writing, software
10230
- * distributed under the License is distributed on an "AS IS" BASIS,
10231
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10232
- * See the License for the specific language governing permissions and
10233
- * limitations under the License.
10234
- *
10235
- * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
10236
- * Copyright 2024 - Finnish Meteorological Institute (FMI)
10237
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
10238
- * */
10239
- var warningColors = Object.assign({}, LevelColors);
10240
-
10241
- var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
10242
- var id = _ref.id,
10243
- options = _ref.options,
10244
- updateFilter = _ref.updateFilter;
10409
+ var BUTTON_AIRMET = 'AIRMET';
10410
+ var BUTTON_SIGMET = 'SIGMET';
10411
+ var NewWarningButton = function NewWarningButton(_ref) {
10412
+ var onCreateWarning = _ref.onCreateWarning,
10413
+ _ref$isDefaultOpen = _ref.isDefaultOpen,
10414
+ isDefaultOpen = _ref$isDefaultOpen === void 0 ? false : _ref$isDefaultOpen;
10245
10415
  var _useWarningsTranslati = useWarningsTranslation(),
10246
10416
  t = _useWarningsTranslati.t;
10247
- var _useState = useState(null),
10248
- anchorEl = _useState[0],
10249
- setAnchorEl = _useState[1];
10250
- var _getSelectedOptions = getSelectedOptions(options),
10251
- noSelectedOptions = _getSelectedOptions.noSelectedOptions,
10252
- allSelected = _getSelectedOptions.allSelected;
10253
- var isDisabled = Object.keys(options).length < 2;
10417
+ var config = sessionStorageProvider.getConfig();
10418
+ var showMartimeWarningOption = !!config.GW_WARNINGS_MARITIME_WARNINGS;
10419
+ var _React$useState = React__default.useState(null),
10420
+ anchorEl = _React$useState[0],
10421
+ setAnchorEl = _React$useState[1];
10422
+ var isOpen = Boolean(anchorEl);
10423
+ var handleClick = function handleClick(event) {
10424
+ event.stopPropagation();
10425
+ setAnchorEl(event.currentTarget);
10426
+ };
10427
+ var handleClose = function handleClose(event) {
10428
+ event.stopPropagation();
10429
+ setAnchorEl(null);
10430
+ };
10431
+ var onCreateNewWarning = function onCreateNewWarning(warningType, event) {
10432
+ onCreateWarning(warningType);
10433
+ handleClose(event);
10434
+ };
10435
+ var buttonId = 'newWarningButton';
10436
+ React__default.useEffect(function () {
10437
+ if (isDefaultOpen) {
10438
+ setAnchorEl(document.getElementById(buttonId));
10439
+ }
10440
+ }, [isDefaultOpen, buttonId]);
10254
10441
  return jsxs(Fragment, {
10255
- children: [jsx(CustomTooltip, {
10256
- title: isDisabled ? t('filter-no-results') : t('filter-options'),
10257
- placement: "bottom",
10258
- children: jsx("span", {
10259
- style: {
10260
- margin: 0
10261
- },
10262
- children: jsx(FilterChip, {
10263
- id: id,
10264
- label: t("filter-" + id),
10265
- isSelected: !isDisabled && noSelectedOptions > 0,
10266
- onClick: function onClick(ref) {
10267
- return setAnchorEl(ref);
10268
- },
10269
- onClickIcon: function onClickIcon(ref) {
10270
- return setAnchorEl(ref);
10271
- },
10272
- isDisabled: isDisabled,
10273
- size: "medium",
10274
- actionIcon: jsxs(Grid, {
10275
- container: true,
10276
- alignItems: "center",
10277
- style: {
10278
- marginRight: '8px',
10279
- minWidth: '36px'
10280
- },
10281
- children: [jsx(Options, {}), jsx(Typography, {
10282
- variant: "body2",
10283
- sx: {
10284
- paddingLeft: 0.5
10285
- },
10286
- children: !isDisabled && noSelectedOptions > 0 && noSelectedOptions
10287
- })]
10288
- })
10289
- })
10290
- })
10442
+ children: [jsxs(CustomToggleButton, {
10443
+ id: buttonId,
10444
+ onClick: handleClick,
10445
+ sx: Object.assign({
10446
+ textTransform: 'initial!important',
10447
+ marginBottom: '8px',
10448
+ fontSize: '12px',
10449
+ height: '32px!important',
10450
+ whiteSpace: 'nowrap',
10451
+ minWidth: 'auto',
10452
+ paddingRight: '12px!important'
10453
+ }, isOpen ? {
10454
+ '&.MuiToggleButton-root.primary': {
10455
+ backgroundColor: 'geowebColors.buttons.primary.mouseOver.fill'
10456
+ }
10457
+ } : {}),
10458
+ children: [jsx(Add, {}), t('warning-list-button_create')]
10291
10459
  }), jsxs(Menu, {
10292
- open: Boolean(anchorEl),
10293
- onClose: function onClose() {
10294
- return setAnchorEl(null);
10295
- },
10296
10460
  anchorEl: anchorEl,
10297
- slotProps: {
10298
- backdrop: {
10299
- style: {
10300
- opacity: 0,
10301
- transition: 'none'
10302
- }
10461
+ open: isOpen,
10462
+ onClose: function onClose(event, reason) {
10463
+ if (reason === 'tabKeyDown') {
10464
+ return;
10303
10465
  }
10466
+ handleClose(event);
10304
10467
  },
10305
- sx: {
10306
- padding: 3
10468
+ anchorOrigin: {
10469
+ vertical: 'bottom',
10470
+ horizontal: 'center'
10307
10471
  },
10308
- children: [jsxs(DialogTitle, {
10309
- id: "dialog-title",
10310
- sx: {
10311
- zIndex: 1,
10312
- padding: '8px 18px 16px 24px',
10313
- display: 'flex',
10314
- justifyContent: 'space-between',
10315
- alignItems: 'center'
10316
- },
10317
- children: [jsx(Typography, {
10318
- sx: {
10319
- fontSize: '20px',
10320
- fontWeight: 500,
10321
- paddingRight: 1
10322
- },
10323
- "data-testid": "customDialog-title",
10324
- component: "span",
10325
- children: t("filter-" + id)
10326
- }), jsx(CustomIconButton, {
10327
- "aria-label": t('close-dialog-confirm'),
10328
- onClick: function onClick() {
10329
- return setAnchorEl(null);
10330
- },
10331
- sx: {
10332
- '&.MuiIconButton-root': {
10333
- color: 'geowebColors.greys.accessible'
10334
- }
10335
- },
10336
- children: jsx(Close, {})
10337
- })]
10338
- }), jsxs(DialogContent, {
10339
- sx: {
10340
- padding: '0px 24px 16px 24px'
10341
- },
10342
- children: [jsxs(Grid, {
10343
- container: true,
10344
- justifyContent: "space-between",
10345
- alignItems: "center",
10346
- children: [t('filter-select-all'), jsx(Switch, {
10347
- slotProps: {
10348
- input: {
10349
- 'aria-label': t('filter-select-all')
10472
+ transformOrigin: {
10473
+ vertical: 'top',
10474
+ horizontal: 'center'
10475
+ },
10476
+ slotProps: {
10477
+ root: {
10478
+ slotProps: {
10479
+ backdrop: {
10480
+ style: {
10481
+ opacity: 0,
10482
+ transition: 'none'
10350
10483
  }
10351
- },
10352
- checked: allSelected,
10353
- onChange: function onChange() {
10354
- return updateFilter(id, 'ALL', !allSelected);
10355
- },
10356
- sx: {
10357
- marginRight: '-12px',
10358
- marginTop: '-6px'
10359
- }
10360
- })]
10361
- }), jsxs(Box, {
10362
- children: [options[emptyFilterId] !== undefined && jsx(FilterOption, {
10363
- optionId: emptyFilterId,
10364
- checked: options[emptyFilterId],
10365
- onClick: function onClick(checked, only) {
10366
- return updateFilter(id, emptyFilterId, checked, only);
10367
- },
10368
- labelStyle: {
10369
- fontSize: '16px'
10370
- },
10371
- label: jsx(Fragment, {
10372
- children: t(getTranslationKey(emptyFilterId, id))
10373
- })
10374
- }, id + "-" + emptyFilterId), Object.keys(options).map(function (optionId) {
10375
- if (optionId === emptyFilterId) {
10376
- return null;
10377
10484
  }
10378
- var warningColor = warningColors[optionId];
10379
- return jsx(FilterOption, {
10380
- optionId: optionId,
10381
- checked: options[optionId],
10382
- onClick: function onClick(checked, only) {
10383
- return updateFilter(id, optionId, checked, only);
10384
- },
10385
- labelStyle: Object.assign({}, getLevelStyle(warningColor), {
10386
- width: LevelColors[optionId] ? 'fit-content' : '100%',
10387
- fontSize: '16px'
10388
- }),
10389
- label: jsx(CustomTooltip, {
10390
- title: t(getTranslationKey(optionId, id)),
10391
- placement: "bottom",
10392
- children: jsxs(Box, {
10393
- "data-testid": "wrapper-" + optionId,
10394
- sx: {
10395
- display: 'flex',
10396
- alignItems: 'center',
10397
- gap: 1,
10398
- maxWidth: 200
10399
- },
10400
- children: [getPhenomenaIcon(optionId), jsx(Typography, {
10401
- noWrap: true,
10402
- variant: "body2",
10403
- sx: {
10404
- fontSize: '16px'
10405
- },
10406
- children: t(getTranslationKey(optionId, id))
10407
- })]
10408
- })
10409
- })
10410
- }, id + "-" + optionId);
10411
- })]
10412
- })]
10413
- })]
10414
- })]
10415
- });
10416
- };
10417
-
10418
- var filterOrder = ['source', 'domain', 'phenomenon', 'level'];
10419
- var FilterList = function FilterList(_ref) {
10420
- var _ref$onClickAll = _ref.onClickAll,
10421
- onClickAll = _ref$onClickAll === void 0 ? function () {} : _ref$onClickAll,
10422
- _ref$isAllSelected = _ref.isAllSelected,
10423
- isAllSelected = _ref$isAllSelected === void 0 ? true : _ref$isAllSelected,
10424
- filterState = _ref.filterState,
10425
- updateFilter = _ref.updateFilter;
10426
- var _useWarningsTranslati = useWarningsTranslation(),
10427
- t = _useWarningsTranslati.t;
10428
- return jsxs(Stack, {
10429
- direction: "row",
10430
- spacing: 1,
10431
- sx: {
10432
- display: 'block',
10433
- '.MuiChip-root': {
10434
- margin: 0,
10435
- marginRight: 1,
10436
- marginBottom: 1
10437
- }
10438
- },
10439
- children: [jsx(CustomTooltip, {
10440
- title: isAllSelected ? t('filter-hide-all') : t('filter-show-all'),
10441
- placement: "bottom",
10442
- children: jsx("span", {
10443
- style: {
10444
- margin: 0
10485
+ }
10445
10486
  },
10446
- children: jsx(FilterChip, {
10447
- id: "all",
10448
- label: t('filter-all'),
10449
- isSelected: isAllSelected,
10450
- handleClick: function handleClick() {
10451
- return onClickAll(isAllSelected);
10452
- },
10453
- size: "medium"
10487
+ list: {
10488
+ style: {
10489
+ padding: '0px'
10490
+ }
10491
+ }
10492
+ },
10493
+ children: [jsx(MenuItem, {
10494
+ onClick: function onClick(event) {
10495
+ onCreateNewWarning('public', event);
10496
+ },
10497
+ children: jsx(ListItemText, {
10498
+ children: t('public-warning-title').toUpperCase()
10454
10499
  })
10455
- })
10456
- }), filterOrder.map(function (filterId) {
10457
- return jsx(ExpandableFilterChip, {
10458
- id: filterId,
10459
- options: filterState[filterId],
10460
- updateFilter: updateFilter
10461
- }, filterId);
10500
+ }, "Public"), jsx(MenuItem, {
10501
+ onClick: function onClick(event) {
10502
+ onCreateNewWarning('airmet', event);
10503
+ },
10504
+ children: jsx(ListItemText, {
10505
+ children: BUTTON_AIRMET
10506
+ })
10507
+ }, "Airmet"), jsx(MenuItem, {
10508
+ onClick: function onClick(event) {
10509
+ onCreateNewWarning('sigmet', event);
10510
+ },
10511
+ children: jsx(ListItemText, {
10512
+ children: BUTTON_SIGMET
10513
+ })
10514
+ }, "Sigmet"), showMartimeWarningOption ? jsxs(Fragment, {
10515
+ children: [jsx(MenuItem, {
10516
+ onClick: function onClick(event) {
10517
+ onCreateNewWarning('maritimeWarningCoastal', event);
10518
+ },
10519
+ children: jsx(ListItemText, {
10520
+ children: t('maritime-warning-coastal-title').toUpperCase()
10521
+ })
10522
+ }, "MaritimeWarningCoastal"), jsx(MenuItem, {
10523
+ onClick: function onClick(event) {
10524
+ onCreateNewWarning('maritimeWarningNorthSea', event);
10525
+ },
10526
+ children: jsx(ListItemText, {
10527
+ children: t('maritime-warning-northsea-title').toUpperCase()
10528
+ })
10529
+ }, "MaritimeWarningNorthSea")]
10530
+ }) : null]
10462
10531
  })]
10463
10532
  });
10464
10533
  };
10465
10534
 
10466
- var _excluded$2 = ["totalWarnings", "status", "isExpanded", "onClick"];
10467
- var HEADER_SIZE = 32;
10468
- var WarningListItemSeperator = function WarningListItemSeperator(_ref) {
10469
- var totalWarnings = _ref.totalWarnings,
10470
- status = _ref.status,
10471
- isExpanded = _ref.isExpanded,
10472
- onClick = _ref.onClick,
10473
- props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
10474
- var _useWarningsTranslati = useWarningsTranslation(),
10475
- t = _useWarningsTranslati.t;
10476
- var getStatus = function getStatus(status) {
10477
- switch (status) {
10478
- case 'DRAFT':
10479
- return t('warning-list-status-draft');
10480
- case 'PUBLISHED':
10481
- return t('warning-list-status-published');
10482
- case 'TODO':
10483
- return t('warning-list-status-todo');
10484
- default:
10485
- return t('warning-list-status-expired');
10486
- }
10487
- };
10488
- var headerText = totalWarnings + " " + getStatus(status);
10489
- return jsx(ListItem, Object.assign({}, props, {
10490
- sx: {
10491
- height: HEADER_SIZE,
10492
- padding: 0
10493
- },
10494
- "aria-label": "warninglist " + status,
10495
- children: jsxs(ListItemButton, {
10496
- sx: {
10497
- height: HEADER_SIZE,
10498
- padding: 0
10499
- },
10500
- onClick: onClick,
10501
- "data-testid": "warninglist-" + status,
10502
- "aria-expanded": isExpanded,
10503
- children: [isExpanded ? jsx(ChevronDown, {}) : jsx(ChevronUp, {}), jsx(Typography, {
10504
- variant: "caption",
10505
- sx: {
10506
- opacity: 0.67,
10507
- marginLeft: 1
10508
- },
10509
- children: headerText
10510
- })]
10511
- })
10512
- }));
10513
- };
10514
-
10515
- var _excluded$1 = ["title", "status", "children", "width"];
10535
+ var _excluded$2 = ["title", "status", "children", "width"];
10516
10536
  var WarningListColumnContent = function WarningListColumnContent(_ref) {
10517
10537
  var _sx;
10518
10538
  var title = _ref.title,
@@ -10520,7 +10540,7 @@ var WarningListColumnContent = function WarningListColumnContent(_ref) {
10520
10540
  children = _ref.children,
10521
10541
  _ref$width = _ref.width,
10522
10542
  width = _ref$width === void 0 ? 76 : _ref$width,
10523
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
10543
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
10524
10544
  return jsxs(Grid, {
10525
10545
  sx: Object.assign({}, props.sx, {
10526
10546
  width: width
@@ -10708,7 +10728,7 @@ var WarningListItemMenu = function WarningListItemMenu(_ref) {
10708
10728
  }
10709
10729
  };
10710
10730
 
10711
- var _excluded = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onActionAviationWarning", "onActionMaritimeWarning"];
10731
+ var _excluded$1 = ["warning", "activeWarningId", "highlightedItem", "onSelectWarning", "onEditWarning", "onDeleteWarning", "onDeleteReviewWarning", "onExpireWarning", "onWithdrawWarning", "onActionAviationWarning", "onActionMaritimeWarning"];
10712
10732
  var renderLevelText = function renderLevelText(levelString) {
10713
10733
  if (!levelString) {
10714
10734
  return null;
@@ -10807,7 +10827,7 @@ var WarningListItem = function WarningListItem(_ref) {
10807
10827
  onActionAviationWarning = _ref$onActionAviation === void 0 ? function () {} : _ref$onActionAviation,
10808
10828
  _ref$onActionMaritime = _ref.onActionMaritimeWarning,
10809
10829
  onActionMaritimeWarning = _ref$onActionMaritime === void 0 ? function () {} : _ref$onActionMaritime,
10810
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
10830
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
10811
10831
  var _useWarningsTranslati = useWarningsTranslation(),
10812
10832
  t = _useWarningsTranslati.t;
10813
10833
  var phenomenonDetails = allPhenomenaDict[warning.warningDetail.phenomenon];
@@ -11017,162 +11037,641 @@ var WarningListItem = function WarningListItem(_ref) {
11017
11037
  title: objectHoverText,
11018
11038
  placement: "top",
11019
11039
  sx: {
11020
- zIndex: 1000
11040
+ zIndex: 1000
11041
+ },
11042
+ children: jsx("span", {
11043
+ children: objectNameText
11044
+ })
11045
+ })
11046
+ })
11047
+ }), jsx(WarningListColumnContent, {
11048
+ title: t('warning-list-header-status'),
11049
+ status: status,
11050
+ width: 96,
11051
+ children: jsxs(Box, {
11052
+ sx: {
11053
+ position: 'relative'
11054
+ },
11055
+ children: [renderStatusIcon(warning, status), warning.editor && jsx(Box, {
11056
+ sx: {
11057
+ width: '16px',
11058
+ position: 'absolute',
11059
+ top: '1px',
11060
+ right: '4px'
11061
+ },
11062
+ children: jsx(WarningAvatar, {
11063
+ editor: warning.editor,
11064
+ status: warning.productStatus
11065
+ })
11066
+ })]
11067
+ })
11068
+ })]
11069
+ })
11070
+ })
11071
+ }), warning.id);
11072
+ };
11073
+
11074
+ var _excluded = ["totalWarnings", "status", "isExpanded", "timeFilter", "onClick"];
11075
+ var HEADER_SIZE = 32;
11076
+ var WarningListItemSeperator = function WarningListItemSeperator(_ref) {
11077
+ var totalWarnings = _ref.totalWarnings,
11078
+ status = _ref.status,
11079
+ isExpanded = _ref.isExpanded,
11080
+ timeFilter = _ref.timeFilter,
11081
+ onClick = _ref.onClick,
11082
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
11083
+ var _useWarningsTranslati = useWarningsTranslation(),
11084
+ t = _useWarningsTranslati.t;
11085
+ var getStatus = function getStatus(status) {
11086
+ switch (status) {
11087
+ case 'DRAFT':
11088
+ return t('warning-list-status-draft');
11089
+ case 'PUBLISHED':
11090
+ return t('warning-list-status-published');
11091
+ case 'TODO':
11092
+ return t('warning-list-status-todo');
11093
+ default:
11094
+ return timeFilter.mode === 'custom' ? t('warning-list-status-expired-custom-time') : t('warning-list-status-expired');
11095
+ }
11096
+ };
11097
+ var headerText = totalWarnings + " " + getStatus(status);
11098
+ return jsx(ListItem, Object.assign({}, props, {
11099
+ sx: {
11100
+ height: HEADER_SIZE,
11101
+ padding: 0
11102
+ },
11103
+ "aria-label": "warninglist " + status,
11104
+ children: jsxs(ListItemButton, {
11105
+ sx: {
11106
+ height: HEADER_SIZE,
11107
+ padding: 0
11108
+ },
11109
+ onClick: onClick,
11110
+ "data-testid": "warninglist-" + status,
11111
+ "aria-expanded": isExpanded,
11112
+ children: [isExpanded ? jsx(ChevronDown, {}) : jsx(ChevronUp, {}), jsx(Typography, {
11113
+ variant: "caption",
11114
+ sx: {
11115
+ opacity: 0.67,
11116
+ marginLeft: 1
11117
+ },
11118
+ children: headerText
11119
+ })]
11120
+ })
11121
+ }));
11122
+ };
11123
+
11124
+ /* *
11125
+ * Licensed under the Apache License, Version 2.0 (the "License");
11126
+ * you may not use this file except in compliance with the License.
11127
+ * You may obtain a copy of the License at
11128
+ *
11129
+ * http://www.apache.org/licenses/LICENSE-2.0
11130
+ *
11131
+ * Unless required by applicable law or agreed to in writing, software
11132
+ * distributed under the License is distributed on an "AS IS" BASIS,
11133
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11134
+ * See the License for the specific language governing permissions and
11135
+ * limitations under the License.
11136
+ *
11137
+ * Copyright 2024 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
11138
+ * Copyright 2024 - Finnish Meteorological Institute (FMI)
11139
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
11140
+ * */
11141
+ var warningColors = Object.assign({}, LevelColors);
11142
+
11143
+ var ExpandableFilterChip = function ExpandableFilterChip(_ref) {
11144
+ var id = _ref.id,
11145
+ options = _ref.options,
11146
+ updateFilter = _ref.updateFilter;
11147
+ var _useWarningsTranslati = useWarningsTranslation(),
11148
+ t = _useWarningsTranslati.t;
11149
+ var _useState = useState(null),
11150
+ anchorEl = _useState[0],
11151
+ setAnchorEl = _useState[1];
11152
+ var _getSelectedOptions = getSelectedOptions(options),
11153
+ noSelectedOptions = _getSelectedOptions.noSelectedOptions,
11154
+ allSelected = _getSelectedOptions.allSelected;
11155
+ var isDisabled = Object.keys(options).length < 2;
11156
+ return jsxs(Fragment, {
11157
+ children: [jsx(CustomTooltip, {
11158
+ title: isDisabled ? t('filter-no-results') : t('filter-options'),
11159
+ placement: "bottom",
11160
+ children: jsx("span", {
11161
+ style: {
11162
+ margin: 0
11163
+ },
11164
+ children: jsx(FilterChip, {
11165
+ id: id,
11166
+ label: t("filter-" + id),
11167
+ isSelected: !isDisabled && noSelectedOptions > 0,
11168
+ onClick: function onClick(ref) {
11169
+ return setAnchorEl(ref);
11170
+ },
11171
+ onClickIcon: function onClickIcon(ref) {
11172
+ return setAnchorEl(ref);
11173
+ },
11174
+ isDisabled: isDisabled,
11175
+ size: "medium",
11176
+ actionIcon: jsxs(Grid, {
11177
+ container: true,
11178
+ alignItems: "center",
11179
+ style: {
11180
+ marginRight: '8px',
11181
+ minWidth: '36px'
11182
+ },
11183
+ children: [jsx(Options, {}), jsx(Typography, {
11184
+ variant: "body2",
11185
+ sx: {
11186
+ paddingLeft: 0.5
11187
+ },
11188
+ children: !isDisabled && noSelectedOptions > 0 && noSelectedOptions
11189
+ })]
11190
+ })
11191
+ })
11192
+ })
11193
+ }), jsxs(Menu, {
11194
+ open: Boolean(anchorEl),
11195
+ onClose: function onClose() {
11196
+ return setAnchorEl(null);
11197
+ },
11198
+ anchorEl: anchorEl,
11199
+ slotProps: {
11200
+ backdrop: {
11201
+ style: {
11202
+ opacity: 0,
11203
+ transition: 'none'
11204
+ }
11205
+ }
11206
+ },
11207
+ sx: {
11208
+ padding: 3
11209
+ },
11210
+ children: [jsxs(DialogTitle, {
11211
+ id: "dialog-title",
11212
+ sx: {
11213
+ zIndex: 1,
11214
+ padding: '8px 18px 16px 24px',
11215
+ display: 'flex',
11216
+ justifyContent: 'space-between',
11217
+ alignItems: 'center'
11218
+ },
11219
+ children: [jsx(Typography, {
11220
+ sx: {
11221
+ fontSize: '20px',
11222
+ fontWeight: 500,
11223
+ paddingRight: 1
11224
+ },
11225
+ "data-testid": "customDialog-title",
11226
+ component: "span",
11227
+ children: t("filter-" + id)
11228
+ }), jsx(CustomIconButton, {
11229
+ "aria-label": t('close-dialog-confirm'),
11230
+ onClick: function onClick() {
11231
+ return setAnchorEl(null);
11232
+ },
11233
+ sx: {
11234
+ '&.MuiIconButton-root': {
11235
+ color: 'geowebColors.greys.accessible'
11236
+ }
11237
+ },
11238
+ children: jsx(Close, {})
11239
+ })]
11240
+ }), jsxs(DialogContent, {
11241
+ sx: {
11242
+ padding: '0px 24px 16px 24px'
11243
+ },
11244
+ children: [jsxs(Grid, {
11245
+ container: true,
11246
+ justifyContent: "space-between",
11247
+ alignItems: "center",
11248
+ children: [t('filter-select-all'), jsx(Switch, {
11249
+ slotProps: {
11250
+ input: {
11251
+ 'aria-label': t('filter-select-all')
11252
+ }
11253
+ },
11254
+ checked: allSelected,
11255
+ onChange: function onChange() {
11256
+ return updateFilter(id, 'ALL', !allSelected);
11257
+ },
11258
+ sx: {
11259
+ marginRight: '-12px',
11260
+ marginTop: '-6px'
11261
+ }
11262
+ })]
11263
+ }), jsxs(Box, {
11264
+ children: [options[emptyFilterId] !== undefined && jsx(FilterOption, {
11265
+ optionId: emptyFilterId,
11266
+ checked: options[emptyFilterId],
11267
+ onClick: function onClick(checked, only) {
11268
+ return updateFilter(id, emptyFilterId, checked, only);
11269
+ },
11270
+ labelStyle: {
11271
+ fontSize: '16px'
11272
+ },
11273
+ label: jsx(Fragment, {
11274
+ children: t(getTranslationKey(emptyFilterId, id))
11275
+ })
11276
+ }, id + "-" + emptyFilterId), Object.keys(options).map(function (optionId) {
11277
+ if (optionId === emptyFilterId) {
11278
+ return null;
11279
+ }
11280
+ var warningColor = warningColors[optionId];
11281
+ return jsx(FilterOption, {
11282
+ optionId: optionId,
11283
+ checked: options[optionId],
11284
+ onClick: function onClick(checked, only) {
11285
+ return updateFilter(id, optionId, checked, only);
11286
+ },
11287
+ labelStyle: Object.assign({}, getLevelStyle(warningColor), {
11288
+ width: LevelColors[optionId] ? 'fit-content' : '100%',
11289
+ fontSize: '16px'
11290
+ }),
11291
+ label: jsx(CustomTooltip, {
11292
+ title: t(getTranslationKey(optionId, id)),
11293
+ placement: "bottom",
11294
+ children: jsxs(Box, {
11295
+ "data-testid": "wrapper-" + optionId,
11296
+ sx: {
11297
+ display: 'flex',
11298
+ alignItems: 'center',
11299
+ gap: 1,
11300
+ maxWidth: 200
11301
+ },
11302
+ children: [getPhenomenaIcon(optionId), jsx(Typography, {
11303
+ noWrap: true,
11304
+ variant: "body2",
11305
+ sx: {
11306
+ fontSize: '16px'
11307
+ },
11308
+ children: t(getTranslationKey(optionId, id))
11309
+ })]
11310
+ })
11311
+ })
11312
+ }, id + "-" + optionId);
11313
+ })]
11314
+ })]
11315
+ })]
11316
+ })]
11317
+ });
11318
+ };
11319
+
11320
+ var TimeFilterChip = function TimeFilterChip(_ref) {
11321
+ var _getPickerValue;
11322
+ var timeFilter = _ref.timeFilter,
11323
+ onUpdateTimeFilter = _ref.onUpdateTimeFilter;
11324
+ var _useWarningsTranslati = useWarningsTranslation(),
11325
+ t = _useWarningsTranslati.t;
11326
+ var _useState = useState(null),
11327
+ anchorEl = _useState[0],
11328
+ setAnchorEl = _useState[1];
11329
+ var _useState2 = useState(),
11330
+ tempCustomStart = _useState2[0],
11331
+ setTempCustomStart = _useState2[1];
11332
+ var _useState3 = useState(),
11333
+ tempCustomEnd = _useState3[0],
11334
+ setTempCustomEnd = _useState3[1];
11335
+ var isSelected = timeFilter.mode !== TimeFilterMode.all;
11336
+ var pickerStartValue = tempCustomStart != null ? tempCustomStart : timeFilter.customStart;
11337
+ var pickerEndValue = tempCustomEnd != null ? tempCustomEnd : timeFilter.customEnd;
11338
+ var handleModeChange = function handleModeChange(mode) {
11339
+ if (mode === TimeFilterMode.custom) {
11340
+ var _timeFilter$customSta, _timeFilter$customEnd;
11341
+ setTempCustomStart((_timeFilter$customSta = timeFilter.customStart) != null ? _timeFilter$customSta : new Date(Date.now()).toISOString());
11342
+ setTempCustomEnd((_timeFilter$customEnd = timeFilter.customEnd) != null ? _timeFilter$customEnd : new Date(Date.now()).toISOString());
11343
+ }
11344
+ var newFilter = {
11345
+ mode: mode,
11346
+ customStart: mode === TimeFilterMode.custom ? timeFilter.customStart : undefined,
11347
+ customEnd: mode === TimeFilterMode.custom ? timeFilter.customEnd : undefined
11348
+ };
11349
+ onUpdateTimeFilter(newFilter);
11350
+ };
11351
+ var handleTempTimeChange = function handleTempTimeChange(field, value) {
11352
+ var _dateUtils$setUTCDate;
11353
+ if (!value) {
11354
+ if (field === 'customStart') {
11355
+ setTempCustomStart(undefined);
11356
+ } else {
11357
+ setTempCustomEnd(undefined);
11358
+ }
11359
+ return;
11360
+ }
11361
+ var isoString = (_dateUtils$setUTCDate = dateUtils.setUTCDate(value)) == null ? void 0 : _dateUtils$setUTCDate.toISOString();
11362
+ if (field === 'customStart') {
11363
+ setTempCustomStart(isoString);
11364
+ } else {
11365
+ setTempCustomEnd(isoString);
11366
+ }
11367
+ };
11368
+ var getPickerValue = function getPickerValue(isoString) {
11369
+ if (!isoString) {
11370
+ return null;
11371
+ }
11372
+ var utc = new Date(isoString);
11373
+ return new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes());
11374
+ };
11375
+ var handleApply = function handleApply() {
11376
+ onUpdateTimeFilter({
11377
+ mode: TimeFilterMode.custom,
11378
+ customStart: tempCustomStart,
11379
+ customEnd: tempCustomEnd
11380
+ });
11381
+ setAnchorEl(null);
11382
+ };
11383
+ var getTimeFilterLabel = function getTimeFilterLabel(mode, t) {
11384
+ var baseLabel = t('filter-time');
11385
+ if (mode === TimeFilterMode.all) {
11386
+ return baseLabel;
11387
+ }
11388
+ if (mode === TimeFilterMode.custom) {
11389
+ if (!timeFilter.customStart || !timeFilter.customEnd) {
11390
+ return baseLabel + " (" + t('filter-time-custom') + ")";
11391
+ }
11392
+ var currentYear = new Date().getUTCFullYear();
11393
+ var startYear = dateUtils.getYear(timeFilter.customStart);
11394
+ var endYear = dateUtils.getYear(timeFilter.customEnd);
11395
+ var includeYear = startYear !== currentYear || endYear !== currentYear;
11396
+ var dateFormat = includeYear ? dateUtils.DATE_FORMAT_DATEPICKER : dateUtils.DATE_FORMAT_DATEPICKER_NO_YEAR;
11397
+ var start = dateUtils.dateToString(new Date(timeFilter.customStart), dateFormat);
11398
+ var end = dateUtils.dateToString(new Date(timeFilter.customEnd), dateFormat);
11399
+ return baseLabel + " (" + start + " - " + end + ")";
11400
+ }
11401
+ return baseLabel + " (" + t("filter-time-" + mode) + ")";
11402
+ };
11403
+ return jsxs(Fragment, {
11404
+ children: [jsx(CustomTooltip, {
11405
+ title: t('filter-time'),
11406
+ placement: "bottom",
11407
+ children: jsx(Box, {
11408
+ children: jsx(FilterChip, {
11409
+ id: "time",
11410
+ label: jsxs(Box, {
11411
+ sx: {
11412
+ display: 'flex',
11413
+ alignItems: 'center',
11414
+ gap: 0.5
11415
+ },
11416
+ children: [jsx(Clock, {
11417
+ sx: {
11418
+ mr: 1
11419
+ }
11420
+ }), getTimeFilterLabel(timeFilter.mode, t)]
11421
+ }),
11422
+ isSelected: isSelected,
11423
+ onClick: function onClick(ref) {
11424
+ return setAnchorEl(ref);
11425
+ },
11426
+ size: "medium",
11427
+ actionIcon: jsx(Grid, {
11428
+ container: true,
11429
+ alignItems: "center",
11430
+ style: {
11431
+ marginRight: '8px',
11432
+ minWidth: '24px'
11433
+ },
11434
+ children: jsx(ChevronDown, {
11435
+ fontSize: "small",
11436
+ sx: {
11437
+ ml: 1
11438
+ }
11439
+ })
11440
+ }),
11441
+ onClickIcon: function onClickIcon(ref) {
11442
+ return setAnchorEl(ref);
11443
+ }
11444
+ })
11445
+ })
11446
+ }), jsxs(Menu, {
11447
+ open: Boolean(anchorEl),
11448
+ onClose: function onClose() {
11449
+ return setAnchorEl(null);
11450
+ },
11451
+ anchorEl: anchorEl,
11452
+ slotProps: {
11453
+ backdrop: {
11454
+ style: {
11455
+ opacity: 0,
11456
+ transition: 'none'
11457
+ }
11458
+ }
11459
+ },
11460
+ sx: {
11461
+ padding: 3
11462
+ },
11463
+ children: [jsxs(DialogTitle, {
11464
+ id: "dialog-title",
11465
+ sx: {
11466
+ zIndex: 1,
11467
+ padding: '8px 18px 16px 24px',
11468
+ display: 'flex',
11469
+ justifyContent: 'space-between',
11470
+ alignItems: 'center'
11471
+ },
11472
+ children: [jsx(Typography, {
11473
+ sx: {
11474
+ fontSize: '20px',
11475
+ fontWeight: 500,
11476
+ paddingRight: 1
11477
+ },
11478
+ component: "span",
11479
+ children: t('filter-time')
11480
+ }), jsx(CustomIconButton, {
11481
+ "aria-label": t('close-dialog-confirm'),
11482
+ onClick: function onClick() {
11483
+ return setAnchorEl(null);
11484
+ },
11485
+ sx: {
11486
+ '&.MuiIconButton-root': {
11487
+ color: 'geowebColors.greys.accessible'
11488
+ }
11489
+ },
11490
+ children: jsx(Close, {})
11491
+ })]
11492
+ }), jsxs(DialogContent, {
11493
+ sx: {
11494
+ padding: '0px 24px 16px 24px'
11495
+ },
11496
+ children: [jsxs(RadioGroup, {
11497
+ value: timeFilter.mode,
11498
+ onChange: function onChange(e) {
11499
+ return handleModeChange(e.target.value);
11500
+ },
11501
+ children: [jsx(FormControlLabel, {
11502
+ value: TimeFilterMode.all,
11503
+ control: jsx(Radio, {}),
11504
+ label: t('filter-time-no-filter')
11505
+ }), jsx(FormControlLabel, {
11506
+ value: TimeFilterMode.today,
11507
+ control: jsx(Radio, {}),
11508
+ label: t('filter-time-today')
11509
+ }), jsx(FormControlLabel, {
11510
+ value: TimeFilterMode.tomorrow,
11511
+ control: jsx(Radio, {}),
11512
+ label: t('filter-time-tomorrow')
11513
+ }), jsx(FormControlLabel, {
11514
+ value: TimeFilterMode.custom,
11515
+ control: jsx(Radio, {}),
11516
+ label: t('filter-time-custom')
11517
+ })]
11518
+ }), timeFilter.mode === TimeFilterMode.custom && jsxs(Box, {
11519
+ sx: {
11520
+ mt: 2,
11521
+ display: 'flex',
11522
+ flexDirection: 'column',
11523
+ gap: 2
11524
+ },
11525
+ children: [jsxs(LocalizationProvider, {
11526
+ dateAdapter: AdapterDateFns,
11527
+ children: [jsxs(Box, {
11528
+ sx: {
11529
+ display: 'flex',
11530
+ justifyContent: 'space-between',
11531
+ alignItems: 'center'
11021
11532
  },
11022
- children: jsx("span", {
11023
- children: objectNameText
11024
- })
11025
- })
11026
- })
11027
- }), jsx(WarningListColumnContent, {
11028
- title: t('warning-list-header-status'),
11029
- status: status,
11030
- width: 96,
11031
- children: jsxs(Box, {
11533
+ children: [jsx(Typography, {
11534
+ sx: {
11535
+ mr: 1
11536
+ },
11537
+ children: t('filter-start')
11538
+ }), jsx(DateTimePicker, {
11539
+ label: t('filter-choose-date-time'),
11540
+ ampm: false,
11541
+ value: (_getPickerValue = getPickerValue(pickerStartValue)) != null ? _getPickerValue : new Date(Date.now()),
11542
+ onChange: function onChange(value) {
11543
+ return handleTempTimeChange('customStart', value);
11544
+ },
11545
+ format: dateUtils.DATE_FORMAT_DATEPICKER,
11546
+ slotProps: {
11547
+ textField: {
11548
+ variant: 'filled',
11549
+ InputProps: {
11550
+ endAdornment: jsx(InputAdornment, {
11551
+ position: "end",
11552
+ children: "UTC"
11553
+ })
11554
+ }
11555
+ },
11556
+ field: {
11557
+ clearable: true,
11558
+ openPickerButtonPosition: 'start'
11559
+ }
11560
+ },
11561
+ timeSteps: {
11562
+ minutes: 1
11563
+ }
11564
+ })]
11565
+ }), jsxs(Box, {
11566
+ sx: {
11567
+ display: 'flex',
11568
+ justifyContent: 'space-between',
11569
+ alignItems: 'center'
11570
+ },
11571
+ children: [jsx(Typography, {
11572
+ sx: {
11573
+ mr: 1
11574
+ },
11575
+ children: t('filter-end')
11576
+ }), jsx(DateTimePicker, {
11577
+ label: t('filter-choose-date-time'),
11578
+ ampm: false,
11579
+ value: getPickerValue(pickerEndValue),
11580
+ onChange: function onChange(value) {
11581
+ return handleTempTimeChange('customEnd', value);
11582
+ },
11583
+ format: dateUtils.DATE_FORMAT_DATEPICKER,
11584
+ slotProps: {
11585
+ textField: {
11586
+ variant: 'filled',
11587
+ InputProps: {
11588
+ endAdornment: jsx(InputAdornment, {
11589
+ position: "end",
11590
+ children: "UTC"
11591
+ })
11592
+ }
11593
+ },
11594
+ field: {
11595
+ clearable: true,
11596
+ openPickerButtonPosition: 'start'
11597
+ }
11598
+ },
11599
+ timeSteps: {
11600
+ minutes: 1
11601
+ }
11602
+ })]
11603
+ })]
11604
+ }), jsx(Box, {
11032
11605
  sx: {
11033
- position: 'relative'
11606
+ display: 'flex',
11607
+ justifyContent: 'flex-end'
11034
11608
  },
11035
- children: [renderStatusIcon(warning, status), warning.editor && jsx(Box, {
11609
+ children: jsx(Button, {
11610
+ onClick: handleApply,
11036
11611
  sx: {
11037
- width: '16px',
11038
- position: 'absolute',
11039
- top: '1px',
11040
- right: '4px'
11612
+ textTransform: 'none',
11613
+ px: 6,
11614
+ py: 1,
11615
+ backgroundColor: 'geowebColors.buttons.tool.active.fill',
11616
+ color: 'white'
11041
11617
  },
11042
- children: jsx(WarningAvatar, {
11043
- editor: warning.editor,
11044
- status: warning.productStatus
11045
- })
11046
- })]
11047
- })
11618
+ children: t('filter-time-apply')
11619
+ })
11620
+ })]
11048
11621
  })]
11049
- })
11050
- })
11051
- }), warning.id);
11622
+ })]
11623
+ })]
11624
+ });
11052
11625
  };
11053
11626
 
11054
- var BUTTON_AIRMET = 'AIRMET';
11055
- var BUTTON_SIGMET = 'SIGMET';
11056
- var NewWarningButton = function NewWarningButton(_ref) {
11057
- var onCreateWarning = _ref.onCreateWarning,
11058
- _ref$isDefaultOpen = _ref.isDefaultOpen,
11059
- isDefaultOpen = _ref$isDefaultOpen === void 0 ? false : _ref$isDefaultOpen;
11627
+ var filterOrder = ['source', 'domain', 'phenomenon', 'level'];
11628
+ var FilterList = function FilterList(_ref) {
11629
+ var _ref$onClickAll = _ref.onClickAll,
11630
+ onClickAll = _ref$onClickAll === void 0 ? function () {} : _ref$onClickAll,
11631
+ _ref$isAllSelected = _ref.isAllSelected,
11632
+ isAllSelected = _ref$isAllSelected === void 0 ? true : _ref$isAllSelected,
11633
+ filterState = _ref.filterState,
11634
+ updateFilter = _ref.updateFilter,
11635
+ timeFilter = _ref.timeFilter,
11636
+ onUpdateTimeFilter = _ref.onUpdateTimeFilter;
11060
11637
  var _useWarningsTranslati = useWarningsTranslation(),
11061
11638
  t = _useWarningsTranslati.t;
11062
- var config = sessionStorageProvider.getConfig();
11063
- var showMartimeWarningOption = !!config.GW_WARNINGS_MARITIME_WARNINGS;
11064
- var _React$useState = React__default.useState(null),
11065
- anchorEl = _React$useState[0],
11066
- setAnchorEl = _React$useState[1];
11067
- var isOpen = Boolean(anchorEl);
11068
- var handleClick = function handleClick(event) {
11069
- event.stopPropagation();
11070
- setAnchorEl(event.currentTarget);
11071
- };
11072
- var handleClose = function handleClose(event) {
11073
- event.stopPropagation();
11074
- setAnchorEl(null);
11075
- };
11076
- var onCreateNewWarning = function onCreateNewWarning(warningType, event) {
11077
- onCreateWarning(warningType);
11078
- handleClose(event);
11079
- };
11080
- var buttonId = 'newWarningButton';
11081
- React__default.useEffect(function () {
11082
- if (isDefaultOpen) {
11083
- setAnchorEl(document.getElementById(buttonId));
11084
- }
11085
- }, [isDefaultOpen, buttonId]);
11086
- return jsxs(Fragment, {
11087
- children: [jsxs(CustomToggleButton, {
11088
- id: buttonId,
11089
- onClick: handleClick,
11090
- sx: Object.assign({
11091
- textTransform: 'initial!important',
11092
- marginBottom: '8px',
11093
- fontSize: '12px',
11094
- height: '32px!important',
11095
- whiteSpace: 'nowrap',
11096
- minWidth: 'auto',
11097
- paddingRight: '12px!important'
11098
- }, isOpen ? {
11099
- '&.MuiToggleButton-root.primary': {
11100
- backgroundColor: 'geowebColors.buttons.primary.mouseOver.fill'
11101
- }
11102
- } : {}),
11103
- children: [jsx(Add, {}), t('warning-list-button_create')]
11104
- }), jsxs(Menu, {
11105
- anchorEl: anchorEl,
11106
- open: isOpen,
11107
- onClose: function onClose(event, reason) {
11108
- if (reason === 'tabKeyDown') {
11109
- return;
11110
- }
11111
- handleClose(event);
11112
- },
11113
- anchorOrigin: {
11114
- vertical: 'bottom',
11115
- horizontal: 'center'
11116
- },
11117
- transformOrigin: {
11118
- vertical: 'top',
11119
- horizontal: 'center'
11120
- },
11121
- slotProps: {
11122
- root: {
11123
- slotProps: {
11124
- backdrop: {
11125
- style: {
11126
- opacity: 0,
11127
- transition: 'none'
11128
- }
11129
- }
11130
- }
11131
- },
11132
- list: {
11133
- style: {
11134
- padding: '0px'
11135
- }
11136
- }
11137
- },
11138
- children: [jsx(MenuItem, {
11139
- onClick: function onClick(event) {
11140
- onCreateNewWarning('public', event);
11141
- },
11142
- children: jsx(ListItemText, {
11143
- children: t('public-warning-title').toUpperCase()
11144
- })
11145
- }, "Public"), jsx(MenuItem, {
11146
- onClick: function onClick(event) {
11147
- onCreateNewWarning('airmet', event);
11148
- },
11149
- children: jsx(ListItemText, {
11150
- children: BUTTON_AIRMET
11151
- })
11152
- }, "Airmet"), jsx(MenuItem, {
11153
- onClick: function onClick(event) {
11154
- onCreateNewWarning('sigmet', event);
11155
- },
11156
- children: jsx(ListItemText, {
11157
- children: BUTTON_SIGMET
11158
- })
11159
- }, "Sigmet"), showMartimeWarningOption ? jsxs(Fragment, {
11160
- children: [jsx(MenuItem, {
11161
- onClick: function onClick(event) {
11162
- onCreateNewWarning('maritimeWarningCoastal', event);
11163
- },
11164
- children: jsx(ListItemText, {
11165
- children: t('maritime-warning-coastal-title').toUpperCase()
11166
- })
11167
- }, "MaritimeWarningCoastal"), jsx(MenuItem, {
11168
- onClick: function onClick(event) {
11169
- onCreateNewWarning('maritimeWarningNorthSea', event);
11639
+ return jsxs(Box, {
11640
+ sx: {
11641
+ display: 'flex',
11642
+ flexWrap: 'wrap',
11643
+ alignItems: 'center',
11644
+ gap: 1,
11645
+ pb: 4
11646
+ },
11647
+ children: [jsx(CustomTooltip, {
11648
+ title: isAllSelected ? t('filter-hide-all') : t('filter-show-all'),
11649
+ placement: "bottom",
11650
+ children: jsx("div", {
11651
+ children: jsx(FilterChip, {
11652
+ id: "all",
11653
+ label: t('filter-all'),
11654
+ isSelected: isAllSelected,
11655
+ handleClick: function handleClick() {
11656
+ return onClickAll(isAllSelected);
11170
11657
  },
11171
- children: jsx(ListItemText, {
11172
- children: t('maritime-warning-northsea-title').toUpperCase()
11173
- })
11174
- }, "MaritimeWarningNorthSea")]
11175
- }) : null]
11658
+ size: "medium"
11659
+ })
11660
+ })
11661
+ }), filterOrder.map(function (filterId) {
11662
+ return jsx(ExpandableFilterChip, {
11663
+ id: filterId,
11664
+ options: filterState[filterId],
11665
+ updateFilter: updateFilter
11666
+ }, filterId);
11667
+ }), jsx(Box, {
11668
+ sx: {
11669
+ marginLeft: 'auto'
11670
+ },
11671
+ children: jsx(TimeFilterChip, {
11672
+ timeFilter: timeFilter,
11673
+ onUpdateTimeFilter: onUpdateTimeFilter
11674
+ })
11176
11675
  })]
11177
11676
  });
11178
11677
  };
@@ -11181,15 +11680,17 @@ var groupWarningsOnStatus = function groupWarningsOnStatus(warnings, sortState)
11181
11680
  var key = sortState.key,
11182
11681
  direction = sortState.direction;
11183
11682
  var sortedWarnings = warnings.sort(function (warningA, warningB) {
11683
+ var _dateStringB$localeCo;
11184
11684
  var dateStringA = key === 'lastUpdatedTime' ? warningA[key] : warningA.warningDetail[key];
11185
11685
  var dateStringB = key === 'lastUpdatedTime' ? warningB[key] : warningB.warningDetail[key];
11186
- return (dateStringB == null ? void 0 : dateStringB.localeCompare(dateStringA || '')) || 0;
11686
+ return (_dateStringB$localeCo = dateStringB == null ? void 0 : dateStringB.localeCompare(dateStringA != null ? dateStringA : '')) != null ? _dateStringB$localeCo : 0;
11187
11687
  });
11188
11688
  if (direction === 'asc') {
11189
11689
  sortedWarnings.reverse();
11190
11690
  }
11191
11691
  var groupedWarnings = groupBy(sortedWarnings, function (warning) {
11192
- var status = warning.status || mapProductStatusToWarningStatus(warning.productStatus);
11692
+ var _warning$status;
11693
+ var status = (_warning$status = warning.status) != null ? _warning$status : mapProductStatusToWarningStatus(warning.productStatus);
11193
11694
  switch (status) {
11194
11695
  case PublicWarningStatus.DRAFT:
11195
11696
  case PublicWarningStatus.DRAFT_PUBLISHED:
@@ -11213,7 +11714,7 @@ var groupWarningsOnStatus = function groupWarningsOnStatus(warnings, sortState)
11213
11714
  }, groupedWarnings);
11214
11715
  };
11215
11716
  var PublicWarningList = function PublicWarningList(_ref) {
11216
- var _sx, _sx2, _sx3;
11717
+ var _sx, _sx2;
11217
11718
  var _ref$warnings = _ref.warnings,
11218
11719
  warnings = _ref$warnings === void 0 ? [] : _ref$warnings,
11219
11720
  filterHookState = _ref.filterHookState,
@@ -11248,7 +11749,9 @@ var PublicWarningList = function PublicWarningList(_ref) {
11248
11749
  setExpandedSections = _ref.setExpandedSections;
11249
11750
  var updateFilter = filterHookState.updateFilter,
11250
11751
  allSelected = filterHookState.allSelected,
11251
- filterState = filterHookState.filterState;
11752
+ filterState = filterHookState.filterState,
11753
+ timeFilter = filterHookState.timeFilter,
11754
+ updateTimeFilter = filterHookState.updateTimeFilter;
11252
11755
  var _useWarningsTranslati = useWarningsTranslation(),
11253
11756
  t = _useWarningsTranslati.t;
11254
11757
  var _React$useState = React__default.useState({
@@ -11333,7 +11836,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11333
11836
  }
11334
11837
  }, [hoveredFeatureId, items]);
11335
11838
  return jsxs(Fragment, {
11336
- children: [isLoading && jsx(LinearProgress, {
11839
+ children: [isLoading ? jsx(LinearProgress, {
11337
11840
  "data-testid": "loading-bar",
11338
11841
  color: "secondary",
11339
11842
  sx: {
@@ -11341,7 +11844,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11341
11844
  width: '100%',
11342
11845
  top: 0
11343
11846
  }
11344
- }), jsxs(Box, {
11847
+ }) : null, jsxs(Box, {
11345
11848
  sx: {
11346
11849
  padding: 3,
11347
11850
  height: '100%',
@@ -11352,67 +11855,50 @@ var PublicWarningList = function PublicWarningList(_ref) {
11352
11855
  "data-testid": "publicWarningList",
11353
11856
  children: [jsxs(Box, {
11354
11857
  ref: filterRef,
11355
- sx: (_sx = {
11858
+ sx: {
11356
11859
  display: 'flex',
11357
- flexWrap: 'wrap',
11358
- alignItems: 'flex-end',
11359
- flexDirection: 'column'
11360
- }, _sx["@container publicWarningList (min-width: " + breakpoints.desktop + "px)"] = {
11361
- flexDirection: 'row',
11362
- ' .create-warning': {
11363
- order: 2
11364
- }
11365
- }, _sx),
11366
- children: [jsx(Box, {
11367
- className: "warning-filter",
11860
+ flexDirection: 'column',
11861
+ gap: 2
11862
+ },
11863
+ children: [jsxs(Box, {
11368
11864
  sx: {
11369
- flex: 1,
11370
- minWidth: 0,
11371
- order: 2,
11372
- alignSelf: 'flex-start'
11865
+ display: 'flex',
11866
+ justifyContent: 'flex-end',
11867
+ alignItems: 'center'
11373
11868
  },
11869
+ children: [lastUpdatedTime ? jsx(LastUpdateTime, {
11870
+ onPressRefresh: onRefetchWarnings,
11871
+ lastUpdateTime: lastUpdatedTime
11872
+ }) : jsx(Box, {}), jsx(NewWarningButton, {
11873
+ onCreateWarning: onCreateWarning
11874
+ })]
11875
+ }), jsx(Box, {
11374
11876
  children: jsx(FilterList, {
11375
11877
  isAllSelected: allSelected,
11376
11878
  onClickAll: onClickAll,
11377
11879
  filterState: filterState,
11378
- updateFilter: updateFilter
11880
+ updateFilter: updateFilter,
11881
+ timeFilter: timeFilter,
11882
+ onUpdateTimeFilter: updateTimeFilter
11379
11883
  })
11380
- }), jsxs(Box, {
11381
- className: "create-warning",
11382
- sx: {
11383
- order: 1
11384
- },
11385
- children: [lastUpdatedTime && jsx(Box, {
11386
- sx: {
11387
- "float": 'left',
11388
- minWidth: 140,
11389
- paddingTop: 0.5
11390
- },
11391
- children: jsx(LastUpdateTime, {
11392
- onPressRefresh: onRefetchWarnings,
11393
- lastUpdateTime: lastUpdatedTime
11394
- })
11395
- }), jsx(NewWarningButton, {
11396
- onCreateWarning: onCreateWarning
11397
- })]
11398
11884
  })]
11399
- }), error && jsx(AlertBanner, {
11885
+ }), error ? jsx(AlertBanner, {
11400
11886
  title: error.message,
11401
11887
  shouldClose: true
11402
- }), !error && jsxs(Grid, {
11888
+ }) : null, !error && jsxs(Grid, {
11403
11889
  container: true,
11404
11890
  rowSpacing: 0,
11405
11891
  columnSpacing: 0,
11406
11892
  alignItems: "center",
11407
11893
  justifyContent: "space-between",
11408
11894
  size: "grow",
11409
- sx: (_sx2 = {
11895
+ sx: (_sx = {
11410
11896
  maxWidth: '100%',
11411
11897
  display: 'none',
11412
11898
  marginTop: '4px'
11413
- }, _sx2["@container publicWarningList (min-width: " + breakpoints.desktop + "px)"] = {
11899
+ }, _sx["@container publicWarningList (min-width: " + breakpoints.desktop + "px)"] = {
11414
11900
  display: 'flex'
11415
- }, _sx2),
11901
+ }, _sx),
11416
11902
  children: [jsx(WarningListHeaderContent, {
11417
11903
  title: t('warning-list-header-incidents'),
11418
11904
  sx: {
@@ -11452,9 +11938,9 @@ var PublicWarningList = function PublicWarningList(_ref) {
11452
11938
  width: 140
11453
11939
  }), jsx(WarningListHeaderContent, {
11454
11940
  title: t('warning-list-header-levels'),
11455
- sx: (_sx3 = {}, _sx3["@container publicWarningList (min-width: " + breakpoints.desktop + "px)"] = {
11941
+ sx: (_sx2 = {}, _sx2["@container publicWarningList (min-width: " + breakpoints.desktop + "px)"] = {
11456
11942
  width: 56
11457
- }, _sx3)
11943
+ }, _sx2)
11458
11944
  }), jsx(WarningListHeaderContent, {
11459
11945
  title: t('areas'),
11460
11946
  width: 100
@@ -11465,7 +11951,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11465
11951
  marginRight: '48px'
11466
11952
  }
11467
11953
  })]
11468
- }), sortedWarnings && !error && jsx(Box, {
11954
+ }), sortedWarnings && !error ? jsx(Box, {
11469
11955
  "data-testid": "warnings-list",
11470
11956
  sx: {
11471
11957
  height: "calc(100% - " + filterHeight + "px)",
@@ -11494,6 +11980,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11494
11980
  if (warning.totalWarnings !== undefined) {
11495
11981
  var header = warning;
11496
11982
  return jsx(WarningListItemSeperator, {
11983
+ timeFilter: timeFilter,
11497
11984
  status: header.status,
11498
11985
  totalWarnings: header.totalWarnings,
11499
11986
  style: style,
@@ -11523,7 +12010,7 @@ var PublicWarningList = function PublicWarningList(_ref) {
11523
12010
  });
11524
12011
  }
11525
12012
  })
11526
- })]
12013
+ }) : null]
11527
12014
  })]
11528
12015
  });
11529
12016
  };
@@ -11718,7 +12205,8 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11718
12205
  var savedDomainFilter = savedFilterState.domain,
11719
12206
  savedPhenomenonFilter = savedFilterState.phenomenon,
11720
12207
  savedLevelFilter = savedFilterState.level,
11721
- savedSourceFilter = savedFilterState.source;
12208
+ savedSourceFilter = savedFilterState.source,
12209
+ savedTimeFilter = savedFilterState.time;
11722
12210
  /** Levels for selected domain(s) */
11723
12211
  var relevantLevels = useMemo(function () {
11724
12212
  return getLevelsForDomainFilter(savedDomainFilter);
@@ -11749,7 +12237,7 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11749
12237
  var defaultSourceFilter = useMemo(function () {
11750
12238
  return Object.fromEntries(relevantSources.map(function (key) {
11751
12239
  var presetValue = presetFilterState == null ? void 0 : presetFilterState.source[key];
11752
- return [key, presetValue === undefined ? true : presetValue];
12240
+ return [key, presetValue != null ? presetValue : true];
11753
12241
  }));
11754
12242
  },
11755
12243
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -11763,11 +12251,13 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11763
12251
  };
11764
12252
  }, [defaultSourceFilter]);
11765
12253
  var initialFiltersWithPresets = useMemo(function () {
12254
+ var _presetFilterState$ti;
11766
12255
  return {
11767
12256
  source: defaultSourceFilter || defaultEmptyFilter,
11768
12257
  domain: Object.assign({}, initialFilters.domain, presetFilterState == null ? void 0 : presetFilterState.domain),
11769
12258
  phenomenon: Object.assign({}, initialFilters.phenomenon, presetFilterState == null ? void 0 : presetFilterState.phenomenon),
11770
- level: Object.assign({}, initialFilters.level, presetFilterState == null ? void 0 : presetFilterState.level)
12259
+ level: Object.assign({}, initialFilters.level, presetFilterState == null ? void 0 : presetFilterState.level),
12260
+ time: (_presetFilterState$ti = presetFilterState == null ? void 0 : presetFilterState.time) != null ? _presetFilterState$ti : defaultTimeFilter
11771
12261
  };
11772
12262
  },
11773
12263
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -11817,7 +12307,16 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11817
12307
  });
11818
12308
  }
11819
12309
  };
12310
+ var updateTimeFilter = useCallback(function (timeFilter) {
12311
+ onUpdateFilters({
12312
+ time: timeFilter
12313
+ });
12314
+ }, [onUpdateFilters]);
11820
12315
  var byFilterState = useCallback(function (warning) {
12316
+ var _relevantSources$find;
12317
+ if (!isWarningWithinInterval(warning, savedTimeFilter)) {
12318
+ return false;
12319
+ }
11821
12320
  var levelDomain = function () {
11822
12321
  if (['SIG', 'AIR'].includes(warning.warningDetail.level)) {
11823
12322
  return Domain.aviation;
@@ -11838,24 +12337,27 @@ var useWarningFilters = function useWarningFilters(warnings, onUpdateFilters, sa
11838
12337
  if (!pickedPhenomenaFilter[phenomenon]) {
11839
12338
  return false;
11840
12339
  }
11841
- var source = relevantSources.find(function (source) {
12340
+ var source = (_relevantSources$find = relevantSources.find(function (source) {
11842
12341
  return source === warning.warningDetail.warningProposalSource;
11843
- }) || emptyFilterId;
12342
+ })) != null ? _relevantSources$find : emptyFilterId;
11844
12343
  if (!savedSourceFilter[source]) {
11845
12344
  return false;
11846
12345
  }
11847
12346
  return true;
11848
- }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter]);
12347
+ }, [savedDomainFilter, pickedLevelFilter, pickedPhenomenaFilter, relevantSources, savedSourceFilter, savedTimeFilter]);
11849
12348
  return {
11850
12349
  allSelected: allSelected,
11851
12350
  updateFilter: updateFilter,
12351
+ updateTimeFilter: updateTimeFilter,
11852
12352
  byFilterState: byFilterState,
11853
12353
  filterState: {
11854
12354
  domain: savedDomainFilter,
11855
12355
  level: pickedLevelFilter,
11856
12356
  phenomenon: pickedPhenomenaFilter,
11857
- source: savedSourceFilter
11858
- }
12357
+ source: savedSourceFilter,
12358
+ time: savedTimeFilter
12359
+ },
12360
+ timeFilter: savedTimeFilter
11859
12361
  };
11860
12362
  };
11861
12363
 
@@ -12103,8 +12605,12 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12103
12605
  var dispatch = useDispatch();
12104
12606
  var confirmDialog = useConfirmationDialog();
12105
12607
  var _useAuthenticationCon = useAuthenticationContext$1(),
12106
- auth = _useAuthenticationCon.auth;
12107
- var _useWarnings = useWarnings(),
12608
+ auth = _useAuthenticationCon.auth,
12609
+ isLoggedIn = _useAuthenticationCon.isLoggedIn;
12610
+ var savedFilterState = useSelector(function (store) {
12611
+ return getWarningsFilterById(store, panelId);
12612
+ });
12613
+ var _useWarnings = useWarnings(false, savedFilterState.time),
12108
12614
  combinedWarnings = _useWarnings.combinedWarnings,
12109
12615
  refetchWarnings = _useWarnings.refetchWarnings,
12110
12616
  isFetching = _useWarnings.isFetching,
@@ -12116,9 +12622,6 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12116
12622
  confirmDialogOptions = _React$useState[0],
12117
12623
  setConfirmDialogOptions = _React$useState[1];
12118
12624
  var selectedWarningId = useSelector(getSelectedWarningId);
12119
- var savedFilterState = useSelector(function (store) {
12120
- return getWarningsFilterById(store, panelId);
12121
- });
12122
12625
  var isFormDirty = useSelector(getSelectedPublicIsFormDirty);
12123
12626
  var openPublicWarningDialog = /*#__PURE__*/function () {
12124
12627
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(formAction, warning, warningType) {
@@ -12635,7 +13138,7 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12635
13138
  features: allFeatures
12636
13139
  }, panelId),
12637
13140
  hoveredFeatureId = _useUpdateSharedData.hoverId;
12638
- return jsxs(Fragment, {
13141
+ return isLoggedIn ? jsxs(Fragment, {
12639
13142
  children: [jsx(PublicWarningList, {
12640
13143
  error: error != null ? error : undefined,
12641
13144
  expandedSections: expandedSections,
@@ -12694,6 +13197,10 @@ var PublicWarningListConnect = function PublicWarningListConnect(_ref) {
12694
13197
  return cancelAviationProduct;
12695
13198
  }()
12696
13199
  })]
13200
+ }) : jsx(AlertBanner, {
13201
+ severity: "error",
13202
+ title: t('error-auth-login'),
13203
+ dataTestId: "public-warning-list-auth-error"
12697
13204
  });
12698
13205
  };
12699
13206