@opengeoweb/taf 1.1.3 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/taf.umd.js CHANGED
@@ -1,11 +1,34 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@material-ui/core'), require('@material-ui/lab'), require('moment'), require('@material-ui/icons'), require('@opengeoweb/api'), require('@opengeoweb/form-fields'), require('react-hook-form'), require('@opengeoweb/shared')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'react', '@material-ui/core', '@material-ui/lab', 'moment', '@material-ui/icons', '@opengeoweb/api', '@opengeoweb/form-fields', 'react-hook-form', '@opengeoweb/shared'], factory) :
4
- (global = global || self, factory(global.Taf = {}, global.React, global.core, global.lab, global.moment, global.icons, global.api, global.formFields, global.reactHookForm, global.shared));
5
- }(this, (function (exports, React, core, lab, moment, icons, api, formFields, reactHookForm, shared) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@material-ui/core'), require('@material-ui/lab'), require('moment'), require('@opengeoweb/shared'), require('@material-ui/icons'), require('@opengeoweb/api'), require('@opengeoweb/form-fields'), require('react-hook-form'), require('react-sortablejs')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'react', '@material-ui/core', '@material-ui/lab', 'moment', '@opengeoweb/shared', '@material-ui/icons', '@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.core, global.lab, global.moment, global.shared, global.icons, global.api, global.formFields, global.reactHookForm, global.reactSortablejs));
5
+ }(this, (function (exports, React, core, lab, moment, shared, icons, api, formFields, reactHookForm, reactSortablejs) { 'use strict';
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () {
19
+ return e[k];
20
+ }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n['default'] = e;
26
+ return Object.freeze(n);
27
+ }
6
28
 
7
- var React__default = 'default' in React ? React['default'] : React;
8
- moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
29
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
30
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
9
32
 
10
33
  /*! *****************************************************************************
11
34
  Copyright (c) Microsoft Corporation.
@@ -112,10 +135,10 @@
112
135
  return ar;
113
136
  }
114
137
 
115
- function __spread() {
116
- for (var ar = [], i = 0; i < arguments.length; i++)
117
- ar = ar.concat(__read(arguments[i]));
118
- return ar;
138
+ function __spreadArray(to, from) {
139
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
140
+ to[j] = from[i];
141
+ return to;
119
142
  }
120
143
 
121
144
  /* *
@@ -174,74 +197,6 @@
174
197
  locations: locations
175
198
  };
176
199
 
177
- /* *
178
- * Licensed under the Apache License, Version 2.0 (the "License");
179
- * you may not use this file except in compliance with the License.
180
- * You may obtain a copy of the License at
181
- *
182
- * http://www.apache.org/licenses/LICENSE-2.0
183
- *
184
- * Unless required by applicable law or agreed to in writing, software
185
- * distributed under the License is distributed on an "AS IS" BASIS,
186
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
187
- * See the License for the specific language governing permissions and
188
- * limitations under the License.
189
- *
190
- * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
191
- * Copyright 2021 - Finnish Meteorological Institute (FMI)
192
- * */
193
- var useStyles = core.makeStyles({
194
- textFieldGridItem: {
195
- marginRight: 4
196
- },
197
- textFieldInput: {
198
- fontSize: '14px',
199
- paddingLeft: 1,
200
- paddingRight: 1,
201
- color: '#051039'
202
- },
203
- textFieldLabel: {
204
- fontSize: '14px'
205
- },
206
- textFieldLabelShrink: {
207
- transform: 'translate(2px, 10px) scale(0.75) !important'
208
- },
209
- formRow: {
210
- marginTop: 8
211
- },
212
- tacTitle: {
213
- fontSize: '20px',
214
- fontWeight: 500
215
- },
216
- tacText: {
217
- fontSize: '14px',
218
- color: '#000000'
219
- },
220
- tacLine: {
221
- margin: '0',
222
- padding: '.1em .1em .1em 0.8em',
223
- textIndent: '-0.7em',
224
- borderRadius: '3px'
225
- },
226
- addButton: {
227
- marginRight: '38px'
228
- },
229
- lifecycleButtons: {
230
- marginTop: '40px',
231
- marginBottom: '16px'
232
- },
233
- actionButton: {
234
- marginRight: '16px'
235
- },
236
- lastButton: {
237
- marginRight: '90px'
238
- },
239
- backdrop: {
240
- zIndex: 1500,
241
- color: '#fff'
242
- }
243
- });
244
-
245
200
  function _typeof(obj) {
246
201
  "@babel/helpers - typeof";
247
202
 
@@ -277,9 +232,9 @@
277
232
 
278
233
  var formatValidToString = function formatValidToString(valid) {
279
234
  // Ensure end of valid period if midnight is shown as 24 and not 00
280
- var endHours = moment.utc(valid.end).format('kk');
281
- var endDate = endHours === '24' ? moment.utc(valid.end).add(-1, 'day').format('DD') : moment.utc(valid.end).format('DD');
282
- return valid.end ? moment.utc(valid.start).format('DDHH') + "/" + endDate + endHours : moment.utc(valid.start).format('DDHHmm');
235
+ var endHours = moment__default['default'].utc(valid.end).format('kk');
236
+ var endDate = endHours === '24' ? moment__default['default'].utc(valid.end).add(-1, 'day').format('DD') : moment__default['default'].utc(valid.end).format('DD');
237
+ return valid.end ? moment__default['default'].utc(valid.start).format('DDHH') + "/" + endDate + endHours : moment__default['default'].utc(valid.start).format('DDHHmm');
283
238
  };
284
239
 
285
240
  var getSections = function getSections(value, format) {
@@ -313,8 +268,8 @@
313
268
  if (!value) return null; // Create valid object from passed string
314
269
 
315
270
  var trimmedValue = value.trim();
316
- var tafStartMoment = moment.utc(tafStart);
317
- var tafEndMoment = moment.utc(tafEnd);
271
+ var tafStartMoment = moment__default['default'].utc(tafStart);
272
+ var tafEndMoment = moment__default['default'].utc(tafEnd);
318
273
  var startEnd = trimmedValue.split('/');
319
274
  var format = trimmedValue.indexOf('/') === -1 ? 'DDHHmm' : 'DDHH';
320
275
  var startSections = getSections(startEnd[0], format);
@@ -340,7 +295,8 @@
340
295
  var invalidValidityStartTimeMessage = 'Invalid validity start time, change group validity must lie within the TAF validity period';
341
296
  var invalidValidityPeriodMessage = 'Invalid validity period, validity end time has to be after validity start time';
342
297
  var invalidValidityEndTimeMessage = 'Invalid validity end time, change group validity must lie within the TAF validity period';
343
- var invalidValidityLengthMessage = 'Invalid validity period, expected either DDHH/DDHH or DDHHmm'; // Validations
298
+ var invalidValidityLengthMessage = 'Invalid validity period, expected either DDHH/DDHH or DDHHmm';
299
+ var invalidChangeValidInterFieldMessage = 'Invalid validity period, expected DDHH/DDHH for BECMG and TEMPO or DDHHmm for FM'; // Validations
344
300
  // Ensure all individual sections are correct (DD HH mm etc)
345
301
 
346
302
  var validateValidSections = function validateValidSections(sections, isStartEnd) {
@@ -361,8 +317,8 @@
361
317
 
362
318
 
363
319
  var validateIsValidDates = function validateIsValidDates(value, tafStart, tafEnd) {
364
- var tafStartMoment = moment.utc(tafStart);
365
- var tafEndMoment = moment.utc(tafEnd);
320
+ var tafStartMoment = moment__default['default'].utc(tafStart);
321
+ var tafEndMoment = moment__default['default'].utc(tafEnd);
366
322
  var startEnd = value.split('/');
367
323
  var format = value.indexOf('/') === -1 ? 'DDHHmm' : 'DDHH';
368
324
  var validateMsg = []; // Validate start time
@@ -424,6 +380,17 @@
424
380
 
425
381
  return true;
426
382
  };
383
+ var validateValidChangeGroupInterField = function validateValidChangeGroupInterField(value, valueChange) {
384
+ var trimmedValue = value.trim();
385
+ var trimmedValueChange = valueChange.trim();
386
+
387
+ if (!trimmedValue.length) {
388
+ return true;
389
+ }
390
+
391
+ var isValid = trimmedValue.length < 9 && trimmedValueChange === 'FM' || trimmedValue.length > 6 && trimmedValueChange !== 'FM';
392
+ return isValid ? true : invalidChangeValidInterFieldMessage;
393
+ };
427
394
 
428
395
  /* *
429
396
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -444,19 +411,19 @@
444
411
 
445
412
  var prependZeroes = function prependZeroes(value, totalDigits) {
446
413
  var valueAsString = value.toString();
447
- return __spread(Array(totalDigits - valueAsString.length)).reduce(function (newVal) {
414
+ return __spreadArray([], __read(Array(totalDigits - valueAsString.length))).reduce(function (newVal) {
448
415
  return "0" + newVal;
449
416
  }, valueAsString);
450
417
  };
451
418
 
452
- var config = [{
419
+ var config$1 = [{
453
420
  key: 'range',
454
421
  size: 4
455
422
  }, {
456
423
  key: 'unit',
457
424
  size: 1
458
425
  }];
459
- var configAsObject = Object.assign(config).reduce(function (list, item) {
426
+ var configAsObject$1 = Object.assign(config$1).reduce(function (list, item) {
460
427
  var _a;
461
428
 
462
429
  return __assign(__assign({}, list), (_a = {}, _a[item.key] = item, _a));
@@ -474,7 +441,7 @@
474
441
  } // else, format visibility number
475
442
 
476
443
 
477
- var size = configAsObject.range.size;
444
+ var size = configAsObject$1.range.size;
478
445
  return prependZeroes(value.range, size);
479
446
  }; // parsers
480
447
  // returns object with validity if passed numbers - returns object with cavOK: true if passed CAVOK
@@ -1076,16 +1043,16 @@
1076
1043
 
1077
1044
 
1078
1045
  var _b = obj,
1079
- _c = key,
1080
- emptyKey = _b[_c],
1081
- rest = __rest(_b, [_typeof(_c) === "symbol" ? _c : _c + ""]);
1046
+ _c = key;
1047
+ _b[_c];
1048
+ var rest = __rest(_b, [_typeof(_c) === "symbol" ? _c : _c + ""]);
1082
1049
 
1083
1050
  return rest;
1084
1051
  }, value);
1085
1052
  return trimmedWeather;
1086
1053
  }
1087
1054
 
1088
- var config$1 = [{
1055
+ var config = [{
1089
1056
  key: 'direction',
1090
1057
  size: 3
1091
1058
  }, {
@@ -1102,7 +1069,7 @@
1102
1069
  key: 'unit',
1103
1070
  size: 2
1104
1071
  }];
1105
- var configAsObject$1 = Object.assign(config$1).reduce(function (list, item) {
1072
+ var configAsObject = Object.assign(config).reduce(function (list, item) {
1106
1073
  var _a;
1107
1074
 
1108
1075
  return __assign(__assign({}, list), (_a = {}, _a[item.key] = item, _a));
@@ -1113,7 +1080,7 @@
1113
1080
  case 'direction':
1114
1081
  {
1115
1082
  // make sure the values get the right size
1116
- var size = configAsObject$1[key].size;
1083
+ var size = configAsObject[key].size;
1117
1084
  return prependZeroes(value, size);
1118
1085
  }
1119
1086
 
@@ -1126,7 +1093,7 @@
1126
1093
  return 'P99';
1127
1094
  }
1128
1095
 
1129
- var size = configAsObject$1[key].size;
1096
+ var size = configAsObject[key].size;
1130
1097
  return prependZeroes(value, size);
1131
1098
  }
1132
1099
 
@@ -1139,7 +1106,7 @@
1139
1106
  return 'GP99';
1140
1107
  }
1141
1108
 
1142
- var size = configAsObject$1[key].size;
1109
+ var size = configAsObject[key].size;
1143
1110
  var newValue = prependZeroes(value, size);
1144
1111
  return "G" + newValue.toString();
1145
1112
  }
@@ -1160,7 +1127,7 @@
1160
1127
  return value;
1161
1128
  }
1162
1129
 
1163
- return config$1.reduce(function (stringValue, item) {
1130
+ return config.reduce(function (stringValue, item) {
1164
1131
  var key = item.key;
1165
1132
  var propValue = value[key];
1166
1133
  var hasValue = propValue !== undefined && propValue !== null && propValue !== '';
@@ -1173,7 +1140,7 @@
1173
1140
  validation = false;
1174
1141
  }
1175
1142
 
1176
- return config$1.reduce(function (obj, item) {
1143
+ return config.reduce(function (obj, item) {
1177
1144
  var key = item.key,
1178
1145
  size = item.size;
1179
1146
  var returnObj = obj;
@@ -1495,9 +1462,9 @@
1495
1462
 
1496
1463
 
1497
1464
  var _e = list,
1498
- _f = key,
1499
- emptyKey = _e[_f],
1500
- rest = __rest(_e, [_typeof(_f) === "symbol" ? _f : _f + ""]);
1465
+ _f = key;
1466
+ _e[_f];
1467
+ var rest = __rest(_e, [_typeof(_f) === "symbol" ? _f : _f + ""]);
1501
1468
 
1502
1469
  return rest;
1503
1470
  }, clouds);
@@ -1865,7 +1832,7 @@
1865
1832
  };
1866
1833
 
1867
1834
  var formatIssueTime = function formatIssueTime(issueDate) {
1868
- return issueDate ? moment(issueDate).utc().format('DDHHmm') + "Z" : 'Not issued';
1835
+ return issueDate ? moment__default['default'](issueDate).utc().format('DDHHmm') + "Z" : 'Not issued';
1869
1836
  };
1870
1837
  function formatFormValues(row) {
1871
1838
  return Object.keys(row).reduce(function (list, key) {
@@ -1978,8 +1945,8 @@
1978
1945
  {
1979
1946
  // if cavOK is set - remove visibility from the list
1980
1947
  if (reducedRow.cavOK) {
1981
- var visibility = list.visibility,
1982
- rest = __rest(list, ["visibility"]);
1948
+ list.visibility;
1949
+ var rest = __rest(list, ["visibility"]);
1983
1950
 
1984
1951
  return rest;
1985
1952
  }
@@ -1991,8 +1958,8 @@
1991
1958
  {
1992
1959
  // If cloud is undefined or empty, remove it from the list
1993
1960
  if (!reducedRow.cloud || Object.keys(reducedRow.cloud).length === 0) {
1994
- var cloud = list.cloud,
1995
- rest = __rest(list, ["cloud"]);
1961
+ list.cloud;
1962
+ var rest = __rest(list, ["cloud"]);
1996
1963
 
1997
1964
  return rest;
1998
1965
  }
@@ -2004,8 +1971,8 @@
2004
1971
  {
2005
1972
  // If empty, remove it from the list
2006
1973
  if (!reducedRow.weather.weather1) {
2007
- var weather = list.weather,
2008
- rest = __rest(list, ["weather"]);
1974
+ list.weather;
1975
+ var rest = __rest(list, ["weather"]);
2009
1976
 
2010
1977
  return rest;
2011
1978
  }
@@ -2017,8 +1984,8 @@
2017
1984
  {
2018
1985
  // If empty, remove it from the list
2019
1986
  if (!reducedRow.wind.direction && isNaN(reducedRow.wind.direction)) {
2020
- var wind = list.wind,
2021
- rest = __rest(list, ["wind"]);
1987
+ list.wind;
1988
+ var rest = __rest(list, ["wind"]);
2022
1989
 
2023
1990
  return rest;
2024
1991
  }
@@ -2030,8 +1997,8 @@
2030
1997
  {
2031
1998
  // If empty, remove it from the list
2032
1999
  if (!reducedRow.visibility.range && isNaN(reducedRow.visibility.range)) {
2033
- var visibility = list.visibility,
2034
- rest = __rest(list, ["visibility"]);
2000
+ list.visibility;
2001
+ var rest = __rest(list, ["visibility"]);
2035
2002
 
2036
2003
  return rest;
2037
2004
  }
@@ -2046,9 +2013,9 @@
2046
2013
  // If empty, remove it from the list
2047
2014
  if (!reducedRow[key]) {
2048
2015
  var _a = list,
2049
- _b = key,
2050
- emptyKey = _a[_b],
2051
- rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
2016
+ _b = key;
2017
+ _a[_b];
2018
+ var rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
2052
2019
 
2053
2020
  return rest;
2054
2021
  }
@@ -2066,9 +2033,12 @@
2066
2033
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
2067
2034
 
2068
2035
  var convertTafValuesToObject = function convertTafValuesToObject(formData) {
2069
- var tafStart = formData.validDateStart;
2070
- var tafEnd = formData.validDateEnd;
2071
- var parsedChangeGroups = formData.changeGroups && formData.changeGroups // parse data for each changegroup row
2036
+ formData.IS_DRAFT;
2037
+ var productToPost = __rest(formData, ["IS_DRAFT"]);
2038
+
2039
+ var tafStart = productToPost.validDateStart;
2040
+ var tafEnd = productToPost.validDateEnd;
2041
+ var parsedChangeGroups = productToPost.changeGroups && productToPost.changeGroups // parse data for each changegroup row
2072
2042
  .map(function (row) {
2073
2043
  return parseFormValues(row, tafStart, tafEnd);
2074
2044
  }) // filter out empty changegroup rows
@@ -2076,8 +2046,8 @@
2076
2046
  return Object.keys(value).length;
2077
2047
  });
2078
2048
 
2079
- var parsedFormValues = __assign(__assign({}, formData), {
2080
- baseForecast: parseFormValues(formData.baseForecast, tafStart, tafEnd),
2049
+ var parsedFormValues = __assign(__assign({}, productToPost), {
2050
+ baseForecast: parseFormValues(productToPost.baseForecast, tafStart, tafEnd),
2081
2051
  changeGroups: parsedChangeGroups
2082
2052
  });
2083
2053
 
@@ -2087,8 +2057,8 @@
2087
2057
  {
2088
2058
  // remove changeGroups when empty
2089
2059
  if (!parsedFormValues.changeGroups || !parsedFormValues.changeGroups.length) {
2090
- var changeGroups = list.changeGroups,
2091
- rest = __rest(list, ["changeGroups"]);
2060
+ list.changeGroups;
2061
+ var rest = __rest(list, ["changeGroups"]);
2092
2062
 
2093
2063
  return rest;
2094
2064
  }
@@ -2104,9 +2074,9 @@
2104
2074
  // remove when empty
2105
2075
  if (!parsedFormValues[key]) {
2106
2076
  var _a = list,
2107
- _b = key,
2108
- emtpyKey = _a[_b],
2109
- rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
2077
+ _b = key;
2078
+ _a[_b];
2079
+ var rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
2110
2080
 
2111
2081
  return rest;
2112
2082
  }
@@ -2121,54 +2091,155 @@
2121
2091
  }
2122
2092
  }, parsedFormValues);
2123
2093
  };
2094
+ var noTAC = 'Missing data: no TAC can be generated'; // Ensure we have enough data to retrieve a TAC - we only need to check for wind and visibility/ cavok as those are the only ones required in all cases
2095
+
2096
+ var shouldRetrieveTAC = function shouldRetrieveTAC(product) {
2097
+ if (product && product.baseForecast && product.baseForecast.wind && product.baseForecast.wind.speed && product.baseForecast.wind.speed !== '' && (product.baseForecast.visibility && product.baseForecast.visibility.range && product.baseForecast.visibility.range !== '' || product.baseForecast.cavOK)) {
2098
+ return true;
2099
+ }
2100
+
2101
+ return false;
2102
+ };
2103
+
2104
+ var getFieldNames = function getFieldNames(isChangeGroup, index) {
2105
+ var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups[" + index + "]";
2106
+ return __assign(__assign(__assign({}, !isChangeGroup && {
2107
+ messageType: 'messageType',
2108
+ location: 'location',
2109
+ issueDate: 'issueDate'
2110
+ }), isChangeGroup && {
2111
+ probability: namePrefix + ".probability",
2112
+ change: namePrefix + ".change"
2113
+ }), {
2114
+ valid: namePrefix + ".valid",
2115
+ wind: namePrefix + ".wind",
2116
+ visibility: namePrefix + ".visibility",
2117
+ weather1: namePrefix + ".weather.weather1",
2118
+ weather2: namePrefix + ".weather.weather2",
2119
+ weather3: namePrefix + ".weather.weather3",
2120
+ cloud1: namePrefix + ".cloud.cloud1",
2121
+ cloud2: namePrefix + ".cloud.cloud2",
2122
+ cloud3: namePrefix + ".cloud.cloud3",
2123
+ cloud4: namePrefix + ".cloud.cloud4"
2124
+ });
2125
+ };
2124
2126
  var useTACGenerator = function useTACGenerator(taf, requestTAC, standardTAC) {
2125
2127
  if (standardTAC === void 0) {
2126
2128
  standardTAC = '';
2127
2129
  }
2128
2130
 
2129
- var _a = __read(React__default.useState(taf.status === 'NEW' ? 'No TAC available' : 'Retrieving TAC'), 2),
2131
+ var _a = __read(React__default['default'].useState(taf.status === 'NEW' ? 'No TAC available' : 'Retrieving TAC'), 2),
2130
2132
  TAC = _a[0],
2131
2133
  setTAC = _a[1];
2132
2134
 
2133
2135
  var retrieveTAC = function retrieveTAC(tafToPost) {
2134
- requestTAC(tafToPost).then(function (result) {
2135
- setTAC(result.data);
2136
- })["catch"](function () {
2137
- setTAC('Failed to retrieve TAC');
2138
- });
2136
+ if (shouldRetrieveTAC(tafToPost)) {
2137
+ requestTAC(tafToPost).then(function (result) {
2138
+ setTAC(result.data);
2139
+ })["catch"](function () {
2140
+ setTAC('Failed to retrieve TAC');
2141
+ });
2142
+ }
2143
+
2144
+ setTAC(noTAC);
2139
2145
  };
2140
2146
 
2141
- React__default.useEffect(function () {
2147
+ React__default['default'].useEffect(function () {
2142
2148
  if (taf.status !== 'NEW' && !standardTAC) {
2143
2149
  retrieveTAC(taf);
2144
2150
  } // eslint-disable-next-line react-hooks/exhaustive-deps
2145
2151
 
2146
2152
  }, []);
2147
- React__default.useEffect(function () {
2153
+ React__default['default'].useEffect(function () {
2148
2154
  if (standardTAC !== '') {
2149
2155
  setTAC(standardTAC);
2150
2156
  }
2151
2157
  }, [standardTAC]);
2152
2158
  return [TAC, retrieveTAC];
2159
+ };
2160
+ var getRange = function getRange(min, max) {
2161
+ return Array.from({
2162
+ length: max - min + 1
2163
+ }, function (_, i) {
2164
+ return min + i;
2165
+ });
2166
+ };
2167
+ var useDragOrder = function useDragOrder(trigger, move, fields) {
2168
+ // create simple ordered list with hover (chosen) state
2169
+ var _a = __read(React__default['default'].useState([]), 2),
2170
+ sortedFields = _a[0],
2171
+ setSortedFields = _a[1];
2172
+
2173
+ var _b = __read(React__default['default'].useState([null, null]), 2),
2174
+ lastDragOrder = _b[0],
2175
+ onUpdatelastDragOrder = _b[1];
2176
+
2177
+ var onChangeOrder = function onChangeOrder(_a) {
2178
+ var oldIndex = _a.oldIndex,
2179
+ newIndex = _a.newIndex;
2180
+ if (oldIndex === undefined || newIndex === undefined) return;
2181
+ move(oldIndex, newIndex);
2182
+ onUpdatelastDragOrder([oldIndex, newIndex]);
2183
+ };
2184
+
2185
+ React__default['default'].useEffect(function () {
2186
+ setSortedFields(fields.map(function (_a) {
2187
+ var id = _a.id;
2188
+ return {
2189
+ id: id,
2190
+ chosen: false
2191
+ };
2192
+ }));
2193
+ }, [fields]); // triggers validation AFTER render of new sorted elements
2194
+
2195
+ React__default['default'].useEffect(function () {
2196
+ var _a = __read(lastDragOrder, 2),
2197
+ oldIndex = _a[0],
2198
+ newIndex = _a[1];
2199
+
2200
+ if (oldIndex !== null && newIndex !== null) {
2201
+ // trigger validation of moved rows
2202
+ var _b = __read([oldIndex, newIndex].sort(function (a, b) {
2203
+ return a - b;
2204
+ }), 2),
2205
+ start = _b[0],
2206
+ end = _b[1];
2207
+
2208
+ var changedRows = getRange(start, end);
2209
+ var fieldsToValidate = changedRows.reduce(function (list, rowIndex) {
2210
+ var fieldsDict = getFieldNames(true, rowIndex);
2211
+ var fields = Object.keys(fieldsDict).map(function (key) {
2212
+ return fieldsDict[key];
2213
+ });
2214
+ return list.concat(fields);
2215
+ }, []);
2216
+ trigger(fieldsToValidate);
2217
+ }
2218
+ }, [lastDragOrder, trigger]);
2219
+ return {
2220
+ onChangeOrder: onChangeOrder,
2221
+ sortedFields: sortedFields,
2222
+ setSortedFields: setSortedFields
2223
+ };
2153
2224
  }; // dialog utils
2154
2225
 
2155
2226
  var getConfirmationDialogTitle = function getConfirmationDialogTitle(action) {
2156
- if (action === 'DISCARDED') return 'Discard TAF';
2157
- if (action === 'PUBLISHED') return 'Publish';
2158
- if (action === 'AMENDED') return 'This TAF is an amendment';
2159
- if (action === 'CORRECTED') return 'This TAF is a correction';
2227
+ if (action === 'DISCARD') return 'Discard TAF';
2228
+ if (action === 'PUBLISH') return 'Publish';
2229
+ if (action === 'AMEND') return 'This TAF is an amendment';
2230
+ if (action === 'CORRECT') return 'This TAF is a correction';
2160
2231
  return 'Cancel TAF';
2161
2232
  };
2162
2233
  var getConfirmationDialogContent = function getConfirmationDialogContent(action) {
2163
- if (action === 'DISCARDED') return 'Are you sure you would like to discard this TAF? Any changes made will be lost';
2164
- if (action === 'PUBLISHED') return 'Are you sure you want to publish this TAF?';
2165
- if (action === 'AMENDED') return 'Do you want to publish it?';
2166
- if (action === 'CORRECTED') return 'Do you want to publish it?';
2234
+ if (action === 'DISCARD') return 'Are you sure you would like to discard this TAF? Any changes made will be lost';
2235
+ if (action === 'PUBLISH') return 'Are you sure you want to publish this TAF?';
2236
+ if (action === 'AMEND') return 'Do you want to publish it?';
2237
+ if (action === 'CORRECT') return 'Do you want to publish it?';
2167
2238
  return 'Are you sure you want to cancel this TAF?';
2168
2239
  };
2169
2240
  var getConfirmationDialogButtonLabel = function getConfirmationDialogButtonLabel(action) {
2170
2241
  switch (action) {
2171
- case 'DISCARDED':
2242
+ case 'DISCARD':
2172
2243
  {
2173
2244
  return 'Discard';
2174
2245
  }
@@ -2180,6 +2251,86 @@
2180
2251
  }
2181
2252
  };
2182
2253
 
2254
+ /* *
2255
+ * Licensed under the Apache License, Version 2.0 (the "License");
2256
+ * you may not use this file except in compliance with the License.
2257
+ * You may obtain a copy of the License at
2258
+ *
2259
+ * http://www.apache.org/licenses/LICENSE-2.0
2260
+ *
2261
+ * Unless required by applicable law or agreed to in writing, software
2262
+ * distributed under the License is distributed on an "AS IS" BASIS,
2263
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2264
+ * See the License for the specific language governing permissions and
2265
+ * limitations under the License.
2266
+ *
2267
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2268
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
2269
+ * */
2270
+ var useStyles$9 = core.makeStyles(function (theme) {
2271
+ return {
2272
+ textFieldGridItem: {
2273
+ marginRight: 4
2274
+ },
2275
+ textFieldInput: {
2276
+ fontSize: '14px',
2277
+ paddingLeft: 1,
2278
+ paddingRight: 1,
2279
+ color: '#051039',
2280
+ WebkitTextFillColor: '#051039' // safari text color fix
2281
+
2282
+ },
2283
+ textFieldLabel: {
2284
+ fontSize: '14px'
2285
+ },
2286
+ textFieldLabelShrink: {
2287
+ transform: 'translate(2px, 10px) scale(0.75) !important'
2288
+ },
2289
+ formRow: {
2290
+ marginTop: 8,
2291
+ backgroundColor: theme.palette.common.white,
2292
+ position: 'relative',
2293
+ '&.sortable-chosen': {
2294
+ boxShadow: theme.shadows[1]
2295
+ },
2296
+ '&.sortable-ghost': {
2297
+ opacity: 0.5
2298
+ }
2299
+ },
2300
+ tacTitle: {
2301
+ fontSize: '20px',
2302
+ fontWeight: 500
2303
+ },
2304
+ tacText: {
2305
+ fontSize: '14px',
2306
+ color: '#000000'
2307
+ },
2308
+ tacLine: {
2309
+ margin: '0',
2310
+ padding: '.1em .1em .1em 0.8em',
2311
+ textIndent: '-0.7em',
2312
+ borderRadius: '3px'
2313
+ },
2314
+ addButton: {
2315
+ marginRight: '38px'
2316
+ },
2317
+ lifecycleButtons: {
2318
+ marginTop: '40px',
2319
+ marginBottom: '16px'
2320
+ },
2321
+ actionButton: {
2322
+ marginRight: '16px'
2323
+ },
2324
+ lastButton: {
2325
+ marginRight: '90px'
2326
+ },
2327
+ backdrop: {
2328
+ zIndex: 1500,
2329
+ color: '#fff'
2330
+ }
2331
+ };
2332
+ });
2333
+
2183
2334
  var getTafErrors = function getTafErrors(name, errors) {
2184
2335
  var nameAsArray = name.split('.');
2185
2336
 
@@ -2200,9 +2351,9 @@
2200
2351
  var getDisplayValue = function getDisplayValue(value, disabled) {
2201
2352
  return disabled && !value ? '-' : value;
2202
2353
  };
2203
- var BaseTextField = /*#__PURE__*/React__default.memo(function (props) {
2204
- var classes = useStyles();
2205
- return /*#__PURE__*/React__default.createElement(core.TextField, __assign({
2354
+ var BaseTextField = /*#__PURE__*/React__default['default'].memo(function (props) {
2355
+ var classes = useStyles$9();
2356
+ return /*#__PURE__*/React__default['default'].createElement(core.TextField, __assign({
2206
2357
  type: "text",
2207
2358
  variant: "filled",
2208
2359
  InputProps: {
@@ -2240,7 +2391,7 @@
2240
2391
  autoComplete = _h === void 0 ? [] : _h,
2241
2392
  _j = _a.autoFocus,
2242
2393
  autoFocus = _j === void 0 ? false : _j;
2243
- var classes = useStyles();
2394
+ var classes = useStyles$9();
2244
2395
 
2245
2396
  var _k = reactHookForm.useFormContext(),
2246
2397
  control = _k.control,
@@ -2248,14 +2399,14 @@
2248
2399
  setValue = _k.setValue,
2249
2400
  errors = _k.errors;
2250
2401
 
2251
- var inputRef = React__default.useRef(null);
2402
+ var inputRef = React__default['default'].useRef(null);
2252
2403
  var fieldErrors = getTafErrors(name, errors);
2253
2404
 
2254
- var _l = __read(React__default.useState(null), 2),
2405
+ var _l = __read(React__default['default'].useState(null), 2),
2255
2406
  maxLength = _l[0],
2256
2407
  setMaxLength = _l[1];
2257
2408
 
2258
- var onKeyDown = React__default.useCallback(function (event) {
2409
+ var onKeyDown = React__default['default'].useCallback(function (event) {
2259
2410
  var currentValue = getValues(name).toString();
2260
2411
  var textSelection = currentValue.substring(inputRef.current.selectionStart, inputRef.current.selectionEnd);
2261
2412
 
@@ -2272,7 +2423,7 @@
2272
2423
  }
2273
2424
  }
2274
2425
  }, [name, autoComplete, setValue, getValues]);
2275
- var onChangeField = React__default.useCallback(function (event, callback) {
2426
+ var onChangeField = React__default['default'].useCallback(function (event, callback) {
2276
2427
  var valueUppercase = event.currentTarget.value.toUpperCase();
2277
2428
 
2278
2429
  if (autoComplete) {
@@ -2286,24 +2437,24 @@
2286
2437
  callback(valueUppercase);
2287
2438
  onChange(valueUppercase);
2288
2439
  }, [onChange, autoComplete]);
2289
- var onBlurField = React__default.useCallback(function (callback) {
2440
+ var onBlurField = React__default['default'].useCallback(function (callback) {
2290
2441
  callback();
2291
2442
  onBlur();
2292
2443
  }, [onBlur]);
2293
- var onFocusField = React__default.useCallback(function () {
2444
+ var onFocusField = React__default['default'].useCallback(function () {
2294
2445
  var _a;
2295
2446
 
2296
2447
  inputRef.current.disabled = false;
2297
2448
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
2298
2449
  }, []);
2299
- return /*#__PURE__*/React__default.createElement(core.Grid, {
2450
+ return /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2300
2451
  item: true,
2301
2452
  xs: true,
2302
2453
  className: classes.textFieldGridItem
2303
- }, /*#__PURE__*/React__default.createElement(reactHookForm.Controller, {
2454
+ }, /*#__PURE__*/React__default['default'].createElement(reactHookForm.Controller, {
2304
2455
  render: function render(_props) {
2305
2456
  var displayValue = formatter ? formatter(_props.value) : getDisplayValue(_props.value, disabled);
2306
- return /*#__PURE__*/React__default.createElement(BaseTextField, {
2457
+ return /*#__PURE__*/React__default['default'].createElement(BaseTextField, {
2307
2458
  label: label,
2308
2459
  disabled: disabled,
2309
2460
  name: name,
@@ -2348,13 +2499,24 @@
2348
2499
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
2349
2500
  * */
2350
2501
  // messages
2351
- var invalidChangeMessage = 'Invalid Change input, only BECMG, TEMPO or FM are allowed'; // validations
2502
+ var invalidChangeMessage = 'Invalid Change input, only BECMG, TEMPO or FM are allowed';
2503
+ var invalidChangeProbCombinationMessage = 'A probability is only allowed in combination with TEMPO'; // validations
2352
2504
 
2353
2505
  var validateChangeField = function validateChangeField(value) {
2354
2506
  var trimmedValue = value.trim();
2355
2507
  var isValid = trimmedValue === '' || trimmedValue === 'FM' || trimmedValue === 'TEMPO' || trimmedValue === 'BECMG';
2356
2508
  return isValid ? true : invalidChangeMessage;
2357
2509
  };
2510
+ var validateChangeFieldInterField = function validateChangeFieldInterField(value, valueProb) {
2511
+ var trimmedProbValue = valueProb.trim();
2512
+ var trimmedValue = value.trim();
2513
+
2514
+ if (trimmedProbValue !== '' && trimmedValue !== '' && trimmedValue !== 'TEMPO') {
2515
+ return invalidChangeProbCombinationMessage;
2516
+ }
2517
+
2518
+ return true;
2519
+ };
2358
2520
 
2359
2521
  /* *
2360
2522
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -2389,11 +2551,11 @@
2389
2551
  return formFields.getDeepProperty(fieldName.split('.'), data) || '';
2390
2552
  };
2391
2553
 
2392
- var getRequiredCrossFields = function getRequiredCrossFields(namePrefix) {
2393
- return [[namePrefix + ".valid"], [namePrefix + ".change", namePrefix + ".probability"], [namePrefix + ".wind", namePrefix + ".visibility", namePrefix + ".weather.weather1", namePrefix + ".cloud.cloud1"]];
2554
+ var getRequiredCrossFields = function getRequiredCrossFields(fieldNames) {
2555
+ return [[fieldNames.valid, fieldNames.change], [fieldNames.probability], [fieldNames.wind, fieldNames.visibility, fieldNames.weather1, fieldNames.cloud1]];
2394
2556
  };
2395
2557
 
2396
- var TafFormRow = function TafFormRow(_a) {
2558
+ var TafFormRow = /*#__PURE__*/React__default['default'].forwardRef(function (_a, ref) {
2397
2559
  var _b = _a.isChangeGroup,
2398
2560
  isChangeGroup = _b === void 0 ? false : _b,
2399
2561
  _c = _a.disabled,
@@ -2404,37 +2566,41 @@
2404
2566
  lastRow = _e === void 0 ? false : _e,
2405
2567
  onRemoveChangeGroup = _a.onRemoveChangeGroup,
2406
2568
  _f = _a.field,
2407
- field = _f === void 0 ? null : _f;
2408
- var classes = useStyles();
2569
+ field = _f === void 0 ? null : _f,
2570
+ _g = _a.dragHandle,
2571
+ dragHandle = _g === void 0 ? null : _g,
2572
+ props = __rest(_a, ["isChangeGroup", "disabled", "index", "lastRow", "onRemoveChangeGroup", "field", "dragHandle"]);
2573
+
2409
2574
  var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups[" + index + "]";
2575
+ var fieldNames = getFieldNames(isChangeGroup, index);
2410
2576
 
2411
- var _g = reactHookForm.useFormContext(),
2412
- getValues = _g.getValues,
2413
- trigger = _g.trigger; // cross-field required validation
2577
+ var _h = reactHookForm.useFormContext(),
2578
+ getValues = _h.getValues,
2579
+ trigger = _h.trigger;
2414
2580
 
2581
+ var isNotRequiredForAction = shared.useDraftFormHelpers().isRequired; // cross-field required validation
2415
2582
 
2416
- var _h = __read(getRequiredCrossFields(namePrefix), 3),
2417
- mainFields = _h[0],
2418
- mainOptionalFields = _h[1],
2419
- subFields = _h[2];
2583
+ var _j = __read(getRequiredCrossFields(fieldNames), 3),
2584
+ mainFields = _j[0],
2585
+ mainOptionalFields = _j[1],
2586
+ subFields = _j[2];
2420
2587
 
2421
2588
  var hasFieldsValue = function hasFieldsValue(fields) {
2422
2589
  return fields.map(getValues).find(function (field) {
2423
2590
  return !!field;
2424
2591
  });
2425
- };
2592
+ }; // Used to validate the two required fields for change groups: Change and Valid
2593
+
2426
2594
 
2427
2595
  var _validateRequiredMain = function validateRequiredMain(value, fieldName) {
2428
- return isChangeGroup && !value.length && (hasFieldsValue(subFields) || hasFieldsValue(mainFields) || hasFieldsValue(mainOptionalFields)) ? fieldName + " is required" : true;
2429
- };
2596
+ return isNotRequiredForAction(value) !== true && isChangeGroup && !value.length && (hasFieldsValue(subFields) || hasFieldsValue(mainFields) || hasFieldsValue(mainOptionalFields)) ? fieldName + " is required" : true;
2597
+ }; // Used to ensure one wind, visibility, weather or cloud is entered when start editing a changegroup and all of these are empty
2430
2598
 
2431
- var _validateRequiredMainOptional = function validateRequiredMainOptional() {
2432
- return isChangeGroup && (hasFieldsValue(subFields) || hasFieldsValue(mainFields)) && !hasFieldsValue(mainOptionalFields) ? 'Prob and/or Change are required' : true;
2433
- };
2434
2599
 
2435
- var validateRequiredSub = function validateRequiredSub() {
2436
- return isChangeGroup && (hasFieldsValue(mainFields) || hasFieldsValue(mainOptionalFields)) && !hasFieldsValue(subFields) ? 'Wind, visibility, weather or cloud is required' : true;
2437
- };
2600
+ var validateRequiredSub = function validateRequiredSub(value) {
2601
+ return isNotRequiredForAction(value) !== true && isChangeGroup && (hasFieldsValue(mainFields) || hasFieldsValue(mainOptionalFields)) && !hasFieldsValue(subFields) ? 'Wind, visibility, weather or cloud is required' : true;
2602
+ }; // Used to validate the combination of change group and wind, visibility, weather and/or cloud data entered
2603
+
2438
2604
 
2439
2605
  var _validateRequiredMainFields = function validateRequiredMainFields(value, fieldName) {
2440
2606
  var changeField = getValues(namePrefix + ".change");
@@ -2442,7 +2608,7 @@
2442
2608
  var isFM = changeField && changeField.trim() === 'FM';
2443
2609
  var isCAVOK = visibilityField && visibilityField.trim() === 'CAVOK';
2444
2610
 
2445
- if (!value.length) {
2611
+ if (isNotRequiredForAction(value) !== true && !value.length) {
2446
2612
  if (isChangeGroup && isFM || !isChangeGroup) {
2447
2613
  // exception for CavOK
2448
2614
  if (isCAVOK && (fieldName === 'Clouds' || fieldName === 'Weather')) {
@@ -2461,37 +2627,37 @@
2461
2627
  return true;
2462
2628
  };
2463
2629
 
2464
- return /*#__PURE__*/React__default.createElement(core.Grid, {
2630
+ return /*#__PURE__*/React__default['default'].createElement(core.Grid, __assign({
2465
2631
  "data-testid": "row-" + namePrefix,
2466
2632
  container: true,
2467
- className: classes.formRow
2468
- }, !isChangeGroup && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TafFormTextField, {
2633
+ ref: ref
2634
+ }, props), !isChangeGroup && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2469
2635
  label: "Type",
2470
- name: "messageType",
2636
+ name: fieldNames.messageType,
2471
2637
  disabled: true
2472
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2638
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2473
2639
  label: "Location",
2474
2640
  name: "location",
2475
2641
  disabled: true
2476
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2642
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2477
2643
  formatter: formatIssueTime,
2478
2644
  label: "Issue time",
2479
2645
  name: "issueDate",
2480
2646
  disabled: true
2481
- })), isChangeGroup && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Grid, {
2647
+ })), isChangeGroup && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2482
2648
  item: true,
2483
- xs: true
2484
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2649
+ xs: true,
2650
+ style: {
2651
+ display: 'flex'
2652
+ }
2653
+ }, dragHandle), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2485
2654
  label: "Prob",
2486
- name: namePrefix + ".probability",
2655
+ name: fieldNames.probability,
2487
2656
  disabled: disabled,
2488
2657
  defaultValue: getDefaultValue('probability', field),
2489
2658
  rules: {
2490
2659
  validate: {
2491
- validateProbabilityField: validateProbabilityField,
2492
- validateRequiredMainOptional: function validateRequiredMainOptional() {
2493
- return _validateRequiredMainOptional();
2494
- }
2660
+ validateProbabilityField: validateProbabilityField
2495
2661
  }
2496
2662
  },
2497
2663
  autoComplete: [{
@@ -2503,20 +2669,23 @@
2503
2669
  }],
2504
2670
  onBlur: function onBlur() {
2505
2671
  if (isChangeGroup) {
2506
- trigger(__spread(subFields, mainOptionalFields, mainFields));
2672
+ trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2507
2673
  }
2508
2674
  }
2509
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2675
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2510
2676
  label: "Change",
2511
- name: namePrefix + ".change",
2677
+ name: fieldNames.change,
2512
2678
  disabled: disabled,
2513
2679
  defaultValue: getDefaultValue('change', field),
2514
2680
  rules: {
2515
2681
  validate: {
2516
- validateRequiredMainOptional: function validateRequiredMainOptional() {
2517
- return _validateRequiredMainOptional();
2682
+ validateRequiredMain: function validateRequiredMain(value) {
2683
+ return _validateRequiredMain(value, 'Change');
2518
2684
  },
2519
- validateChangeField: validateChangeField
2685
+ validateChangeField: validateChangeField,
2686
+ validateChangeFieldInterField: function validateChangeFieldInterField$1(value) {
2687
+ return validateChangeFieldInterField(value, getValues(fieldNames.probability));
2688
+ }
2520
2689
  }
2521
2690
  },
2522
2691
  autoComplete: [{
@@ -2531,12 +2700,12 @@
2531
2700
  }],
2532
2701
  onBlur: function onBlur() {
2533
2702
  if (isChangeGroup) {
2534
- trigger(__spread(subFields, mainOptionalFields, mainFields));
2703
+ trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2535
2704
  }
2536
2705
  }
2537
- })), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2706
+ })), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2538
2707
  label: "Valid",
2539
- name: namePrefix + ".valid",
2708
+ name: fieldNames.valid,
2540
2709
  // always disabled for baseforecast row
2541
2710
  disabled: !isChangeGroup ? true : disabled,
2542
2711
  defaultValue: getDefaultValue('valid', field),
@@ -2547,21 +2716,23 @@
2547
2716
  },
2548
2717
  validateValidField: function validateValidField$1(value) {
2549
2718
  return isChangeGroup ? validateValidField(value, getValues('validDateStart'), getValues('validDateEnd')) : true;
2719
+ },
2720
+ validateValidChangeGroupInterField: function validateValidChangeGroupInterField$1(value) {
2721
+ return isChangeGroup ? validateValidChangeGroupInterField(value, getValues(fieldNames.change)) : true;
2550
2722
  }
2551
2723
  }
2552
2724
  },
2553
2725
  onBlur: function onBlur() {
2554
2726
  if (isChangeGroup) {
2555
- trigger(__spread(subFields, mainOptionalFields, mainFields));
2727
+ trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2556
2728
  }
2557
2729
  }
2558
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2730
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2559
2731
  label: "Wind",
2560
- name: namePrefix + ".wind",
2732
+ name: fieldNames.wind,
2561
2733
  disabled: disabled,
2562
2734
  defaultValue: getDefaultValue('wind', field),
2563
2735
  rules: {
2564
- required: !isChangeGroup,
2565
2736
  validate: {
2566
2737
  validateRequiredMainFields: function validateRequiredMainFields(value) {
2567
2738
  return _validateRequiredMainFields(value, 'Wind');
@@ -2572,17 +2743,16 @@
2572
2743
  },
2573
2744
  onBlur: function onBlur() {
2574
2745
  if (isChangeGroup) {
2575
- trigger(__spread(subFields, mainFields));
2746
+ trigger(__spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)));
2576
2747
  }
2577
2748
  },
2578
2749
  autoFocus: !isChangeGroup
2579
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2750
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2580
2751
  label: "Visibility",
2581
- name: namePrefix + ".visibility",
2752
+ name: fieldNames.visibility,
2582
2753
  disabled: disabled,
2583
2754
  defaultValue: getDefaultValue('visibility', field),
2584
2755
  rules: {
2585
- required: !isChangeGroup,
2586
2756
  validate: {
2587
2757
  validateRequiredMainFields: function validateRequiredMainFields(value) {
2588
2758
  return _validateRequiredMainFields(value, 'Visibility');
@@ -2596,11 +2766,11 @@
2596
2766
  value: 'CAVOK'
2597
2767
  }],
2598
2768
  onBlur: function onBlur() {
2599
- trigger(isChangeGroup ? __spread(subFields, mainFields) : subFields);
2769
+ trigger(isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : subFields);
2600
2770
  }
2601
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2771
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2602
2772
  label: "Weather",
2603
- name: namePrefix + ".weather.weather1",
2773
+ name: fieldNames.weather1,
2604
2774
  disabled: disabled,
2605
2775
  defaultValue: getDefaultValue('weather.weather1', field),
2606
2776
  rules: {
@@ -2615,40 +2785,40 @@
2615
2785
  }
2616
2786
  },
2617
2787
  onBlur: function onBlur() {
2618
- var fields = isChangeGroup ? __spread(subFields, mainFields) : [];
2619
- return trigger(__spread(fields, [namePrefix + ".weather.weather2", namePrefix + ".weather.weather3"]));
2788
+ var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2789
+ return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.weather2, fieldNames.weather3]));
2620
2790
  }
2621
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2791
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2622
2792
  label: "Weather",
2623
- name: namePrefix + ".weather.weather2",
2793
+ name: fieldNames.weather2,
2624
2794
  disabled: disabled,
2625
2795
  defaultValue: getDefaultValue('weather.weather2', field),
2626
2796
  rules: {
2627
2797
  validate: {
2628
2798
  validateSecondWeatherField: function validateSecondWeatherField$1(value) {
2629
- return validateSecondWeatherField(getValues(namePrefix + ".weather.weather1"), value);
2799
+ return validateSecondWeatherField(getValues(fieldNames.weather1), value);
2630
2800
  }
2631
2801
  }
2632
2802
  },
2633
2803
  onBlur: function onBlur() {
2634
- var fields = isChangeGroup ? __spread(subFields, mainFields) : [];
2635
- return trigger(__spread(fields, [namePrefix + ".weather.weather3"]));
2804
+ var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2805
+ return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.weather3]));
2636
2806
  }
2637
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2807
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2638
2808
  label: "Weather",
2639
- name: namePrefix + ".weather.weather3",
2809
+ name: fieldNames.weather3,
2640
2810
  disabled: disabled,
2641
2811
  defaultValue: getDefaultValue('weather.weather3', field),
2642
2812
  rules: {
2643
2813
  validate: {
2644
2814
  validateThirdWeatherField: function validateThirdWeatherField$1(value) {
2645
- return validateThirdWeatherField(getValues(namePrefix + ".weather.weather1"), getValues(namePrefix + ".weather.weather2"), value);
2815
+ return validateThirdWeatherField(getValues(fieldNames.weather1), getValues(fieldNames.weather2), value);
2646
2816
  }
2647
2817
  }
2648
2818
  }
2649
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2819
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2650
2820
  label: "Cloud",
2651
- name: namePrefix + ".cloud.cloud1",
2821
+ name: fieldNames.cloud1,
2652
2822
  disabled: disabled,
2653
2823
  defaultValue: getDefaultValue('cloud.cloud1', field),
2654
2824
  rules: {
@@ -2661,58 +2831,58 @@
2661
2831
  }
2662
2832
  },
2663
2833
  onBlur: function onBlur() {
2664
- var fields = isChangeGroup ? __spread(subFields, mainFields) : [];
2665
- return trigger(__spread(fields, [namePrefix + ".cloud.cloud2", namePrefix + ".cloud.cloud3", namePrefix + ".cloud.cloud4"]));
2834
+ var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2835
+ return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.cloud2, fieldNames.cloud3, fieldNames.cloud4]));
2666
2836
  }
2667
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2837
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2668
2838
  label: "Cloud",
2669
- name: namePrefix + ".cloud.cloud2",
2839
+ name: fieldNames.cloud2,
2670
2840
  disabled: disabled,
2671
2841
  defaultValue: getDefaultValue('cloud.cloud2', field),
2672
2842
  rules: {
2673
2843
  validate: {
2674
2844
  validateSecondCloud: function validateSecondCloud$1(value) {
2675
- return validateSecondCloud(getValues(namePrefix + ".cloud.cloud1"), value);
2845
+ return validateSecondCloud(getValues(fieldNames.cloud1), value);
2676
2846
  }
2677
2847
  }
2678
2848
  },
2679
2849
  onBlur: function onBlur() {
2680
- return trigger([namePrefix + ".cloud.cloud3", namePrefix + ".cloud.cloud4"]);
2850
+ return trigger([fieldNames.cloud3, fieldNames.cloud4]);
2681
2851
  }
2682
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2852
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2683
2853
  label: "Cloud",
2684
- name: namePrefix + ".cloud.cloud3",
2854
+ name: fieldNames.cloud3,
2685
2855
  disabled: disabled,
2686
2856
  defaultValue: getDefaultValue('cloud.cloud3', field),
2687
2857
  rules: {
2688
2858
  validate: {
2689
2859
  validateThirdCloud: function validateThirdCloud$1(value) {
2690
- return validateThirdCloud(getValues(namePrefix + ".cloud.cloud1"), getValues(namePrefix + ".cloud.cloud2"), value);
2860
+ return validateThirdCloud(getValues(fieldNames.cloud1), getValues(fieldNames.cloud2), value);
2691
2861
  }
2692
2862
  }
2693
2863
  },
2694
2864
  onBlur: function onBlur() {
2695
- return trigger(namePrefix + ".cloud.cloud4");
2865
+ return trigger(fieldNames.cloud4);
2696
2866
  }
2697
- }), /*#__PURE__*/React__default.createElement(TafFormTextField, {
2867
+ }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2698
2868
  label: "Cloud",
2699
- name: namePrefix + ".cloud.cloud4",
2869
+ name: fieldNames.cloud4,
2700
2870
  disabled: disabled,
2701
2871
  defaultValue: getDefaultValue('cloud.cloud4', field),
2702
2872
  rules: {
2703
2873
  validate: {
2704
2874
  validateFourthCloud: function validateFourthCloud$1(value) {
2705
- return validateFourthCloud(getValues(namePrefix + ".cloud.cloud1"), getValues(namePrefix + ".cloud.cloud2"), getValues(namePrefix + ".cloud.cloud3"), value);
2875
+ return validateFourthCloud(getValues(fieldNames.cloud1), getValues(fieldNames.cloud2), getValues(fieldNames.cloud3), value);
2706
2876
  }
2707
2877
  }
2708
2878
  }
2709
- }), (!isChangeGroup || disabled) && /*#__PURE__*/React__default.createElement(core.Grid, {
2879
+ }), (!isChangeGroup || disabled) && /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2710
2880
  item: true,
2711
2881
  xs: true
2712
- }), isChangeGroup && !disabled && /*#__PURE__*/React__default.createElement(core.Grid, {
2882
+ }), isChangeGroup && !disabled && /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2713
2883
  item: true,
2714
2884
  xs: true
2715
- }, /*#__PURE__*/React__default.createElement(core.IconButton, __assign({
2885
+ }, /*#__PURE__*/React__default['default'].createElement(core.IconButton, __assign({
2716
2886
  "aria-label": "delete",
2717
2887
  "data-testid": "remove-changeGroup",
2718
2888
  onClick: function onClick() {
@@ -2720,8 +2890,8 @@
2720
2890
  }
2721
2891
  }, lastRow ? {
2722
2892
  tabIndex: '-1'
2723
- } : {}), /*#__PURE__*/React__default.createElement(icons.Delete, null))));
2724
- };
2893
+ } : {}), /*#__PURE__*/React__default['default'].createElement(icons.Delete, null))));
2894
+ });
2725
2895
 
2726
2896
  var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
2727
2897
  switch (sumOfErrors) {
@@ -2760,9 +2930,9 @@
2760
2930
  var togglePane = _a.togglePane,
2761
2931
  sumOfErrors = _a.sumOfErrors;
2762
2932
  var color = sumOfErrors > 0 ? 'red' : 'green';
2763
- return /*#__PURE__*/React.createElement(core.Tooltip, {
2933
+ return /*#__PURE__*/React__namespace.createElement(core.Tooltip, {
2764
2934
  title: "View details"
2765
- }, /*#__PURE__*/React.createElement(core.Chip, {
2935
+ }, /*#__PURE__*/React__namespace.createElement(core.Chip, {
2766
2936
  size: "small",
2767
2937
  label: getIssuesLabel(sumOfErrors),
2768
2938
  style: __assign({}, buttonStyle(color)),
@@ -2771,20 +2941,20 @@
2771
2941
  };
2772
2942
 
2773
2943
  var ThumbsUp = function ThumbsUp(props) {
2774
- return /*#__PURE__*/React__default.createElement(core.SvgIcon, __assign({
2944
+ return /*#__PURE__*/React__default['default'].createElement(core.SvgIcon, __assign({
2775
2945
  fontSize: "inherit",
2776
2946
  viewBox: "0 0 58 69"
2777
- }, props), /*#__PURE__*/React__default.createElement("title", null, "Thumbs up"), /*#__PURE__*/React__default.createElement("g", {
2947
+ }, props), /*#__PURE__*/React__default['default'].createElement("title", null, "Thumbs up"), /*#__PURE__*/React__default['default'].createElement("g", {
2778
2948
  id: "Thumbs-up",
2779
2949
  stroke: "none",
2780
2950
  strokeWidth: "1",
2781
2951
  fill: "none",
2782
2952
  fillRule: "evenodd"
2783
- }, /*#__PURE__*/React__default.createElement("path", {
2953
+ }, /*#__PURE__*/React__default['default'].createElement("path", {
2784
2954
  d: "M3.99883665,31.7843145 C7.41834232,30.0745617 7.39773108,30.3805485 10.9988366,28.8843145 C14.5999422,27.3880805 16.06167,27.0500418 18.1988366,25.8843145 C19.0904815,25.3979628 19.820202,24.8243341 20.5488366,24.1634286 C20.9845024,23.7682595 22.8819728,21.7794437 23.5488366,20.8277879 C24.2586546,19.8148341 25.1756722,18.5003429 25.9988366,16.8843145 C28.3936103,12.1829184 28.889513,9.4076237 29.8988366,6.88431453 C30.4506375,5.50481234 31.0206747,4.13576029 31.6089482,2.77715837 C31.8562473,2.20602771 32.1648239,1.47549588 32.9988366,0.88431453 C33.2365758,0.715795602 34.0556054,0.253858312 35.0144255,0.0843145301 C36.0262338,-0.0945989315 37.1937102,0.0296108539 37.9980376,0.28431453 C38.7449403,0.520833719 39.4692925,0.860990256 40.1710941,1.30478414 C40.2879689,1.37869154 41.2393256,2.13799569 41.8988366,3.58269657 C42.290748,4.4412034 42.5040976,4.92788584 42.7988366,6.88431453 C42.9953293,8.18860032 43.0453293,9.52193365 42.9488366,10.8843145 C42.947848,11.8251839 42.6645146,13.1585172 42.0988366,14.8843145 C41.9160014,15.4421169 41.6403041,16.2990156 41.2988366,17.1941099 C40.9325633,18.1542284 40.4965053,19.1582935 40.1988366,19.8843145 C39.1594737,22.4193462 37.7498356,25.6900566 37.4561402,26.5124038 C37.2603433,27.0606352 37.1745754,27.6512721 37.1988366,28.2843145 C37.21217,28.4109812 37.2455033,28.5187344 37.2988366,28.6075742 C37.35217,28.6964139 37.45217,28.821994 37.5988366,28.9843145 C38.7401033,28.7100145 39.6802034,28.5266812 40.4191367,28.4343145 C41.6262088,28.2834305 44.7342553,28.0975232 47.4943878,28.1962584 C50.2545202,28.2949937 51.7465936,28.4428269 52.9988366,28.8843145 C53.8336653,29.1786396 54.540332,29.8453063 55.1188366,30.8843145 C55.3507184,31.5616882 55.477385,32.2303996 55.4988366,32.8904489 C55.5202882,33.5504981 55.4369549,34.21512 55.2488366,34.8843145 C54.956044,35.585751 54.5393773,36.1190843 53.9988366,36.4843145 C53.4582959,36.8495447 52.6416293,37.1495447 51.5488366,37.3843145 C51.46217,37.6709812 51.4455033,37.9376479 51.4988366,38.1843145 C51.55217,38.4309812 51.7188366,38.5976479 51.9988366,38.6843145 C53.0027645,38.7154727 53.6750204,38.7821393 54.0156044,38.8843145 C54.7031375,39.0905745 55.3642149,39.4239078 55.9988366,39.8843145 C56.4980387,40.3674862 56.831372,40.7202741 56.9988366,40.9426784 C57.2459451,41.2708552 57.8988366,42.3863253 57.8988366,43.8843145 C57.8988366,44.882974 57.53217,45.882974 56.7988366,46.8843145 C56.4100652,47.2645006 55.9767318,47.5818962 55.4988366,47.8365013 C55.0209415,48.0911064 54.5157721,48.2737108 53.9833285,48.3843145 L52.6988366,48.3843145 C52.2988366,48.6576479 52.0988366,48.9643145 52.0988366,49.3043145 C52.0988366,49.6443145 52.1655033,49.9376479 52.2988366,50.1843145 L53.4440689,50.6343145 C54.0486381,50.9097065 54.566894,51.3263732 54.9988366,51.8843145 C55.2403033,52.1962176 55.7126861,53.1830494 55.7488366,53.8843145 C55.7849872,54.5855797 55.7892838,54.8412841 55.675362,55.3021772 C55.5409724,55.8458769 55.3321306,56.373256 54.9488366,56.8843145 C54.6880408,57.2320423 54.3421972,57.542124 54.0113058,57.8145598 C53.720974,58.0536013 53.0623839,58.3923099 52.0355354,58.6843145 C51.8426264,58.739172 51.4970601,58.8058387 50.9988366,58.8843145 L49.2488366,58.9843145 C48.96217,59.1509812 48.7955033,59.3509812 48.7488366,59.5843145 C48.70217,59.8176479 48.7855033,60.0643145 48.9988366,60.3243145 L50.0168579,60.6843145 C51.0110333,61.2176479 51.5216929,61.9496429 51.5488366,62.8802998 C51.5895523,64.276285 51.475285,65.4556464 50.0016466,66.7843145 C49.4876586,67.2477386 48.8545536,67.4912052 48.1023318,67.7343145 C47.6452927,67.8820242 46.8607943,68.0486909 45.7488366,68.2343145 L40.0010327,68.6843145 C38.1462353,68.7443145 36.81217,68.7776479 35.9988366,68.7843145 C34.7788366,68.7943145 28.6377735,68.7414839 25.3910307,68.5132824 C22.1442879,68.2850808 21.4236621,68.1168902 18.9258088,67.5843145 C16.4279556,67.0517389 16.0894589,66.9976619 13.9988366,66.0843145 C12.6050885,65.4754163 11.2717551,64.6754163 9.99883665,63.6843145 L5.99912679,59.8445931 C5.6005732,59.505994 5.13964906,59.1744645 4.61635438,58.8500046 C3.83141237,58.3633147 3.44878136,58.2942773 2.99883665,57.9843145 C2.44718062,57.6042838 2.05635486,57.1737105 1.71932092,56.7662516 C1.30382099,56.2639309 0.723401214,54.7703696 0.498836646,53.8721113 C0.239479861,52.8346842 0.182966814,51.4491222 0.134208514,50.425802 C0.00166588165,47.644049 0.0975252306,47.2982714 0.0687602378,44.8458357 C0.0452570713,42.8420109 -0.0277106081,40.4082829 0.0112302522,39.9409643 C0.224109489,37.3862585 0.450803729,36.3915418 0.898836646,34.8843145 C1.09883665,34.2114947 1.78104521,33.1945675 2.17275045,32.889441 C2.5644557,32.5843145 3.13875358,32.2143561 3.99883665,31.7843145 Z",
2785
2955
  id: "Path-2",
2786
2956
  fill: "#FFBF00"
2787
- }), /*#__PURE__*/React__default.createElement("path", {
2957
+ }), /*#__PURE__*/React__default['default'].createElement("path", {
2788
2958
  d: "M37.1988366,28.2843145 C36.6491114,28.3570112 36.2566531,28.4236779 36.0214618,28.4843145 C35.0603746,28.7321005 34.3937143,29.0314706 34.021481,29.207818 C33.777778,29.3232735 32.5285093,30.04554 31.6988366,30.8956082 C31.0356177,31.5751308 30.7670551,32.3363186 30.5620165,32.9344937 C29.9561734,34.7019667 30.4904911,36.5989836 30.5988366,36.8981554 C30.8174274,37.5017447 31.0945063,37.9694877 31.2988366,38.4843145 C31.4064264,38.7553957 31.4498365,39.7521385 31.3985954,40.9130014 C31.388536,41.1408948 31.3995111,42.8738523 30.5816296,45.1307691 C30.125032,46.3907349 29.4940749,47.743868 28.6988366,48.906031 C27.6082165,50.4998658 26.3589437,51.7345157 26.1988366,51.8770596 C25.2520649,52.7199732 23.8988366,53.516454 23.3777374,54.1031009 C22.8566381,54.6897478 22.8988366,54.7174426 22.8988366,54.8843145 C22.8988366,55.0643438 22.9342857,55.2139882 23.0063234,55.32641 C23.2544011,55.7135594 23.9363916,55.6592779 25.0988366,54.8843145 C25.8683088,54.3713331 26.8213311,53.5952018 27.5988366,52.8259025 C28.3369913,52.0955388 28.9092218,51.3713331 29.2988366,50.8843145 C29.6096134,50.4958436 30.1890589,49.8244169 30.7488366,48.8700346 C31.0160857,48.4143934 31.4327524,47.5858201 31.9988366,46.3843145 C31.9988366,46.7176479 32.33217,47.2176479 32.9988366,47.8843145 C33.1686748,48.0541527 33.5020081,48.3041527 33.9988366,48.6343145 C33.535822,48.6343145 33.2024887,48.6676479 32.9988366,48.7343145 C31.9774176,49.1343145 31.4345654,49.3440777 30.8488366,49.8843145 C30.1709576,50.5095446 29.6310297,51.1756019 29.3988366,52.3843145 C29.1722814,53.5636787 29.3142136,54.632966 29.6488366,55.5921767 C29.928312,56.3933044 30.3156141,57.1176481 30.9865396,57.7652076 C31.1856402,57.9573742 31.5230725,58.2304098 31.9988366,58.5843145 C30.2988366,59.4509812 29.4488366,60.8843145 29.4488366,62.8843145 C29.4488366,65.8843145 31.4988366,68.7843145 35.9988366,68.7843145 C37.2162866,68.7843145 38.5382158,68.7607397 39.9988366,68.6843145 C41.1579568,68.623665 43.0746234,68.473665 45.7488366,68.2343145 C42.81999,68.0652276 40.9033233,67.948561 39.9988366,67.8843145 C38.4397862,67.7735739 34.9576244,67.4218793 34.5109642,67.2843145 C33.8898949,67.0930342 33.3876529,66.66767 32.9988366,66.3843145 C31.7988366,65.509797 31.6488366,63.8668327 31.6488366,63.3843145 C31.6488366,62.6767971 32.115551,61.4820497 32.7124803,60.9291427 C33.2967248,60.387985 34.101504,59.9827037 34.9988366,59.8343145 C36.8129843,59.5343145 37.8279851,59.6343145 38.9968712,59.6343145 C41.8836014,59.6343145 46.4559662,59.9063364 47.0327603,59.9503801 C47.6352731,59.9963876 48.2906319,60.1194654 48.9988366,60.3196132 C48.7881139,60.0647262 48.7047806,59.8196266 48.7488366,59.5843145 C48.7928927,59.3490025 48.9595594,59.1490025 49.2488366,58.9843145 C41.7042463,58.5910176 37.2875796,58.2576842 35.9988366,57.9843145 C34.0657222,57.57426 33.0783849,56.5232188 32.4988366,55.3843145 C32.1808463,54.7594131 31.9988366,54.0680377 32.1988366,52.8843145 C32.4054546,51.661422 33.0758788,51.154421 33.9988366,50.7343145 C35.0343809,50.2629616 36.2160776,50.213626 38.0168693,50.1343145 C41.4226671,49.9843145 41.9988366,49.8715355 44.9988366,49.8843145 C47.4322993,49.8928339 49.8656327,49.9928339 52.2988366,50.1843145 C52.1655033,49.9452767 52.0988366,49.6535253 52.0988366,49.3090604 C52.0988366,48.9645954 52.2988366,48.6563468 52.6988366,48.3843145 C49.4970675,48.4374708 47.2644784,48.4840975 46.0010696,48.5241946 C42.8267531,48.6249387 40.1650305,48.7843145 38.0159019,48.6090596 C36.5073153,48.3843145 35.5349602,47.7454709 35.0988366,47.3586886 C33.5267511,45.9644623 33.6909724,44.1458838 33.6988366,43.902953 C33.7490538,42.3517256 34.2594453,41.6540102 34.9988366,41.2843145 C36.9988366,40.2843145 38.521019,40.3843145 40.9988366,39.8843145 L51.9988366,38.6843145 C51.7847588,38.5992008 51.6347588,38.4325341 51.5488366,38.1843145 C51.4629145,37.9360949 51.4629145,37.6694283 51.5488366,37.3843145 C48.6830402,37.6590904 46.693269,37.8590904 45.579523,37.9843145 C44.2653604,38.1320725 42.7384649,38.3154059 40.9988366,38.5343145 C38.9988366,38.6009812 37.6749072,38.5733169 37.0270482,38.4513217 C35.0988366,38.2216852 33.4888366,37.4843145 33.4388366,34.8545872 C33.3888366,32.7744565 33.7430954,32.2207578 33.8988366,31.9295788 C34.3117653,31.1575537 34.9128559,30.575799 35.3988366,30.1843145 C36.0681111,29.6451768 36.8014444,29.2451768 37.5988366,28.9843145 C37.4503711,28.8228789 37.3503711,28.6970685 37.2988366,28.6068833 C37.2473022,28.516698 37.2139689,28.4091751 37.1988366,28.2843145 Z",
2789
2959
  id: "Path",
2790
2960
  fill: "#F28700"
@@ -2807,7 +2977,7 @@
2807
2977
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
2808
2978
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
2809
2979
  * */
2810
- var useStyles$1 = core.makeStyles({
2980
+ var useStyles$8 = core.makeStyles({
2811
2981
  issuesPane: {
2812
2982
  display: 'flex',
2813
2983
  flexDirection: 'column',
@@ -2909,26 +3079,26 @@
2909
3079
  var handleClose = _a.handleClose,
2910
3080
  _b = _a.errorList,
2911
3081
  errorList = _b === void 0 ? [] : _b;
2912
- var classes = useStyles$1();
2913
- return /*#__PURE__*/React.createElement(core.Paper, {
3082
+ var classes = useStyles$8();
3083
+ return /*#__PURE__*/React__namespace.createElement(core.Paper, {
2914
3084
  elevation: 3,
2915
3085
  className: classes.issuesPane
2916
- }, /*#__PURE__*/React.createElement("div", {
3086
+ }, /*#__PURE__*/React__namespace.createElement("div", {
2917
3087
  className: classes.paneHeader
2918
- }, /*#__PURE__*/React.createElement(core.Typography, {
3088
+ }, /*#__PURE__*/React__namespace.createElement(core.Typography, {
2919
3089
  "data-testid": "issuesPaneTitle",
2920
3090
  className: classes.paneTitle
2921
- }, getPaneTitle(errorList.length)), /*#__PURE__*/React.createElement(core.IconButton, {
3091
+ }, getPaneTitle(errorList.length)), /*#__PURE__*/React__namespace.createElement(core.IconButton, {
2922
3092
  "data-testid": "closeIssuesPane",
2923
3093
  size: "small",
2924
3094
  onClick: handleClose
2925
- }, /*#__PURE__*/React.createElement(icons.Close, null))), /*#__PURE__*/React.createElement("div", {
3095
+ }, /*#__PURE__*/React__namespace.createElement(icons.Close, null))), /*#__PURE__*/React__namespace.createElement("div", {
2926
3096
  className: classes.paneContent
2927
- }, errorList.length === 0 && /*#__PURE__*/React.createElement("div", {
3097
+ }, errorList.length === 0 && /*#__PURE__*/React__namespace.createElement("div", {
2928
3098
  className: classes.image,
2929
3099
  "data-testid": "zeroIssuesImage"
2930
- }, /*#__PURE__*/React.createElement(ThumbsUp, null)), errorList.length > 0 && errorList.map(function (error, index) {
2931
- return /*#__PURE__*/React.createElement(core.Typography // eslint-disable-next-line react/no-array-index-key
3100
+ }, /*#__PURE__*/React__namespace.createElement(ThumbsUp, null)), errorList.length > 0 && errorList.map(function (error, index) {
3101
+ return /*#__PURE__*/React__namespace.createElement(core.Typography // eslint-disable-next-line react/no-array-index-key
2932
3102
  , {
2933
3103
  // eslint-disable-next-line react/no-array-index-key
2934
3104
  key: "message-" + index,
@@ -2970,7 +3140,7 @@
2970
3140
  var errorValues = errorValue.reduce(function (l, i) {
2971
3141
  return l.concat(getErrorValues(i));
2972
3142
  }, []);
2973
- return list.concat.apply(list, __spread(errorValues));
3143
+ return list.concat.apply(list, __spreadArray([], __read(errorValues)));
2974
3144
  }
2975
3145
 
2976
3146
  return list.concat(getErrorValues(errorValue));
@@ -2995,11 +3165,11 @@
2995
3165
  var TafFormButtons = function TafFormButtons(_a) {
2996
3166
  var tafAction = _a.tafAction,
2997
3167
  onTafFormButtonPress = _a.onTafFormButtonPress;
2998
- var classes = useStyles();
3168
+ var classes = useStyles$9();
2999
3169
  var errors = reactHookForm.useFormContext().errors;
3000
3170
  var errorList = filterDuplicateErrors(getErrors(errors));
3001
3171
 
3002
- var _b = __read(React__default.useState(false), 2),
3172
+ var _b = __read(React__default['default'].useState(false), 2),
3003
3173
  isIssuesPaneOpen = _b[0],
3004
3174
  setIsIssuesPaneOpen = _b[1];
3005
3175
 
@@ -3007,19 +3177,19 @@
3007
3177
  return setIsIssuesPaneOpen(!isIssuesPaneOpen);
3008
3178
  };
3009
3179
 
3010
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Grid, {
3180
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3011
3181
  container: true,
3012
3182
  justify: "space-between",
3013
3183
  alignItems: "center",
3014
3184
  className: classes.lifecycleButtons
3015
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3185
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3016
3186
  item: true
3017
- }, /*#__PURE__*/React__default.createElement(IssuesButton, {
3187
+ }, /*#__PURE__*/React__default['default'].createElement(IssuesButton, {
3018
3188
  sumOfErrors: errorList.length,
3019
3189
  togglePane: toggleIssuesPane
3020
- })), /*#__PURE__*/React__default.createElement(core.Grid, {
3190
+ })), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3021
3191
  item: true
3022
- }, /*#__PURE__*/React__default.createElement(core.Button, {
3192
+ }, /*#__PURE__*/React__default['default'].createElement(core.Button, {
3023
3193
  "data-testid": "discardtaf",
3024
3194
  variant: "outlined",
3025
3195
  color: "secondary",
@@ -3027,9 +3197,9 @@
3027
3197
  className: classes.actionButton,
3028
3198
  onClick: function onClick() {
3029
3199
  // Simply discard the changes and close the dialog.
3030
- onTafFormButtonPress('DISCARDED');
3200
+ onTafFormButtonPress('DISCARD');
3031
3201
  }
3032
- }, "Discard"), /*#__PURE__*/React__default.createElement(core.Button, {
3202
+ }, "Discard"), /*#__PURE__*/React__default['default'].createElement(core.Button, {
3033
3203
  "data-testid": "savedrafttaf",
3034
3204
  variant: "outlined",
3035
3205
  color: "secondary",
@@ -3038,20 +3208,20 @@
3038
3208
  onClick: function onClick() {
3039
3209
  /* Save the TAF as draft:
3040
3210
  if action NEW or DRAFT - new status will be DRAFT -- default
3041
- if action AMENDED - new status will be DRAFT_AMENDED
3042
- if action CORRECTED - new status will be DRAFT_CORRECTED
3043
- if action DRAFT_AMENDED - new status will be DRAFT_AMENDED
3044
- if action DRAFT_CORRECTED - new status will be DRAFT_CORRECTED
3211
+ if action AMEND - new status will be DRAFT_AMENDED
3212
+ if action CORRECT - new status will be DRAFT_CORRECTED
3213
+ if action DRAFT_AMEND - new status will be DRAFT_AMENDED
3214
+ if action DRAFT_CORRECT - new status will be DRAFT_CORRECTED
3045
3215
  */
3046
3216
  switch (tafAction) {
3047
- case 'AMENDED':
3048
- case 'DRAFT_AMENDED':
3049
- onTafFormButtonPress('DRAFT_AMENDED');
3217
+ case 'AMEND':
3218
+ case 'DRAFT_AMEND':
3219
+ onTafFormButtonPress('DRAFT_AMEND');
3050
3220
  break;
3051
3221
 
3052
- case 'CORRECTED':
3053
- case 'DRAFT_CORRECTED':
3054
- onTafFormButtonPress('DRAFT_CORRECTED');
3222
+ case 'CORRECT':
3223
+ case 'DRAFT_CORRECT':
3224
+ onTafFormButtonPress('DRAFT_CORRECT');
3055
3225
  break;
3056
3226
 
3057
3227
  default:
@@ -3059,7 +3229,7 @@
3059
3229
  break;
3060
3230
  }
3061
3231
  }
3062
- }, "Save"), /*#__PURE__*/React__default.createElement(core.Button, {
3232
+ }, "Save"), /*#__PURE__*/React__default['default'].createElement(core.Button, {
3063
3233
  "data-testid": "publishtaf",
3064
3234
  variant: "outlined",
3065
3235
  color: "secondary",
@@ -3068,33 +3238,77 @@
3068
3238
  onClick: function onClick() {
3069
3239
  /* Publish the TAF:
3070
3240
  if action NEW or DRAFT - new status will be PUBLISHED -- default
3071
- if action AMENDED - new status will be AMENDED
3072
- if action CORRECTED - new status will be CORRECTED
3073
- if action DRAFT_AMENDED - new status will be AMENDED
3074
- if action DRAFT_CORRECTED - new status will be CORRECTED
3241
+ if action AMEND - new status will be AMENDED
3242
+ if action CORRECT - new status will be CORRECTED
3243
+ if action DRAFT_AMEND - new status will be AMENDED
3244
+ if action DRAFT_CORRECT - new status will be CORRECTED
3075
3245
  */
3076
3246
  switch (tafAction) {
3077
- case 'AMENDED':
3078
- case 'DRAFT_AMENDED':
3079
- onTafFormButtonPress('AMENDED');
3247
+ case 'AMEND':
3248
+ case 'DRAFT_AMEND':
3249
+ onTafFormButtonPress('AMEND');
3080
3250
  break;
3081
3251
 
3082
- case 'CORRECTED':
3083
- case 'DRAFT_CORRECTED':
3084
- onTafFormButtonPress('CORRECTED');
3252
+ case 'CORRECT':
3253
+ case 'DRAFT_CORRECT':
3254
+ onTafFormButtonPress('CORRECT');
3085
3255
  break;
3086
3256
 
3087
3257
  default:
3088
- onTafFormButtonPress('PUBLISHED');
3258
+ onTafFormButtonPress('PUBLISH');
3089
3259
  break;
3090
3260
  }
3091
3261
  }
3092
- }, "Publish"))), isIssuesPaneOpen && /*#__PURE__*/React__default.createElement(IssuesPane, {
3262
+ }, "Publish"))), isIssuesPaneOpen && /*#__PURE__*/React__default['default'].createElement(IssuesPane, {
3093
3263
  errorList: errorList,
3094
3264
  handleClose: toggleIssuesPane
3095
3265
  }));
3096
3266
  };
3097
3267
 
3268
+ /* *
3269
+ * Licensed under the Apache License, Version 2.0 (the "License");
3270
+ * you may not use this file except in compliance with the License.
3271
+ * You may obtain a copy of the License at
3272
+ *
3273
+ * http://www.apache.org/licenses/LICENSE-2.0
3274
+ *
3275
+ * Unless required by applicable law or agreed to in writing, software
3276
+ * distributed under the License is distributed on an "AS IS" BASIS,
3277
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3278
+ * See the License for the specific language governing permissions and
3279
+ * limitations under the License.
3280
+ *
3281
+ * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3282
+ * Copyright 2021 - Finnish Meteorological Institute (FMI)
3283
+ * */
3284
+ var useStyles$7 = core.makeStyles(function () {
3285
+ return {
3286
+ dragHandle: {
3287
+ backgroundColor: 'transparent',
3288
+ '&:hover': {
3289
+ backgroundColor: 'transparent'
3290
+ },
3291
+ cursor: function cursor(isSorting) {
3292
+ return isSorting ? 'grabbing' : 'grab';
3293
+ }
3294
+ }
3295
+ };
3296
+ });
3297
+
3298
+ var DragHandle = function DragHandle(_a) {
3299
+ var _b = _a.isSorting,
3300
+ isSorting = _b === void 0 ? false : _b,
3301
+ _c = _a.isDisabled,
3302
+ isDisabled = _c === void 0 ? false : _c;
3303
+ var classes = useStyles$7(isSorting);
3304
+ return /*#__PURE__*/React__default['default'].createElement(core.IconButton, {
3305
+ className: classes.dragHandle + " handle",
3306
+ "data-testid": "dragHandle",
3307
+ disableRipple: true,
3308
+ disabled: isDisabled
3309
+ }, /*#__PURE__*/React__default['default'].createElement(icons.DragIndicator, null));
3310
+ };
3311
+
3098
3312
  var emptyRow = {
3099
3313
  valid: '',
3100
3314
  wind: '',
@@ -3124,29 +3338,35 @@
3124
3338
  onFormAction = _c === void 0 ? function () {
3125
3339
  return null;
3126
3340
  } : _c;
3127
- var classes = useStyles();
3341
+ var classes = useStyles$9();
3128
3342
  var confirmDialog = shared.useConfirmationDialog();
3343
+
3344
+ var _d = shared.useDraftFormHelpers(),
3345
+ toggleIsDraft = _d.toggleIsDraft,
3346
+ DraftFieldHelper = _d.DraftFieldHelper;
3347
+
3129
3348
  var api$1 = api.useApiContext().api;
3130
3349
  var isDisabled = mode === 'view';
3131
3350
 
3132
- var _d = reactHookForm.useFormContext(),
3133
- control = _d.control,
3134
- handleSubmit = _d.handleSubmit,
3135
- watch = _d.watch,
3136
- getValues = _d.getValues,
3137
- errors = _d.errors;
3351
+ var _e = reactHookForm.useFormContext(),
3352
+ control = _e.control,
3353
+ handleSubmit = _e.handleSubmit,
3354
+ watch = _e.watch,
3355
+ getValues = _e.getValues,
3356
+ errors = _e.errors,
3357
+ trigger = _e.trigger;
3138
3358
 
3139
3359
  var hiddenInputFields = ['baseTime', 'issueDate', 'type', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
3140
3360
 
3141
- var _e = __read(React__default.useState(watch()), 2),
3142
- delayedFormValues = _e[0],
3143
- setDelayedFormValues = _e[1];
3361
+ var _f = __read(React__default['default'].useState(watch()), 2),
3362
+ delayedFormValues = _f[0],
3363
+ setDelayedFormValues = _f[1];
3144
3364
 
3145
- var _f = __read(useTACGenerator(convertTafValuesToObject(delayedFormValues), api$1.getTAC, staticTAC), 2),
3146
- TAC = _f[0],
3147
- updateTAC = _f[1];
3365
+ var _g = __read(useTACGenerator(convertTafValuesToObject(delayedFormValues), api$1.getTAC, staticTAC), 2),
3366
+ TAC = _g[0],
3367
+ updateTAC = _g[1];
3148
3368
 
3149
- React__default.useEffect(function () {
3369
+ React__default['default'].useEffect(function () {
3150
3370
  if (!Object.keys(errors).length && staticTAC === '') {
3151
3371
  updateTAC(convertTafValuesToObject(delayedFormValues));
3152
3372
  } // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -3157,9 +3377,9 @@
3157
3377
  setDelayedFormValues(getValues());
3158
3378
  };
3159
3379
 
3160
- var _g = __read(React__default.useState(false), 2),
3161
- isFormDirty = _g[0],
3162
- setFormDirty = _g[1];
3380
+ var _h = __read(React__default['default'].useState(false), 2),
3381
+ isFormDirty = _h[0],
3382
+ setFormDirty = _h[1];
3163
3383
 
3164
3384
  var onFormChange = function onFormChange() {
3165
3385
  return !isFormDirty ? setFormDirty(true) : null;
@@ -3167,13 +3387,14 @@
3167
3387
 
3168
3388
  shared.usePreventBrowserClose(isFormDirty && !isDisabled);
3169
3389
 
3170
- var _h = reactHookForm.useFieldArray({
3390
+ var _j = reactHookForm.useFieldArray({
3171
3391
  control: control,
3172
3392
  name: 'changeGroups'
3173
3393
  }),
3174
- fields = _h.fields,
3175
- append = _h.append,
3176
- remove = _h.remove;
3394
+ fields = _j.fields,
3395
+ append = _j.append,
3396
+ remove = _j.remove,
3397
+ move = _j.move;
3177
3398
 
3178
3399
  var onSubmit = function onSubmit(data) {
3179
3400
  // eslint-disable-next-line no-console
@@ -3191,14 +3412,15 @@
3191
3412
  var onTafButtonPress = function onTafButtonPress(action) {
3192
3413
  switch (action) {
3193
3414
  case 'DRAFT':
3194
- case 'DRAFT_AMENDED':
3195
- case 'DRAFT_CORRECTED':
3415
+ case 'DRAFT_AMEND':
3416
+ case 'DRAFT_CORRECT':
3417
+ toggleIsDraft(true);
3196
3418
  handleSubmit(function (data) {
3197
3419
  onFormAction(action, convertTafValuesToObject(data));
3198
3420
  })();
3199
3421
  break;
3200
3422
 
3201
- case 'DISCARDED':
3423
+ case 'DISCARD':
3202
3424
  if (isFormDirty) {
3203
3425
  showConfirmDialog(action).then(function () {
3204
3426
  onFormAction(action);
@@ -3209,9 +3431,10 @@
3209
3431
 
3210
3432
  break;
3211
3433
 
3212
- case 'AMENDED':
3213
- case 'CORRECTED':
3214
- case 'PUBLISHED':
3434
+ case 'AMEND':
3435
+ case 'CORRECT':
3436
+ case 'PUBLISH':
3437
+ toggleIsDraft(false);
3215
3438
  handleSubmit(function (data) {
3216
3439
  showConfirmDialog(action).then(function () {
3217
3440
  onFormAction(action, convertTafValuesToObject(data));
@@ -3229,11 +3452,7 @@
3229
3452
  append(emptyRow);
3230
3453
  };
3231
3454
 
3232
- var onRemoverow = function onRemoverow(index) {
3233
- remove(index);
3234
- };
3235
-
3236
- React__default.useEffect(function () {
3455
+ React__default['default'].useEffect(function () {
3237
3456
  // set changegroups on mount (if no changegroups - add empty one by default)
3238
3457
  if (changeGroups.length > 0) {
3239
3458
  changeGroups.forEach(function (group) {
@@ -3244,60 +3463,94 @@
3244
3463
  } // eslint-disable-next-line react-hooks/exhaustive-deps
3245
3464
 
3246
3465
  }, []);
3247
- return /*#__PURE__*/React__default.createElement("form", {
3466
+
3467
+ var _k = useDragOrder(trigger, move, fields),
3468
+ onChangeOrder = _k.onChangeOrder,
3469
+ sortedFields = _k.sortedFields,
3470
+ setSortedFields = _k.setSortedFields;
3471
+
3472
+ var onRemoverow = function onRemoverow(index) {
3473
+ remove(index);
3474
+ var newList = fields.length > 1 ? fields.filter(function (_, fieldIndex) {
3475
+ return fieldIndex === index;
3476
+ }) : [];
3477
+ setSortedFields(newList);
3478
+ };
3479
+
3480
+ return /*#__PURE__*/React__default['default'].createElement("form", {
3248
3481
  onSubmit: handleSubmit(onSubmit),
3249
3482
  onChange: onFormChange,
3250
3483
  onBlur: onFormBlur
3251
- }, /*#__PURE__*/React__default.createElement(core.Typography, {
3484
+ }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3252
3485
  className: classes.tacTitle
3253
- }, "TAC"), /*#__PURE__*/React__default.createElement(core.Typography, {
3486
+ }, "TAC"), /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3254
3487
  "data-testid": "form-tac-message",
3255
3488
  className: classes.tacText
3256
3489
  }, TAC.split('\n').map(function (line) {
3257
- return /*#__PURE__*/React__default.createElement("span", {
3490
+ return /*#__PURE__*/React__default['default'].createElement("span", {
3258
3491
  key: line,
3259
3492
  className: classes.tacLine,
3260
3493
  "data-testid": "tafform-tac-message-line"
3261
3494
  }, line);
3262
- })), /*#__PURE__*/React__default.createElement(TafFormRow, {
3495
+ })), /*#__PURE__*/React__default['default'].createElement(TafFormRow, {
3263
3496
  disabled: isDisabled
3264
- }), fields.map(function (item, index) {
3265
- return /*#__PURE__*/React__default.createElement(TafFormRow, {
3497
+ }), /*#__PURE__*/React__default['default'].createElement(reactSortablejs.ReactSortable, {
3498
+ tag: "div",
3499
+ list: sortedFields,
3500
+ setList: setSortedFields,
3501
+ animation: 200,
3502
+ onSort: onChangeOrder,
3503
+ handle: ".handle",
3504
+ direction: "vertical",
3505
+ // hover props
3506
+ forceFallback: true,
3507
+ onStart: function onStart() {
3508
+ reactSortablejs.Sortable.ghost.style.opacity = '1';
3509
+ }
3510
+ }, sortedFields.map(function (_a, index) {
3511
+ var chosen = _a.chosen;
3512
+ var item = fields[index];
3513
+ return /*#__PURE__*/React__default['default'].createElement(TafFormRow, {
3266
3514
  field: item,
3515
+ className: classes.formRow,
3267
3516
  key: item.id,
3268
3517
  index: index,
3269
3518
  lastRow: fields.length === index + 1,
3270
3519
  disabled: isDisabled,
3271
3520
  onRemoveChangeGroup: onRemoverow,
3272
- isChangeGroup: true
3521
+ isChangeGroup: true,
3522
+ dragHandle: /*#__PURE__*/React__default['default'].createElement(DragHandle, {
3523
+ isDisabled: sortedFields.length === 1 || isDisabled,
3524
+ isSorting: chosen
3525
+ })
3273
3526
  });
3274
- }), !isDisabled && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Grid, {
3527
+ })), !isDisabled && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3275
3528
  container: true,
3276
3529
  item: true,
3277
3530
  xs: 12,
3278
3531
  justify: "flex-end"
3279
- }, /*#__PURE__*/React__default.createElement(core.IconButton, {
3532
+ }, /*#__PURE__*/React__default['default'].createElement(core.IconButton, {
3280
3533
  "aria-label": "add",
3281
3534
  "data-testid": "add-changeGroup",
3282
3535
  onClick: onAddRow,
3283
3536
  className: classes.addButton
3284
- }, /*#__PURE__*/React__default.createElement(icons.Add, null))), /*#__PURE__*/React__default.createElement(TafFormButtons, {
3537
+ }, /*#__PURE__*/React__default['default'].createElement(icons.Add, null))), /*#__PURE__*/React__default['default'].createElement(TafFormButtons, {
3285
3538
  tafAction: tafAction,
3286
3539
  onTafFormButtonPress: onTafButtonPress
3287
3540
  })), hiddenInputFields.map(function (field) {
3288
- return /*#__PURE__*/React__default.createElement(formFields.ReactHookFormHiddenInput, {
3541
+ return /*#__PURE__*/React__default['default'].createElement(formFields.ReactHookFormHiddenInput, {
3289
3542
  name: field,
3290
3543
  key: field
3291
3544
  });
3292
- }));
3545
+ }), /*#__PURE__*/React__default['default'].createElement(DraftFieldHelper, null));
3293
3546
  };
3294
3547
 
3295
3548
  var getMessageType = function getMessageType(taf, tafAction) {
3296
- if (tafAction === 'CORRECTED') {
3549
+ if (tafAction === 'CORRECT') {
3297
3550
  return 'COR';
3298
3551
  }
3299
3552
 
3300
- if (tafAction === 'AMENDED') {
3553
+ if (tafAction === 'AMEND') {
3301
3554
  return 'AMD';
3302
3555
  }
3303
3556
 
@@ -3305,12 +3558,12 @@
3305
3558
  }; // For corrections and amendment we need to add the previousValidStart and End for the TAC converter
3306
3559
 
3307
3560
  var getAmendedCorrectedTafTimes = function getAmendedCorrectedTafTimes(taf, tafAction) {
3308
- var previousValidDateStart = taf.previousValidDateStart && tafAction !== 'AMENDED' ? taf.previousValidDateStart : taf.validDateStart;
3309
- var previousValidDateEnd = taf.previousValidDateEnd && tafAction !== 'AMENDED' ? taf.previousValidDateEnd : taf.validDateEnd; // For amendment change valid start time to current time
3561
+ var previousValidDateStart = taf.previousValidDateStart && tafAction !== 'AMEND' ? taf.previousValidDateStart : taf.validDateStart;
3562
+ var previousValidDateEnd = taf.previousValidDateEnd && tafAction !== 'AMEND' ? taf.previousValidDateEnd : taf.validDateEnd; // For amendment change valid start time to current time
3310
3563
  // only do this if we're already within the validity period
3311
3564
 
3312
- if ((tafAction === 'AMENDED' || tafAction === 'DRAFT_AMENDED') && moment.utc() >= moment.utc(taf.validDateStart)) {
3313
- var now = moment.utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
3565
+ if ((tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND') && moment__default['default'].utc() >= moment__default['default'].utc(taf.validDateStart)) {
3566
+ var now = moment__default['default'].utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
3314
3567
  var validObj = {
3315
3568
  start: now,
3316
3569
  end: taf.baseForecast.valid.end
@@ -3331,9 +3584,9 @@
3331
3584
  });
3332
3585
  };
3333
3586
  var prepareTafValues = function prepareTafValues(_taf, tafAction) {
3334
- // If action is AMENDED/CORRECTED/DRAFT_AMENDED/DRAFT_CORRECTION - add previous valid start and end
3335
- // If action is AMENDED/DRAFT_AMENDED - update validity start time to current time
3336
- var taf = tafAction === 'AMENDED' || tafAction === 'DRAFT_AMENDED' || tafAction === 'CORRECTED' || tafAction === 'DRAFT_CORRECTED' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
3587
+ // If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
3588
+ // If action is AMEND/DRAFT_AMEND - update validity start time to current time
3589
+ var taf = tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND' || tafAction === 'CORRECT' || tafAction === 'DRAFT_CORRECT' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
3337
3590
  return __assign(__assign(__assign({}, taf), {
3338
3591
  messageType: getMessageType(taf, tafAction),
3339
3592
  baseForecast: formatFormValues(taf.baseForecast)
@@ -3362,9 +3615,9 @@
3362
3615
  reValidateMode: 'onChange',
3363
3616
  criteriaMode: 'all'
3364
3617
  };
3365
- return /*#__PURE__*/React__default.createElement(formFields.ReactHookFormProvider, {
3618
+ return /*#__PURE__*/React__default['default'].createElement(formFields.ReactHookFormProvider, {
3366
3619
  options: options
3367
- }, /*#__PURE__*/React__default.createElement(TafForm, {
3620
+ }, /*#__PURE__*/React__default['default'].createElement(TafForm, {
3368
3621
  mode: mode,
3369
3622
  changeGroups: changeGroups,
3370
3623
  tafAction: tafAction,
@@ -3373,7 +3626,7 @@
3373
3626
  }));
3374
3627
  };
3375
3628
 
3376
- var useStyles$2 = core.makeStyles({
3629
+ var useStyles$6 = core.makeStyles({
3377
3630
  dialogHeader: {
3378
3631
  borderRadius: '3px',
3379
3632
  border: 'solid 1px #f6f5f5',
@@ -3398,45 +3651,45 @@
3398
3651
  });
3399
3652
 
3400
3653
  var ContentDialog = function ContentDialog(_a) {
3401
- var open = _a.open,
3402
- toggleDialogStatus = _a.toggleDialogStatus,
3403
- titleComponent = _a.titleComponent,
3404
- children = _a.children,
3405
- onClose = _a.onClose,
3406
- _b = _a.alertBanner,
3654
+ var open = _a.open;
3655
+ _a.toggleDialogStatus;
3656
+ var titleComponent = _a.titleComponent,
3657
+ children = _a.children;
3658
+ _a.onClose;
3659
+ var _b = _a.alertBanner,
3407
3660
  alertBanner = _b === void 0 ? null : _b,
3408
3661
  onFormAction = _a.onFormAction,
3409
3662
  other = __rest(_a, ["open", "toggleDialogStatus", "titleComponent", "children", "onClose", "alertBanner", "onFormAction"]);
3410
3663
 
3411
- var classes = useStyles$2();
3412
- return /*#__PURE__*/React.createElement(core.Dialog, __assign({
3664
+ var classes = useStyles$6();
3665
+ return /*#__PURE__*/React__namespace.createElement(core.Dialog, __assign({
3413
3666
  "data-testid": "contentDialog",
3414
3667
  open: open,
3415
3668
  onClose: function onClose() {
3416
- return onFormAction('CLOSED');
3669
+ return onFormAction('CLOSE');
3417
3670
  },
3418
3671
  maxWidth: other.maxWidth ? other.maxWidth : 'lg',
3419
3672
  disableBackdropClick: true
3420
- }, other), /*#__PURE__*/React.createElement(core.DialogTitle, {
3673
+ }, other), /*#__PURE__*/React__namespace.createElement(core.DialogTitle, {
3421
3674
  disableTypography: true,
3422
3675
  className: classes.dialogHeader
3423
- }, /*#__PURE__*/React.createElement(core.Grid, {
3676
+ }, /*#__PURE__*/React__namespace.createElement(core.Grid, {
3424
3677
  container: true
3425
- }, /*#__PURE__*/React.createElement(core.Grid, {
3678
+ }, /*#__PURE__*/React__namespace.createElement(core.Grid, {
3426
3679
  item: true,
3427
3680
  xs: 11,
3428
3681
  className: classes.dialogTitle
3429
- }, titleComponent), /*#__PURE__*/React.createElement(core.Grid, {
3682
+ }, titleComponent), /*#__PURE__*/React__namespace.createElement(core.Grid, {
3430
3683
  item: true,
3431
3684
  xs: true,
3432
3685
  className: classes.dialogCloseButton
3433
- }, /*#__PURE__*/React.createElement(core.IconButton, {
3686
+ }, /*#__PURE__*/React__namespace.createElement(core.IconButton, {
3434
3687
  "data-testid": "closeDialog",
3435
3688
  size: "small",
3436
3689
  onClick: function onClick() {
3437
- return onFormAction('CLOSED');
3690
+ return onFormAction('CLOSE');
3438
3691
  }
3439
- }, /*#__PURE__*/React.createElement(icons.Close, null))))), alertBanner !== null && alertBanner, /*#__PURE__*/React.createElement(core.DialogContent, {
3692
+ }, /*#__PURE__*/React__namespace.createElement(icons.Close, null))))), alertBanner !== null && alertBanner, /*#__PURE__*/React__namespace.createElement(core.DialogContent, {
3440
3693
  className: classes.dialogChildren
3441
3694
  }, children));
3442
3695
  };
@@ -3459,11 +3712,11 @@
3459
3712
  * */
3460
3713
 
3461
3714
  var getActiveStatus = function getActiveStatus(listType, className) {
3462
- return listType === 'ACTIVE' ? /*#__PURE__*/React__default.createElement(icons.CheckCircle, {
3715
+ return listType === 'ACTIVE' ? /*#__PURE__*/React__default['default'].createElement(icons.CheckCircle, {
3463
3716
  "data-testid": "status-active",
3464
3717
  className: className,
3465
3718
  fontSize: "small"
3466
- }) : /*#__PURE__*/React__default.createElement(icons.Schedule, {
3719
+ }) : /*#__PURE__*/React__default['default'].createElement(icons.Schedule, {
3467
3720
  "data-testid": "status-upcoming",
3468
3721
  className: className,
3469
3722
  fontSize: "small"
@@ -3475,13 +3728,13 @@
3475
3728
  if (taf.status === 'NEW') return null;
3476
3729
 
3477
3730
  if (taf.status === 'CANCELLED') {
3478
- return /*#__PURE__*/React__default.createElement(shared.StatusTag, {
3731
+ return /*#__PURE__*/React__default['default'].createElement(shared.StatusTag, {
3479
3732
  content: "cancelled",
3480
3733
  color: "red"
3481
3734
  });
3482
3735
  }
3483
3736
 
3484
- return /*#__PURE__*/React__default.createElement(shared.StatusTag, {
3737
+ return /*#__PURE__*/React__default['default'].createElement(shared.StatusTag, {
3485
3738
  content: taf.status.toLowerCase(),
3486
3739
  color: taf.status === 'EXPIRED' ? 'grey' : 'green'
3487
3740
  });
@@ -3498,7 +3751,7 @@
3498
3751
 
3499
3752
  return 'Draft';
3500
3753
  };
3501
- var useStyles$3 = core.makeStyles({
3754
+ var useStyles$5 = core.makeStyles({
3502
3755
  cardWrapper: {
3503
3756
  width: '100%'
3504
3757
  },
@@ -3524,102 +3777,102 @@
3524
3777
  TAC = _b === void 0 ? '' : _b,
3525
3778
  _c = _a.showTac,
3526
3779
  showTac = _c === void 0 ? false : _c;
3527
- var classes = useStyles$3();
3528
- var validTimeDate = moment.utc(taf.validDateStart).format('DD MMM');
3529
- var baseTime = moment.utc(taf.baseTime).format('HH:mm');
3530
- return /*#__PURE__*/React__default.createElement(core.Card, {
3780
+ var classes = useStyles$5();
3781
+ var validTimeDate = moment__default['default'].utc(taf.validDateStart).format('DD MMM');
3782
+ var baseTime = moment__default['default'].utc(taf.baseTime).format('HH:mm');
3783
+ return /*#__PURE__*/React__default['default'].createElement(core.Card, {
3531
3784
  elevation: 0,
3532
3785
  className: classes.cardWrapper
3533
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3786
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3534
3787
  container: true,
3535
3788
  alignItems: "center",
3536
3789
  spacing: 1
3537
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3790
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3538
3791
  item: true,
3539
3792
  xs: 3,
3540
3793
  sm: 2,
3541
3794
  md: 1
3542
- }, /*#__PURE__*/React__default.createElement(core.Typography, {
3795
+ }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3543
3796
  variant: "subtitle2",
3544
3797
  noWrap: true,
3545
3798
  className: classes.font
3546
- }, taf.location)), /*#__PURE__*/React__default.createElement(core.Grid, {
3799
+ }, taf.location)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3547
3800
  item: true,
3548
3801
  xs: 3,
3549
3802
  sm: 3,
3550
3803
  md: 1,
3551
3804
  container: true
3552
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3805
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3553
3806
  item: true,
3554
3807
  xs: 3,
3555
3808
  sm: 3,
3556
3809
  md: 3,
3557
3810
  className: classes.alignIcon
3558
- }, showTac && /*#__PURE__*/React__default.createElement(core.Tooltip, {
3811
+ }, showTac && /*#__PURE__*/React__default['default'].createElement(core.Tooltip, {
3559
3812
  "data-testid": "taflistrow-tactooltip",
3560
- title: /*#__PURE__*/React__default.createElement("div", {
3813
+ title: /*#__PURE__*/React__default['default'].createElement("div", {
3561
3814
  style: {
3562
3815
  whiteSpace: 'pre-line'
3563
3816
  }
3564
3817
  }, TAC),
3565
3818
  placement: "bottom-start"
3566
- }, /*#__PURE__*/React__default.createElement(icons.InfoOutlined, {
3819
+ }, /*#__PURE__*/React__default['default'].createElement(icons.InfoOutlined, {
3567
3820
  "data-testid": "taflistrow-tacicon",
3568
3821
  color: "secondary",
3569
3822
  fontSize: "small"
3570
- }))), /*#__PURE__*/React__default.createElement(core.Grid, {
3823
+ }))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3571
3824
  item: true,
3572
3825
  xs: 9,
3573
3826
  sm: 9,
3574
3827
  md: 9
3575
- }, /*#__PURE__*/React__default.createElement(core.Typography, {
3828
+ }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3576
3829
  variant: "subtitle2",
3577
3830
  className: classes.font,
3578
3831
  "data-testid": "baseTime"
3579
- }, baseTime))), /*#__PURE__*/React__default.createElement(core.Grid, {
3832
+ }, baseTime))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3580
3833
  item: true,
3581
3834
  xs: 3,
3582
3835
  sm: 2,
3583
3836
  md: 1
3584
- }, /*#__PURE__*/React__default.createElement(core.Typography, {
3837
+ }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3585
3838
  variant: "subtitle2",
3586
3839
  className: classes.font,
3587
3840
  "data-testid": "validTimeDate"
3588
- }, validTimeDate)), /*#__PURE__*/React__default.createElement(core.Grid, {
3841
+ }, validTimeDate)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3589
3842
  item: true,
3590
3843
  xs: 3,
3591
3844
  sm: 3,
3592
3845
  md: 6
3593
- }, /*#__PURE__*/React__default.createElement(core.Typography, {
3846
+ }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3594
3847
  variant: "subtitle2",
3595
3848
  className: classes.font,
3596
3849
  "data-testid": "validTimeSlot"
3597
3850
  }, formatValidToString({
3598
3851
  start: taf.validDateStart,
3599
3852
  end: taf.validDateEnd
3600
- }))), /*#__PURE__*/React__default.createElement(core.Grid, {
3853
+ }))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3601
3854
  item: true,
3602
3855
  xs: 12,
3603
3856
  sm: 4,
3604
3857
  md: 3
3605
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3858
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3606
3859
  container: true,
3607
3860
  justify: "flex-start",
3608
3861
  spacing: 2
3609
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3862
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3610
3863
  item: true,
3611
3864
  xs: 8,
3612
3865
  container: true,
3613
3866
  justify: "flex-end"
3614
- }, taf.status === 'DRAFT' || taf.status === 'DRAFT_CORRECTED' || taf.status === 'DRAFT_AMENDED' ? /*#__PURE__*/React__default.createElement(core.Button, {
3867
+ }, taf.status === 'DRAFT' || taf.status === 'DRAFT_CORRECTED' || taf.status === 'DRAFT_AMENDED' ? /*#__PURE__*/React__default['default'].createElement(core.Button, {
3615
3868
  color: "secondary",
3616
3869
  size: "small",
3617
3870
  "data-testid": "tafRow-draft",
3618
- startIcon: /*#__PURE__*/React__default.createElement(icons.Create, {
3871
+ startIcon: /*#__PURE__*/React__default['default'].createElement(icons.Create, {
3619
3872
  fontSize: "small",
3620
3873
  color: "secondary"
3621
3874
  })
3622
- }, getDraftTitle(taf.status)) : getStatusTagList(taf)), /*#__PURE__*/React__default.createElement(core.Grid, {
3875
+ }, getDraftTitle(taf.status)) : getStatusTagList(taf)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3623
3876
  item: true,
3624
3877
  className: classes.alignIcon
3625
3878
  }, taf.status !== 'NEW' && taf.status !== 'DRAFT' && taf.status !== 'DRAFT_CORRECTED' && taf.status !== 'DRAFT_AMENDED' && taf.status !== 'CANCELLED' && listType !== 'EXPIRED' && getActiveStatus(listType, classes.activeStatus))))));
@@ -3643,10 +3896,10 @@
3643
3896
  * */
3644
3897
  var getListType = function getListType(taf, locationSettings) {
3645
3898
  if (!taf) return null;
3646
- var now = moment.utc();
3647
- var baseTime = moment.utc(taf.baseTime);
3899
+ var now = moment__default['default'].utc();
3900
+ var baseTime = moment__default['default'].utc(taf.baseTime);
3648
3901
  var activityPeriod = locationSettings[taf.location].activity_period;
3649
- var nextBaseTime = moment.utc(taf.baseTime).add(activityPeriod, 'hours');
3902
+ var nextBaseTime = moment__default['default'].utc(taf.baseTime).add(activityPeriod, 'hours');
3650
3903
 
3651
3904
  if (taf.status === 'EXPIRED') {
3652
3905
  return 'EXPIRED';
@@ -3686,10 +3939,10 @@
3686
3939
  onFormAction = _a.onFormAction;
3687
3940
  var taf = tafFromBackend ? tafFromBackend.taf : null;
3688
3941
  var locationSettings = useTafSettings(tafConfig).locations;
3689
- return /*#__PURE__*/React__default.createElement(ContentDialog, {
3942
+ return /*#__PURE__*/React__default['default'].createElement(ContentDialog, {
3690
3943
  open: open,
3691
3944
  toggleDialogStatus: toggleFormDialog,
3692
- titleComponent: /*#__PURE__*/React__default.createElement(TafListRow, {
3945
+ titleComponent: /*#__PURE__*/React__default['default'].createElement(TafListRow, {
3693
3946
  taf: taf,
3694
3947
  listType: getListType(taf, locationSettings)
3695
3948
  }),
@@ -3727,44 +3980,44 @@
3727
3980
  canBe = _a.canBe,
3728
3981
  onClickTafActionButton = _a.onClickTafActionButton;
3729
3982
  var classes = useStyles$4();
3730
- return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default.createElement(core.Grid, {
3983
+ return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3731
3984
  container: true,
3732
3985
  alignItems: "center",
3733
3986
  justify: "flex-end",
3734
3987
  "data-testid": "taflist-canbebuttons",
3735
3988
  spacing: 1,
3736
3989
  className: classes.actionButtons
3737
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
3990
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3738
3991
  item: true
3739
- }, canBe.includes('CANCELLED') && /*#__PURE__*/React__default.createElement(core.Button, {
3992
+ }, canBe.includes('CANCELLED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
3740
3993
  "data-testid": "canceltaf",
3741
3994
  variant: "outlined",
3742
3995
  color: "secondary",
3743
3996
  onClick: function onClick() {
3744
- return onClickTafActionButton(uuid, 'CANCELLED');
3997
+ return onClickTafActionButton(uuid, 'CANCEL');
3745
3998
  }
3746
- }, "Cancel")), /*#__PURE__*/React__default.createElement(core.Grid, {
3999
+ }, "Cancel")), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3747
4000
  item: true
3748
- }, canBe.includes('CORRECTED') && /*#__PURE__*/React__default.createElement(core.Button, {
4001
+ }, canBe.includes('CORRECTED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
3749
4002
  "data-testid": "correctaf",
3750
4003
  variant: "outlined",
3751
4004
  color: "secondary",
3752
4005
  onClick: function onClick() {
3753
- return onClickTafActionButton(uuid, 'CORRECTED');
4006
+ return onClickTafActionButton(uuid, 'CORRECT');
3754
4007
  }
3755
- }, "Correct")), /*#__PURE__*/React__default.createElement(core.Grid, {
4008
+ }, "Correct")), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3756
4009
  item: true
3757
- }, canBe.includes('AMENDED') && /*#__PURE__*/React__default.createElement(core.Button, {
4010
+ }, canBe.includes('AMENDED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
3758
4011
  "data-testid": "amendtaf",
3759
4012
  variant: "outlined",
3760
4013
  color: "secondary",
3761
4014
  onClick: function onClick() {
3762
- return onClickTafActionButton(uuid, 'AMENDED');
4015
+ return onClickTafActionButton(uuid, 'AMEND');
3763
4016
  }
3764
4017
  }, "Amend")));
3765
4018
  };
3766
4019
 
3767
- var useStyles$5 = core.makeStyles({
4020
+ var useStyles$3 = core.makeStyles({
3768
4021
  accordion: {
3769
4022
  marginBottom: '5px'
3770
4023
  },
@@ -3773,13 +4026,29 @@
3773
4026
  }
3774
4027
  });
3775
4028
 
4029
+ var fromStatusToAction = function fromStatusToAction(tafStatus) {
4030
+ switch (tafStatus) {
4031
+ case 'DRAFT':
4032
+ return 'DRAFT';
4033
+
4034
+ case 'DRAFT_AMENDED':
4035
+ return 'DRAFT_AMEND';
4036
+
4037
+ case 'DRAFT_CORRECTED':
4038
+ return 'DRAFT_CORRECT';
4039
+
4040
+ default:
4041
+ return 'NEW';
4042
+ }
4043
+ };
4044
+
3776
4045
  var TafListAccordion = function TafListAccordion(_a) {
3777
4046
  var tafListItem = _a.tafListItem,
3778
4047
  listType = _a.listType,
3779
4048
  _b = _a.errorCancelTaf,
3780
4049
  errorCancelTaf = _b === void 0 ? [] : _b,
3781
4050
  onClickTafActionButton = _a.onClickTafActionButton;
3782
- var classes = useStyles$5();
4051
+ var classes = useStyles$3();
3783
4052
  var status = tafListItem.taf.status;
3784
4053
  var api$1 = api.useApiContext().api;
3785
4054
 
@@ -3787,7 +4056,7 @@
3787
4056
  TAC = _c[0],
3788
4057
  requestTAC = _c[1];
3789
4058
 
3790
- React__default.useEffect(function () {
4059
+ React__default['default'].useEffect(function () {
3791
4060
  // only re-retrieve TAC if draft state
3792
4061
  if (tafListItem.taf.status === 'DRAFT' || tafListItem.taf.status === 'DRAFT_AMENDED' || tafListItem.taf.status === 'DRAFT_CORRECTED') {
3793
4062
  requestTAC(tafListItem.taf);
@@ -3795,7 +4064,7 @@
3795
4064
 
3796
4065
  }, [tafListItem.taf]);
3797
4066
  var popOut = status === 'NEW' || status === 'DRAFT' || status === 'DRAFT_AMENDED' || status === 'DRAFT_CORRECTED';
3798
- return /*#__PURE__*/React__default.createElement(core.Accordion, __assign({
4067
+ return /*#__PURE__*/React__default['default'].createElement(core.Accordion, __assign({
3799
4068
  "data-testid": "tafListItem",
3800
4069
  className: classes.accordion
3801
4070
  }, popOut ? {
@@ -3803,46 +4072,47 @@
3803
4072
  } : {}, {
3804
4073
  onClick: function onClick() {
3805
4074
  if (popOut) {
3806
- onClickTafActionButton(tafListItem.taf.uuid, tafListItem.taf.status);
4075
+ onClickTafActionButton(tafListItem.taf.uuid, fromStatusToAction(tafListItem.taf.status));
3807
4076
  }
3808
4077
  },
3809
4078
  TransitionProps: {
3810
4079
  unmountOnExit: true
3811
4080
  }
3812
- }), /*#__PURE__*/React__default.createElement(core.AccordionSummary, {
4081
+ }), /*#__PURE__*/React__default['default'].createElement(core.AccordionSummary, {
3813
4082
  "data-testid": "tafListSectionAccordionSummary",
3814
- expandIcon: popOut ? /*#__PURE__*/React__default.createElement(core.Tooltip, {
4083
+ expandIcon: popOut ? /*#__PURE__*/React__default['default'].createElement(core.Tooltip, {
3815
4084
  title: "Popout to edit"
3816
- }, /*#__PURE__*/React__default.createElement(icons.OpenInNew, {
4085
+ }, /*#__PURE__*/React__default['default'].createElement(icons.OpenInNew, {
3817
4086
  "data-testid": "popOutIcon",
3818
4087
  fontSize: "small"
3819
- })) : /*#__PURE__*/React__default.createElement(icons.ExpandMore, {
4088
+ })) : /*#__PURE__*/React__default['default'].createElement(icons.ExpandMore, {
3820
4089
  "data-testid": "expandIcon"
3821
4090
  })
3822
- }, /*#__PURE__*/React__default.createElement(TafListRow, {
4091
+ }, /*#__PURE__*/React__default['default'].createElement(TafListRow, {
3823
4092
  taf: tafListItem.taf,
3824
4093
  listType: listType,
3825
4094
  TAC: TAC,
3826
4095
  showTac: true
3827
- })), /*#__PURE__*/React__default.createElement(core.AccordionDetails, null, /*#__PURE__*/React__default.createElement(core.Grid, {
4096
+ })), /*#__PURE__*/React__default['default'].createElement(core.AccordionDetails, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3828
4097
  container: true,
3829
4098
  direction: "column"
3830
4099
  }, errorCancelTaf.length > 0 && errorCancelTaf.find(function (uuid) {
3831
4100
  return uuid === tafListItem.taf.uuid;
3832
- }) && /*#__PURE__*/React__default.createElement(lab.Alert, {
4101
+ }) && /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
3833
4102
  severity: "error",
3834
- "data-testid": "tafList-cancelAlert"
3835
- }, "Cancelling this TAF failed, please try again"), /*#__PURE__*/React__default.createElement("div", {
4103
+ title: "Cancelling this TAF failed, please try again",
4104
+ dataTestId: "tafList-cancelAlert"
4105
+ }), /*#__PURE__*/React__default['default'].createElement("div", {
3836
4106
  className: classes.formPadding
3837
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
4107
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3838
4108
  item: true
3839
- }, /*#__PURE__*/React__default.createElement(TafFormWrapper, {
4109
+ }, /*#__PURE__*/React__default['default'].createElement(TafFormWrapper, {
3840
4110
  tafFromBackend: tafListItem,
3841
4111
  mode: "view",
3842
4112
  TAC: TAC
3843
- })), /*#__PURE__*/React__default.createElement(core.Grid, {
4113
+ })), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3844
4114
  item: true
3845
- }, /*#__PURE__*/React__default.createElement(TafListButtons, {
4115
+ }, /*#__PURE__*/React__default['default'].createElement(TafListButtons, {
3846
4116
  canBe: tafListItem.canbe,
3847
4117
  uuid: tafListItem.taf.uuid,
3848
4118
  onClickTafActionButton: onClickTafActionButton
@@ -3865,7 +4135,7 @@
3865
4135
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3866
4136
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
3867
4137
  * */
3868
- var useStyles$6 = core.makeStyles({
4138
+ var useStyles$2 = core.makeStyles({
3869
4139
  listHeaders: {
3870
4140
  color: '#9d9d9d'
3871
4141
  },
@@ -3884,14 +4154,14 @@
3884
4154
  _b = _a.errorCancelTaf,
3885
4155
  errorCancelTaf = _b === void 0 ? [] : _b,
3886
4156
  onClickTafActionButton = _a.onClickTafActionButton;
3887
- var classes = useStyles$6();
3888
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(core.Typography, {
4157
+ var classes = useStyles$2();
4158
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3889
4159
  variant: "subtitle2",
3890
4160
  className: classes.listHeaders
3891
- }, title), /*#__PURE__*/React__default.createElement("div", {
4161
+ }, title), /*#__PURE__*/React__default['default'].createElement("div", {
3892
4162
  "data-testid": "tafList" + listType
3893
4163
  }, tafList.map(function (tafListItem) {
3894
- return /*#__PURE__*/React__default.createElement(TafListAccordion, {
4164
+ return /*#__PURE__*/React__default['default'].createElement(TafListAccordion, {
3895
4165
  key: tafListItem.taf.uuid + "-" + tafListItem.taf.status,
3896
4166
  tafListItem: tafListItem,
3897
4167
  listType: listType,
@@ -3901,11 +4171,7 @@
3901
4171
  })));
3902
4172
  };
3903
4173
 
3904
- var useStyles$7 = core.makeStyles({
3905
- errorMessage: {
3906
- marginBottom: '16px',
3907
- border: '1px solid #f44336'
3908
- },
4174
+ var useStyles$1 = core.makeStyles({
3909
4175
  accordion: {
3910
4176
  marginBottom: '5px'
3911
4177
  },
@@ -3927,7 +4193,7 @@
3927
4193
  _c = _a.errorCancelTaf,
3928
4194
  errorCancelTaf = _c === void 0 ? [] : _c,
3929
4195
  onClickTafActionButton = _a.onClickTafActionButton;
3930
- var classes = useStyles$7();
4196
+ var classes = useStyles$1();
3931
4197
  var locationSettings = useTafSettings(tafConfig).locations;
3932
4198
  var upcomingTafs = [];
3933
4199
  var currentTafs = [];
@@ -3937,10 +4203,10 @@
3937
4203
  try {
3938
4204
  for (var tafList_1 = __values(tafList), tafList_1_1 = tafList_1.next(); !tafList_1_1.done; tafList_1_1 = tafList_1.next()) {
3939
4205
  var taf = tafList_1_1.value;
3940
- var now = moment.utc();
3941
- var baseTime = moment.utc(taf.taf.baseTime);
4206
+ var now = moment__default['default'].utc();
4207
+ var baseTime = moment__default['default'].utc(taf.taf.baseTime);
3942
4208
  var activityPeriod = locationSettings[taf.taf.location].activity_period;
3943
- var nextBaseTime = moment.utc(taf.taf.baseTime).add(activityPeriod, 'hours');
4209
+ var nextBaseTime = moment__default['default'].utc(taf.taf.baseTime).add(activityPeriod, 'hours');
3944
4210
 
3945
4211
  if (taf.taf.status === 'EXPIRED') {
3946
4212
  expiredTafs.push(taf);
@@ -3963,36 +4229,37 @@
3963
4229
  }
3964
4230
  }
3965
4231
 
3966
- return /*#__PURE__*/React__default.createElement(core.Grid, {
4232
+ return /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3967
4233
  container: true,
3968
4234
  direction: "column",
3969
4235
  alignItems: "stretch"
3970
- }, /*#__PURE__*/React__default.createElement(core.Grid, {
4236
+ }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3971
4237
  item: true,
3972
4238
  className: classes.listBody
3973
- }, error && /*#__PURE__*/React__default.createElement(lab.Alert, {
4239
+ }, error && /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
3974
4240
  severity: "error",
3975
- "data-testid": "tafList-alert",
3976
- className: classes.errorMessage
3977
- }, error.message), tafList && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TafListSection, {
4241
+ title: "An error has occurred while retrieving the list, please try again",
4242
+ info: error.message ? error.message : '',
4243
+ dataTestId: "tafList-alert"
4244
+ }), tafList && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafListSection, {
3978
4245
  title: "Upcoming",
3979
4246
  listType: "UPCOMING",
3980
4247
  tafList: upcomingTafs,
3981
4248
  errorCancelTaf: errorCancelTaf,
3982
4249
  onClickTafActionButton: onClickTafActionButton
3983
- }), /*#__PURE__*/React__default.createElement(TafListSection, {
4250
+ }), /*#__PURE__*/React__default['default'].createElement(TafListSection, {
3984
4251
  title: "Current time slot",
3985
4252
  listType: "ACTIVE",
3986
4253
  tafList: currentTafs,
3987
4254
  errorCancelTaf: errorCancelTaf,
3988
4255
  onClickTafActionButton: onClickTafActionButton
3989
- }), /*#__PURE__*/React__default.createElement(TafListSection, {
4256
+ }), /*#__PURE__*/React__default['default'].createElement(TafListSection, {
3990
4257
  title: "Expired",
3991
4258
  listType: "EXPIRED",
3992
4259
  tafList: expiredTafs,
3993
4260
  errorCancelTaf: errorCancelTaf,
3994
4261
  onClickTafActionButton: onClickTafActionButton
3995
- })), isLoading && /*#__PURE__*/React__default.createElement(lab.Skeleton, {
4262
+ })), isLoading && /*#__PURE__*/React__default['default'].createElement(lab.Skeleton, {
3996
4263
  "data-testid": "tafList-skeleton",
3997
4264
  variant: "rect",
3998
4265
  height: "660px"
@@ -4015,7 +4282,7 @@
4015
4282
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4016
4283
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
4017
4284
  * */
4018
- var useStyles$8 = core.makeStyles({
4285
+ var useStyles = core.makeStyles({
4019
4286
  backdrop: {
4020
4287
  zIndex: 1500,
4021
4288
  color: '#fff'
@@ -4023,11 +4290,11 @@
4023
4290
  });
4024
4291
 
4025
4292
  var Spinner = function Spinner() {
4026
- var classes = useStyles$8();
4027
- return /*#__PURE__*/React__default.createElement(core.Backdrop, {
4293
+ var classes = useStyles();
4294
+ return /*#__PURE__*/React__default['default'].createElement(core.Backdrop, {
4028
4295
  open: true,
4029
4296
  className: classes.backdrop
4030
- }, /*#__PURE__*/React__default.createElement(core.CircularProgress, {
4297
+ }, /*#__PURE__*/React__default['default'].createElement(core.CircularProgress, {
4031
4298
  "data-testid": "spinner",
4032
4299
  color: "inherit"
4033
4300
  }));
@@ -4038,11 +4305,11 @@
4038
4305
  pollingInterval = 10000;
4039
4306
  }
4040
4307
 
4041
- var _a = __read(React__default.useState([]), 2),
4308
+ var _a = __read(React__default['default'].useState([]), 2),
4042
4309
  errorCancelTaf = _a[0],
4043
4310
  setErrorCancelTaf = _a[1];
4044
4311
 
4045
- React__default.useEffect(function () {
4312
+ React__default['default'].useEffect(function () {
4046
4313
  var cancelErrorMessageHandler = errorCancelTaf.length > 0 ? setTimeout(function () {
4047
4314
  if (errorCancelTaf.length > 0) {
4048
4315
  setErrorCancelTaf(errorCancelTaf.slice(1));
@@ -4067,37 +4334,41 @@
4067
4334
  var api$1 = api.useApiContext().api;
4068
4335
  var confirmDialog = shared.useConfirmationDialog();
4069
4336
 
4070
- var _a = __read(React__default.useState(false), 2),
4337
+ var _a = __read(React__default['default'].useState(false), 2),
4071
4338
  isTafDialogOpen = _a[0],
4072
4339
  setTafDialogOpen = _a[1];
4073
4340
 
4074
- var _b = __read(React__default.useState(null), 2),
4341
+ var _b = __read(React__default['default'].useState(null), 2),
4075
4342
  selectedTafId = _b[0],
4076
4343
  setselectedTafId = _b[1];
4077
4344
 
4078
- var _c = __read(React__default.useState(null), 2),
4345
+ var _c = __read(React__default['default'].useState(null), 2),
4079
4346
  tafDialogAction = _c[0],
4080
4347
  setTafDialogAction = _c[1];
4081
4348
 
4082
- var _d = __read(React__default.useState(false), 2),
4349
+ var _d = __read(React__default['default'].useState(false), 2),
4083
4350
  errorPostMessage = _d[0],
4084
4351
  setErrorPostMessage = _d[1];
4085
4352
 
4086
- var _e = __read(React__default.useState(false), 2),
4087
- showSpinner = _e[0],
4088
- setSpinner = _e[1]; // clear error message for cancel after 10 seconds
4353
+ var _e = __read(React__default['default'].useState(''), 2),
4354
+ errorPostMessageText = _e[0],
4355
+ setErrorPostMessageText = _e[1];
4356
+
4357
+ var _f = __read(React__default['default'].useState(false), 2),
4358
+ showSpinner = _f[0],
4359
+ setSpinner = _f[1]; // clear error message for cancel after 10 seconds
4089
4360
 
4090
4361
 
4091
- var _f = __read(useTimeoutCancelError(), 2),
4092
- errorCancelTaf = _f[0],
4093
- setErrorCancelTaf = _f[1]; // Retrieve list of tafs
4362
+ var _g = __read(useTimeoutCancelError(), 2),
4363
+ errorCancelTaf = _g[0],
4364
+ setErrorCancelTaf = _g[1]; // Retrieve list of tafs
4094
4365
 
4095
4366
 
4096
- var _g = api.useApi(api$1.getTafList),
4097
- errorList = _g.error,
4098
- isLoadingList = _g.isLoading,
4099
- tafList = _g.result,
4100
- fetchNewTafList = _g.fetchApiData;
4367
+ var _h = api.useApi(api$1.getTafList),
4368
+ errorList = _h.error,
4369
+ isLoadingList = _h.isLoading,
4370
+ tafList = _h.result,
4371
+ fetchNewTafList = _h.fetchApiData;
4101
4372
 
4102
4373
  var getNewTafList = function getNewTafList() {
4103
4374
  fetchNewTafList({});
@@ -4110,10 +4381,11 @@
4110
4381
  if (isTafDialogOpen === true) getNewTafList(); // Set error message back to false
4111
4382
 
4112
4383
  setErrorPostMessage(false);
4384
+ setErrorPostMessageText('');
4113
4385
  setTafDialogOpen(!isTafDialogOpen);
4114
4386
  };
4115
4387
 
4116
- React__default.useEffect(function () {
4388
+ React__default['default'].useEffect(function () {
4117
4389
  if (selectedTafId) {
4118
4390
  toggleTafDialog();
4119
4391
  } // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -4121,7 +4393,7 @@
4121
4393
  }, [selectedTafId]);
4122
4394
 
4123
4395
  var onClickTafActionButton = function onClickTafActionButton(tafUuid, action) {
4124
- if (action === 'CANCELLED') {
4396
+ if (action === 'CANCEL') {
4125
4397
  confirmDialog({
4126
4398
  title: 'Cancel TAF',
4127
4399
  description: 'Are you sure you want to cancel this TAF?',
@@ -4130,7 +4402,7 @@
4130
4402
  var taf = getSelectedTaf(tafUuid, tafList).taf;
4131
4403
  postTaf({
4132
4404
  taf: taf,
4133
- changeStatusTo: action
4405
+ changeStatusTo: 'CANCELLED'
4134
4406
  });
4135
4407
  });
4136
4408
  } else if (selectedTafId === tafUuid) {
@@ -4175,9 +4447,13 @@
4175
4447
  error_1 = _a.sent();
4176
4448
 
4177
4449
  if (data.changeStatusTo === 'CANCELLED') {
4178
- setErrorCancelTaf(__spread(errorCancelTaf, [data.taf.uuid]));
4450
+ setErrorCancelTaf(__spreadArray(__spreadArray([], __read(errorCancelTaf)), [data.taf.uuid]));
4179
4451
  } else {
4180
4452
  setErrorPostMessage(true);
4453
+
4454
+ if (shared.isAxiosError(error_1)) {
4455
+ setErrorPostMessageText(shared.getAxiosErrorMessage(error_1));
4456
+ }
4181
4457
  }
4182
4458
 
4183
4459
  setSpinner(false);
@@ -4194,10 +4470,35 @@
4194
4470
  });
4195
4471
  };
4196
4472
 
4473
+ var fromActionToStatus = function fromActionToStatus(tafAction) {
4474
+ switch (tafAction) {
4475
+ case 'DRAFT':
4476
+ return 'DRAFT';
4477
+
4478
+ case 'DRAFT_AMEND':
4479
+ return 'DRAFT_AMENDED';
4480
+
4481
+ case 'DRAFT_CORRECT':
4482
+ return 'DRAFT_CORRECTED';
4483
+
4484
+ case 'PUBLISH':
4485
+ return 'PUBLISHED';
4486
+
4487
+ case 'AMEND':
4488
+ return 'AMENDED';
4489
+
4490
+ case 'CORRECT':
4491
+ return 'CORRECTED';
4492
+
4493
+ default:
4494
+ return 'NEW';
4495
+ }
4496
+ };
4497
+
4197
4498
  var onFormAction = function onFormAction(action, taf) {
4198
4499
  // Add right actions and their follow up calls to the BE
4199
4500
  switch (action) {
4200
- case 'CLOSED':
4501
+ case 'CLOSE':
4201
4502
  confirmDialog({
4202
4503
  title: 'Closing TAF',
4203
4504
  description: 'Are you sure you want to close this TAF? Any changes made will be lost.',
@@ -4208,14 +4509,14 @@
4208
4509
  break;
4209
4510
 
4210
4511
  case 'DRAFT':
4211
- case 'DRAFT_AMENDED':
4212
- case 'DRAFT_CORRECTED':
4213
- case 'PUBLISHED':
4214
- case 'AMENDED':
4215
- case 'CORRECTED':
4512
+ case 'DRAFT_AMEND':
4513
+ case 'DRAFT_CORRECT':
4514
+ case 'PUBLISH':
4515
+ case 'AMEND':
4516
+ case 'CORRECT':
4216
4517
  postTaf({
4217
4518
  taf: taf,
4218
- changeStatusTo: action
4519
+ changeStatusTo: fromActionToStatus(action)
4219
4520
  });
4220
4521
  break;
4221
4522
 
@@ -4226,26 +4527,28 @@
4226
4527
  };
4227
4528
 
4228
4529
  var selectedTaf = getSelectedTaf(selectedTafId, tafList);
4229
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TafList, {
4530
+ return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafList, {
4230
4531
  tafList: tafList,
4231
4532
  isLoading: isLoadingList,
4232
4533
  error: errorList,
4233
4534
  onClickTafActionButton: onClickTafActionButton,
4234
4535
  errorCancelTaf: errorCancelTaf
4235
- }), showSpinner && /*#__PURE__*/React__default.createElement(Spinner, null), selectedTaf !== undefined && /*#__PURE__*/React__default.createElement(TafFormDialog, {
4536
+ }), showSpinner && /*#__PURE__*/React__default['default'].createElement(Spinner, null), selectedTaf !== undefined && /*#__PURE__*/React__default['default'].createElement(TafFormDialog, {
4236
4537
  open: isTafDialogOpen,
4237
4538
  toggleFormDialog: toggleTafDialog,
4238
4539
  tafFromBackend: selectedTaf,
4239
- alertBanner: errorPostMessage ? /*#__PURE__*/React__default.createElement(lab.Alert, {
4240
- severity: "error"
4241
- }, "An error has occurred, please try again") : null,
4540
+ alertBanner: errorPostMessage ? /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
4541
+ severity: "error",
4542
+ title: "An error has occurred while saving, please try again",
4543
+ info: errorPostMessageText
4544
+ }) : null,
4242
4545
  onFormAction: onFormAction
4243
- }, /*#__PURE__*/React__default.createElement(TafFormWrapper, {
4546
+ }, /*#__PURE__*/React__default['default'].createElement(TafFormWrapper, {
4244
4547
  mode: "edit",
4245
4548
  tafFromBackend: selectedTaf,
4246
4549
  tafAction: tafDialogAction,
4247
4550
  onFormAction: onFormAction
4248
- }), showSpinner && /*#__PURE__*/React__default.createElement(Spinner, null)));
4551
+ }), showSpinner && /*#__PURE__*/React__default['default'].createElement(Spinner, null)));
4249
4552
  };
4250
4553
  /**
4251
4554
  * Shows the list of Tafs and allows to create, edit and view Tafs.
@@ -4257,7 +4560,7 @@
4257
4560
 
4258
4561
 
4259
4562
  var ConfirmationWrapper = function ConfirmationWrapper() {
4260
- return /*#__PURE__*/React__default.createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__default.createElement(TafWrapper, null));
4563
+ return /*#__PURE__*/React__default['default'].createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__default['default'].createElement(TafWrapper, null));
4261
4564
  };
4262
4565
 
4263
4566
  var createApi = function createApi(url, appUrl, auth, setAuth, authTokenUrl) {