@opengeoweb/taf 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +2 -2
  2. package/index.d.ts +1 -3
  3. package/index.esm.js +1661 -1359
  4. package/index.umd.js +1778 -1368
  5. package/lib/TafDemo.stories.d.ts +2 -2
  6. package/lib/components/IssuesPane/IssuesButton.d.ts +8 -2
  7. package/lib/components/IssuesPane/IssuesPane.d.ts +5 -0
  8. package/lib/components/IssuesPane/IssuesPane.stories.d.ts +12 -3
  9. package/lib/components/Spinner/Spinner.d.ts +2 -1
  10. package/lib/components/StatusIcon/StatusIcon.d.ts +8 -0
  11. package/lib/components/{ContentDialog/ContentDialog.spec.d.ts → StatusIcon/StatusIcon.spec.d.ts} +0 -0
  12. package/lib/components/TabPanel/TabPanel.d.ts +8 -0
  13. package/lib/components/{TafForm/TafFormDialog/TafFormDialog.spec.d.ts → TabPanel/TabPanel.spec.d.ts} +0 -0
  14. package/lib/components/TabPanel/index.d.ts +1 -0
  15. package/lib/components/TafForm/TafForm.d.ts +3 -20
  16. package/lib/components/TafForm/TafFormButtons/TafFormButtons.d.ts +5 -9
  17. package/lib/components/TafForm/TafFormButtons/TafFormOptionsButton.d.ts +11 -0
  18. package/lib/components/TafForm/{TafFormRow/change.spec.d.ts → TafFormButtons/TafFormOptionsButton.spec.d.ts} +0 -0
  19. package/lib/components/TafForm/TafFormRow/types.d.ts +3 -2
  20. package/lib/components/TafForm/TafFormRow/{change.d.ts → validations/change.d.ts} +0 -0
  21. package/lib/components/TafForm/TafFormRow/{clouds.spec.d.ts → validations/change.spec.d.ts} +0 -0
  22. package/lib/components/TafForm/TafFormRow/{clouds.d.ts → validations/clouds.d.ts} +1 -1
  23. package/lib/components/TafForm/TafFormRow/{probability.spec.d.ts → validations/clouds.spec.d.ts} +0 -0
  24. package/lib/components/TafForm/TafFormRow/{probability.d.ts → validations/probability.d.ts} +0 -0
  25. package/lib/components/TafForm/TafFormRow/{utils.spec.d.ts → validations/probability.spec.d.ts} +0 -0
  26. package/lib/components/TafForm/TafFormRow/{utils.d.ts → validations/utils.d.ts} +0 -0
  27. package/lib/components/{TafList → TafForm/TafFormRow/validations}/utils.spec.d.ts +0 -0
  28. package/lib/components/TafForm/TafFormRow/{validField.d.ts → validations/validField.d.ts} +1 -1
  29. package/lib/components/TafForm/TafFormRow/{validField.spec.d.ts → validations/validField.spec.d.ts} +0 -0
  30. package/lib/components/TafForm/TafFormRow/{visibility.d.ts → validations/visibility.d.ts} +1 -1
  31. package/lib/components/TafForm/TafFormRow/{visibility.spec.d.ts → validations/visibility.spec.d.ts} +0 -0
  32. package/lib/components/TafForm/TafFormRow/{weather.d.ts → validations/weather.d.ts} +1 -1
  33. package/lib/components/TafForm/TafFormRow/{weather.spec.d.ts → validations/weather.spec.d.ts} +0 -0
  34. package/lib/components/TafForm/TafFormRow/{wind.d.ts → validations/wind.d.ts} +1 -1
  35. package/lib/components/TafForm/TafFormRow/{wind.spec.d.ts → validations/wind.spec.d.ts} +0 -0
  36. package/lib/components/TafForm/TafFormWrapper.d.ts +3 -6
  37. package/lib/components/TafForm/TafFormWrapper.stories.d.ts +20 -0
  38. package/lib/components/TafForm/index.d.ts +0 -1
  39. package/lib/components/TafForm/utils.d.ts +25 -2
  40. package/lib/components/TafHeader/TafHeader.d.ts +6 -0
  41. package/lib/components/{TafList/TafList.spec.d.ts → TafHeader/TafHeader.spec.d.ts} +0 -0
  42. package/lib/components/TafLayout/LocationTabs/LocationTabs.d.ts +10 -0
  43. package/lib/components/{TafList/TafListAccordion.spec.d.ts → TafLayout/LocationTabs/LocationTabs.spec.d.ts} +0 -0
  44. package/lib/components/TafLayout/LocationTabs/LocationTabs.stories.d.ts +13 -0
  45. package/lib/components/TafLayout/LocationTabs/index.d.ts +1 -0
  46. package/lib/components/TafLayout/TacOverview/TacContainer.d.ts +8 -0
  47. package/lib/components/{TafList/TafListButtons.spec.d.ts → TafLayout/TacOverview/TacContainer.spec.d.ts} +0 -0
  48. package/lib/components/TafLayout/TacOverview/TacOverview.d.ts +11 -0
  49. package/lib/components/{TafList/TafListRow.spec.d.ts → TafLayout/TacOverview/TacOverview.spec.d.ts} +0 -0
  50. package/lib/components/TafLayout/TacOverview/TacOverview.stories.d.ts +15 -0
  51. package/lib/components/TafLayout/TacOverview/TacOverviewMobile.d.ts +11 -0
  52. package/lib/components/{TafList/TafListSection.spec.d.ts → TafLayout/TacOverview/TacOverviewMobile.spec.d.ts} +0 -0
  53. package/lib/components/TafLayout/TacOverview/TacOverviewMobile.stories.d.ts +23 -0
  54. package/lib/components/TafLayout/TacOverview/index.d.ts +2 -0
  55. package/lib/components/TafLayout/TafLayout.d.ts +8 -0
  56. package/lib/components/{TafWrapper/TafWrapper.spec.d.ts → TafLayout/TafLayout.spec.d.ts} +0 -0
  57. package/lib/components/TafLayout/TafLayout.stories.d.ts +7 -0
  58. package/lib/components/TafLayout/TafPanel/TafPanel.d.ts +10 -0
  59. package/lib/components/TafLayout/TafPanel/TafPanel.spec.d.ts +1 -0
  60. package/lib/components/TafLayout/TafPanel/index.d.ts +1 -0
  61. package/lib/components/TafLayout/TopTabs/TopTabs.d.ts +11 -0
  62. package/lib/components/TafLayout/TopTabs/TopTabs.spec.d.ts +1 -0
  63. package/lib/components/TafLayout/TopTabs/TopTabs.stories.d.ts +13 -0
  64. package/lib/components/TafLayout/TopTabs/index.d.ts +1 -0
  65. package/lib/components/TafLayout/utils.d.ts +18 -0
  66. package/lib/components/TafLayout/utils.spec.d.ts +1 -0
  67. package/lib/components/TafModule/TafModule.d.ts +3 -0
  68. package/lib/components/TafModule/TafModule.spec.d.ts +1 -0
  69. package/lib/components/TafModule/TafModule.stories.d.ts +9 -0
  70. package/lib/components/TafModule/index.d.ts +1 -0
  71. package/lib/types.d.ts +17 -1
  72. package/lib/utils/__mocks__/api.d.ts +1 -0
  73. package/lib/utils/fakeApi.d.ts +1 -1
  74. package/lib/utils/mockdata/fakeTafList.d.ts +1 -0
  75. package/lib/utils/testUtils.d.ts +4 -5
  76. package/package.json +7 -6
  77. package/lib/components/ContentDialog/ContentDialog.d.ts +0 -14
  78. package/lib/components/ContentDialog/ContentDialog.stories.d.ts +0 -7
  79. package/lib/components/ContentDialog/index.d.ts +0 -1
  80. package/lib/components/IssuesPane/IssuesPane.styles.d.ts +0 -1
  81. package/lib/components/TafForm/TafForm.styles.d.ts +0 -1
  82. package/lib/components/TafForm/TafFormDialog/TafFormDialog.d.ts +0 -12
  83. package/lib/components/TafForm/TafFormDialog/TafFormDialog.stories.d.ts +0 -9
  84. package/lib/components/TafList/TafList.d.ts +0 -11
  85. package/lib/components/TafList/TafList.stories.d.ts +0 -8
  86. package/lib/components/TafList/TafListAccordion.d.ts +0 -11
  87. package/lib/components/TafList/TafListButtons.d.ts +0 -9
  88. package/lib/components/TafList/TafListRow.d.ts +0 -12
  89. package/lib/components/TafList/TafListSection.d.ts +0 -12
  90. package/lib/components/TafList/TafListSection.stories.d.ts +0 -18
  91. package/lib/components/TafList/index.d.ts +0 -3
  92. package/lib/components/TafList/utils.d.ts +0 -4
  93. package/lib/components/TafWrapper/TafWrapper.d.ts +0 -13
  94. package/lib/components/TafWrapper/index.d.ts +0 -1
  95. package/lib/utils/utils.d.ts +0 -3
package/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@mui/material'), require('@mui/styles/makeStyles'), require('moment'), require('@opengeoweb/shared'), require('@mui/icons-material'), require('@opengeoweb/api'), require('@opengeoweb/form-fields'), require('react-hook-form'), require('react-sortablejs')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'react', '@mui/material', '@mui/styles/makeStyles', 'moment', '@opengeoweb/shared', '@mui/icons-material', '@opengeoweb/api', '@opengeoweb/form-fields', 'react-hook-form', 'react-sortablejs'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Taf = {}, global.React, global.material, global.makeStyles, global.moment, global.shared, global.iconsMaterial, global.api, global.formFields, global.reactHookForm, global.reactSortablejs));
5
- })(this, (function (exports, React, material, makeStyles, moment, shared, iconsMaterial, api, formFields, reactHookForm, reactSortablejs) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@opengeoweb/form-fields'), require('@mui/material'), require('react-hook-form'), require('react-sortablejs'), require('@opengeoweb/api'), require('@opengeoweb/shared'), require('moment'), require('lodash'), require('@mui/styles/makeStyles'), require('@mui/icons-material'), require('react-dom'), require('@mui/material/LinearProgress'), require('@mui/icons-material/DoDisturb'), require('@mui/material/Box')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'react', '@opengeoweb/form-fields', '@mui/material', 'react-hook-form', 'react-sortablejs', '@opengeoweb/api', '@opengeoweb/shared', 'moment', 'lodash', '@mui/styles/makeStyles', '@mui/icons-material', 'react-dom', '@mui/material/LinearProgress', '@mui/icons-material/DoDisturb', '@mui/material/Box'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Taf = {}, global.React, global.formFields, global.material, global.reactHookForm, global.reactSortablejs, global.api, global.shared, global.moment, global.lodash, global.makeStyles, global.iconsMaterial, global.ReactDOM, global.LinearProgress, global.DoDisturbIcon, global.Box));
5
+ })(this, (function (exports, React, formFields, material, reactHookForm, reactSortablejs, api, shared, moment, lodash, makeStyles, iconsMaterial, ReactDOM, LinearProgress, DoDisturbIcon, Box) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -26,8 +26,12 @@
26
26
 
27
27
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
28
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
- var makeStyles__default = /*#__PURE__*/_interopDefaultLegacy(makeStyles);
30
29
  var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
30
+ var makeStyles__default = /*#__PURE__*/_interopDefaultLegacy(makeStyles);
31
+ var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
32
+ var LinearProgress__default = /*#__PURE__*/_interopDefaultLegacy(LinearProgress);
33
+ var DoDisturbIcon__default = /*#__PURE__*/_interopDefaultLegacy(DoDisturbIcon);
34
+ var Box__default = /*#__PURE__*/_interopDefaultLegacy(Box);
31
35
 
32
36
  /*! *****************************************************************************
33
37
  Copyright (c) Microsoft Corporation.
@@ -105,18 +109,6 @@
105
109
  }
106
110
  }
107
111
 
108
- function __values(o) {
109
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
110
- if (m) return m.call(o);
111
- if (o && typeof o.length === "number") return {
112
- next: function () {
113
- if (o && i >= o.length) o = void 0;
114
- return { value: o && o[i++], done: !o };
115
- }
116
- };
117
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
118
- }
119
-
120
112
  function __read(o, n) {
121
113
  var m = typeof Symbol === "function" && o[Symbol.iterator];
122
114
  if (!m) return o;
@@ -144,62 +136,6 @@
144
136
  return to.concat(ar || Array.prototype.slice.call(from));
145
137
  }
146
138
 
147
- /* *
148
- * Licensed under the Apache License, Version 2.0 (the "License");
149
- * you may not use this file except in compliance with the License.
150
- * You may obtain a copy of the License at
151
- *
152
- * http://www.apache.org/licenses/LICENSE-2.0
153
- *
154
- * Unless required by applicable law or agreed to in writing, software
155
- * distributed under the License is distributed on an "AS IS" BASIS,
156
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
157
- * See the License for the specific language governing permissions and
158
- * limitations under the License.
159
- *
160
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
161
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
162
- * */
163
- var useTafSettings = function useTafSettings( // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types
164
- tafConfig) {
165
- var locations = tafConfig.locations;
166
- return {
167
- locations: locations
168
- };
169
- };
170
-
171
- var location_indicator_mwo = "EHDB";
172
- var locations = {
173
- EHAM: {
174
- validity_duration: 30,
175
- activity_period: 6
176
- },
177
- EHRD: {
178
- validity_duration: 30,
179
- activity_period: 6
180
- },
181
- EHGG: {
182
- validity_duration: 30,
183
- activity_period: 6
184
- },
185
- EHBK: {
186
- validity_duration: 30,
187
- activity_period: 6
188
- },
189
- EHLE: {
190
- validity_duration: 30,
191
- activity_period: 6
192
- },
193
- TNCB: {
194
- validity_duration: 30,
195
- activity_period: 6
196
- }
197
- };
198
- var tafConfig = {
199
- location_indicator_mwo: location_indicator_mwo,
200
- locations: locations
201
- };
202
-
203
139
  function _typeof(obj) {
204
140
  "@babel/helpers - typeof";
205
141
 
@@ -2458,13 +2394,26 @@
2458
2394
  if (action === 'PUBLISH') return 'Publish';
2459
2395
  if (action === 'AMEND') return 'This TAF is an amendment';
2460
2396
  if (action === 'CORRECT') return 'This TAF is a correction';
2397
+ if (action === 'CANCEL') return 'Cancel TAF';
2461
2398
  return 'Cancel TAF';
2399
+ }; // Check if the amended/corrected TAF has been changed. Only compare the fields users are able to fill in
2400
+ // (i.e. exclude baseforecast valid time as that gets updated when doing an amendment automatically outside of the users influence)
2401
+
2402
+ var isTafAmendedCorrectedChanged = function isTafAmendedCorrectedChanged(isFormDirty, originalTaf, currentTaf) {
2403
+ var originalBaseF = originalTaf.baseForecast,
2404
+ originalChG = originalTaf.changeGroups;
2405
+ var currentBaseF = currentTaf.baseForecast,
2406
+ currentChG = currentTaf.changeGroups;
2407
+
2408
+ originalBaseF.valid;
2409
+ var originalNoValid = __rest(originalBaseF, ["valid"]);
2410
+
2411
+ currentBaseF.valid;
2412
+ var currentNoValid = __rest(currentBaseF, ["valid"]);
2413
+
2414
+ return isFormDirty && (!lodash.isEqual(originalNoValid, currentNoValid) || !lodash.isEqual(originalChG, currentChG));
2462
2415
  };
2463
2416
  var getConfirmationDialogContent = function getConfirmationDialogContent(action, isFormDirty) {
2464
- if (isFormDirty === void 0) {
2465
- isFormDirty = true;
2466
- }
2467
-
2468
2417
  switch (action) {
2469
2418
  case 'DISCARD':
2470
2419
  return 'Are you sure you would like to discard this TAF? Any changes made will be lost';
@@ -2474,7 +2423,7 @@
2474
2423
 
2475
2424
  case 'AMEND':
2476
2425
  case 'CORRECT':
2477
- return isFormDirty ? 'Do you want to publish it?' : 'Are you sure you want to publish the TAF? You did not make any changes!';
2426
+ return isFormDirty() ? 'Do you want to publish it?' : 'Are you sure you want to publish the TAF? You did not make any changes!';
2478
2427
 
2479
2428
  default:
2480
2429
  return 'Are you sure you want to cancel this TAF?';
@@ -2487,89 +2436,150 @@
2487
2436
  return 'Discard';
2488
2437
  }
2489
2438
 
2439
+ case 'CANCEL':
2440
+ return 'Cancel';
2441
+
2490
2442
  default:
2491
2443
  {
2492
2444
  return 'Publish';
2493
2445
  }
2494
2446
  }
2495
2447
  };
2448
+ var emptyChangegroup = {
2449
+ valid: '',
2450
+ wind: '',
2451
+ visibility: '',
2452
+ weather: {
2453
+ weather1: null,
2454
+ weather2: null,
2455
+ weather3: null
2456
+ },
2457
+ cloud: {
2458
+ cloud1: null,
2459
+ cloud2: null,
2460
+ cloud3: null,
2461
+ cloud4: null
2462
+ },
2463
+ change: null,
2464
+ probability: null
2465
+ };
2466
+ var getTafStatusLabel = function getTafStatusLabel(status) {
2467
+ switch (status) {
2468
+ case 'DRAFT_AMENDED':
2469
+ return 'draft amended';
2470
+
2471
+ case 'DRAFT_CORRECTED':
2472
+ return 'draft corrected';
2473
+
2474
+ default:
2475
+ return status.toLocaleLowerCase();
2476
+ }
2477
+ };
2478
+ var getMessageType = function getMessageType(taf, tafAction) {
2479
+ if (tafAction === 'CORRECT') {
2480
+ return 'COR';
2481
+ }
2482
+
2483
+ if (tafAction === 'AMEND') {
2484
+ return 'AMD';
2485
+ }
2486
+
2487
+ return taf.messageType;
2488
+ }; // For corrections and amendment we need to add the previousValidStart and End for the TAC converter
2489
+
2490
+ var getAmendedCorrectedTafTimes = function getAmendedCorrectedTafTimes(taf, tafAction) {
2491
+ var previousValidDateStart = taf.previousValidDateStart && tafAction !== 'AMEND' ? taf.previousValidDateStart : taf.validDateStart;
2492
+ var previousValidDateEnd = taf.previousValidDateEnd && tafAction !== 'AMEND' ? taf.previousValidDateEnd : taf.validDateEnd; // For amendment change valid start time to current time
2493
+ // only do this if we're already within the validity period
2494
+
2495
+ if ((tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND') && moment__default["default"].utc() >= moment__default["default"].utc(taf.validDateStart)) {
2496
+ var now = moment__default["default"].utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
2497
+ var validObj = {
2498
+ start: now,
2499
+ end: taf.baseForecast.valid.end
2500
+ };
2501
+ return __assign(__assign({}, taf), {
2502
+ previousValidDateStart: previousValidDateStart,
2503
+ previousValidDateEnd: previousValidDateEnd,
2504
+ validDateStart: now,
2505
+ baseForecast: __assign(__assign({}, taf.baseForecast), {
2506
+ valid: validObj
2507
+ })
2508
+ });
2509
+ }
2510
+
2511
+ return __assign(__assign({}, taf), {
2512
+ previousValidDateStart: previousValidDateStart,
2513
+ previousValidDateEnd: previousValidDateEnd
2514
+ });
2515
+ };
2516
+ var prepareTafValues = function prepareTafValues(_taf, tafAction, addEmptyChangeGroup) {
2517
+ if (addEmptyChangeGroup === void 0) {
2518
+ addEmptyChangeGroup = false;
2519
+ } // If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
2520
+ // If action is AMEND/DRAFT_AMEND - update validity start time to current time
2521
+
2522
+
2523
+ var taf = tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND' || tafAction === 'CORRECT' || tafAction === 'DRAFT_CORRECT' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
2524
+ return __assign(__assign(__assign(__assign({}, taf), {
2525
+ messageType: getMessageType(taf, tafAction),
2526
+ baseForecast: formatFormValues(taf.baseForecast)
2527
+ }), taf.changeGroups && {
2528
+ changeGroups: taf.changeGroups.map(formatFormValues)
2529
+ }), addEmptyChangeGroup && {
2530
+ changeGroups: [emptyChangegroup]
2531
+ });
2532
+ };
2496
2533
 
2497
- var useStyles$9 = makeStyles__default["default"](function (theme) {
2534
+ var textFieldStyle = function textFieldStyle(theme) {
2498
2535
  return {
2499
- textFieldGridItem: {
2500
- marginRight: 4
2501
- },
2502
- textFieldRoot: {
2503
- '&.Mui-disabled::before': {
2504
- borderBottom: 'none'
2536
+ // input
2537
+ marginRight: '2px',
2538
+ marginBottom: '4px',
2539
+ width: 56,
2540
+ height: 46,
2541
+ input: {
2542
+ textAlign: 'center',
2543
+ fontSize: 10,
2544
+ fontWeight: 500,
2545
+ paddingLeft: 0,
2546
+ paddingRight: 0,
2547
+ '&.Mui-disabled': {
2548
+ color: 'geowebColors.typographyAndIcons.text',
2549
+ WebkitTextFillColor: theme.palette.geowebColors.typographyAndIcons.text
2505
2550
  },
2506
- '&:after': {
2507
- borderBottomColor: '#3f51b5'
2551
+ // TODO: https://gitlab.com/opengeoweb/opengeoweb/-/issues/1995 disables the default autofill styling, should be a better fix
2552
+ '&:-webkit-autofill': {
2553
+ WebkitTransitionDelay: '86400s' // 1 day delay
2554
+
2508
2555
  }
2509
2556
  },
2510
- textFieldInput: {
2511
- fontSize: '14px',
2512
- paddingLeft: 1,
2513
- paddingRight: 1,
2514
- color: '#051039',
2515
- WebkitTextFillColor: '#051039',
2557
+ label: {
2558
+ transformOrigin: 'center top',
2559
+ right: 0,
2560
+ textAlign: 'center',
2561
+ fontSize: '10px',
2516
2562
  '&.Mui-disabled': {
2517
- backgroundColor: 'white'
2518
- }
2519
- },
2520
- textFieldLabel: {
2521
- fontSize: '14px'
2522
- },
2523
- textFieldLabelShrink: {
2524
- transform: 'translate(2px, 10px) scale(0.75) !important'
2525
- },
2526
- formRow: {
2527
- marginTop: 8,
2528
- backgroundColor: theme.palette.common.white,
2529
- position: 'relative',
2530
- '&.sortable-chosen': {
2531
- boxShadow: theme.shadows[1]
2563
+ color: 'geowebColors.captions.captionStatus.rgba'
2532
2564
  },
2533
- '&.sortable-ghost': {
2534
- opacity: 0.5
2535
- }
2536
- },
2537
- tacTitle: {
2538
- fontSize: '20px',
2539
- fontWeight: 500
2540
- },
2541
- tacText: {
2542
- fontSize: '14px',
2543
- color: '#000000'
2544
- },
2545
- tacLine: {
2546
- margin: '0',
2547
- padding: '.1em .1em .1em 0.8em',
2548
- textIndent: '-0.7em',
2549
- borderRadius: '3px'
2550
- },
2551
- addButton: {
2552
- marginRight: '48px'
2553
- },
2554
- lifecycleButtons: {
2555
- marginTop: '40px',
2556
- marginBottom: '16px'
2557
- },
2558
- actionButton: {
2559
- marginRight: '16px'
2565
+ whiteSpace: 'nowrap',
2566
+ maxWidth: '100%',
2567
+ transform: 'translate(0px, 16px) scale(1)'
2560
2568
  },
2561
- lastButton: {
2562
- marginRight: '90px'
2569
+ // shrink
2570
+ ' .MuiInputLabel-shrink': {
2571
+ transform: 'translate(2px, 10px) scale(0.75) !important',
2572
+ letterSpacing: '0.33px',
2573
+ textAlign: 'left'
2563
2574
  },
2564
- backdrop: {
2565
- zIndex: 1500,
2566
- color: '#fff'
2567
- },
2568
- emptyButtonContainer: {
2569
- minWidth: 96
2575
+ // root
2576
+ '&': {
2577
+ '.Mui-disabled:before': {
2578
+ borderColor: 'transparent'
2579
+ }
2570
2580
  }
2571
2581
  };
2572
- });
2582
+ };
2573
2583
 
2574
2584
  var getTafErrors = function getTafErrors(name, errors) {
2575
2585
  var nameAsArray = name.split('.');
@@ -2592,25 +2602,13 @@
2592
2602
  return disabled && !value ? '-' : value;
2593
2603
  };
2594
2604
  var BaseTextField = /*#__PURE__*/React__default["default"].memo(function (props) {
2595
- var classes = useStyles$9();
2596
2605
  return /*#__PURE__*/React__default["default"].createElement(material.TextField, __assign({
2597
2606
  type: "text",
2598
2607
  variant: "filled",
2599
- InputProps: {
2600
- classes: {
2601
- input: classes.textFieldInput,
2602
- root: classes.textFieldRoot
2603
- }
2604
- },
2605
- InputLabelProps: {
2606
- classes: {
2607
- root: classes.textFieldLabel,
2608
- shrink: classes.textFieldLabelShrink
2609
- }
2610
- }
2608
+ sx: textFieldStyle
2611
2609
  }, props));
2612
2610
  }, function (prevProps, nextProps) {
2613
- return prevProps.value === nextProps.value && prevProps.error === nextProps.error && prevProps.name === nextProps.name;
2611
+ return prevProps.value === nextProps.value && prevProps.error === nextProps.error && prevProps.name === nextProps.name && prevProps.disabled === nextProps.disabled;
2614
2612
  });
2615
2613
 
2616
2614
  var TafFormTextField = function TafFormTextField(_a) {
@@ -2632,7 +2630,6 @@
2632
2630
  autoComplete = _h === void 0 ? [] : _h,
2633
2631
  _j = _a.autoFocus,
2634
2632
  autoFocus = _j === void 0 ? false : _j;
2635
- var classes = useStyles$9();
2636
2633
 
2637
2634
  var _k = reactHookForm.useFormContext(),
2638
2635
  control = _k.control,
@@ -2688,11 +2685,7 @@
2688
2685
  inputRef.current.disabled = false;
2689
2686
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
2690
2687
  }, []);
2691
- return /*#__PURE__*/React__default["default"].createElement(material.Grid, {
2692
- item: true,
2693
- xs: true,
2694
- className: classes.textFieldGridItem
2695
- }, /*#__PURE__*/React__default["default"].createElement(reactHookForm.Controller, {
2688
+ return /*#__PURE__*/React__default["default"].createElement(reactHookForm.Controller, {
2696
2689
  render: function render(_props) {
2697
2690
  var displayValue = formatter ? formatter(_props.value) : getDisplayValue(_props.value, disabled);
2698
2691
  return /*#__PURE__*/React__default["default"].createElement(BaseTextField, {
@@ -2720,7 +2713,7 @@
2720
2713
  defaultValue: defaultValue,
2721
2714
  rules: rules,
2722
2715
  onFocus: onFocusField
2723
- }));
2716
+ });
2724
2717
  };
2725
2718
 
2726
2719
  /* *
@@ -2784,6 +2777,71 @@
2784
2777
  return isValid ? true : invalidProbabilityMessage;
2785
2778
  };
2786
2779
 
2780
+ /* *
2781
+ * Licensed under the Apache License, Version 2.0 (the "License");
2782
+ * you may not use this file except in compliance with the License.
2783
+ * You may obtain a copy of the License at
2784
+ *
2785
+ * http://www.apache.org/licenses/LICENSE-2.0
2786
+ *
2787
+ * Unless required by applicable law or agreed to in writing, software
2788
+ * distributed under the License is distributed on an "AS IS" BASIS,
2789
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2790
+ * See the License for the specific language governing permissions and
2791
+ * limitations under the License.
2792
+ *
2793
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2794
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
2795
+ * */
2796
+ var AddIcon = /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("path", {
2797
+ d: "M10.647 10.647h6.82a1.276 1.276 0 1 0 0-2.552h-6.82v-6.82a1.276 1.276 0 1 0-2.552 0v6.82h-6.82a1.276 1.276 0 1 0 0 2.552h6.82v6.82a1.274 1.274 0 0 0 1.276 1.275c.705 0 1.276-.571 1.276-1.276v-6.82z"
2798
+ }));
2799
+ var DeleteIcon = /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("path", {
2800
+ d: "M17.504 8.228c.588 0 1.027.48.973 1.066l-.876 9.64A1.197 1.197 0 0 1 16.434 20H8.41c-.59 0-1.115-.48-1.167-1.066l-.877-9.64a.962.962 0 0 1 .973-1.066zm-2.115 1.228a.82.82 0 0 0-.819.82v7.674a.818.818 0 0 0 1.638 0v-7.675a.819.819 0 0 0-.819-.819zm-2.968 0a.819.819 0 0 0-.819.82v7.674a.818.818 0 1 0 1.638 0v-7.675a.82.82 0 0 0-.82-.819zm-2.968 0a.819.819 0 0 0-.818.82v7.674a.818.818 0 1 0 1.637 0v-7.675a.82.82 0 0 0-.82-.819zM13.432 4c.21 0 .404.168.436.376l.107.758 3.256-.01a1.606 1.606 0 0 1 1.61 1.6l.001.535-12.841.038L6 6.76a1.605 1.605 0 0 1 1.6-1.61l3.262-.008.103-.758a.454.454 0 0 1 .434-.38z"
2801
+ }));
2802
+ var CrossIcon = /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("path", {
2803
+ d: "m13.805 12 4.821-4.822a1.276 1.276 0 1 0-1.804-1.804L12 10.195 7.178 5.374a1.276 1.276 0 1 0-1.804 1.804L10.196 12l-4.822 4.822a1.276 1.276 0 1 0 1.804 1.805L12 13.805l4.822 4.822a1.274 1.274 0 0 0 1.804 0c.499-.5.499-1.306 0-1.805L13.805 12z"
2804
+ }));
2805
+
2806
+ var TafFormOptionsButton = function TafFormOptionsButton(_a) {
2807
+ var isChangeGroup = _a.isChangeGroup,
2808
+ addChangeGroupBelow = _a.addChangeGroupBelow,
2809
+ addChangeGroupAbove = _a.addChangeGroupAbove,
2810
+ removeChangeGroup = _a.removeChangeGroup,
2811
+ clearRow = _a.clearRow,
2812
+ index = _a.index;
2813
+ var insertAbove = {
2814
+ text: 'Insert 1 row above',
2815
+ icon: AddIcon,
2816
+ action: addChangeGroupAbove
2817
+ };
2818
+ var insertBelow = {
2819
+ text: 'Insert 1 row below',
2820
+ icon: AddIcon,
2821
+ action: addChangeGroupBelow
2822
+ };
2823
+ var deleteRow = {
2824
+ text: 'Delete row',
2825
+ icon: DeleteIcon,
2826
+ action: removeChangeGroup
2827
+ };
2828
+ var clear = {
2829
+ text: 'Clear row',
2830
+ icon: CrossIcon,
2831
+ action: clearRow
2832
+ };
2833
+ var menuItemsBaseForecast = [insertBelow, clear];
2834
+ var menuItemsChangeGroup = [insertAbove, insertBelow, deleteRow, clear];
2835
+ return /*#__PURE__*/React__namespace.createElement(shared.ToggleMenu, {
2836
+ buttonTestId: "tafFormOptions[" + index + "]",
2837
+ buttonSx: {
2838
+ marginTop: '10px',
2839
+ marginLeft: '4px'
2840
+ },
2841
+ menuItems: isChangeGroup ? menuItemsChangeGroup : menuItemsBaseForecast
2842
+ });
2843
+ };
2844
+
2787
2845
  var getDefaultValue = function getDefaultValue(fieldName, data) {
2788
2846
  if (!data) {
2789
2847
  return '';
@@ -2804,30 +2862,29 @@
2804
2862
  disabled = _c === void 0 ? false : _c,
2805
2863
  _d = _a.index,
2806
2864
  index = _d === void 0 ? -1 : _d,
2807
- _e = _a.lastRow,
2808
- lastRow = _e === void 0 ? false : _e,
2809
2865
  onRemoveChangeGroup = _a.onRemoveChangeGroup,
2810
- _f = _a.field,
2811
- field = _f === void 0 ? null : _f,
2812
- _g = _a.dragHandle,
2813
- dragHandle = _g === void 0 ? null : _g,
2814
- onAddChangeGroup = _a.onAddChangeGroup,
2815
- props = __rest(_a, ["isChangeGroup", "disabled", "index", "lastRow", "onRemoveChangeGroup", "field", "dragHandle", "onAddChangeGroup"]);
2816
-
2817
- var classes = useStyles$9();
2866
+ _e = _a.field,
2867
+ field = _e === void 0 ? null : _e,
2868
+ _f = _a.dragHandle,
2869
+ dragHandle = _f === void 0 ? null : _f,
2870
+ onAddChangeGroupBelow = _a.onAddChangeGroupBelow,
2871
+ onAddChangeGroupAbove = _a.onAddChangeGroupAbove,
2872
+ onClearRow = _a.onClearRow,
2873
+ props = __rest(_a, ["isChangeGroup", "disabled", "index", "onRemoveChangeGroup", "field", "dragHandle", "onAddChangeGroupBelow", "onAddChangeGroupAbove", "onClearRow"]);
2874
+
2818
2875
  var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups[" + index + "]";
2819
2876
  var fieldNames = getFieldNames(isChangeGroup, index);
2820
2877
 
2821
- var _h = reactHookForm.useFormContext(),
2822
- getValues = _h.getValues,
2823
- trigger = _h.trigger;
2878
+ var _g = reactHookForm.useFormContext(),
2879
+ getValues = _g.getValues,
2880
+ trigger = _g.trigger;
2824
2881
 
2825
2882
  var isNotRequiredForAction = shared.useDraftFormHelpers().isRequired; // cross-field required validation
2826
2883
 
2827
- var _j = __read(getRequiredCrossFields(fieldNames), 3),
2828
- mainFields = _j[0],
2829
- mainOptionalFields = _j[1],
2830
- subFields = _j[2];
2884
+ var _h = __read(getRequiredCrossFields(fieldNames), 3),
2885
+ mainFields = _h[0],
2886
+ mainOptionalFields = _h[1],
2887
+ subFields = _h[2];
2831
2888
 
2832
2889
  var hasFieldsValue = function hasFieldsValue(fields) {
2833
2890
  return fields.map(getValues).find(function (field) {
@@ -2925,14 +2982,39 @@
2925
2982
  return validFields;
2926
2983
  };
2927
2984
 
2928
- var addChangeGroup = React__default["default"].useCallback(function () {
2929
- onAddChangeGroup(index);
2930
- }, [onAddChangeGroup, index]);
2985
+ var addChangeGroupBelow = React__default["default"].useCallback(function () {
2986
+ onAddChangeGroupBelow(index);
2987
+ }, [onAddChangeGroupBelow, index]);
2988
+ var addChangeGroupAbove = React__default["default"].useCallback(function () {
2989
+ onAddChangeGroupAbove(index);
2990
+ }, [onAddChangeGroupAbove, index]);
2991
+ var clearRow = React__default["default"].useCallback(function () {
2992
+ onClearRow(index);
2993
+ }, [onClearRow, index]);
2931
2994
  return /*#__PURE__*/React__default["default"].createElement(material.Grid, __assign({
2995
+ sx: {
2996
+ marginTop: '8px',
2997
+ backgroundColor: 'geowebColors.cards.cardContainer',
2998
+ position: 'relative',
2999
+ '&.sortable-chosen': {
3000
+ boxShadow: 1
3001
+ },
3002
+ '&.sortable-ghost': {
3003
+ opacity: 0.5
3004
+ }
3005
+ },
3006
+ justifyContent: "flex-start",
2932
3007
  "data-testid": "row-" + namePrefix,
2933
3008
  container: true,
2934
- ref: ref
2935
- }, props), !isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
3009
+ ref: ref,
3010
+ columns: 24
3011
+ }, props), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3012
+ item: true,
3013
+ container: true,
3014
+ justifyContent: "flex-end",
3015
+ xs: 24,
3016
+ sm: 23
3017
+ }, !isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2936
3018
  label: "Type",
2937
3019
  name: fieldNames.messageType,
2938
3020
  disabled: true
@@ -2945,13 +3027,12 @@
2945
3027
  label: "Issue time",
2946
3028
  name: "issueDate",
2947
3029
  disabled: true
2948
- })), isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
2949
- item: true,
2950
- xs: true,
2951
- style: {
2952
- display: 'flex'
3030
+ })), isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Box, {
3031
+ sx: {
3032
+ width: 56,
3033
+ marginRight: '2px'
2953
3034
  }
2954
- }, dragHandle), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
3035
+ }, !disabled && dragHandle), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2955
3036
  label: "Prob",
2956
3037
  name: fieldNames.probability,
2957
3038
  disabled: disabled,
@@ -3189,83 +3270,222 @@
3189
3270
  }
3190
3271
  }
3191
3272
  }
3192
- }), (!isChangeGroup || disabled) && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3193
- className: classes.emptyButtonContainer,
3273
+ })), !disabled && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3194
3274
  item: true,
3195
- xs: true
3196
- }, !disabled && /*#__PURE__*/React__default["default"].createElement(material.IconButton, {
3197
- "aria-label": "add",
3198
- "data-testid": "add-changeGroup",
3199
- onClick: addChangeGroup,
3200
- size: "large"
3201
- }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.Add, null))), isChangeGroup && !disabled && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3202
- item: true
3203
- }, /*#__PURE__*/React__default["default"].createElement(material.IconButton, {
3204
- "aria-label": "add",
3205
- "data-testid": "add-changeGroup",
3206
- onClick: addChangeGroup,
3207
- size: "large"
3208
- }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.Add, null)), /*#__PURE__*/React__default["default"].createElement(material.IconButton, __assign({
3209
- "aria-label": "delete",
3210
- "data-testid": "remove-changeGroup",
3211
- onClick: function onClick() {
3212
- return onRemoveChangeGroup(index);
3275
+ container: true,
3276
+ justifyContent: "flex-end",
3277
+ alignItems: "flex-end",
3278
+ xs: 24,
3279
+ sm: 1,
3280
+ sx: {
3281
+ marginBottom: '16px'
3213
3282
  }
3214
- }, lastRow ? {
3215
- tabIndex: -1
3216
- } : {}, {
3217
- size: "large"
3218
- }), /*#__PURE__*/React__default["default"].createElement(iconsMaterial.Delete, null))));
3283
+ }, /*#__PURE__*/React__default["default"].createElement(TafFormOptionsButton, {
3284
+ isChangeGroup: isChangeGroup,
3285
+ addChangeGroupBelow: addChangeGroupBelow,
3286
+ addChangeGroupAbove: addChangeGroupAbove,
3287
+ removeChangeGroup: function removeChangeGroup() {
3288
+ return onRemoveChangeGroup(index);
3289
+ },
3290
+ clearRow: clearRow,
3291
+ index: index
3292
+ })));
3219
3293
  });
3220
3294
 
3221
- var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
3222
- switch (sumOfErrors) {
3223
- case 0:
3224
- return '0 issues';
3225
-
3226
- case 1:
3227
- return '1 issue';
3228
-
3229
- default:
3230
- return sumOfErrors + " issues";
3295
+ /* *
3296
+ * Licensed under the Apache License, Version 2.0 (the "License");
3297
+ * you may not use this file except in compliance with the License.
3298
+ * You may obtain a copy of the License at
3299
+ *
3300
+ * http://www.apache.org/licenses/LICENSE-2.0
3301
+ *
3302
+ * Unless required by applicable law or agreed to in writing, software
3303
+ * distributed under the License is distributed on an "AS IS" BASIS,
3304
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3305
+ * See the License for the specific language governing permissions and
3306
+ * limitations under the License.
3307
+ *
3308
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3309
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
3310
+ * */
3311
+ var buttonsStyle = {
3312
+ button: {
3313
+ minWidth: {
3314
+ xs: '56px',
3315
+ sm: '64px'
3316
+ },
3317
+ width: {
3318
+ xs: '56px',
3319
+ sm: '64px'
3320
+ },
3321
+ marginLeft: {
3322
+ xs: 0.5,
3323
+ sm: 1
3324
+ },
3325
+ marginTop: 3,
3326
+ marginBottom: 3
3231
3327
  }
3232
3328
  };
3233
3329
 
3234
- var buttonColors = {
3235
- green: '#72bb23',
3236
- red: '#c00000'
3237
- };
3238
-
3239
- var buttonStyle = function buttonStyle(color) {
3240
- var buttonColor = buttonColors[color];
3241
- return {
3242
- width: '74px',
3243
- color: '#ffffff',
3244
- backgroundColor: buttonColor,
3245
- '&:hover': {
3246
- backgroundColor: buttonColor
3247
- },
3248
- '&:focus': {
3249
- backgroundColor: buttonColor
3330
+ var ViewModeButtons = function ViewModeButtons(_a) {
3331
+ var canBe = _a.canBe,
3332
+ onTafViewModeButtonPress = _a.onTafViewModeButtonPress;
3333
+ return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, canBe.includes('CANCELLED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
3334
+ "data-testid": "canceltaf",
3335
+ variant: "tertiary",
3336
+ onClick: function onClick() {
3337
+ return onTafViewModeButtonPress('CANCEL');
3250
3338
  }
3251
- };
3339
+ }, "Cancel"), canBe.includes('CORRECTED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
3340
+ "data-testid": "correctaf",
3341
+ variant: "tertiary",
3342
+ onClick: function onClick() {
3343
+ return onTafViewModeButtonPress('CORRECT');
3344
+ }
3345
+ }, "Correct"), canBe.includes('AMENDED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
3346
+ "data-testid": "amendtaf",
3347
+ variant: "tertiary",
3348
+ onClick: function onClick() {
3349
+ return onTafViewModeButtonPress('AMEND');
3350
+ }
3351
+ }, "Amend"));
3252
3352
  };
3253
3353
 
3254
- var IssuesButton = function IssuesButton(_a) {
3255
- var togglePane = _a.togglePane,
3256
- sumOfErrors = _a.sumOfErrors;
3257
- var color = sumOfErrors > 0 ? 'red' : 'green';
3258
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3259
- title: "View details"
3260
- }, /*#__PURE__*/React__namespace.createElement(material.Chip, {
3261
- "data-testid": "issuesButton",
3262
- size: "small",
3263
- label: getIssuesLabel(sumOfErrors),
3264
- style: __assign({}, buttonStyle(color)),
3265
- onClick: togglePane
3354
+ var TafFormButtons = function TafFormButtons(_a) {
3355
+ var _b = _a.isFormDisabled,
3356
+ isFormDisabled = _b === void 0 ? false : _b,
3357
+ tafAction = _a.tafAction,
3358
+ _c = _a.canBe,
3359
+ canBe = _c === void 0 ? [] : _c,
3360
+ onTafEditModeButtonPress = _a.onTafEditModeButtonPress,
3361
+ onTafViewModeButtonPress = _a.onTafViewModeButtonPress;
3362
+ return /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3363
+ container: true,
3364
+ justifyContent: "flex-end",
3365
+ sx: buttonsStyle,
3366
+ columns: 24
3367
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3368
+ item: true,
3369
+ container: true,
3370
+ justifyContent: "flex-end",
3371
+ xs: 24,
3372
+ sm: 23
3373
+ }, isFormDisabled ? /*#__PURE__*/React__default["default"].createElement(ViewModeButtons, {
3374
+ canBe: canBe,
3375
+ onTafViewModeButtonPress: onTafViewModeButtonPress
3376
+ }) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Button, {
3377
+ "data-testid": "discardtaf",
3378
+ variant: "tertiary",
3379
+ onClick: function onClick() {
3380
+ // Simply discard the changes and close the dialog.
3381
+ onTafEditModeButtonPress('DISCARD');
3382
+ }
3383
+ }, "Discard"), /*#__PURE__*/React__default["default"].createElement(material.Button, {
3384
+ "data-testid": "savedrafttaf",
3385
+ variant: "tertiary",
3386
+ onClick: function onClick() {
3387
+ /* Save the TAF as draft:
3388
+ if action NEW or DRAFT - new status will be DRAFT -- default
3389
+ if action AMEND - new status will be DRAFT_AMENDED
3390
+ if action CORRECT - new status will be DRAFT_CORRECTED
3391
+ if action DRAFT_AMEND - new status will be DRAFT_AMENDED
3392
+ if action DRAFT_CORRECT - new status will be DRAFT_CORRECTED
3393
+ */
3394
+ switch (tafAction) {
3395
+ case 'AMEND':
3396
+ case 'DRAFT_AMEND':
3397
+ onTafEditModeButtonPress('DRAFT_AMEND');
3398
+ break;
3399
+
3400
+ case 'CORRECT':
3401
+ case 'DRAFT_CORRECT':
3402
+ onTafEditModeButtonPress('DRAFT_CORRECT');
3403
+ break;
3404
+
3405
+ default:
3406
+ onTafEditModeButtonPress('DRAFT');
3407
+ break;
3408
+ }
3409
+ }
3410
+ }, "Save"), /*#__PURE__*/React__default["default"].createElement(material.Button, {
3411
+ "data-testid": "publishtaf",
3412
+ variant: "tertiary",
3413
+ onClick: function onClick() {
3414
+ /* Publish the TAF:
3415
+ if action NEW or DRAFT - new status will be PUBLISHED -- default
3416
+ if action AMEND - new status will be AMENDED
3417
+ if action CORRECT - new status will be CORRECTED
3418
+ if action DRAFT_AMEND - new status will be AMENDED
3419
+ if action DRAFT_CORRECT - new status will be CORRECTED
3420
+ */
3421
+ switch (tafAction) {
3422
+ case 'AMEND':
3423
+ case 'DRAFT_AMEND':
3424
+ onTafEditModeButtonPress('AMEND');
3425
+ break;
3426
+
3427
+ case 'CORRECT':
3428
+ case 'DRAFT_CORRECT':
3429
+ onTafEditModeButtonPress('CORRECT');
3430
+ break;
3431
+
3432
+ default:
3433
+ onTafEditModeButtonPress('PUBLISH');
3434
+ break;
3435
+ }
3436
+ }
3437
+ }, "Publish"))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3438
+ item: true,
3439
+ sm: 1
3266
3440
  }));
3267
3441
  };
3268
3442
 
3443
+ /* *
3444
+ * Licensed under the Apache License, Version 2.0 (the "License");
3445
+ * you may not use this file except in compliance with the License.
3446
+ * You may obtain a copy of the License at
3447
+ *
3448
+ * http://www.apache.org/licenses/LICENSE-2.0
3449
+ *
3450
+ * Unless required by applicable law or agreed to in writing, software
3451
+ * distributed under the License is distributed on an "AS IS" BASIS,
3452
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3453
+ * See the License for the specific language governing permissions and
3454
+ * limitations under the License.
3455
+ *
3456
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3457
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
3458
+ * */
3459
+ var useStyles = makeStyles__default["default"](function () {
3460
+ return {
3461
+ dragHandle: {
3462
+ backgroundColor: 'transparent',
3463
+ '&:hover': {
3464
+ backgroundColor: 'transparent'
3465
+ },
3466
+ cursor: function cursor(isSorting) {
3467
+ return isSorting ? 'grabbing' : 'grab';
3468
+ }
3469
+ }
3470
+ };
3471
+ });
3472
+
3473
+ var DragHandle = function DragHandle(_a) {
3474
+ var _b = _a.isSorting,
3475
+ isSorting = _b === void 0 ? false : _b,
3476
+ _c = _a.isDisabled,
3477
+ isDisabled = _c === void 0 ? false : _c,
3478
+ index = _a.index;
3479
+ var classes = useStyles(isSorting);
3480
+ return /*#__PURE__*/React__default["default"].createElement(material.IconButton, {
3481
+ className: classes.dragHandle + " handle",
3482
+ "data-testid": "dragHandle-" + index,
3483
+ disableRipple: true,
3484
+ disabled: isDisabled,
3485
+ size: "large"
3486
+ }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.DragIndicator, null));
3487
+ };
3488
+
3269
3489
  var ThumbsUp = function ThumbsUp(props) {
3270
3490
  return /*#__PURE__*/React__default["default"].createElement(material.SvgIcon, __assign({
3271
3491
  fontSize: "inherit",
@@ -3287,32 +3507,6 @@
3287
3507
  })));
3288
3508
  };
3289
3509
 
3290
- /* *
3291
- * Licensed under the Apache License, Version 2.0 (the "License");
3292
- * you may not use this file except in compliance with the License.
3293
- * You may obtain a copy of the License at
3294
- *
3295
- * http://www.apache.org/licenses/LICENSE-2.0
3296
- *
3297
- * Unless required by applicable law or agreed to in writing, software
3298
- * distributed under the License is distributed on an "AS IS" BASIS,
3299
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3300
- * See the License for the specific language governing permissions and
3301
- * limitations under the License.
3302
- *
3303
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3304
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
3305
- * */
3306
- var useStyles$8 = makeStyles__default["default"]({
3307
- paneContent: {
3308
- marginTop: '16px',
3309
- marginLeft: '24px'
3310
- },
3311
- image: {
3312
- fontSize: '4rem'
3313
- }
3314
- });
3315
-
3316
3510
  var getPaneTitle = function getPaneTitle(sumOfErrors) {
3317
3511
  switch (sumOfErrors) {
3318
3512
  case 0:
@@ -3351,7 +3545,7 @@
3351
3545
  var nameWithoutBrackets = nameAsString.replace(/[[\]']+/g, '');
3352
3546
  var nameLowerCase = nameWithoutBrackets.toLowerCase();
3353
3547
 
3354
- var _a = __read(nameLowerCase.split(/([0-9]+)/) // split numbers from field and build array
3548
+ var _a = __read(nameLowerCase.split(/([0-9]+)/) // split num bers from field and build array
3355
3549
  .filter(function (s) {
3356
3550
  return s.length;
3357
3551
  }), 2),
@@ -3377,33 +3571,43 @@
3377
3571
  var fieldErrorTitle = humanizeErrorMessage(firstNamePart);
3378
3572
  return index + 1 + ". " + fieldErrorTitle + ": " + getErrorDefaultMessage(error);
3379
3573
  };
3574
+ var MODAL_DIALOG_ELEMENT = 'modal-dialog';
3380
3575
 
3381
3576
  var IssuesPane = function IssuesPane(_a) {
3382
3577
  var isOpen = _a.isOpen,
3383
3578
  handleClose = _a.handleClose,
3384
3579
  _b = _a.errorList,
3385
- errorList = _b === void 0 ? [] : _b;
3386
- var classes = useStyles$8();
3387
- return /*#__PURE__*/React__namespace.createElement(shared.ToolContainerDraggable, {
3580
+ errorList = _b === void 0 ? [] : _b,
3581
+ _c = _a.startPosition,
3582
+ startPosition = _c === void 0 ? {
3583
+ left: 20,
3584
+ top: 50
3585
+ } : _c;
3586
+ var rootElement = document.getElementById(MODAL_DIALOG_ELEMENT) || document.body;
3587
+ return /*#__PURE__*/ReactDOM__default["default"].createPortal( /*#__PURE__*/React__namespace.createElement(shared.ToolContainerDraggable, {
3388
3588
  startSize: {
3389
3589
  width: '577px',
3390
3590
  height: '200px'
3391
3591
  },
3392
- startPosition: {
3393
- left: 370,
3394
- top: 570
3395
- },
3592
+ startPosition: startPosition,
3396
3593
  minWidth: 300,
3397
3594
  onClose: handleClose,
3398
3595
  title: getPaneTitle(errorList.length),
3399
3596
  headerSize: "xs",
3400
3597
  isOpen: isOpen,
3401
3598
  "data-testid": "moveable-issues-pane",
3402
- bounds: "body"
3403
- }, /*#__PURE__*/React__namespace.createElement("div", {
3404
- className: classes.paneContent
3405
- }, errorList.length === 0 && /*#__PURE__*/React__namespace.createElement("div", {
3406
- className: classes.image,
3599
+ bounds: "parent"
3600
+ }, /*#__PURE__*/React__namespace.createElement(material.Box, {
3601
+ component: "div",
3602
+ sx: {
3603
+ marginTop: '16px',
3604
+ marginLeft: '24px'
3605
+ }
3606
+ }, errorList.length === 0 && /*#__PURE__*/React__namespace.createElement(material.Box, {
3607
+ component: "div",
3608
+ sx: {
3609
+ fontSize: '4rem'
3610
+ },
3407
3611
  "data-testid": "zeroIssuesImage"
3408
3612
  }, /*#__PURE__*/React__namespace.createElement(ThumbsUp, null)), errorList.length > 0 && errorList.map(function (error, index) {
3409
3613
  return /*#__PURE__*/React__namespace.createElement(material.Typography // eslint-disable-next-line react/no-array-index-key
@@ -3413,7 +3617,7 @@
3413
3617
  variant: "body1",
3414
3618
  "data-testid": "errorMessage"
3415
3619
  }, getErrorMessage(error, index));
3416
- })));
3620
+ }))), rootElement);
3417
3621
  };
3418
3622
 
3419
3623
  var getCustomError = function getCustomError(error) {
@@ -3427,6 +3631,19 @@
3427
3631
  });
3428
3632
  };
3429
3633
 
3634
+ var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
3635
+ switch (sumOfErrors) {
3636
+ case 0:
3637
+ return '0 issues';
3638
+
3639
+ case 1:
3640
+ return '1 issue';
3641
+
3642
+ default:
3643
+ return sumOfErrors + " issues";
3644
+ }
3645
+ };
3646
+
3430
3647
  var getErrorValues = function getErrorValues(fieldErrors) {
3431
3648
  if (!fieldErrors) return [];
3432
3649
  return Object.keys(fieldErrors).reduce(function (list, key) {
@@ -3440,22 +3657,6 @@
3440
3657
  }, []);
3441
3658
  };
3442
3659
 
3443
- var getErrors = function getErrors(errors) {
3444
- var errorList = Object.keys(errors).reduce(function (list, key) {
3445
- var errorValue = errors[key];
3446
-
3447
- if (Array.isArray(errorValue)) {
3448
- var errorValues = errorValue.reduce(function (l, i) {
3449
- return l.concat(getErrorValues(i));
3450
- }, []);
3451
- return list.concat.apply(list, __spreadArray([], __read(errorValues)));
3452
- }
3453
-
3454
- return list.concat(getErrorValues(errorValue));
3455
- }, []);
3456
- return errorList;
3457
- };
3458
-
3459
3660
  var filterDuplicateErrors = function filterDuplicateErrors(errors) {
3460
3661
  return errors.reduce(function (list, error) {
3461
3662
  // check on type validateRequiredSub and validateRequiredMainOptional since these are giving 'duplicates'
@@ -3477,216 +3678,146 @@
3477
3678
  }, []);
3478
3679
  };
3479
3680
 
3480
- var TafFormButtons = function TafFormButtons(_a) {
3481
- var tafAction = _a.tafAction,
3482
- onTafFormButtonPress = _a.onTafFormButtonPress;
3483
- var classes = useStyles$9();
3484
- var errors = reactHookForm.useFormContext().errors;
3681
+ var getErrors = function getErrors(errors) {
3682
+ var errorList = Object.keys(errors).reduce(function (list, key) {
3683
+ var errorValue = errors[key];
3684
+
3685
+ if (Array.isArray(errorValue)) {
3686
+ var errorValues = errorValue.reduce(function (l, i) {
3687
+ return l.concat(getErrorValues(i));
3688
+ }, []);
3689
+ return list.concat.apply(list, __spreadArray([], __read(errorValues)));
3690
+ }
3691
+
3692
+ return list.concat(getErrorValues(errorValue));
3693
+ }, []);
3694
+ return errorList;
3695
+ };
3696
+
3697
+ var IssuesButton = function IssuesButton(_a) {
3698
+ var _b = _a.errors,
3699
+ errors = _b === void 0 ? {} : _b;
3485
3700
  var errorList = filterDuplicateErrors(getErrors(errors));
3701
+ var totalErrors = errorList.length;
3702
+ var errorStatus = totalErrors > 0 ? 'error' : 'success';
3703
+ var buttonColor = "geowebColors.functional." + errorStatus;
3486
3704
 
3487
- var _b = __read(React__default["default"].useState(false), 2),
3488
- isIssuesPaneOpen = _b[0],
3489
- setIsIssuesPaneOpen = _b[1];
3705
+ var _c = __read(React__namespace.useState(false), 2),
3706
+ isIssuesPaneOpen = _c[0],
3707
+ setIsIssuesPaneOpen = _c[1];
3490
3708
 
3491
3709
  var toggleIssuesPane = function toggleIssuesPane() {
3492
3710
  return setIsIssuesPaneOpen(!isIssuesPaneOpen);
3493
3711
  };
3494
3712
 
3495
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3496
- container: true,
3497
- justifyContent: "space-between",
3498
- alignItems: "center",
3499
- className: classes.lifecycleButtons
3500
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3501
- item: true
3502
- }, /*#__PURE__*/React__default["default"].createElement(IssuesButton, {
3503
- sumOfErrors: errorList.length,
3504
- togglePane: toggleIssuesPane
3505
- })), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
3506
- item: true
3507
- }, /*#__PURE__*/React__default["default"].createElement(material.Button, {
3508
- "data-testid": "discardtaf",
3509
- variant: "outlined",
3510
- color: "secondary",
3511
- type: "button",
3512
- className: classes.actionButton,
3513
- onClick: function onClick() {
3514
- // Simply discard the changes and close the dialog.
3515
- onTafFormButtonPress('DISCARD');
3516
- }
3517
- }, "Discard"), /*#__PURE__*/React__default["default"].createElement(material.Button, {
3518
- "data-testid": "savedrafttaf",
3519
- variant: "outlined",
3520
- color: "secondary",
3521
- type: "button",
3522
- className: classes.actionButton,
3523
- onClick: function onClick() {
3524
- /* Save the TAF as draft:
3525
- if action NEW or DRAFT - new status will be DRAFT -- default
3526
- if action AMEND - new status will be DRAFT_AMENDED
3527
- if action CORRECT - new status will be DRAFT_CORRECTED
3528
- if action DRAFT_AMEND - new status will be DRAFT_AMENDED
3529
- if action DRAFT_CORRECT - new status will be DRAFT_CORRECTED
3530
- */
3531
- switch (tafAction) {
3532
- case 'AMEND':
3533
- case 'DRAFT_AMEND':
3534
- onTafFormButtonPress('DRAFT_AMEND');
3535
- break;
3713
+ var _d = __read(React__namespace.useState({
3714
+ left: 0,
3715
+ top: 0
3716
+ }), 2),
3717
+ startPosition = _d[0],
3718
+ setStartPosition = _d[1];
3536
3719
 
3537
- case 'CORRECT':
3538
- case 'DRAFT_CORRECT':
3539
- onTafFormButtonPress('DRAFT_CORRECT');
3540
- break;
3720
+ var onClickButton = function onClickButton(event) {
3721
+ var _a;
3541
3722
 
3542
- default:
3543
- onTafFormButtonPress('DRAFT');
3544
- break;
3545
- }
3546
- }
3547
- }, "Save"), /*#__PURE__*/React__default["default"].createElement(material.Button, {
3548
- "data-testid": "publishtaf",
3549
- variant: "outlined",
3550
- color: "secondary",
3551
- type: "button",
3552
- className: classes.lastButton,
3553
- onClick: function onClick() {
3554
- /* Publish the TAF:
3555
- if action NEW or DRAFT - new status will be PUBLISHED -- default
3556
- if action AMEND - new status will be AMENDED
3557
- if action CORRECT - new status will be CORRECTED
3558
- if action DRAFT_AMEND - new status will be AMENDED
3559
- if action DRAFT_CORRECT - new status will be CORRECTED
3560
- */
3561
- switch (tafAction) {
3562
- case 'AMEND':
3563
- case 'DRAFT_AMEND':
3564
- onTafFormButtonPress('AMEND');
3565
- break;
3723
+ var _b = event.currentTarget.getBoundingClientRect(),
3724
+ left = _b.left,
3725
+ top = _b.top;
3566
3726
 
3567
- case 'CORRECT':
3568
- case 'DRAFT_CORRECT':
3569
- onTafFormButtonPress('CORRECT');
3570
- break;
3727
+ var parentOffset = ((_a = document.getElementById('tafmodule')) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) || {
3728
+ top: 0,
3729
+ left: 0
3730
+ };
3731
+ var newPosition = {
3732
+ left: left - parentOffset.left + 100,
3733
+ top: top - parentOffset.top
3734
+ };
3735
+ setStartPosition(newPosition);
3736
+ toggleIssuesPane();
3737
+ };
3571
3738
 
3572
- default:
3573
- onTafFormButtonPress('PUBLISH');
3574
- break;
3575
- }
3576
- }
3577
- }, "Publish"))), /*#__PURE__*/React__default["default"].createElement(IssuesPane, {
3578
- errorList: errorList,
3579
- handleClose: toggleIssuesPane,
3580
- isOpen: isIssuesPaneOpen
3581
- }));
3582
- };
3583
-
3584
- /* *
3585
- * Licensed under the Apache License, Version 2.0 (the "License");
3586
- * you may not use this file except in compliance with the License.
3587
- * You may obtain a copy of the License at
3588
- *
3589
- * http://www.apache.org/licenses/LICENSE-2.0
3590
- *
3591
- * Unless required by applicable law or agreed to in writing, software
3592
- * distributed under the License is distributed on an "AS IS" BASIS,
3593
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3594
- * See the License for the specific language governing permissions and
3595
- * limitations under the License.
3596
- *
3597
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3598
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
3599
- * */
3600
- var useStyles$7 = makeStyles__default["default"](function () {
3601
- return {
3602
- dragHandle: {
3603
- backgroundColor: 'transparent',
3739
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3740
+ title: "View details"
3741
+ }, /*#__PURE__*/React__namespace.createElement(material.Chip, {
3742
+ "data-testid": "issuesButton",
3743
+ className: "status-" + errorStatus,
3744
+ size: "small",
3745
+ label: getIssuesLabel(totalErrors),
3746
+ onClick: onClickButton,
3747
+ sx: {
3748
+ width: '74px',
3749
+ color: '#ffffff',
3750
+ backgroundColor: buttonColor,
3604
3751
  '&:hover': {
3605
- backgroundColor: 'transparent'
3752
+ backgroundColor: buttonColor
3606
3753
  },
3607
- cursor: function cursor(isSorting) {
3608
- return isSorting ? 'grabbing' : 'grab';
3609
- }
3754
+ '&:focus': {
3755
+ backgroundColor: buttonColor
3756
+ },
3757
+ fontSize: 12
3610
3758
  }
3611
- };
3612
- });
3613
-
3614
- var DragHandle = function DragHandle(_a) {
3615
- var _b = _a.isSorting,
3616
- isSorting = _b === void 0 ? false : _b,
3617
- _c = _a.isDisabled,
3618
- isDisabled = _c === void 0 ? false : _c,
3619
- index = _a.index;
3620
- var classes = useStyles$7(isSorting);
3621
- return /*#__PURE__*/React__default["default"].createElement(material.IconButton, {
3622
- className: classes.dragHandle + " handle",
3623
- "data-testid": "dragHandle-" + index,
3624
- disableRipple: true,
3625
- disabled: isDisabled,
3626
- size: "large"
3627
- }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.DragIndicator, null));
3759
+ })), /*#__PURE__*/React__namespace.createElement(IssuesPane, {
3760
+ errorList: errorList,
3761
+ handleClose: toggleIssuesPane,
3762
+ isOpen: isIssuesPaneOpen,
3763
+ startPosition: startPosition
3764
+ }));
3628
3765
  };
3629
3766
 
3630
3767
  var noop = function noop() {};
3631
3768
 
3632
- var emptyChangegroup = {
3633
- valid: '',
3634
- wind: '',
3635
- visibility: '',
3636
- weather: {
3637
- weather1: null,
3638
- weather2: null,
3639
- weather3: null
3640
- },
3641
- cloud: {
3642
- cloud1: null,
3643
- cloud2: null,
3644
- cloud3: null,
3645
- cloud4: null
3646
- },
3647
- change: null,
3648
- probability: null
3649
- };
3650
-
3651
3769
  var TafForm = function TafForm(_a) {
3652
- var isDisabled = _a.isDisabled,
3653
- tafAction = _a.tafAction,
3770
+ var // can be removed after old TAF is gone
3771
+ defaultTafAction = _a.tafAction,
3772
+ isDefaultDisabled = _a.isDisabled,
3654
3773
  _b = _a.staticTAC,
3655
3774
  staticTAC = _b === void 0 ? '' : _b,
3775
+ tafFromBackend = _a.tafFromBackend,
3656
3776
  _c = _a.onFormAction,
3657
3777
  onFormAction = _c === void 0 ? function () {
3658
3778
  return null;
3659
3779
  } : _c;
3660
- var classes = useStyles$9();
3780
+ var originalTaf = tafFromBackend.taf;
3781
+
3782
+ var _d = __read(React__default["default"].useState(defaultTafAction), 2),
3783
+ tafAction = _d[0],
3784
+ setTafAction = _d[1];
3785
+
3786
+ var _e = __read(React__default["default"].useState(isDefaultDisabled), 2),
3787
+ isDisabled = _e[0],
3788
+ setIsDisabled = _e[1];
3789
+
3661
3790
  var confirmDialog = shared.useConfirmationDialog();
3662
3791
 
3663
- var _d = shared.useDraftFormHelpers(),
3664
- toggleIsDraft = _d.toggleIsDraft,
3665
- DraftFieldHelper = _d.DraftFieldHelper;
3792
+ var _f = shared.useDraftFormHelpers(),
3793
+ toggleIsDraft = _f.toggleIsDraft,
3794
+ DraftFieldHelper = _f.DraftFieldHelper;
3666
3795
 
3667
3796
  var api$1 = api.useApiContext().api;
3668
3797
  var isMounted = shared.useIsMounted().isMounted;
3669
3798
 
3670
- var _e = reactHookForm.useFormContext(),
3671
- control = _e.control,
3672
- handleSubmit = _e.handleSubmit,
3673
- watch = _e.watch,
3674
- trigger = _e.trigger,
3675
- formState = _e.formState,
3676
- getValues = _e.getValues;
3799
+ var _g = reactHookForm.useFormContext(),
3800
+ control = _g.control,
3801
+ handleSubmit = _g.handleSubmit,
3802
+ watch = _g.watch,
3803
+ trigger = _g.trigger,
3804
+ formState = _g.formState,
3805
+ getValues = _g.getValues,
3806
+ setValue = _g.setValue,
3807
+ reset = _g.reset;
3677
3808
 
3678
3809
  var isFormDirty = formState.isDirty,
3679
3810
  errors = formState.errors;
3680
3811
  shared.usePreventBrowserClose(isFormDirty && !isDisabled);
3681
3812
  var hiddenInputFields = ['baseTime', 'issueDate', 'type', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
3682
3813
 
3683
- var _f = __read(React__default["default"].useState(watch()), 2),
3684
- delayedFormValues = _f[0],
3685
- setDelayedFormValues = _f[1];
3814
+ var _h = __read(React__default["default"].useState(watch()), 2),
3815
+ delayedFormValues = _h[0],
3816
+ setDelayedFormValues = _h[1];
3686
3817
 
3687
- var _g = __read(useTACGenerator(convertTafValuesToObject(delayedFormValues), api$1.getTAC, staticTAC), 2),
3688
- TAC = _g[0],
3689
- updateTAC = _g[1];
3818
+ var _j = __read(useTACGenerator(convertTafValuesToObject(delayedFormValues), api$1.getTAC, staticTAC), 2),
3819
+ TAC = _j[0],
3820
+ updateTAC = _j[1];
3690
3821
 
3691
3822
  var hasErrors = Object.keys(errors).length;
3692
3823
 
@@ -3717,12 +3848,34 @@
3717
3848
  var showConfirmDialog = function showConfirmDialog(action) {
3718
3849
  return confirmDialog({
3719
3850
  title: getConfirmationDialogTitle(action),
3720
- description: getConfirmationDialogContent(action, isFormDirty),
3851
+ description: getConfirmationDialogContent(action, function () {
3852
+ return isTafAmendedCorrectedChanged(isFormDirty, originalTaf, convertTafValuesToObject(getValues()));
3853
+ }),
3721
3854
  confirmLabel: getConfirmationDialogButtonLabel(action)
3722
3855
  });
3723
3856
  };
3724
3857
 
3725
- var onTafButtonPress = function onTafButtonPress(action) {
3858
+ var resetFormValues = function resetFormValues(action, shouldAddEmptyChangGroup) {
3859
+ if (action === void 0) {
3860
+ action = undefined;
3861
+ }
3862
+
3863
+ var newTaf = prepareTafValues(tafFromBackend.taf, action, shouldAddEmptyChangGroup);
3864
+ reset(newTaf);
3865
+ };
3866
+
3867
+ var resetForm = function resetForm(action, resetDisabled) {
3868
+ if (action === void 0) {
3869
+ action = undefined;
3870
+ }
3871
+
3872
+ var shouldAddEmptyChangGroup = !(tafFromBackend.taf && tafFromBackend.taf.changeGroups) && !resetDisabled;
3873
+ resetFormValues(action, shouldAddEmptyChangGroup);
3874
+ setIsDisabled(resetDisabled);
3875
+ setTafAction(action);
3876
+ };
3877
+
3878
+ var onTafEditModeButtonPress = function onTafEditModeButtonPress(action) {
3726
3879
  switch (action) {
3727
3880
  case 'DRAFT':
3728
3881
  case 'DRAFT_AMEND':
@@ -3736,10 +3889,10 @@
3736
3889
  case 'DISCARD':
3737
3890
  if (isFormDirty) {
3738
3891
  showConfirmDialog(action).then(function () {
3739
- onFormAction(action);
3892
+ resetForm(undefined, isDefaultDisabled);
3740
3893
  });
3741
3894
  } else {
3742
- onFormAction(action);
3895
+ resetForm(undefined, isDefaultDisabled);
3743
3896
  }
3744
3897
 
3745
3898
  break;
@@ -3749,8 +3902,36 @@
3749
3902
  case 'PUBLISH':
3750
3903
  toggleIsDraft(false);
3751
3904
  handleSubmit(function (data) {
3752
- showConfirmDialog(action).then(function () {
3753
- onFormAction(action, convertTafValuesToObject(data));
3905
+ return __awaiter(void 0, void 0, void 0, function () {
3906
+ var didSucceed;
3907
+ return __generator(this, function (_a) {
3908
+ switch (_a.label) {
3909
+ case 0:
3910
+ return [4
3911
+ /*yield*/
3912
+ , showConfirmDialog(action)];
3913
+
3914
+ case 1:
3915
+ _a.sent();
3916
+
3917
+ return [4
3918
+ /*yield*/
3919
+ , onFormAction(action, convertTafValuesToObject(data))];
3920
+
3921
+ case 2:
3922
+ didSucceed = _a.sent();
3923
+
3924
+ if (didSucceed) {
3925
+ setIsDisabled(true);
3926
+ reset(prepareTafValues(convertTafValuesToObject(data), action, false));
3927
+ setTafAction(null);
3928
+ }
3929
+
3930
+ return [2
3931
+ /*return*/
3932
+ ];
3933
+ }
3934
+ });
3754
3935
  });
3755
3936
  })();
3756
3937
  break;
@@ -3761,19 +3942,33 @@
3761
3942
  }
3762
3943
  };
3763
3944
 
3764
- var _h = reactHookForm.useFieldArray({
3945
+ var onTafViewModeButtonPress = function onTafViewModeButtonPress(action) {
3946
+ switch (action) {
3947
+ case 'CANCEL':
3948
+ showConfirmDialog(action).then(function () {
3949
+ onFormAction(action, tafFromBackend.taf);
3950
+ });
3951
+ break;
3952
+
3953
+ default:
3954
+ resetForm(action, false);
3955
+ break;
3956
+ }
3957
+ };
3958
+
3959
+ var _k = reactHookForm.useFieldArray({
3765
3960
  control: control,
3766
3961
  name: 'changeGroups'
3767
3962
  }),
3768
- fields = _h.fields,
3769
- insert = _h.insert,
3770
- remove = _h.remove,
3771
- move = _h.move;
3963
+ fields = _k.fields,
3964
+ insert = _k.insert,
3965
+ remove = _k.remove,
3966
+ move = _k.move;
3772
3967
 
3773
- var _j = useDragOrder(trigger, move, onFormBlur),
3774
- onChangeOrder = _j.onChangeOrder,
3775
- onStartDrag = _j.onStartDrag,
3776
- activeDraggingIndex = _j.activeDraggingIndex;
3968
+ var _l = useDragOrder(trigger, move, onFormBlur),
3969
+ onChangeOrder = _l.onChangeOrder,
3970
+ onStartDrag = _l.onStartDrag,
3971
+ activeDraggingIndex = _l.activeDraggingIndex;
3777
3972
 
3778
3973
  var onRemoverow = function onRemoverow(index) {
3779
3974
  confirmDialog({
@@ -3790,25 +3985,68 @@
3790
3985
 
3791
3986
 
3792
3987
  var focusFirstInput = function focusFirstInput(rowIndex) {
3793
- var nextRowFirstInput = document.querySelector("[name=\"changeGroups[" + rowIndex + "].probability\"]");
3988
+ var selector = rowIndex === -1 ? "[name=\"baseForecast.wind\"]" : "[name=\"changeGroups[" + rowIndex + "].probability\"]";
3989
+ var nextRowFirstInput = document.querySelector(selector);
3794
3990
 
3795
3991
  if (nextRowFirstInput) {
3796
3992
  nextRowFirstInput.focus();
3797
3993
  }
3994
+ }; // adding rows and validation don't work well combined, with always skipping validation of fields of rows above the one the inserted row. A setTimeout prevents this issue
3995
+
3996
+
3997
+ var setFocusAndValidate = function setFocusAndValidate(rowIndex) {
3998
+ return setTimeout(function () {
3999
+ focusFirstInput(rowIndex);
4000
+ trigger(); // trigger all fields validation
4001
+ }, 0);
3798
4002
  };
3799
4003
 
3800
- var onAddRow = function onAddRow(rowIndex) {
4004
+ var onAddRow = function onAddRow(rowIndex, above) {
3801
4005
  if (rowIndex === void 0) {
3802
4006
  rowIndex = -1;
3803
4007
  }
3804
4008
 
3805
- var newRowIndex = rowIndex + 1;
3806
- insert(newRowIndex, emptyChangegroup, false); // adding rows and validation don't work well combined, with always skipping validation of fields of rows above the one the inserted row. A setTimeout prevents this issue
4009
+ if (above === void 0) {
4010
+ above = false;
4011
+ }
3807
4012
 
3808
- setTimeout(function () {
3809
- focusFirstInput(newRowIndex);
3810
- trigger(); // trigger all fields validation
3811
- }, 0);
4013
+ var newRowIndex = above ? rowIndex : rowIndex + 1;
4014
+ insert(newRowIndex, emptyChangegroup, false);
4015
+ setFocusAndValidate(newRowIndex);
4016
+ };
4017
+
4018
+ var _onClearRow = function onClearRow(rowIndex, isChangeGroup) {
4019
+ if (rowIndex === void 0) {
4020
+ rowIndex = -1;
4021
+ }
4022
+
4023
+ if (isChangeGroup === void 0) {
4024
+ isChangeGroup = false;
4025
+ }
4026
+
4027
+ confirmDialog({
4028
+ title: 'Clear row',
4029
+ description: 'Are you sure you want to clear this row?',
4030
+ confirmLabel: 'Yes'
4031
+ }).then(function () {
4032
+ if (isChangeGroup) {
4033
+ remove(rowIndex);
4034
+ insert(rowIndex, emptyChangegroup, false);
4035
+ } else {
4036
+ var baseForecastFields = getFieldNames(false, -1);
4037
+ setValue(baseForecastFields.wind, '');
4038
+ setValue(baseForecastFields.visibility, '');
4039
+ setValue(baseForecastFields.weather1, '');
4040
+ setValue(baseForecastFields.weather2, '');
4041
+ setValue(baseForecastFields.weather3, '');
4042
+ setValue(baseForecastFields.cloud1, '');
4043
+ setValue(baseForecastFields.cloud2, '');
4044
+ setValue(baseForecastFields.cloud3, '');
4045
+ setValue(baseForecastFields.cloud4, '');
4046
+ }
4047
+
4048
+ setFocusAndValidate(rowIndex);
4049
+ });
3812
4050
  };
3813
4051
 
3814
4052
  React__default["default"].useEffect(function () {
@@ -3822,22 +4060,36 @@
3822
4060
 
3823
4061
  }, []);
3824
4062
  return /*#__PURE__*/React__default["default"].createElement("form", {
4063
+ "data-testid": "taf-form",
3825
4064
  onSubmit: handleSubmit(onSubmit),
3826
4065
  onBlur: onFormBlur
3827
4066
  }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
3828
- className: classes.tacTitle
4067
+ sx: {
4068
+ fontSize: '20px',
4069
+ fontWeight: 500,
4070
+ height: '24px'
4071
+ }
3829
4072
  }, "TAC"), /*#__PURE__*/React__default["default"].createElement(material.Typography, {
3830
- "data-testid": "form-tac-message",
3831
- className: classes.tacText
4073
+ sx: {
4074
+ fontSize: '14px',
4075
+ margin: '8px 0px'
4076
+ },
4077
+ "data-testid": "form-tac-message"
3832
4078
  }, TAC.split('\n').map(function (line) {
3833
- return /*#__PURE__*/React__default["default"].createElement("span", {
4079
+ return /*#__PURE__*/React__default["default"].createElement(material.Box, {
4080
+ component: "span",
3834
4081
  key: line,
3835
- className: classes.tacLine,
3836
- "data-testid": "tafform-tac-message-line"
4082
+ "data-testid": "tafform-tac-message-line",
4083
+ sx: {
4084
+ textIndent: '-0.7em',
4085
+ borderRadius: '3px',
4086
+ paddingRight: '0.7em'
4087
+ }
3837
4088
  }, line);
3838
4089
  })), /*#__PURE__*/React__default["default"].createElement(TafFormRow, {
3839
4090
  disabled: isDisabled,
3840
- onAddChangeGroup: onAddRow
4091
+ onAddChangeGroupBelow: onAddRow,
4092
+ onClearRow: _onClearRow
3841
4093
  }), /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
3842
4094
  tag: "div",
3843
4095
  list: fields,
@@ -3855,13 +4107,17 @@
3855
4107
  }, fields.map(function (item, index) {
3856
4108
  return /*#__PURE__*/React__default["default"].createElement(TafFormRow, {
3857
4109
  field: item,
3858
- className: classes.formRow,
3859
4110
  key: item.id,
3860
4111
  index: index,
3861
- lastRow: fields.length === index + 1,
3862
4112
  disabled: isDisabled,
3863
4113
  onRemoveChangeGroup: onRemoverow,
3864
- onAddChangeGroup: onAddRow,
4114
+ onAddChangeGroupBelow: onAddRow,
4115
+ onAddChangeGroupAbove: function onAddChangeGroupAbove() {
4116
+ return onAddRow(index, true);
4117
+ },
4118
+ onClearRow: function onClearRow() {
4119
+ return _onClearRow(index, true);
4120
+ },
3865
4121
  isChangeGroup: true,
3866
4122
  dragHandle: /*#__PURE__*/React__default["default"].createElement(DragHandle, {
3867
4123
  isDisabled: fields.length === 1 || isDisabled,
@@ -3869,9 +4125,24 @@
3869
4125
  index: index
3870
4126
  })
3871
4127
  });
3872
- })), !isDisabled && /*#__PURE__*/React__default["default"].createElement(TafFormButtons, {
4128
+ })), !isDisabled && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4129
+ container: true,
4130
+ justifyContent: "space-between",
4131
+ alignItems: "center",
4132
+ sx: {
4133
+ marginLeft: 1.5,
4134
+ marginTop: 1
4135
+ }
4136
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4137
+ item: true
4138
+ }, /*#__PURE__*/React__default["default"].createElement(IssuesButton, {
4139
+ errors: errors
4140
+ }))), /*#__PURE__*/React__default["default"].createElement(TafFormButtons, {
4141
+ isFormDisabled: isDisabled,
3873
4142
  tafAction: tafAction,
3874
- onTafFormButtonPress: onTafButtonPress
4143
+ canBe: tafFromBackend.canbe,
4144
+ onTafEditModeButtonPress: onTafEditModeButtonPress,
4145
+ onTafViewModeButtonPress: onTafViewModeButtonPress
3875
4146
  }), hiddenInputFields.map(function (field) {
3876
4147
  return /*#__PURE__*/React__default["default"].createElement(formFields.ReactHookFormHiddenInput, {
3877
4148
  name: field,
@@ -3880,72 +4151,33 @@
3880
4151
  }), /*#__PURE__*/React__default["default"].createElement(DraftFieldHelper, null));
3881
4152
  };
3882
4153
 
3883
- var getMessageType = function getMessageType(taf, tafAction) {
3884
- if (tafAction === 'CORRECT') {
3885
- return 'COR';
3886
- }
3887
-
3888
- if (tafAction === 'AMEND') {
3889
- return 'AMD';
3890
- }
3891
-
3892
- return taf.messageType;
3893
- }; // For corrections and amendment we need to add the previousValidStart and End for the TAC converter
3894
-
3895
- var getAmendedCorrectedTafTimes = function getAmendedCorrectedTafTimes(taf, tafAction) {
3896
- var previousValidDateStart = taf.previousValidDateStart && tafAction !== 'AMEND' ? taf.previousValidDateStart : taf.validDateStart;
3897
- var previousValidDateEnd = taf.previousValidDateEnd && tafAction !== 'AMEND' ? taf.previousValidDateEnd : taf.validDateEnd; // For amendment change valid start time to current time
3898
- // only do this if we're already within the validity period
3899
-
3900
- if ((tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND') && moment__default["default"].utc() >= moment__default["default"].utc(taf.validDateStart)) {
3901
- var now = moment__default["default"].utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
3902
- var validObj = {
3903
- start: now,
3904
- end: taf.baseForecast.valid.end
3905
- };
3906
- return __assign(__assign({}, taf), {
3907
- previousValidDateStart: previousValidDateStart,
3908
- previousValidDateEnd: previousValidDateEnd,
3909
- validDateStart: now,
3910
- baseForecast: __assign(__assign({}, taf.baseForecast), {
3911
- valid: validObj
3912
- })
3913
- });
3914
- }
3915
-
3916
- return __assign(__assign({}, taf), {
3917
- previousValidDateStart: previousValidDateStart,
3918
- previousValidDateEnd: previousValidDateEnd
3919
- });
3920
- };
3921
- var prepareTafValues = function prepareTafValues(_taf, tafAction, addEmptyChangeGroup) {
3922
- if (addEmptyChangeGroup === void 0) {
3923
- addEmptyChangeGroup = false;
3924
- } // If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
3925
- // If action is AMEND/DRAFT_AMEND - update validity start time to current time
3926
-
3927
-
3928
- var taf = tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND' || tafAction === 'CORRECT' || tafAction === 'DRAFT_CORRECT' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
3929
- return __assign(__assign(__assign(__assign({}, taf), {
3930
- messageType: getMessageType(taf, tafAction),
3931
- baseForecast: formatFormValues(taf.baseForecast)
3932
- }), taf.changeGroups && {
3933
- changeGroups: taf.changeGroups.map(formatFormValues)
3934
- }), addEmptyChangeGroup && {
3935
- changeGroups: [emptyChangegroup]
3936
- });
3937
- };
4154
+ /* *
4155
+ * Licensed under the Apache License, Version 2.0 (the "License");
4156
+ * you may not use this file except in compliance with the License.
4157
+ * You may obtain a copy of the License at
4158
+ *
4159
+ * http://www.apache.org/licenses/LICENSE-2.0
4160
+ *
4161
+ * Unless required by applicable law or agreed to in writing, software
4162
+ * distributed under the License is distributed on an "AS IS" BASIS,
4163
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4164
+ * See the License for the specific language governing permissions and
4165
+ * limitations under the License.
4166
+ *
4167
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4168
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
4169
+ * */
3938
4170
 
3939
4171
  var TafFormWrapper = function TafFormWrapper(_a) {
3940
4172
  var tafFromBackend = _a.tafFromBackend,
3941
4173
  mode = _a.mode,
3942
- tafAction = _a.tafAction,
3943
4174
  _b = _a.TAC,
3944
4175
  TAC = _b === void 0 ? '' : _b,
3945
- onFormAction = _a.onFormAction;
4176
+ onFormAction = _a.onFormAction,
4177
+ tafAction = _a.tafAction;
3946
4178
  var taf = tafFromBackend.taf;
3947
4179
  var isDisabled = mode === 'view';
3948
- var defaultValues = prepareTafValues(taf, tafAction, !isDisabled && !taf.changeGroups);
4180
+ var defaultValues = prepareTafValues(taf, undefined, !isDisabled && !taf.changeGroups);
3949
4181
  var options = {
3950
4182
  defaultValues: defaultValues,
3951
4183
  mode: 'onTouched',
@@ -3956,83 +4188,13 @@
3956
4188
  options: options
3957
4189
  }, /*#__PURE__*/React__default["default"].createElement(TafForm, {
3958
4190
  isDisabled: isDisabled,
3959
- tafAction: tafAction,
3960
4191
  staticTAC: TAC,
3961
- onFormAction: onFormAction
4192
+ onFormAction: onFormAction,
4193
+ tafFromBackend: tafFromBackend,
4194
+ tafAction: tafAction
3962
4195
  }));
3963
4196
  };
3964
4197
 
3965
- var useStyles$6 = makeStyles__default["default"]({
3966
- dialogHeader: {
3967
- borderRadius: '3px',
3968
- border: 'solid 1px #f6f5f5',
3969
- zIndex: 1,
3970
- padding: '16px 20px'
3971
- },
3972
- dialogTitle: {
3973
- display: 'flex',
3974
- alignItems: 'center'
3975
- },
3976
- dialogCloseButton: {
3977
- display: 'flex',
3978
- justifyContent: 'flex-end'
3979
- },
3980
- dialogChildren: {
3981
- display: 'flex',
3982
- padding: 20,
3983
- minHeight: 200,
3984
- minWidth: 400,
3985
- height: '100%'
3986
- }
3987
- });
3988
-
3989
- var ContentDialog = function ContentDialog(_a) {
3990
- var open = _a.open;
3991
- _a.toggleDialogStatus;
3992
- var titleComponent = _a.titleComponent,
3993
- children = _a.children;
3994
- _a.onClose;
3995
- var _b = _a.alertBanner,
3996
- alertBanner = _b === void 0 ? null : _b,
3997
- onFormAction = _a.onFormAction,
3998
- other = __rest(_a, ["open", "toggleDialogStatus", "titleComponent", "children", "onClose", "alertBanner", "onFormAction"]);
3999
-
4000
- var classes = useStyles$6();
4001
- return /*#__PURE__*/React__namespace.createElement(material.Dialog, __assign({
4002
- "data-testid": "contentDialog",
4003
- open: open,
4004
- onClose: function onClose() {
4005
- return onFormAction('CLOSE');
4006
- },
4007
- maxWidth: other.maxWidth ? other.maxWidth : 'lg',
4008
- PaperProps: {
4009
- style: {
4010
- position: 'inherit'
4011
- }
4012
- }
4013
- }, other), /*#__PURE__*/React__namespace.createElement(material.DialogTitle, {
4014
- className: classes.dialogHeader
4015
- }, /*#__PURE__*/React__namespace.createElement(material.Grid, {
4016
- container: true
4017
- }, /*#__PURE__*/React__namespace.createElement(material.Grid, {
4018
- item: true,
4019
- xs: 11,
4020
- className: classes.dialogTitle
4021
- }, titleComponent), /*#__PURE__*/React__namespace.createElement(material.Grid, {
4022
- item: true,
4023
- xs: true,
4024
- className: classes.dialogCloseButton
4025
- }, /*#__PURE__*/React__namespace.createElement(material.IconButton, {
4026
- "data-testid": "closeDialog",
4027
- size: "small",
4028
- onClick: function onClick() {
4029
- return onFormAction('CLOSE');
4030
- }
4031
- }, /*#__PURE__*/React__namespace.createElement(iconsMaterial.Close, null))))), alertBanner !== null && alertBanner, /*#__PURE__*/React__namespace.createElement(material.DialogContent, {
4032
- className: classes.dialogChildren
4033
- }, children));
4034
- };
4035
-
4036
4198
  /* *
4037
4199
  * Licensed under the Apache License, Version 2.0 (the "License");
4038
4200
  * you may not use this file except in compliance with the License.
@@ -4046,248 +4208,236 @@
4046
4208
  * See the License for the specific language governing permissions and
4047
4209
  * limitations under the License.
4048
4210
  *
4049
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4050
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4211
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4212
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4051
4213
  * */
4052
4214
 
4053
- var getActiveStatus = function getActiveStatus(listType, className) {
4054
- return listType === 'ACTIVE' ? /*#__PURE__*/React__default["default"].createElement(iconsMaterial.CheckCircle, {
4055
- "data-testid": "status-active",
4056
- className: className,
4057
- fontSize: "small"
4058
- }) : /*#__PURE__*/React__default["default"].createElement(iconsMaterial.Schedule, {
4059
- "data-testid": "status-upcoming",
4060
- className: className,
4061
- fontSize: "small"
4062
- });
4215
+ var TabPanel = function TabPanel(_a) {
4216
+ var children = _a.children,
4217
+ value = _a.value,
4218
+ index = _a.index,
4219
+ other = __rest(_a, ["children", "value", "index"]);
4220
+
4221
+ return /*#__PURE__*/React__default["default"].createElement(material.Box, __assign({
4222
+ role: "tabpanel",
4223
+ hidden: value !== index,
4224
+ id: "simple-tabpanel-" + index,
4225
+ "aria-labelledby": "simple-tab-" + index,
4226
+ "data-testid": "tab-panel-" + index
4227
+ }, other), value === index && children);
4063
4228
  };
4064
4229
 
4065
- var getStatusTagList = function getStatusTagList(taf) {
4066
- // do not return anything if status = 'NEW'
4067
- if (taf.status === 'NEW') return null;
4068
-
4069
- if (taf.status === 'CANCELLED') {
4070
- return /*#__PURE__*/React__default["default"].createElement(shared.StatusTag, {
4071
- content: "cancelled",
4072
- color: "red"
4073
- });
4074
- }
4230
+ /* *
4231
+ * Licensed under the Apache License, Version 2.0 (the "License");
4232
+ * you may not use this file except in compliance with the License.
4233
+ * You may obtain a copy of the License at
4234
+ *
4235
+ * http://www.apache.org/licenses/LICENSE-2.0
4236
+ *
4237
+ * Unless required by applicable law or agreed to in writing, software
4238
+ * distributed under the License is distributed on an "AS IS" BASIS,
4239
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4240
+ * See the License for the specific language governing permissions and
4241
+ * limitations under the License.
4242
+ *
4243
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4244
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4245
+ * */
4075
4246
 
4076
- return /*#__PURE__*/React__default["default"].createElement(shared.StatusTag, {
4077
- content: taf.status.toLowerCase(),
4078
- color: taf.status === 'EXPIRED' ? 'grey' : 'green'
4079
- });
4247
+ var TafHeader = function TafHeader(_a) {
4248
+ var title = _a.title;
4249
+ return /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4250
+ sx: {
4251
+ textAlign: 'center',
4252
+ fontWeight: 500,
4253
+ paddingTop: '6px',
4254
+ textTransform: 'capitalize'
4255
+ }
4256
+ }, title);
4080
4257
  };
4081
4258
 
4082
- var getDraftTitle = function getDraftTitle(status) {
4083
- if (status === 'DRAFT_AMENDED') {
4084
- return 'Draft amendment';
4085
- }
4086
-
4087
- if (status === 'DRAFT_CORRECTED') {
4088
- return 'Draft correction';
4089
- }
4090
-
4091
- return 'Draft';
4092
- };
4093
- var useStyles$5 = makeStyles__default["default"]({
4094
- cardWrapper: {
4095
- width: '100%'
4096
- },
4097
- cardContent: {
4098
- width: '100%'
4099
- },
4100
- activeStatus: {
4101
- color: '#72bb23'
4102
- },
4103
- font: {
4104
- fontWeight: 'normal'
4105
- },
4106
- alignIcon: {
4107
- display: 'flex',
4108
- alignSelf: 'center'
4259
+ var location_indicator_mwo = "EHDB";
4260
+ var locations = {
4261
+ EHAM: {
4262
+ validity_duration: 30,
4263
+ activity_period: 6,
4264
+ label: "Schiphol"
4265
+ },
4266
+ EHRD: {
4267
+ validity_duration: 30,
4268
+ activity_period: 6,
4269
+ label: "Rotterdam"
4270
+ },
4271
+ EHGG: {
4272
+ validity_duration: 30,
4273
+ activity_period: 6,
4274
+ label: "Eelde"
4275
+ },
4276
+ EHBK: {
4277
+ validity_duration: 30,
4278
+ activity_period: 6,
4279
+ label: "Maastricht"
4280
+ },
4281
+ EHLE: {
4282
+ validity_duration: 30,
4283
+ activity_period: 6,
4284
+ label: "Lelystad"
4285
+ },
4286
+ TNCB: {
4287
+ validity_duration: 30,
4288
+ activity_period: 6,
4289
+ label: "Bonaire"
4290
+ }
4291
+ };
4292
+ var locationOrder = [
4293
+ "EHAM",
4294
+ "EHRD",
4295
+ "EHLE",
4296
+ "EHGG",
4297
+ "EHBK",
4298
+ "TNCB"
4299
+ ];
4300
+ var tafConfig = {
4301
+ location_indicator_mwo: location_indicator_mwo,
4302
+ locations: locations,
4303
+ locationOrder: locationOrder
4304
+ };
4305
+
4306
+ var getTafSettings = function getTafSettings() {
4307
+ return tafConfig;
4308
+ };
4309
+
4310
+ var tafSettings = getTafSettings();
4311
+ var getLocationSetting = function getLocationSetting(location, locationSettings) {
4312
+ if (locationSettings === void 0) {
4313
+ locationSettings = tafSettings.locations;
4109
4314
  }
4110
- });
4111
4315
 
4112
- var TafListRow = function TafListRow(_a) {
4113
- var taf = _a.taf,
4114
- listType = _a.listType,
4115
- _b = _a.TAC,
4116
- TAC = _b === void 0 ? '' : _b,
4117
- _c = _a.showTac,
4118
- showTac = _c === void 0 ? false : _c;
4119
- var classes = useStyles$5();
4120
- var validTimeDate = moment__default["default"].utc(taf.validDateStart).format('DD MMM');
4121
- var baseTime = moment__default["default"].utc(taf.baseTime).format('HH:mm');
4122
- return /*#__PURE__*/React__default["default"].createElement(material.Card, {
4123
- elevation: 0,
4124
- className: classes.cardWrapper
4125
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4126
- container: true,
4127
- alignItems: "center",
4128
- spacing: 1
4129
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4130
- item: true,
4131
- xs: 3,
4132
- sm: 2,
4133
- md: 1
4134
- }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4135
- variant: "subtitle2",
4136
- noWrap: true,
4137
- className: classes.font
4138
- }, taf.location)), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4139
- item: true,
4140
- xs: 3,
4141
- sm: 3,
4142
- md: 1,
4143
- container: true
4144
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4145
- item: true,
4146
- xs: 3,
4147
- sm: 3,
4148
- md: 3,
4149
- className: classes.alignIcon
4150
- }, showTac && /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
4151
- "data-testid": "taflistrow-tactooltip",
4152
- title: /*#__PURE__*/React__default["default"].createElement("div", {
4153
- style: {
4154
- whiteSpace: 'pre-line'
4155
- }
4156
- }, TAC),
4157
- placement: "bottom-start"
4158
- }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.InfoOutlined, {
4159
- "data-testid": "taflistrow-tacicon",
4160
- color: "secondary",
4161
- fontSize: "small"
4162
- }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4163
- item: true,
4164
- xs: 9,
4165
- sm: 9,
4166
- md: 9
4167
- }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4168
- variant: "subtitle2",
4169
- className: classes.font,
4170
- "data-testid": "baseTime"
4171
- }, baseTime))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4172
- item: true,
4173
- xs: 3,
4174
- sm: 2,
4175
- md: 1
4176
- }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4177
- variant: "subtitle2",
4178
- className: classes.font,
4179
- "data-testid": "validTimeDate"
4180
- }, validTimeDate)), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4181
- item: true,
4182
- xs: 3,
4183
- sm: 3,
4184
- md: 6
4185
- }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4186
- variant: "subtitle2",
4187
- className: classes.font,
4188
- "data-testid": "validTimeSlot"
4189
- }, formatValidToString({
4190
- start: taf.validDateStart,
4191
- end: taf.validDateEnd
4192
- }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4193
- item: true,
4194
- xs: 12,
4195
- sm: 4,
4196
- md: 3
4197
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4198
- container: true,
4199
- justifyContent: "flex-start",
4200
- spacing: 2
4201
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4202
- item: true,
4203
- xs: 8,
4204
- container: true,
4205
- justifyContent: "flex-end"
4206
- }, taf.status === 'DRAFT' || taf.status === 'DRAFT_CORRECTED' || taf.status === 'DRAFT_AMENDED' ? /*#__PURE__*/React__default["default"].createElement(material.Button, {
4207
- color: "secondary",
4208
- size: "small",
4209
- "data-testid": "tafRow-draft",
4210
- startIcon: /*#__PURE__*/React__default["default"].createElement(iconsMaterial.Create, {
4211
- fontSize: "small",
4212
- color: "secondary"
4213
- })
4214
- }, getDraftTitle(taf.status)) : getStatusTagList(taf)), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4215
- item: true,
4216
- className: classes.alignIcon
4217
- }, taf.status !== 'NEW' && taf.status !== 'DRAFT' && taf.status !== 'DRAFT_CORRECTED' && taf.status !== 'DRAFT_AMENDED' && taf.status !== 'CANCELLED' && listType !== 'EXPIRED' && getActiveStatus(listType, classes.activeStatus))))));
4316
+ return locationSettings[location];
4218
4317
  };
4318
+ var sortTafsOnLocation = function sortTafsOnLocation(tafList, locationOrder) {
4319
+ if (locationOrder === void 0) {
4320
+ locationOrder = tafSettings.locationOrder;
4321
+ }
4219
4322
 
4220
- /* *
4221
- * Licensed under the Apache License, Version 2.0 (the "License");
4222
- * you may not use this file except in compliance with the License.
4223
- * You may obtain a copy of the License at
4224
- *
4225
- * http://www.apache.org/licenses/LICENSE-2.0
4226
- *
4227
- * Unless required by applicable law or agreed to in writing, software
4228
- * distributed under the License is distributed on an "AS IS" BASIS,
4229
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4230
- * See the License for the specific language governing permissions and
4231
- * limitations under the License.
4232
- *
4233
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4234
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4235
- * */
4236
- var getListType = function getListType(taf, locationSettings) {
4237
- if (!taf) return null;
4323
+ if (!tafList) return [];
4324
+ return __spreadArray([], __read(tafList)).sort(function (_a, _b) {
4325
+ var tafA = _a.taf;
4326
+ var tafB = _b.taf;
4327
+ return locationOrder.indexOf(tafA.location) < locationOrder.indexOf(tafB.location) ? -1 : 1;
4328
+ });
4329
+ };
4330
+ var getBaseTime = function getBaseTime(baseTime, location) {
4331
+ var currentBaseTime = moment__default["default"].utc(baseTime);
4332
+ var activityPeriod = getLocationSetting(location).activity_period;
4333
+ var nextBaseTime = moment__default["default"].utc(baseTime).add(activityPeriod, 'hours');
4334
+ return {
4335
+ currentBaseTime: currentBaseTime,
4336
+ nextBaseTime: nextBaseTime
4337
+ };
4338
+ };
4339
+ var getTafTimeSlot = function getTafTimeSlot(baseTime, location, status) {
4238
4340
  var now = moment__default["default"].utc();
4239
- var baseTime = moment__default["default"].utc(taf.baseTime);
4240
- var activityPeriod = locationSettings[taf.location].activity_period;
4241
- var nextBaseTime = moment__default["default"].utc(taf.baseTime).add(activityPeriod, 'hours');
4242
4341
 
4243
- if (taf.status === 'EXPIRED') {
4342
+ var _a = getBaseTime(baseTime, location),
4343
+ currentBaseTime = _a.currentBaseTime,
4344
+ nextBaseTime = _a.nextBaseTime;
4345
+
4346
+ if (status === 'EXPIRED') {
4244
4347
  return 'EXPIRED';
4245
4348
  }
4246
4349
 
4247
- if (baseTime < now && nextBaseTime > now) {
4350
+ if (currentBaseTime < now && nextBaseTime > now) {
4248
4351
  return 'ACTIVE';
4249
4352
  }
4250
4353
 
4251
4354
  return 'UPCOMING';
4252
4355
  };
4356
+ var sortTafTimeSlots = function sortTafTimeSlots(tafList) {
4357
+ var sortedListOnLocation = sortTafsOnLocation(tafList);
4358
+ return sortedListOnLocation.reduce(function (sortedTafList, tafFromBackend) {
4359
+ var taf = tafFromBackend.taf;
4360
+ var timeSlot = getTafTimeSlot(taf.baseTime, taf.location, taf.status);
4361
+
4362
+ if (timeSlot === 'EXPIRED') {
4363
+ sortedTafList.expired.push(tafFromBackend);
4364
+ } else if (timeSlot === 'ACTIVE') {
4365
+ sortedTafList.current.push(tafFromBackend);
4366
+ } else {
4367
+ sortedTafList.upcoming.push(tafFromBackend);
4368
+ }
4253
4369
 
4254
- /* *
4255
- * Licensed under the Apache License, Version 2.0 (the "License");
4256
- * you may not use this file except in compliance with the License.
4257
- * You may obtain a copy of the License at
4258
- *
4259
- * http://www.apache.org/licenses/LICENSE-2.0
4260
- *
4261
- * Unless required by applicable law or agreed to in writing, software
4262
- * distributed under the License is distributed on an "AS IS" BASIS,
4263
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4264
- * See the License for the specific language governing permissions and
4265
- * limitations under the License.
4266
- *
4267
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4268
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4269
- * */
4370
+ return sortedTafList;
4371
+ }, {
4372
+ current: [],
4373
+ upcoming: [],
4374
+ expired: []
4375
+ });
4376
+ };
4377
+ var muiTabA11yProps = function muiTabA11yProps(index) {
4378
+ return {
4379
+ id: "simple-tab-" + index,
4380
+ 'aria-controls': "simple-tabpanel-" + index
4381
+ };
4382
+ };
4270
4383
 
4271
- var TafFormDialog = function TafFormDialog(_a) {
4272
- var open = _a.open,
4273
- toggleFormDialog = _a.toggleFormDialog,
4274
- tafFromBackend = _a.tafFromBackend,
4275
- children = _a.children,
4276
- _b = _a.alertBanner,
4277
- alertBanner = _b === void 0 ? null : _b,
4278
- onFormAction = _a.onFormAction;
4279
- var taf = tafFromBackend ? tafFromBackend.taf : null;
4280
- var locationSettings = useTafSettings(tafConfig).locations;
4281
- return /*#__PURE__*/React__default["default"].createElement(ContentDialog, {
4282
- open: open,
4283
- toggleDialogStatus: toggleFormDialog,
4284
- titleComponent: /*#__PURE__*/React__default["default"].createElement(TafListRow, {
4285
- taf: taf,
4286
- listType: getListType(taf, locationSettings)
4287
- }),
4288
- alertBanner: alertBanner,
4289
- onFormAction: onFormAction
4290
- }, children);
4384
+ var EditIcon = function EditIcon(props) {
4385
+ var theme = material.useTheme();
4386
+ return /*#__PURE__*/React__namespace.createElement(material.SvgIcon, __assign({}, props), /*#__PURE__*/React__namespace.createElement("g", null, /*#__PURE__*/React__namespace.createElement("path", {
4387
+ d: "m8.332 17.09-.005.001-2.652.604.956-2.542.001-.001.001-.001.857-.744 1.69 1.945-.848.738zm.71.815L20.932 7.577 17.823 4 5.933 14.329l-.01.008.005.005L4.173 19l4.857-1.09-.004-.02.019.02-.002-.005z",
4388
+ fillRule: "evenodd",
4389
+ fill: "" + theme.palette.geowebColors.buttons.tertiary["default"].color
4390
+ })));
4391
+ };
4392
+
4393
+ var StatusIcon = function StatusIcon(_a) {
4394
+ var timeSlot = _a.timeSlot,
4395
+ status = _a.status;
4396
+
4397
+ if (status === 'NEW') {
4398
+ return null;
4399
+ }
4400
+
4401
+ if (status === 'EXPIRED') {
4402
+ return /*#__PURE__*/React__namespace.createElement(iconsMaterial.Schedule, {
4403
+ "data-testid": "status-expired",
4404
+ fontSize: "small",
4405
+ sx: {
4406
+ transform: 'scaleX(-1)',
4407
+ color: 'geowebColors.buttons.tertiary.disabled.color'
4408
+ }
4409
+ });
4410
+ }
4411
+
4412
+ if (status === 'CANCELLED') {
4413
+ return /*#__PURE__*/React__namespace.createElement(DoDisturbIcon__default["default"], {
4414
+ "data-testid": "status-cancelled",
4415
+ fontSize: "small",
4416
+ sx: {
4417
+ color: 'geowebColors.captions.captionError.rgba'
4418
+ }
4419
+ });
4420
+ }
4421
+
4422
+ if (status === 'DRAFT' || status === 'DRAFT_CORRECTED' || status === 'DRAFT_AMENDED') {
4423
+ return /*#__PURE__*/React__namespace.createElement(EditIcon, {
4424
+ "data-testid": "status-draft"
4425
+ });
4426
+ }
4427
+
4428
+ return timeSlot === 'ACTIVE' ? /*#__PURE__*/React__namespace.createElement(iconsMaterial.CheckCircle, {
4429
+ "data-testid": "status-active",
4430
+ fontSize: "small",
4431
+ sx: {
4432
+ color: 'geowebColors.functional.success'
4433
+ }
4434
+ }) : /*#__PURE__*/React__namespace.createElement(iconsMaterial.Schedule, {
4435
+ "data-testid": "status-upcoming",
4436
+ fontSize: "small",
4437
+ sx: {
4438
+ color: 'geowebColors.functional.success'
4439
+ }
4440
+ });
4291
4441
  };
4292
4442
 
4293
4443
  /* *
@@ -4303,311 +4453,319 @@
4303
4453
  * See the License for the specific language governing permissions and
4304
4454
  * limitations under the License.
4305
4455
  *
4306
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4307
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4456
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4457
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4308
4458
  * */
4309
- var useStyles$4 = makeStyles__default["default"]({
4310
- actionButtons: {
4311
- paddingRight: '98px',
4312
- paddingTop: '40px',
4313
- paddingBottom: '16px'
4314
- }
4315
- });
4316
4459
 
4317
- var TafListButtons = function TafListButtons(_a) {
4318
- var uuid = _a.uuid,
4319
- canBe = _a.canBe,
4320
- onClickTafActionButton = _a.onClickTafActionButton;
4321
- var classes = useStyles$4();
4322
- return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4323
- container: true,
4324
- alignItems: "center",
4325
- justifyContent: "flex-end",
4326
- "data-testid": "taflist-canbebuttons",
4327
- spacing: 1,
4328
- className: classes.actionButtons
4329
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4330
- item: true
4331
- }, canBe.includes('CANCELLED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
4332
- "data-testid": "canceltaf",
4333
- variant: "outlined",
4334
- color: "secondary",
4335
- onClick: function onClick() {
4336
- return onClickTafActionButton(uuid, 'CANCEL');
4460
+ var TacContainer = function TacContainer(_a) {
4461
+ var taf = _a.taf,
4462
+ _b = _a.isActive,
4463
+ isActive = _b === void 0 ? false : _b;
4464
+ var api$1 = api.useApiContext().api;
4465
+
4466
+ var _c = __read(useTACGenerator(taf, api$1.getTAC), 2),
4467
+ TAC = _c[0],
4468
+ retrieveTAC = _c[1];
4469
+
4470
+ var status = taf.status,
4471
+ location = taf.location,
4472
+ baseTime = taf.baseTime;
4473
+ var locationLabel = getLocationSetting(location).label;
4474
+ var timeSlot = getTafTimeSlot(baseTime, location, status);
4475
+ React__default["default"].useEffect(function () {
4476
+ if (isActive) {
4477
+ retrieveTAC(taf);
4337
4478
  }
4338
- }, "Cancel")), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4339
- item: true
4340
- }, canBe.includes('CORRECTED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
4341
- "data-testid": "correctaf",
4342
- variant: "outlined",
4343
- color: "secondary",
4344
- onClick: function onClick() {
4345
- return onClickTafActionButton(uuid, 'CORRECT');
4479
+ }, [taf, isActive, retrieveTAC]);
4480
+ return /*#__PURE__*/React__default["default"].createElement(material.Box, {
4481
+ sx: {
4482
+ marginBottom: '20px'
4483
+ },
4484
+ "data-location": location,
4485
+ className: isActive ? 'active' : null
4486
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
4487
+ sx: {
4488
+ display: 'flex',
4489
+ alignItems: 'center',
4490
+ marginBottom: '2px'
4346
4491
  }
4347
- }, "Correct")), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4348
- item: true
4349
- }, canBe.includes('AMENDED') && /*#__PURE__*/React__default["default"].createElement(material.Button, {
4350
- "data-testid": "amendtaf",
4351
- variant: "outlined",
4352
- color: "secondary",
4353
- onClick: function onClick() {
4354
- return onClickTafActionButton(uuid, 'AMEND');
4492
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
4493
+ sx: {
4494
+ width: 20,
4495
+ height: 20,
4496
+ display: 'flex',
4497
+ marginRight: '6px'
4355
4498
  }
4356
- }, "Amend")));
4499
+ }, /*#__PURE__*/React__default["default"].createElement(StatusIcon, {
4500
+ timeSlot: timeSlot,
4501
+ status: status
4502
+ })), /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4503
+ sx: __assign({
4504
+ lineHeight: 1
4505
+ }, isActive && {
4506
+ backgroundColor: 'geowebColors.functional.warningHighlight.rgba',
4507
+ padding: '0 2px',
4508
+ marginLeft: '-2px'
4509
+ })
4510
+ }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4511
+ sx: {
4512
+ fontSize: '12px',
4513
+ color: 'geowebColors.captions.captionInformation.rgba'
4514
+ },
4515
+ "data-testid": "tafLocation",
4516
+ component: "span"
4517
+ }, location), /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4518
+ sx: {
4519
+ fontSize: '12px',
4520
+ marginLeft: '10px'
4521
+ },
4522
+ "data-testid": "tafLocationLabel",
4523
+ component: "span"
4524
+ }, locationLabel))), /*#__PURE__*/React__default["default"].createElement(material.Box, {
4525
+ sx: {
4526
+ fontSize: '12px',
4527
+ letterSpacing: '0.4px',
4528
+ color: 'geowebColors.captions.captionStatus.rgba'
4529
+ }
4530
+ }, TAC.split('\n').map(function (line) {
4531
+ return /*#__PURE__*/React__default["default"].createElement(material.Box, {
4532
+ component: "span",
4533
+ key: line,
4534
+ sx: {
4535
+ display: 'inline-block'
4536
+ }
4537
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
4538
+ component: "span",
4539
+ sx: __assign({
4540
+ display: 'inline',
4541
+ boxDecorationBreak: 'clone',
4542
+ WebkitBoxDecorationBreak: 'clone'
4543
+ }, isActive && {
4544
+ backgroundColor: 'geowebColors.functional.warningHighlight.rgba'
4545
+ })
4546
+ }, line));
4547
+ })));
4357
4548
  };
4358
4549
 
4359
- var useStyles$3 = makeStyles__default["default"]({
4360
- accordion: {
4361
- marginBottom: '5px'
4362
- },
4363
- formPadding: {
4364
- padding: '8px'
4365
- },
4366
- expandIcon: {
4367
- color: '#0075a9'
4368
- }
4369
- });
4550
+ var TacOverview = function TacOverview(_a) {
4551
+ var _b = _a.upcomingTafs,
4552
+ upcomingTafs = _b === void 0 ? [] : _b,
4553
+ _c = _a.currentTafs,
4554
+ currentTafs = _c === void 0 ? [] : _c,
4555
+ _d = _a.expiredTafs,
4556
+ expiredTafs = _d === void 0 ? [] : _d,
4557
+ _e = _a.hideTitle,
4558
+ hideTitle = _e === void 0 ? false : _e,
4559
+ _f = _a.activeTaf,
4560
+ activeTaf = _f === void 0 ? null : _f;
4561
+
4562
+ var _g = __read(React__default["default"].useState(0), 2),
4563
+ activeTab = _g[0],
4564
+ setActiveTab = _g[1];
4565
+
4566
+ var scrollRef = React__default["default"].useRef(null);
4567
+ var tabs = [{
4568
+ title: 'Upcoming',
4569
+ tafList: upcomingTafs
4570
+ }, {
4571
+ title: 'Current & Expired',
4572
+ tafList: sortTafsOnLocation(__spreadArray(__spreadArray([], __read(currentTafs)), __read(expiredTafs)))
4573
+ }];
4574
+ var activeLocation = (activeTaf === null || activeTaf === void 0 ? void 0 : activeTaf.taf.location) || null;
4370
4575
 
4371
- var fromStatusToAction = function fromStatusToAction(tafStatus) {
4372
- switch (tafStatus) {
4373
- case 'DRAFT':
4374
- return 'DRAFT';
4576
+ var isActiveLocation = function isActiveLocation(location) {
4577
+ return location === activeLocation;
4578
+ };
4375
4579
 
4376
- case 'DRAFT_AMENDED':
4377
- return 'DRAFT_AMEND';
4580
+ var scrollToPosition = React__default["default"].useCallback(function () {
4581
+ if (!scrollRef.current) return;
4582
+ var containerTop = scrollRef.current.getBoundingClientRect().top;
4583
+ var firstLocation = scrollRef.current.querySelector("[data-location=\"" + activeLocation + "\"]");
4584
+ var paddingTop = parseInt(getComputedStyle(scrollRef.current).paddingTop, 10);
4585
+ var newScrollPosition = (firstLocation === null || firstLocation === void 0 ? void 0 : firstLocation.getBoundingClientRect().top) - containerTop + scrollRef.current.scrollTop - paddingTop;
4586
+ scrollRef.current.scrollTo(newScrollPosition, newScrollPosition);
4587
+ }, [activeLocation]);
4588
+
4589
+ var resetScrollPosition = function resetScrollPosition() {
4590
+ return scrollRef.current.scrollTo(0, 0);
4591
+ };
4378
4592
 
4379
- case 'DRAFT_CORRECTED':
4380
- return 'DRAFT_CORRECT';
4593
+ var onChangeTab = function onChangeTab(_event, newValue) {
4594
+ setActiveTab(newValue);
4595
+ resetScrollPosition();
4596
+ };
4381
4597
 
4382
- default:
4383
- return 'NEW';
4384
- }
4598
+ React__default["default"].useEffect(function () {
4599
+ if (activeLocation) {
4600
+ scrollToPosition();
4601
+ }
4602
+ }, [activeLocation, scrollToPosition]);
4603
+ React__default["default"].useEffect(function () {
4604
+ var SCROLL_DELAY = 1000;
4605
+ var timer = setTimeout(function () {
4606
+ scrollToPosition();
4607
+ }, SCROLL_DELAY);
4608
+ return function () {
4609
+ clearTimeout(timer);
4610
+ };
4611
+ }, [activeTab, scrollToPosition]);
4612
+ return /*#__PURE__*/React__default["default"].createElement(material.Card, {
4613
+ variant: "outlined",
4614
+ sx: {
4615
+ maxHeight: '100%',
4616
+ overflow: 'hidden',
4617
+ display: 'flex',
4618
+ flexDirection: 'column'
4619
+ }
4620
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
4621
+ sx: {
4622
+ zIndex: 1
4623
+ }
4624
+ }, !hideTitle && /*#__PURE__*/React__default["default"].createElement(TafHeader, {
4625
+ title: "TAC Overview"
4626
+ }), /*#__PURE__*/React__default["default"].createElement(material.Tabs, {
4627
+ value: activeTab,
4628
+ onChange: onChangeTab,
4629
+ "aria-label": "tabs"
4630
+ }, tabs.map(function (tab, index) {
4631
+ return /*#__PURE__*/React__default["default"].createElement(material.Tab, __assign({
4632
+ key: tab.title,
4633
+ sx: {
4634
+ flexGrow: 1
4635
+ },
4636
+ label: tab.title,
4637
+ "data-testid": "tab-" + index
4638
+ }, muiTabA11yProps(index)));
4639
+ }))), /*#__PURE__*/React__default["default"].createElement(material.Box, {
4640
+ ref: scrollRef,
4641
+ sx: {
4642
+ padding: '10px',
4643
+ maxHeight: '100%',
4644
+ overflow: 'auto'
4645
+ }
4646
+ }, tabs.map(function (tab, index) {
4647
+ return /*#__PURE__*/React__default["default"].createElement(TabPanel, {
4648
+ key: tab.title,
4649
+ value: activeTab,
4650
+ index: index
4651
+ }, tab.tafList.map(function (_a) {
4652
+ var taf = _a.taf;
4653
+ return /*#__PURE__*/React__default["default"].createElement(TacContainer, {
4654
+ key: taf.uuid,
4655
+ taf: taf,
4656
+ isActive: isActiveLocation(taf.location)
4657
+ });
4658
+ }));
4659
+ })));
4385
4660
  };
4386
4661
 
4387
- var TafListAccordion = function TafListAccordion(_a) {
4388
- var tafListItem = _a.tafListItem,
4389
- listType = _a.listType,
4390
- _b = _a.errorCancelTaf,
4391
- errorCancelTaf = _b === void 0 ? [] : _b,
4392
- onClickTafActionButton = _a.onClickTafActionButton;
4393
- var classes = useStyles$3();
4394
- var status = tafListItem.taf.status;
4395
- var api$1 = api.useApiContext().api;
4662
+ var TacOverviewIcon = /*#__PURE__*/React__namespace.createElement(material.SvgIcon, null, /*#__PURE__*/React__namespace.createElement("path", {
4663
+ d: "M3 3h4v4H3V3zm0 7h4v4H3v-4zm0 7h4v4H3v-4zm7-14h11v4H10V3zm0 7h11v4H10v-4zm0 7h11v4H10v-4z"
4664
+ }));
4396
4665
 
4397
- var _c = __read(useTACGenerator(tafListItem.taf, api$1.getTAC), 2),
4398
- TAC = _c[0],
4399
- requestTAC = _c[1];
4666
+ var TacOverviewMobile = function TacOverviewMobile(_a) {
4667
+ var upcomingTafs = _a.upcomingTafs,
4668
+ currentTafs = _a.currentTafs,
4669
+ expiredTafs = _a.expiredTafs,
4670
+ activeTaf = _a.activeTaf,
4671
+ _b = _a.defaultOpen,
4672
+ defaultOpen = _b === void 0 ? false : _b;
4400
4673
 
4401
- React__default["default"].useEffect(function () {
4402
- // only re-retrieve TAC if draft state
4403
- if (tafListItem.taf.status === 'DRAFT' || tafListItem.taf.status === 'DRAFT_AMENDED' || tafListItem.taf.status === 'DRAFT_CORRECTED') {
4404
- requestTAC(tafListItem.taf);
4405
- } // eslint-disable-next-line react-hooks/exhaustive-deps
4674
+ var _c = __read(React__namespace.useState(defaultOpen), 2),
4675
+ isOpen = _c[0],
4676
+ toggleOpen = _c[1];
4677
+
4678
+ var onClose = function onClose() {
4679
+ return toggleOpen(false);
4680
+ };
4406
4681
 
4407
- }, [tafListItem.taf]);
4408
- var popOut = status === 'NEW' || status === 'DRAFT' || status === 'DRAFT_AMENDED' || status === 'DRAFT_CORRECTED';
4409
- return /*#__PURE__*/React__default["default"].createElement(material.Accordion, __assign({
4410
- "data-testid": "tafListItem",
4411
- className: classes.accordion
4412
- }, popOut ? {
4413
- expanded: false
4414
- } : {}, {
4682
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(shared.ToolButton, {
4683
+ active: isOpen,
4415
4684
  onClick: function onClick() {
4416
- if (popOut) {
4417
- onClickTafActionButton(tafListItem.taf.uuid, fromStatusToAction(tafListItem.taf.status));
4418
- }
4685
+ return toggleOpen(true);
4419
4686
  },
4420
- TransitionProps: {
4421
- unmountOnExit: true
4687
+ "data-testid": "tac-overview-mobile-button",
4688
+ sx: {
4689
+ display: {
4690
+ xs: 'inline-flex',
4691
+ sm: 'none'
4692
+ },
4693
+ position: 'absolute',
4694
+ right: '8px',
4695
+ top: '30px'
4422
4696
  }
4423
- }), /*#__PURE__*/React__default["default"].createElement(material.AccordionSummary, {
4424
- "data-testid": "tafListSectionAccordionSummary",
4425
- expandIcon: popOut ? /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
4426
- title: "Popout to edit",
4427
- className: classes.expandIcon
4428
- }, /*#__PURE__*/React__default["default"].createElement(iconsMaterial.OpenInNew, {
4429
- "data-testid": "popOutIcon",
4430
- fontSize: "small"
4431
- })) : /*#__PURE__*/React__default["default"].createElement(iconsMaterial.ExpandMore, {
4432
- className: classes.expandIcon,
4433
- "data-testid": "expandIcon"
4434
- })
4435
- }, /*#__PURE__*/React__default["default"].createElement(TafListRow, {
4436
- taf: tafListItem.taf,
4437
- listType: listType,
4438
- TAC: TAC,
4439
- showTac: true
4440
- })), /*#__PURE__*/React__default["default"].createElement(material.AccordionDetails, null, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4441
- container: true,
4442
- direction: "column"
4443
- }, errorCancelTaf.length > 0 && errorCancelTaf.find(function (uuid) {
4444
- return uuid === tafListItem.taf.uuid;
4445
- }) && /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4446
- severity: "error",
4447
- title: "Cancelling this TAF failed, please try again",
4448
- dataTestId: "tafList-cancelAlert"
4449
- }), /*#__PURE__*/React__default["default"].createElement("div", {
4450
- className: classes.formPadding
4451
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4452
- item: true
4453
- }, /*#__PURE__*/React__default["default"].createElement(TafFormWrapper, {
4454
- tafFromBackend: tafListItem,
4455
- mode: "view",
4456
- TAC: TAC
4457
- })), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4458
- item: true
4459
- }, /*#__PURE__*/React__default["default"].createElement(TafListButtons, {
4460
- canBe: tafListItem.canbe,
4461
- uuid: tafListItem.taf.uuid,
4462
- onClickTafActionButton: onClickTafActionButton
4463
- }))))));
4697
+ }, TacOverviewIcon), /*#__PURE__*/React__namespace.createElement(material.Dialog, {
4698
+ open: isOpen,
4699
+ onClose: onClose,
4700
+ PaperProps: {
4701
+ sx: {
4702
+ margin: 2,
4703
+ width: '100%',
4704
+ height: '100%'
4705
+ }
4706
+ },
4707
+ "data-testid": "tac-overview-mobile"
4708
+ }, /*#__PURE__*/React__namespace.createElement(shared.ToolHeader, {
4709
+ title: "TAC Overview",
4710
+ size: "small",
4711
+ isDraggable: false,
4712
+ onClose: onClose
4713
+ }), /*#__PURE__*/React__namespace.createElement(TacOverview, {
4714
+ upcomingTafs: upcomingTafs,
4715
+ currentTafs: currentTafs,
4716
+ expiredTafs: expiredTafs,
4717
+ activeTaf: activeTaf,
4718
+ hideTitle: true
4719
+ })));
4464
4720
  };
4465
4721
 
4466
- /* *
4467
- * Licensed under the Apache License, Version 2.0 (the "License");
4468
- * you may not use this file except in compliance with the License.
4469
- * You may obtain a copy of the License at
4470
- *
4471
- * http://www.apache.org/licenses/LICENSE-2.0
4472
- *
4473
- * Unless required by applicable law or agreed to in writing, software
4474
- * distributed under the License is distributed on an "AS IS" BASIS,
4475
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4476
- * See the License for the specific language governing permissions and
4477
- * limitations under the License.
4478
- *
4479
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4480
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4481
- * */
4482
- var useStyles$2 = makeStyles__default["default"]({
4483
- listHeaders: {
4484
- color: '#9d9d9d'
4485
- },
4486
- formPadding: {
4487
- padding: '8px'
4488
- },
4489
- paperButton: {
4490
- width: '100%'
4491
- }
4492
- });
4493
-
4494
- var TafListSection = function TafListSection(_a) {
4495
- var tafList = _a.tafList,
4496
- title = _a.title,
4497
- listType = _a.listType,
4498
- _b = _a.errorCancelTaf,
4499
- errorCancelTaf = _b === void 0 ? [] : _b,
4500
- onClickTafActionButton = _a.onClickTafActionButton;
4501
- var classes = useStyles$2();
4502
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
4503
- variant: "subtitle2",
4504
- className: classes.listHeaders
4505
- }, title), /*#__PURE__*/React__default["default"].createElement("div", {
4506
- "data-testid": "tafList" + listType
4507
- }, tafList.map(function (tafListItem) {
4508
- return /*#__PURE__*/React__default["default"].createElement(TafListAccordion, {
4509
- key: tafListItem.taf.uuid + "-" + tafListItem.taf.status,
4510
- tafListItem: tafListItem,
4511
- listType: listType,
4512
- errorCancelTaf: errorCancelTaf,
4513
- onClickTafActionButton: onClickTafActionButton
4514
- });
4515
- })));
4722
+ var formatBaseTime = function formatBaseTime(time) {
4723
+ return time.format('HH:mm DD MMM');
4516
4724
  };
4517
4725
 
4518
- var useStyles$1 = makeStyles__default["default"]({
4519
- accordion: {
4520
- marginBottom: '5px'
4521
- },
4522
- listHeaders: {
4523
- color: '#9d9d9d'
4524
- },
4525
- listBody: {
4526
- width: '100%',
4527
- minHeight: '600px'
4726
+ var TopTabs = function TopTabs(_a) {
4727
+ var timeSlot = _a.timeSlot,
4728
+ _b = _a.onChangeTimeSlot,
4729
+ onChangeTimeSlot = _b === void 0 ? function () {} : _b,
4730
+ tafFromBackend = _a.tafFromBackend;
4731
+
4732
+ if (!tafFromBackend) {
4733
+ return null;
4528
4734
  }
4529
- });
4530
4735
 
4531
- var TafList = function TafList(_a) {
4532
- var e_1, _b;
4736
+ var activeTab = timeSlot === 'UPCOMING' ? 0 : 1;
4533
4737
 
4534
- var tafList = _a.tafList,
4535
- isLoading = _a.isLoading,
4536
- error = _a.error,
4537
- _c = _a.errorCancelTaf,
4538
- errorCancelTaf = _c === void 0 ? [] : _c,
4539
- onClickTafActionButton = _a.onClickTafActionButton;
4540
- var classes = useStyles$1();
4541
- var locationSettings = useTafSettings(tafConfig).locations;
4542
- var upcomingTafs = [];
4543
- var currentTafs = [];
4544
- var expiredTafs = [];
4545
-
4546
- if (tafList) {
4547
- try {
4548
- for (var tafList_1 = __values(tafList), tafList_1_1 = tafList_1.next(); !tafList_1_1.done; tafList_1_1 = tafList_1.next()) {
4549
- var taf = tafList_1_1.value;
4550
- var now = moment__default["default"].utc();
4551
- var baseTime = moment__default["default"].utc(taf.taf.baseTime);
4552
- var activityPeriod = locationSettings[taf.taf.location].activity_period;
4553
- var nextBaseTime = moment__default["default"].utc(taf.taf.baseTime).add(activityPeriod, 'hours');
4554
-
4555
- if (taf.taf.status === 'EXPIRED') {
4556
- expiredTafs.push(taf);
4557
- } else if (baseTime < now && nextBaseTime > now) {
4558
- currentTafs.push(taf);
4559
- } else {
4560
- upcomingTafs.push(taf);
4561
- }
4562
- }
4563
- } catch (e_1_1) {
4564
- e_1 = {
4565
- error: e_1_1
4566
- };
4567
- } finally {
4568
- try {
4569
- if (tafList_1_1 && !tafList_1_1.done && (_b = tafList_1["return"])) _b.call(tafList_1);
4570
- } finally {
4571
- if (e_1) throw e_1.error;
4572
- }
4573
- }
4574
- }
4738
+ var _c = getBaseTime(tafFromBackend.taf.baseTime, tafFromBackend.taf.location),
4739
+ currentBaseTime = _c.currentBaseTime,
4740
+ nextBaseTime = _c.nextBaseTime;
4575
4741
 
4576
- return /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4577
- container: true,
4578
- direction: "column",
4579
- alignItems: "stretch"
4580
- }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4581
- item: true,
4582
- className: classes.listBody
4583
- }, error && /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4584
- severity: "error",
4585
- title: "An error has occurred while retrieving the list, please try again",
4586
- info: error.message ? error.message : '',
4587
- dataTestId: "tafList-alert"
4588
- }), tafList && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4589
- title: "Upcoming",
4590
- listType: "UPCOMING",
4591
- tafList: upcomingTafs,
4592
- errorCancelTaf: errorCancelTaf,
4593
- onClickTafActionButton: onClickTafActionButton
4594
- }), /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4595
- title: "Current time slot",
4596
- listType: "ACTIVE",
4597
- tafList: currentTafs,
4598
- errorCancelTaf: errorCancelTaf,
4599
- onClickTafActionButton: onClickTafActionButton
4600
- }), /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4601
- title: "Expired",
4602
- listType: "EXPIRED",
4603
- tafList: expiredTafs,
4604
- errorCancelTaf: errorCancelTaf,
4605
- onClickTafActionButton: onClickTafActionButton
4606
- })), isLoading && /*#__PURE__*/React__default["default"].createElement(material.Skeleton, {
4607
- "data-testid": "tafList-skeleton",
4608
- variant: "rectangular",
4609
- height: "660px"
4610
- })));
4742
+ var tabs = [{
4743
+ title: "Upcoming " + formatBaseTime(nextBaseTime),
4744
+ timeSlot: 'UPCOMING'
4745
+ }, {
4746
+ title: "Current " + formatBaseTime(currentBaseTime),
4747
+ timeSlot: 'ACTIVE'
4748
+ }];
4749
+
4750
+ var onChangeTab = function onChangeTab(_event, newValue) {
4751
+ onChangeTimeSlot(tabs[newValue].timeSlot);
4752
+ };
4753
+
4754
+ return /*#__PURE__*/React__default["default"].createElement(material.Tabs, {
4755
+ value: activeTab,
4756
+ onChange: onChangeTab,
4757
+ "aria-label": "timeslot-tabs",
4758
+ variant: "fullWidth"
4759
+ }, tabs.map(function (tab, index) {
4760
+ return /*#__PURE__*/React__default["default"].createElement(material.Tab, __assign({
4761
+ key: tab.title,
4762
+ label: tab.title,
4763
+ "data-testid": "tab-" + index,
4764
+ sx: {
4765
+ fontSize: 16
4766
+ }
4767
+ }, muiTabA11yProps(index)));
4768
+ }));
4611
4769
  };
4612
4770
 
4613
4771
  /* *
@@ -4623,189 +4781,270 @@
4623
4781
  * See the License for the specific language governing permissions and
4624
4782
  * limitations under the License.
4625
4783
  *
4626
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4627
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
4784
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4785
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
4628
4786
  * */
4629
- var useStyles = makeStyles__default["default"]({
4630
- backdrop: {
4631
- zIndex: 1500,
4632
- color: '#fff'
4633
- }
4634
- });
4635
-
4636
- var Spinner = function Spinner() {
4637
- var classes = useStyles();
4638
- return /*#__PURE__*/React__default["default"].createElement(material.Backdrop, {
4639
- open: true,
4640
- className: classes.backdrop
4641
- }, /*#__PURE__*/React__default["default"].createElement(material.CircularProgress, {
4642
- "data-testid": "spinner",
4643
- color: "inherit"
4644
- }));
4645
- };
4646
4787
 
4647
- var useTimeoutCancelError = function useTimeoutCancelError(pollingInterval) {
4648
- if (pollingInterval === void 0) {
4649
- pollingInterval = 10000;
4650
- }
4651
-
4652
- var _a = __read(React__default["default"].useState([]), 2),
4653
- errorCancelTaf = _a[0],
4654
- setErrorCancelTaf = _a[1];
4655
-
4656
- React__default["default"].useEffect(function () {
4657
- var cancelErrorMessageHandler = errorCancelTaf.length > 0 ? setTimeout(function () {
4658
- if (errorCancelTaf.length > 0) {
4659
- setErrorCancelTaf(errorCancelTaf.slice(1));
4788
+ var LocationTabs = function LocationTabs(_a) {
4789
+ var tafList = _a.tafList,
4790
+ _b = _a.activeIndex,
4791
+ activeIndex = _b === void 0 ? 0 : _b,
4792
+ _c = _a.onChangeTab,
4793
+ onChangeTab = _c === void 0 ? function () {} : _c,
4794
+ timeSlot = _a.timeSlot;
4795
+ return /*#__PURE__*/React__namespace.createElement(material.MenuList, {
4796
+ "data-testid": "location-tabs",
4797
+ sx: {
4798
+ paddingTop: '32px'
4799
+ }
4800
+ }, tafList.map(function (_a, index) {
4801
+ var taf = _a.taf;
4802
+ return /*#__PURE__*/React__namespace.createElement(material.MenuItem, {
4803
+ key: taf.uuid,
4804
+ selected: index === activeIndex,
4805
+ sx: {
4806
+ backgroundColor: 'geowebColors.cards.cardContainer',
4807
+ borderColor: 'geowebColors.cards.cardContainerBorder',
4808
+ borderWidth: '1px',
4809
+ borderStyle: 'solid',
4810
+ margin: '0 0 4px',
4811
+ height: '56px',
4812
+ justifyContent: 'center',
4813
+ ':after': {
4814
+ background: 'none!important'
4815
+ },
4816
+ '&.Mui-selected': {
4817
+ backgroundColor: 'geowebColors.cards.cardContainer',
4818
+ marginRight: '-17px',
4819
+ borderRight: '0px',
4820
+ zIndex: 1
4821
+ }
4822
+ },
4823
+ onClick: function onClick() {
4824
+ return onChangeTab(index);
4660
4825
  }
4661
- }, pollingInterval) : null;
4662
- return function () {
4663
- if (cancelErrorMessageHandler !== null) {
4664
- clearTimeout(cancelErrorMessageHandler);
4826
+ }, /*#__PURE__*/React__namespace.createElement(Box__default["default"], {
4827
+ component: "span",
4828
+ sx: {
4829
+ fontSize: '12px',
4830
+ fontWeight: '500',
4831
+ letterSpacing: '0.09px',
4832
+ '& + svg': {
4833
+ position: 'absolute',
4834
+ bottom: '1px',
4835
+ width: '20px',
4836
+ height: '20px'
4837
+ }
4665
4838
  }
4666
- }; // eslint-disable-next-line react-hooks/exhaustive-deps
4667
- }, [errorCancelTaf]);
4668
- return [errorCancelTaf, setErrorCancelTaf];
4669
- };
4670
- var getSelectedTaf = function getSelectedTaf(selectedTafId, tafList) {
4671
- if (tafList === null) return undefined;
4672
- return tafList.find(function (element) {
4673
- return element.taf.uuid === selectedTafId;
4674
- });
4839
+ }, taf.location), /*#__PURE__*/React__namespace.createElement(StatusIcon, {
4840
+ timeSlot: timeSlot,
4841
+ status: taf.status
4842
+ }));
4843
+ }));
4675
4844
  };
4676
4845
 
4677
- var TafWrapper = function TafWrapper() {
4678
- var api$1 = api.useApiContext().api;
4679
- var confirmDialog = shared.useConfirmationDialog();
4680
-
4681
- var _a = __read(React__default["default"].useState(false), 2),
4682
- isTafDialogOpen = _a[0],
4683
- setTafDialogOpen = _a[1];
4684
-
4685
- var _b = __read(React__default["default"].useState(null), 2),
4686
- selectedTafId = _b[0],
4687
- setselectedTafId = _b[1];
4846
+ var Spinner = function Spinner(props) {
4847
+ return /*#__PURE__*/React__default["default"].createElement(material.Backdrop, __assign({
4848
+ open: true
4849
+ }, props), /*#__PURE__*/React__default["default"].createElement(material.CircularProgress, {
4850
+ "data-testid": "spinner",
4851
+ color: "inherit"
4852
+ }));
4853
+ };
4688
4854
 
4689
- var _c = __read(React__default["default"].useState(null), 2),
4690
- tafDialogAction = _c[0],
4691
- setTafDialogAction = _c[1];
4855
+ var fromActionToStatus = function fromActionToStatus(tafAction) {
4856
+ switch (tafAction) {
4857
+ case 'DRAFT':
4858
+ return 'DRAFT';
4692
4859
 
4693
- var _d = __read(React__default["default"].useState(false), 2),
4694
- errorPostMessage = _d[0],
4695
- setErrorPostMessage = _d[1];
4860
+ case 'DRAFT_AMEND':
4861
+ return 'DRAFT_AMENDED';
4696
4862
 
4697
- var _e = __read(React__default["default"].useState(''), 2),
4698
- errorPostMessageText = _e[0],
4699
- setErrorPostMessageText = _e[1];
4863
+ case 'DRAFT_CORRECT':
4864
+ return 'DRAFT_CORRECTED';
4700
4865
 
4701
- var _f = __read(React__default["default"].useState(false), 2),
4702
- showSpinner = _f[0],
4703
- setSpinner = _f[1]; // clear error message for cancel after 10 seconds
4866
+ case 'PUBLISH':
4867
+ return 'PUBLISHED';
4704
4868
 
4869
+ case 'AMEND':
4870
+ return 'AMENDED';
4705
4871
 
4706
- var _g = __read(useTimeoutCancelError(), 2),
4707
- errorCancelTaf = _g[0],
4708
- setErrorCancelTaf = _g[1]; // Retrieve list of tafs
4872
+ case 'CORRECT':
4873
+ return 'CORRECTED';
4709
4874
 
4875
+ case 'CANCEL':
4876
+ return 'CANCELLED';
4710
4877
 
4711
- var _h = api.useApi(api$1.getTafList),
4712
- errorList = _h.error,
4713
- isLoadingList = _h.isLoading,
4714
- tafList = _h.result,
4715
- fetchNewTafList = _h.fetchApiData;
4878
+ default:
4879
+ return 'NEW';
4880
+ }
4881
+ };
4716
4882
 
4717
- var getNewTafList = function getNewTafList() {
4718
- fetchNewTafList({});
4719
- };
4883
+ var TafPanel = function TafPanel(_a) {
4884
+ var tafFromBackend = _a.tafFromBackend,
4885
+ activeTafIndex = _a.activeTafIndex,
4886
+ index = _a.index,
4887
+ _b = _a.onPostTaf,
4888
+ onPostTaf = _b === void 0 ? function () {} : _b;
4889
+ var api$1 = api.useApiContext().api;
4720
4890
 
4721
- shared.usePoller([tafList, errorList], getNewTafList);
4891
+ var _c = __read(React__default["default"].useState(false), 2),
4892
+ isLoading = _c[0],
4893
+ setLoading = _c[1];
4722
4894
 
4723
- var toggleTafDialog = function toggleTafDialog() {
4724
- // Refresh list on closing dialog
4725
- if (isTafDialogOpen === true) getNewTafList(); // Set error message back to false
4895
+ var _d = __read(React__default["default"].useState(null), 2),
4896
+ error = _d[0],
4897
+ setError = _d[1]; // removes cancelled error message
4726
4898
 
4727
- setErrorPostMessage(false);
4728
- setErrorPostMessageText('');
4729
- setTafDialogOpen(!isTafDialogOpen);
4730
- };
4731
4899
 
4732
4900
  React__default["default"].useEffect(function () {
4733
- if (selectedTafId) {
4734
- toggleTafDialog();
4735
- } // eslint-disable-next-line react-hooks/exhaustive-deps
4736
-
4737
- }, [selectedTafId]);
4738
-
4739
- var onClickTafActionButton = function onClickTafActionButton(tafUuid, action) {
4740
- if (action === 'CANCEL') {
4741
- confirmDialog({
4742
- title: 'Cancel TAF',
4743
- description: 'Are you sure you want to cancel this TAF?',
4744
- confirmLabel: 'Cancel'
4745
- }).then(function () {
4746
- var taf = getSelectedTaf(tafUuid, tafList).taf;
4747
- postTaf({
4748
- taf: taf,
4749
- changeStatusTo: 'CANCELLED'
4750
- });
4751
- });
4752
- } else if (selectedTafId === tafUuid) {
4753
- setTafDialogAction(action);
4754
- toggleTafDialog();
4755
- } else {
4756
- setTafDialogAction(action);
4757
- setselectedTafId(tafUuid);
4758
- }
4759
- };
4901
+ var cancelErrorTimeout = error && error.type === 'CANCELLED' ? setTimeout(function () {
4902
+ setError(null);
4903
+ }, 10000) : null;
4904
+ return function () {
4905
+ if (cancelErrorTimeout !== null) {
4906
+ clearTimeout(cancelErrorTimeout);
4907
+ }
4908
+ };
4909
+ }, [error]);
4760
4910
 
4761
4911
  var postTaf = function postTaf(data) {
4762
4912
  return __awaiter(void 0, void 0, void 0, function () {
4763
- var error_1;
4913
+ var error_1, newError;
4764
4914
  return __generator(this, function (_a) {
4765
4915
  switch (_a.label) {
4766
4916
  case 0:
4767
- setSpinner(true);
4768
- _a.label = 1;
4769
-
4770
- case 1:
4771
- _a.trys.push([1, 3,, 4]);
4917
+ _a.trys.push([0, 2,, 3]);
4772
4918
 
4919
+ setLoading(true);
4773
4920
  return [4
4774
4921
  /*yield*/
4775
4922
  , api$1.postTaf(data)];
4776
4923
 
4777
- case 2:
4924
+ case 1:
4778
4925
  _a.sent();
4779
4926
 
4780
- if (isTafDialogOpen) toggleTafDialog();
4781
- setSpinner(false); // fetch new taflist
4927
+ setLoading(false);
4928
+ setError(null); // callback
4782
4929
 
4783
- getNewTafList(); // If a post has succeeded remove error message
4784
-
4785
- setErrorCancelTaf([]);
4930
+ onPostTaf();
4786
4931
  return [3
4787
4932
  /*break*/
4788
- , 4];
4933
+ , 3];
4789
4934
 
4790
- case 3:
4935
+ case 2:
4791
4936
  error_1 = _a.sent();
4937
+ newError = data.changeStatusTo === 'CANCELLED' ? {
4938
+ type: 'CANCELLED',
4939
+ title: 'Cancelling this TAF failed, please try again'
4940
+ } : {
4941
+ type: 'SERVER',
4942
+ title: 'An error has occurred while saving, please try again',
4943
+ message: shared.getAxiosErrorMessage(error_1)
4944
+ };
4945
+ setError(newError);
4946
+ setLoading(false);
4947
+ throw error_1;
4948
+
4949
+ case 3:
4950
+ return [2
4951
+ /*return*/
4952
+ ];
4953
+ }
4954
+ });
4955
+ });
4956
+ };
4792
4957
 
4793
- if (data.changeStatusTo === 'CANCELLED') {
4794
- setErrorCancelTaf(__spreadArray(__spreadArray([], __read(errorCancelTaf)), [data.taf.uuid]));
4795
- } else {
4796
- setErrorPostMessage(true);
4958
+ var getViewMode = function getViewMode(status) {
4959
+ return status === 'NEW' || status === 'DRAFT' || status === 'DRAFT_AMENDED' || status === 'DRAFT_CORRECTED' ? 'edit' : 'view';
4960
+ };
4797
4961
 
4798
- if (shared.isAxiosError(error_1)) {
4799
- setErrorPostMessageText(shared.getAxiosErrorMessage(error_1));
4800
- }
4962
+ var onTafAction = function onTafAction(action, taf) {
4963
+ return __awaiter(void 0, void 0, void 0, function () {
4964
+ var _a;
4965
+
4966
+ return __generator(this, function (_b) {
4967
+ switch (_b.label) {
4968
+ case 0:
4969
+ _b.trys.push([0, 5,, 6]);
4970
+
4971
+ _a = action;
4972
+
4973
+ switch (_a) {
4974
+ case 'DRAFT':
4975
+ return [3
4976
+ /*break*/
4977
+ , 1];
4978
+
4979
+ case 'DRAFT_AMEND':
4980
+ return [3
4981
+ /*break*/
4982
+ , 1];
4983
+
4984
+ case 'DRAFT_CORRECT':
4985
+ return [3
4986
+ /*break*/
4987
+ , 1];
4988
+
4989
+ case 'PUBLISH':
4990
+ return [3
4991
+ /*break*/
4992
+ , 1];
4993
+
4994
+ case 'AMEND':
4995
+ return [3
4996
+ /*break*/
4997
+ , 1];
4998
+
4999
+ case 'CANCEL':
5000
+ return [3
5001
+ /*break*/
5002
+ , 1];
5003
+
5004
+ case 'CORRECT':
5005
+ return [3
5006
+ /*break*/
5007
+ , 1];
4801
5008
  }
4802
5009
 
4803
- setSpinner(false);
4804
5010
  return [3
4805
5011
  /*break*/
4806
- , 4];
5012
+ , 3];
5013
+
5014
+ case 1:
5015
+ // post taf
5016
+ return [4
5017
+ /*yield*/
5018
+ , postTaf({
5019
+ taf: taf,
5020
+ changeStatusTo: fromActionToStatus(action)
5021
+ })];
5022
+
5023
+ case 2:
5024
+ // post taf
5025
+ _b.sent();
5026
+
5027
+ return [2
5028
+ /*return*/
5029
+ , true];
5030
+
5031
+ case 3:
5032
+ return [2
5033
+ /*return*/
5034
+ , false];
4807
5035
 
4808
5036
  case 4:
5037
+ return [3
5038
+ /*break*/
5039
+ , 6];
5040
+
5041
+ case 5:
5042
+ _b.sent();
5043
+ return [2
5044
+ /*return*/
5045
+ , false];
5046
+
5047
+ case 6:
4809
5048
  return [2
4810
5049
  /*return*/
4811
5050
  ];
@@ -4814,97 +5053,273 @@
4814
5053
  });
4815
5054
  };
4816
5055
 
4817
- var fromActionToStatus = function fromActionToStatus(tafAction) {
4818
- switch (tafAction) {
4819
- case 'DRAFT':
4820
- return 'DRAFT';
4821
-
4822
- case 'DRAFT_AMEND':
4823
- return 'DRAFT_AMENDED';
5056
+ return /*#__PURE__*/React__default["default"].createElement(TabPanel, {
5057
+ value: activeTafIndex,
5058
+ index: index,
5059
+ "data-testid": "taf-panel" + (activeTafIndex === index ? '-active' : '')
5060
+ }, /*#__PURE__*/React__default["default"].createElement(TafHeader, {
5061
+ title: getTafStatusLabel(tafFromBackend.taf.status)
5062
+ }), isLoading && /*#__PURE__*/React__default["default"].createElement(Spinner, {
5063
+ "data-testid": "taf-loading",
5064
+ sx: {
5065
+ position: 'absolute',
5066
+ zIndex: 1,
5067
+ color: 'geowebColors.backdrops.white.fill'
5068
+ }
5069
+ }), error && /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
5070
+ severity: "error",
5071
+ title: error.title,
5072
+ info: error.message,
5073
+ dataTestId: "taf-error"
5074
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormWrapper, {
5075
+ mode: getViewMode(tafFromBackend.taf.status),
5076
+ tafFromBackend: tafFromBackend,
5077
+ onFormAction: onTafAction
5078
+ }));
5079
+ };
4824
5080
 
4825
- case 'DRAFT_CORRECT':
4826
- return 'DRAFT_CORRECTED';
5081
+ var TafLayout = function TafLayout(_a) {
5082
+ var _b = _a.tafList,
5083
+ tafList = _b === void 0 ? [] : _b,
5084
+ _c = _a.onPostTaf,
5085
+ onPostTaf = _c === void 0 ? function () {} : _c;
5086
+
5087
+ var _d = __read(React__default["default"].useState(sortTafTimeSlots(tafList)), 2),
5088
+ _e = _d[0],
5089
+ upcoming = _e.upcoming,
5090
+ current = _e.current,
5091
+ expired = _e.expired,
5092
+ updateSortedTafs = _d[1];
5093
+
5094
+ var _f = __read(upcoming.slice(-1), 1),
5095
+ lastUpcomingTaf = _f[0];
5096
+
5097
+ var _g = __read(React__default["default"].useState('UPCOMING'), 2),
5098
+ timeSlot = _g[0],
5099
+ setTimeSlot = _g[1];
5100
+
5101
+ var _h = __read(React__default["default"].useState(upcoming), 2),
5102
+ locations = _h[0],
5103
+ setLocations = _h[1];
5104
+
5105
+ var _j = __read(React__default["default"].useState(0), 2),
5106
+ activeTafIndex = _j[0],
5107
+ setActiveTafIndex = _j[1];
5108
+
5109
+ var onChangeTimeSlot = function onChangeTimeSlot(newTimeSlot) {
5110
+ setTimeSlot(newTimeSlot);
5111
+ setLocations(newTimeSlot === 'ACTIVE' ? current : upcoming);
5112
+ setActiveTafIndex(0);
5113
+ };
4827
5114
 
4828
- case 'PUBLISH':
4829
- return 'PUBLISHED';
5115
+ React__default["default"].useEffect(function () {
5116
+ var newSortedTafs = sortTafTimeSlots(tafList);
5117
+ var updatedLocations = timeSlot === 'ACTIVE' ? newSortedTafs.current : newSortedTafs.upcoming;
5118
+ updateSortedTafs(sortTafTimeSlots(tafList));
5119
+ setLocations(updatedLocations); // update active index
4830
5120
 
4831
- case 'AMEND':
4832
- return 'AMENDED';
5121
+ var newActiveIndex = updatedLocations.findIndex(function (location) {
5122
+ return location.taf.previousId === locations[activeTafIndex].taf.uuid;
5123
+ });
5124
+ var newIndex = newActiveIndex !== -1 ? newActiveIndex : activeTafIndex;
5125
+ setActiveTafIndex(newIndex); // eslint-disable-next-line react-hooks/exhaustive-deps
5126
+ }, [tafList, setLocations]);
4833
5127
 
4834
- case 'CORRECT':
4835
- return 'CORRECTED';
5128
+ if (!tafList) {
5129
+ return null;
5130
+ }
4836
5131
 
4837
- default:
4838
- return 'NEW';
5132
+ var activeTaf = locations[activeTafIndex];
5133
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Box, {
5134
+ id: MODAL_DIALOG_ELEMENT,
5135
+ component: "div",
5136
+ sx: {
5137
+ width: '100%',
5138
+ height: '100%',
5139
+ position: 'absolute',
5140
+ overflow: 'hidden',
5141
+ pointerEvents: 'none'
4839
5142
  }
4840
- };
5143
+ }), /*#__PURE__*/React__default["default"].createElement(material.Box, {
5144
+ sx: {
5145
+ height: '100%',
5146
+ maxHeight: '100%'
5147
+ }
5148
+ }, /*#__PURE__*/React__default["default"].createElement(material.Box, {
5149
+ sx: {
5150
+ minWidth: 320,
5151
+ maxWidth: 1272,
5152
+ margin: 'auto',
5153
+ height: '100%',
5154
+ display: 'flex',
5155
+ flexDirection: 'column'
5156
+ }
5157
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5158
+ container: true,
5159
+ spacing: 2,
5160
+ sx: {
5161
+ paddingLeft: 1,
5162
+ paddingRight: 1
5163
+ }
5164
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5165
+ item: true,
5166
+ xs: 12,
5167
+ sm: 9
5168
+ }, /*#__PURE__*/React__default["default"].createElement(TopTabs, {
5169
+ tafFromBackend: lastUpcomingTaf,
5170
+ timeSlot: timeSlot,
5171
+ onChangeTimeSlot: onChangeTimeSlot
5172
+ }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5173
+ container: true,
5174
+ flexGrow: 1,
5175
+ overflow: "hidden"
5176
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5177
+ container: true,
5178
+ spacing: 2,
5179
+ sx: {
5180
+ height: '100%',
5181
+ paddingLeft: 1,
5182
+ paddingRight: 1,
5183
+ paddingTop: 2,
5184
+ overflow: 'auto'
5185
+ }
5186
+ }, /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5187
+ item: true,
5188
+ xs: 3,
5189
+ sm: 1
5190
+ }, /*#__PURE__*/React__default["default"].createElement(LocationTabs, {
5191
+ tafList: locations,
5192
+ activeIndex: activeTafIndex,
5193
+ onChangeTab: setActiveTafIndex,
5194
+ timeSlot: timeSlot
5195
+ })), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5196
+ item: true,
5197
+ xs: true
5198
+ }, /*#__PURE__*/React__default["default"].createElement(material.Card, {
5199
+ variant: "outlined",
5200
+ sx: {
5201
+ padding: 1,
5202
+ paddingTop: 0,
5203
+ marginBottom: '12px',
5204
+ position: 'relative'
5205
+ }
5206
+ }, /*#__PURE__*/React__default["default"].createElement(TacOverviewMobile, {
5207
+ upcomingTafs: upcoming,
5208
+ currentTafs: current,
5209
+ expiredTafs: expired,
5210
+ activeTaf: activeTaf
5211
+ }), locations.map(function (tafFromBackend, index) {
5212
+ return /*#__PURE__*/React__default["default"].createElement(TafPanel, {
5213
+ key: tafFromBackend.taf.uuid,
5214
+ activeTafIndex: activeTafIndex,
5215
+ index: index,
5216
+ tafFromBackend: tafFromBackend,
5217
+ onPostTaf: onPostTaf
5218
+ });
5219
+ }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5220
+ item: true,
5221
+ xs: 3,
5222
+ sx: {
5223
+ height: '100%'
5224
+ },
5225
+ display: {
5226
+ xs: 'none',
5227
+ sm: 'block'
5228
+ }
5229
+ }, /*#__PURE__*/React__default["default"].createElement(TacOverview, {
5230
+ upcomingTafs: upcoming,
5231
+ currentTafs: current,
5232
+ expiredTafs: expired,
5233
+ activeTaf: activeTaf
5234
+ })))))));
5235
+ };
4841
5236
 
4842
- var onFormAction = function onFormAction(action, taf) {
4843
- // Add right actions and their follow up calls to the BE
4844
- switch (action) {
4845
- case 'CLOSE':
4846
- confirmDialog({
4847
- title: 'Closing TAF',
4848
- description: 'Are you sure you want to close this TAF? Any changes made will be lost.',
4849
- confirmLabel: 'Close'
4850
- }).then(function () {
4851
- toggleTafDialog();
4852
- });
4853
- break;
5237
+ var TafModule = function TafModule() {
5238
+ var api$1 = api.useApiContext().api;
4854
5239
 
4855
- case 'DRAFT':
4856
- case 'DRAFT_AMEND':
4857
- case 'DRAFT_CORRECT':
4858
- case 'PUBLISH':
4859
- case 'AMEND':
4860
- case 'CORRECT':
4861
- postTaf({
4862
- taf: taf,
4863
- changeStatusTo: fromActionToStatus(action)
4864
- });
4865
- break;
5240
+ var _a = __read(React__namespace.useState(false), 2),
5241
+ isLoading = _a[0],
5242
+ setLoading = _a[1];
4866
5243
 
4867
- default:
4868
- toggleTafDialog();
4869
- break;
4870
- }
5244
+ var _b = api.useApi(api$1.getTafList),
5245
+ getTafListError = _b.error,
5246
+ isFetchingInitial = _b.isLoading,
5247
+ tafList = _b.result,
5248
+ fetchNewTafList = _b.fetchApiData;
5249
+
5250
+ shared.usePoller([tafList, getTafListError], function () {
5251
+ return fetchNewTafList({});
5252
+ });
5253
+
5254
+ var reFetchNewTafList = function reFetchNewTafList() {
5255
+ return __awaiter(void 0, void 0, void 0, function () {
5256
+ return __generator(this, function (_a) {
5257
+ switch (_a.label) {
5258
+ case 0:
5259
+ _a.trys.push([0, 2,, 3]);
5260
+
5261
+ setLoading(true);
5262
+ return [4
5263
+ /*yield*/
5264
+ , fetchNewTafList({})];
5265
+
5266
+ case 1:
5267
+ _a.sent();
5268
+
5269
+ setLoading(false);
5270
+ return [3
5271
+ /*break*/
5272
+ , 3];
5273
+
5274
+ case 2:
5275
+ _a.sent();
5276
+ setLoading(false);
5277
+ return [3
5278
+ /*break*/
5279
+ , 3];
5280
+
5281
+ case 3:
5282
+ return [2
5283
+ /*return*/
5284
+ ];
5285
+ }
5286
+ });
5287
+ });
4871
5288
  };
4872
5289
 
4873
- var selectedTaf = getSelectedTaf(selectedTafId, tafList);
4874
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafList, {
5290
+ var hasTafListError = getTafListError !== null;
5291
+
5292
+ if (isFetchingInitial) {
5293
+ return /*#__PURE__*/React__namespace.createElement(LinearProgress__default["default"], {
5294
+ color: "secondary",
5295
+ "data-testid": "loading-bar"
5296
+ });
5297
+ }
5298
+
5299
+ return /*#__PURE__*/React__namespace.createElement(material.Box, {
5300
+ component: "div",
5301
+ id: "tafmodule",
5302
+ sx: {
5303
+ height: '100%'
5304
+ }
5305
+ }, isLoading && /*#__PURE__*/React__namespace.createElement(LinearProgress__default["default"], {
5306
+ "data-testid": "loading-bar",
5307
+ color: "secondary",
5308
+ sx: {
5309
+ marginBottom: '-4px'
5310
+ }
5311
+ }), hasTafListError && /*#__PURE__*/React__namespace.createElement(shared.AlertBanner, {
5312
+ severity: "error",
5313
+ title: "An error has occurred while retrieving the list",
5314
+ info: getTafListError.message
5315
+ }), /*#__PURE__*/React__namespace.createElement(TafLayout, {
4875
5316
  tafList: tafList,
4876
- isLoading: isLoadingList,
4877
- error: errorList,
4878
- onClickTafActionButton: onClickTafActionButton,
4879
- errorCancelTaf: errorCancelTaf
4880
- }), showSpinner && /*#__PURE__*/React__default["default"].createElement(Spinner, null), selectedTaf !== undefined && /*#__PURE__*/React__default["default"].createElement(TafFormDialog, {
4881
- open: isTafDialogOpen,
4882
- toggleFormDialog: toggleTafDialog,
4883
- tafFromBackend: selectedTaf,
4884
- alertBanner: errorPostMessage ? /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4885
- severity: "error",
4886
- title: "An error has occurred while saving, please try again",
4887
- info: errorPostMessageText
4888
- }) : null,
4889
- onFormAction: onFormAction
4890
- }, /*#__PURE__*/React__default["default"].createElement(TafFormWrapper, {
4891
- mode: "edit",
4892
- tafFromBackend: selectedTaf,
4893
- tafAction: tafDialogAction,
4894
- onFormAction: onFormAction
4895
- }), showSpinner && /*#__PURE__*/React__default["default"].createElement(Spinner, null)));
5317
+ onPostTaf: reFetchNewTafList
5318
+ }));
4896
5319
  };
4897
- /**
4898
- * Shows the list of Tafs and allows to create, edit and view Tafs.
4899
- * Needs to be wrapped in the ApiProvider.
4900
- *
4901
- * @example
4902
- * ```<ApiProvider baseURL="http://test.com" appURL="http://app.com" auth={auth} onSetAuth={onSetAuth} createApi={createApi}> authTokenUrl="url/tokenrefresh"<TafWrapper /> </ApiProvider>```
4903
- */
4904
-
4905
5320
 
4906
- var ConfirmationWrapper = function ConfirmationWrapper() {
4907
- return /*#__PURE__*/React__default["default"].createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__default["default"].createElement(TafWrapper, null));
5321
+ var Wrapper = function Wrapper() {
5322
+ return /*#__PURE__*/React__namespace.createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__namespace.createElement(TafModule, null));
4908
5323
  };
4909
5324
 
4910
5325
  var createApi = function createApi(url, appUrl, auth, setAuth, authTokenUrl, authClientId) {
@@ -4923,13 +5338,8 @@
4923
5338
  };
4924
5339
  };
4925
5340
 
4926
- exports.ContentDialog = ContentDialog;
4927
- exports.TafFormDialog = TafFormDialog;
4928
5341
  exports.TafFormWrapper = TafFormWrapper;
4929
- exports.TafList = TafList;
4930
- exports.TafListRow = TafListRow;
4931
- exports.TafListSection = TafListSection;
4932
- exports.TafWrapper = ConfirmationWrapper;
5342
+ exports.TafModule = Wrapper;
4933
5343
  exports.createApi = createApi;
4934
5344
 
4935
5345
  Object.defineProperty(exports, '__esModule', { value: true });