@opengeoweb/taf 1.2.3 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/taf.umd.js CHANGED
@@ -2,7 +2,7 @@
2
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
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
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';
5
+ })(this, (function (exports, React, core, lab, moment, shared, icons, api, formFields, reactHookForm, reactSortablejs) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -15,14 +15,12 @@
15
15
  var d = Object.getOwnPropertyDescriptor(e, k);
16
16
  Object.defineProperty(n, k, d.get ? d : {
17
17
  enumerable: true,
18
- get: function () {
19
- return e[k];
20
- }
18
+ get: function () { return e[k]; }
21
19
  });
22
20
  }
23
21
  });
24
22
  }
25
- n['default'] = e;
23
+ n["default"] = e;
26
24
  return Object.freeze(n);
27
25
  }
28
26
 
@@ -229,19 +227,21 @@
229
227
  * Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
230
228
  * Copyright 2021 - Finnish Meteorological Institute (FMI)
231
229
  * */
230
+ var FORMAT_DAYS_HOURS = 'DDHH';
231
+ var FORMAT_DAYS_HOURS_MINUTS = 'DDHHmm'; // formatters
232
232
 
233
233
  var formatValidToString = function formatValidToString(valid) {
234
234
  // Ensure end of valid period if midnight is shown as 24 and not 00
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');
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(FORMAT_DAYS_HOURS) + "/" + endDate + endHours : moment__default["default"].utc(valid.start).format(FORMAT_DAYS_HOURS_MINUTS);
238
238
  };
239
239
 
240
240
  var getSections = function getSections(value, format) {
241
241
  return {
242
242
  day: parseInt(value.substring(0, 2), 10),
243
243
  hour: parseInt(value.substring(2, 4), 10),
244
- min: format === 'DDHHmm' ? parseInt(value.substring(4), 10) : 0
244
+ min: format === FORMAT_DAYS_HOURS_MINUTS ? parseInt(value.substring(4), 10) : 0
245
245
  };
246
246
  };
247
247
 
@@ -268,10 +268,10 @@
268
268
  if (!value) return null; // Create valid object from passed string
269
269
 
270
270
  var trimmedValue = value.trim();
271
- var tafStartMoment = moment__default['default'].utc(tafStart);
272
- var tafEndMoment = moment__default['default'].utc(tafEnd);
271
+ var tafStartMoment = moment__default["default"].utc(tafStart);
272
+ var tafEndMoment = moment__default["default"].utc(tafEnd);
273
273
  var startEnd = trimmedValue.split('/');
274
- var format = trimmedValue.indexOf('/') === -1 ? 'DDHHmm' : 'DDHH';
274
+ var format = trimmedValue.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS;
275
275
  var startSections = getSections(startEnd[0], format);
276
276
  var start = getValidityTimeStamp('start', startSections, tafStartMoment, tafEndMoment).format('YYYY-MM-DDTHH:mm:ss[Z]'); // If we only have start value - return that otherwise, also get end time
277
277
 
@@ -281,7 +281,7 @@
281
281
  };
282
282
  }
283
283
 
284
- var endSections = getSections(startEnd[1], 'DDHH');
284
+ var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS);
285
285
  var end = getValidityTimeStamp('end', endSections, tafStartMoment, tafEndMoment).format('YYYY-MM-DDTHH:mm:ss[Z]');
286
286
  return {
287
287
  start: start,
@@ -295,7 +295,6 @@
295
295
  var invalidValidityStartTimeMessage = 'Invalid validity start time, change group validity must lie within the TAF validity period';
296
296
  var invalidValidityPeriodMessage = 'Invalid validity period, validity end time has to be after validity start time';
297
297
  var invalidValidityEndTimeMessage = 'Invalid validity end time, change group validity must lie within the TAF validity period';
298
- var invalidValidityLengthMessage = 'Invalid validity period, expected either DDHH/DDHH or DDHHmm';
299
298
  var invalidChangeValidInterFieldMessage = 'Invalid validity period, expected DDHH/DDHH for BECMG and TEMPO or DDHHmm for FM';
300
299
  var invalidBECMGDurationValidInterFieldMessage = 'Invalid validity period, for BECMG only validity periods with a duration of 1, 2, 3 or 4 hours are allowed'; // Validations
301
300
  // Ensure all individual sections are correct (DD HH mm etc)
@@ -318,10 +317,10 @@
318
317
 
319
318
 
320
319
  var validateIsValidDates = function validateIsValidDates(value, tafStart, tafEnd) {
321
- var tafStartMoment = moment__default['default'].utc(tafStart);
322
- var tafEndMoment = moment__default['default'].utc(tafEnd);
320
+ var tafStartMoment = moment__default["default"].utc(tafStart);
321
+ var tafEndMoment = moment__default["default"].utc(tafEnd);
323
322
  var startEnd = value.split('/');
324
- var format = value.indexOf('/') === -1 ? 'DDHHmm' : 'DDHH';
323
+ var format = value.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS;
325
324
  var validateMsg = []; // Validate start time
326
325
 
327
326
  var startSections = getSections(startEnd[0], format); // Validate individual sections for start
@@ -337,7 +336,7 @@
337
336
 
338
337
 
339
338
  if (startEnd.length > 1) {
340
- var endSections = getSections(startEnd[1], 'DDHH'); // Validate individual sections for end
339
+ var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS); // Validate individual sections for end
341
340
 
342
341
  var sectionValidationEnd = validateValidSections(endSections, 'end'); // If invalid end - return with errors
343
342
 
@@ -367,7 +366,7 @@
367
366
 
368
367
 
369
368
  if (trimmedValue.length < 6 || trimmedValue.length > 9 || !(trimmedValue.match(/^[0-9]{4}\/[0-9]{4}$/) || trimmedValue.match(/^[0-9]{6}$/))) {
370
- return invalidValidityLengthMessage;
369
+ return invalidChangeValidInterFieldMessage;
371
370
  } // Ensure valid date(s) can be made
372
371
 
373
372
 
@@ -396,14 +395,14 @@
396
395
 
397
396
 
398
397
  if (trimmedValueChange === 'BECMG') {
399
- var tafStartMoment = moment__default['default'].utc(tafStart);
400
- var tafEndMoment = moment__default['default'].utc(tafEnd);
398
+ var tafStartMoment = moment__default["default"].utc(tafStart);
399
+ var tafEndMoment = moment__default["default"].utc(tafEnd);
401
400
  var startEnd = trimmedValue.split('/');
402
- var format = trimmedValue.indexOf('/') === -1 ? 'DDHHmm' : 'DDHH'; // Validate start time
401
+ var format = trimmedValue.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS; // Validate start time
403
402
 
404
403
  var startSections = getSections(startEnd[0], format);
405
404
  var startTimestamp = getValidityTimeStamp('start', startSections, tafStartMoment, tafEndMoment);
406
- var endSections = getSections(startEnd[1], 'DDHH');
405
+ var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS);
407
406
  var endTimestamp = getValidityTimeStamp('end', endSections, tafStartMoment, tafEndMoment);
408
407
  var timeDifference = endTimestamp.diff(startTimestamp, 'hours');
409
408
 
@@ -412,6 +411,57 @@
412
411
  }
413
412
  }
414
413
 
414
+ return true;
415
+ }; // validate previous changeGroup
416
+
417
+ var validProbChangeOrder = ['FM', 'BECMG', 'TEMPO', 'PROB40', 'PROB30', 'PROB40 TEMPO', 'PROB30 TEMPO'];
418
+ var invalidPreviousChangeGroupIsBeforeMessage = 'Valid time should be after previous valid time';
419
+ var invalidPreviousChangeGroupOrderMessage = "When valid times are equal, the change/probability order should be: " + validProbChangeOrder.join(', ');
420
+ var invalidPreviousChangeGroupHasSameValue = "When valid times are equal, probability/change can't have the same value as previous row value";
421
+ var validatePreviousChangeGroup = function validatePreviousChangeGroup(currentChangeGroup, nextChangeGroup, tafStart, tafEnd) {
422
+ // extract the needed values from changeGroups
423
+ var valid = currentChangeGroup.valid,
424
+ _a = currentChangeGroup.change,
425
+ change = _a === void 0 ? '' : _a,
426
+ _b = currentChangeGroup.probability,
427
+ probability = _b === void 0 ? '' : _b;
428
+ var previousValid = nextChangeGroup.valid,
429
+ _c = nextChangeGroup.change,
430
+ previousChange = _c === void 0 ? '' : _c,
431
+ _d = nextChangeGroup.probability,
432
+ previousProbability = _d === void 0 ? '' : _d; // get the parsed values
433
+
434
+ var validValue = parseValidToObject(valid, tafStart, tafEnd);
435
+ var previousValidValue = parseValidToObject(previousValid, tafStart, tafEnd);
436
+
437
+ if (!validValue || !previousValidValue || !change.length && !probability.length) {
438
+ return true;
439
+ } // validate is valid time before
440
+
441
+
442
+ var currentStartTime = moment__default["default"](validValue.start);
443
+ var previousRowStartTime = moment__default["default"](previousValidValue.start);
444
+
445
+ if (currentStartTime.isBefore(previousRowStartTime)) {
446
+ return invalidPreviousChangeGroupIsBeforeMessage;
447
+ } // validate same valid time
448
+
449
+
450
+ if (currentStartTime.isSame(previousRowStartTime)) {
451
+ // validate change/probability order
452
+ var currentProbChangeValue = (probability + " " + change).trim();
453
+ var previousProbChangeValue = (previousProbability + " " + previousChange).trim();
454
+
455
+ if (validProbChangeOrder.indexOf(currentProbChangeValue) < validProbChangeOrder.indexOf(previousProbChangeValue)) {
456
+ return invalidPreviousChangeGroupOrderMessage;
457
+ } // validate same valid + change/probability value
458
+
459
+
460
+ if (currentProbChangeValue === previousProbChangeValue) {
461
+ return invalidPreviousChangeGroupHasSameValue;
462
+ }
463
+ }
464
+
415
465
  return true;
416
466
  };
417
467
 
@@ -986,22 +1036,60 @@
986
1036
  })(WeatherPhenomena || (WeatherPhenomena = {}));
987
1037
 
988
1038
  var invalidWeatherMessage = 'Invalid weather input, expected NSW or a valid weather code';
1039
+ var invalidWeatherCodeMessage = 'Invalid weather input, invalid weather code';
989
1040
  var invalidWeatherNSWMessage = 'Invalid weather input, NSW is not allowed in the baseforecast and can only be used in the first weather group';
990
1041
  var invalidWeatherWithPreviousEmptyWeather = 'Invalid weather input, value is not allowed when previous weather group(s) are empty';
991
1042
  var invalidWeatherNonUniqueValue = 'Invalid weather input, weather groups must be unique';
992
1043
  var invalidWeatherNonEmptyNSWGroups = 'Invalid weather input, when NSW is used, other weather groups must be empty';
993
- var invalidWeatherCAVOKMessage = 'Invalid weather input, when CAVOK is used, weather groups must be empty'; // validations
1044
+ var invalidWeatherCAVOKMessage = 'Invalid weather input, when CAVOK is used, weather groups must be empty';
1045
+ var invalidWeatherVisibilityBelow5000 = 'Invalid weather input, weather codes FU, DU, HZ, DRDU and BLDU need to be combined with a visibility of 5000m or less';
1046
+ var invalidWeatherBRVisibility = 'Invalid weather input, weather code BR needs to be combined with a visibility between 1000 and 5000m';
1047
+ var invalidWeatherFGVisibility = 'Invalid weather input, weather code FG needs to be combined with a visibility below 1000m'; // validations
994
1048
 
1049
+ var WeatherVisibilityBelow5000 = [WeatherPhenomena.FU, WeatherPhenomena.DU, WeatherPhenomena.HZ, WeatherPhenomena.DRDU, WeatherPhenomena.BLDU];
995
1050
  var validateWeatherField = function validateWeatherField(value, visibilityValue, NSWAllowed) {
996
1051
  if (NSWAllowed === void 0) {
997
1052
  NSWAllowed = true;
998
1053
  }
999
1054
 
1000
- var trimmedValue = value.trim();
1001
- var isValid = trimmedValue === '' || trimmedValue in WeatherPhenomena || NSWAllowed && trimmedValue === 'NSW';
1002
- var errorMessage = NSWAllowed ? invalidWeatherMessage : invalidWeatherNSWMessage;
1003
- if (trimmedValue && visibilityValue === 'CAVOK') return invalidWeatherCAVOKMessage;
1004
- return isValid ? true : errorMessage;
1055
+ var trimmedValue = value.trim(); // if empty, validate as true
1056
+
1057
+ if (trimmedValue === '') {
1058
+ return true;
1059
+ } // In case of NSW - validate if allowed
1060
+
1061
+
1062
+ if (trimmedValue === 'NSW' && !NSWAllowed) {
1063
+ return invalidWeatherNSWMessage;
1064
+ } // Check if cavOK - then weather group should be empty
1065
+
1066
+
1067
+ if (trimmedValue && visibilityValue === 'CAVOK') {
1068
+ return invalidWeatherCAVOKMessage;
1069
+ } // Validate if entered weather is one of the allowed weather phenomena
1070
+
1071
+
1072
+ if (!(trimmedValue in WeatherPhenomena) && trimmedValue !== 'NSW') {
1073
+ return NSWAllowed ? invalidWeatherMessage : invalidWeatherCodeMessage;
1074
+ } // Validate the weather code in combination with the visibility range
1075
+
1076
+
1077
+ var visibilityRange = parseInt(visibilityValue, 10);
1078
+
1079
+ if (WeatherVisibilityBelow5000.includes(trimmedValue) && visibilityRange > 5000) {
1080
+ return invalidWeatherVisibilityBelow5000;
1081
+ }
1082
+
1083
+ if (trimmedValue === WeatherPhenomena.BR && (visibilityRange < 1000 || visibilityRange > 5000)) {
1084
+ return invalidWeatherBRVisibility;
1085
+ }
1086
+
1087
+ if (trimmedValue === WeatherPhenomena.FG && visibilityRange >= 1000) {
1088
+ return invalidWeatherFGVisibility;
1089
+ } // Everything validated ok - return true
1090
+
1091
+
1092
+ return true;
1005
1093
  };
1006
1094
  var validateSecondWeatherField = function validateSecondWeatherField(weather1Value, weather2Value, visibilityValue) {
1007
1095
  var trimmedWeather2Value = weather2Value.trim(); // Field can be left empty
@@ -1862,7 +1950,7 @@
1862
1950
  };
1863
1951
 
1864
1952
  var formatIssueTime = function formatIssueTime(issueDate) {
1865
- return issueDate ? moment__default['default'](issueDate).utc().format('DDHHmm') + "Z" : 'Not issued';
1953
+ return issueDate ? moment__default["default"](issueDate).utc().format('DDHHmm') + "Z" : 'Not issued';
1866
1954
  };
1867
1955
  function formatFormValues(row) {
1868
1956
  return Object.keys(row).reduce(function (list, key) {
@@ -1916,6 +2004,8 @@
1916
2004
  return Object.keys(row).reduce(function (list, key) {
1917
2005
  var _a;
1918
2006
 
2007
+ var _b;
2008
+
1919
2009
  switch (key) {
1920
2010
  case 'valid':
1921
2011
  {
@@ -1954,7 +2044,7 @@
1954
2044
  case 'change':
1955
2045
  case 'probability':
1956
2046
  {
1957
- return __assign(__assign({}, list), (_a = {}, _a[key] = list[key].trim(), _a));
2047
+ return __assign(__assign({}, list), (_a = {}, _a[key] = (_b = list[key]) === null || _b === void 0 ? void 0 : _b.trim(), _a));
1958
2048
  }
1959
2049
 
1960
2050
  default:
@@ -2128,8 +2218,7 @@
2128
2218
  }
2129
2219
  }
2130
2220
  }, parsedFormValues);
2131
- };
2132
- 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
2221
+ }; // 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
2133
2222
 
2134
2223
  var shouldRetrieveTAC = function shouldRetrieveTAC(product) {
2135
2224
  if (product && product.baseForecast && product.baseForecast.wind && 'speed' in product.baseForecast.wind && product.baseForecast.wind.speed !== '' && (product.baseForecast.visibility && 'range' in product.baseForecast.visibility && product.baseForecast.visibility.range !== '' || product.baseForecast.cavOK)) {
@@ -2160,54 +2249,55 @@
2160
2249
  cloud4: namePrefix + ".cloud.cloud4"
2161
2250
  });
2162
2251
  };
2252
+ var TAC_MISSING_DATA = 'Missing data: no TAC can be generated';
2253
+ var TAC_NOT_AVAILABLE = 'No TAC available';
2254
+ var TAC_RETRIEVING_DATA = 'Retrieving TAC';
2163
2255
  var useTACGenerator = function useTACGenerator(taf, requestTAC, standardTAC) {
2164
2256
  if (standardTAC === void 0) {
2165
2257
  standardTAC = '';
2166
2258
  }
2167
2259
 
2168
- var _a = __read(React__default['default'].useState(taf.status === 'NEW' ? 'No TAC available' : 'Retrieving TAC'), 2),
2260
+ var _a = __read(React__default["default"].useState(taf.status === 'NEW' ? TAC_NOT_AVAILABLE : TAC_RETRIEVING_DATA), 2),
2169
2261
  TAC = _a[0],
2170
2262
  setTAC = _a[1];
2171
2263
 
2264
+ var isMounted = shared.useIsMounted().isMounted;
2265
+
2172
2266
  var retrieveTAC = function retrieveTAC(tafToPost) {
2173
2267
  if (shouldRetrieveTAC(tafToPost)) {
2174
2268
  requestTAC(tafToPost).then(function (result) {
2175
- setTAC(result.data);
2269
+ if (isMounted.current) {
2270
+ setTAC(result.data);
2271
+ }
2176
2272
  })["catch"](function () {
2177
- setTAC('Failed to retrieve TAC');
2273
+ if (isMounted.current) {
2274
+ setTAC('Failed to retrieve TAC');
2275
+ }
2178
2276
  });
2277
+ } else {
2278
+ setTAC(TAC_MISSING_DATA);
2179
2279
  }
2180
-
2181
- setTAC(noTAC);
2182
2280
  };
2183
2281
 
2184
- React__default['default'].useEffect(function () {
2282
+ React__default["default"].useEffect(function () {
2185
2283
  if (taf.status !== 'NEW' && !standardTAC) {
2186
2284
  retrieveTAC(taf);
2187
2285
  } // eslint-disable-next-line react-hooks/exhaustive-deps
2188
2286
 
2189
2287
  }, []);
2190
- React__default['default'].useEffect(function () {
2288
+ React__default["default"].useEffect(function () {
2191
2289
  if (standardTAC !== '') {
2192
2290
  setTAC(standardTAC);
2193
2291
  }
2194
2292
  }, [standardTAC]);
2195
2293
  return [TAC, retrieveTAC];
2196
2294
  };
2197
- var getRange = function getRange(min, max) {
2198
- return Array.from({
2199
- length: max - min + 1
2200
- }, function (_, i) {
2201
- return min + i;
2202
- });
2203
- };
2204
- var useDragOrder = function useDragOrder(trigger, move, fields) {
2205
- // create simple ordered list with hover (chosen) state
2206
- var _a = __read(React__default['default'].useState([]), 2),
2207
- sortedFields = _a[0],
2208
- setSortedFields = _a[1];
2295
+ var useDragOrder = function useDragOrder(trigger, move, onFormBlur) {
2296
+ var _a = __read(React__default["default"].useState(null), 2),
2297
+ activeDraggingIndex = _a[0],
2298
+ setIsDragging = _a[1];
2209
2299
 
2210
- var _b = __read(React__default['default'].useState([null, null]), 2),
2300
+ var _b = __read(React__default["default"].useState([null, null]), 2),
2211
2301
  lastDragOrder = _b[0],
2212
2302
  onUpdatelastDragOrder = _b[1];
2213
2303
 
@@ -2217,46 +2307,40 @@
2217
2307
  if (oldIndex === undefined || newIndex === undefined) return;
2218
2308
  move(oldIndex, newIndex);
2219
2309
  onUpdatelastDragOrder([oldIndex, newIndex]);
2310
+ setIsDragging(false);
2220
2311
  };
2221
2312
 
2222
- React__default['default'].useEffect(function () {
2223
- setSortedFields(fields.map(function (_a) {
2224
- var id = _a.id;
2225
- return {
2226
- id: id,
2227
- chosen: false
2228
- };
2229
- }));
2230
- }, [fields]); // triggers validation AFTER render of new sorted elements
2313
+ var onStartDrag = function onStartDrag(_a) {
2314
+ var oldIndex = _a.oldIndex;
2315
+ return setIsDragging(oldIndex);
2316
+ }; // triggers validation AFTER render of new sorted elements
2317
+
2231
2318
 
2232
- React__default['default'].useEffect(function () {
2319
+ React__default["default"].useEffect(function () {
2233
2320
  var _a = __read(lastDragOrder, 2),
2234
2321
  oldIndex = _a[0],
2235
2322
  newIndex = _a[1];
2236
2323
 
2237
2324
  if (oldIndex !== null && newIndex !== null) {
2238
- // trigger validation of moved rows
2239
- var _b = __read([oldIndex, newIndex].sort(function (a, b) {
2240
- return a - b;
2241
- }), 2),
2242
- start = _b[0],
2243
- end = _b[1];
2244
-
2245
- var changedRows = getRange(start, end);
2246
- var fieldsToValidate = changedRows.reduce(function (list, rowIndex) {
2247
- var fieldsDict = getFieldNames(true, rowIndex);
2248
- var fields = Object.keys(fieldsDict).map(function (key) {
2249
- return fieldsDict[key];
2250
- });
2251
- return list.concat(fields);
2252
- }, []);
2253
- trigger(fieldsToValidate);
2325
+ // trigger validation of all fields
2326
+ trigger();
2254
2327
  }
2255
- }, [lastDragOrder, trigger]);
2328
+ }, [lastDragOrder, trigger]); // trigger onFormBlur AFTER render of new sorted elements so the TAC gets updated
2329
+
2330
+ React__default["default"].useEffect(function () {
2331
+ var _a = __read(lastDragOrder, 2),
2332
+ oldIndex = _a[0],
2333
+ newIndex = _a[1];
2334
+
2335
+ if (oldIndex !== null && newIndex !== null) {
2336
+ onFormBlur();
2337
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
2338
+
2339
+ }, [lastDragOrder]);
2256
2340
  return {
2257
2341
  onChangeOrder: onChangeOrder,
2258
- sortedFields: sortedFields,
2259
- setSortedFields: setSortedFields
2342
+ activeDraggingIndex: activeDraggingIndex,
2343
+ onStartDrag: onStartDrag
2260
2344
  };
2261
2345
  }; // dialog utils
2262
2346
 
@@ -2388,9 +2472,9 @@
2388
2472
  var getDisplayValue = function getDisplayValue(value, disabled) {
2389
2473
  return disabled && !value ? '-' : value;
2390
2474
  };
2391
- var BaseTextField = /*#__PURE__*/React__default['default'].memo(function (props) {
2475
+ var BaseTextField = /*#__PURE__*/React__default["default"].memo(function (props) {
2392
2476
  var classes = useStyles$9();
2393
- return /*#__PURE__*/React__default['default'].createElement(core.TextField, __assign({
2477
+ return /*#__PURE__*/React__default["default"].createElement(core.TextField, __assign({
2394
2478
  type: "text",
2395
2479
  variant: "filled",
2396
2480
  InputProps: {
@@ -2436,14 +2520,14 @@
2436
2520
  setValue = _k.setValue,
2437
2521
  errors = _k.errors;
2438
2522
 
2439
- var inputRef = React__default['default'].useRef(null);
2523
+ var inputRef = React__default["default"].useRef(null);
2440
2524
  var fieldErrors = getTafErrors(name, errors);
2441
2525
 
2442
- var _l = __read(React__default['default'].useState(null), 2),
2526
+ var _l = __read(React__default["default"].useState(null), 2),
2443
2527
  maxLength = _l[0],
2444
2528
  setMaxLength = _l[1];
2445
2529
 
2446
- var onKeyDown = React__default['default'].useCallback(function (event) {
2530
+ var onKeyDown = React__default["default"].useCallback(function (event) {
2447
2531
  var currentValue = getValues(name).toString();
2448
2532
  var textSelection = currentValue.substring(inputRef.current.selectionStart, inputRef.current.selectionEnd);
2449
2533
 
@@ -2460,7 +2544,7 @@
2460
2544
  }
2461
2545
  }
2462
2546
  }, [name, autoComplete, setValue, getValues]);
2463
- var onChangeField = React__default['default'].useCallback(function (event, callback) {
2547
+ var onChangeField = React__default["default"].useCallback(function (event, callback) {
2464
2548
  var valueUppercase = event.currentTarget.value.toUpperCase();
2465
2549
 
2466
2550
  if (autoComplete) {
@@ -2474,24 +2558,24 @@
2474
2558
  callback(valueUppercase);
2475
2559
  onChange(valueUppercase);
2476
2560
  }, [onChange, autoComplete]);
2477
- var onBlurField = React__default['default'].useCallback(function (callback) {
2561
+ var onBlurField = React__default["default"].useCallback(function (callback) {
2478
2562
  callback();
2479
2563
  onBlur();
2480
2564
  }, [onBlur]);
2481
- var onFocusField = React__default['default'].useCallback(function () {
2565
+ var onFocusField = React__default["default"].useCallback(function () {
2482
2566
  var _a;
2483
2567
 
2484
2568
  inputRef.current.disabled = false;
2485
2569
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
2486
2570
  }, []);
2487
- return /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2571
+ return /*#__PURE__*/React__default["default"].createElement(core.Grid, {
2488
2572
  item: true,
2489
2573
  xs: true,
2490
2574
  className: classes.textFieldGridItem
2491
- }, /*#__PURE__*/React__default['default'].createElement(reactHookForm.Controller, {
2575
+ }, /*#__PURE__*/React__default["default"].createElement(reactHookForm.Controller, {
2492
2576
  render: function render(_props) {
2493
2577
  var displayValue = formatter ? formatter(_props.value) : getDisplayValue(_props.value, disabled);
2494
- return /*#__PURE__*/React__default['default'].createElement(BaseTextField, {
2578
+ return /*#__PURE__*/React__default["default"].createElement(BaseTextField, {
2495
2579
  label: label,
2496
2580
  disabled: disabled,
2497
2581
  name: name,
@@ -2593,7 +2677,7 @@
2593
2677
  ];
2594
2678
  };
2595
2679
 
2596
- var TafFormRow = /*#__PURE__*/React__default['default'].forwardRef(function (_a, ref) {
2680
+ var TafFormRow = /*#__PURE__*/React__default["default"].forwardRef(function (_a, ref) {
2597
2681
  var _b = _a.isChangeGroup,
2598
2682
  isChangeGroup = _b === void 0 ? false : _b,
2599
2683
  _c = _a.disabled,
@@ -2670,30 +2754,55 @@
2670
2754
  return true;
2671
2755
  };
2672
2756
 
2673
- return /*#__PURE__*/React__default['default'].createElement(core.Grid, __assign({
2757
+ var validatePreviousRow = React__default["default"].useCallback(function () {
2758
+ if (isChangeGroup && index > 0) {
2759
+ var _a = getValues(),
2760
+ validDateEnd = _a.validDateEnd,
2761
+ validDateStart = _a.validDateStart,
2762
+ changeGroups = _a.changeGroups;
2763
+
2764
+ var currentChangeGroup = changeGroups[index];
2765
+ var previousChangeGroup = changeGroups[index - 1];
2766
+ return validatePreviousChangeGroup(currentChangeGroup, previousChangeGroup, validDateStart, validDateEnd);
2767
+ }
2768
+
2769
+ return true;
2770
+ }, [index, isChangeGroup, getValues]);
2771
+
2772
+ var getFieldFromNextRow = function getFieldFromNextRow(fieldname) {
2773
+ if (fieldname === void 0) {
2774
+ fieldname = 'valid';
2775
+ }
2776
+
2777
+ var nextValidFieldName = "changeGroups[" + (index + 1) + "]." + fieldname;
2778
+ var nextRowValidValue = getValues(nextValidFieldName);
2779
+ return nextRowValidValue ? [nextValidFieldName] : [];
2780
+ };
2781
+
2782
+ return /*#__PURE__*/React__default["default"].createElement(core.Grid, __assign({
2674
2783
  "data-testid": "row-" + namePrefix,
2675
2784
  container: true,
2676
2785
  ref: ref
2677
- }, props), !isChangeGroup && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2786
+ }, props), !isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2678
2787
  label: "Type",
2679
2788
  name: fieldNames.messageType,
2680
2789
  disabled: true
2681
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2790
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2682
2791
  label: "Location",
2683
2792
  name: "location",
2684
2793
  disabled: true
2685
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2794
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2686
2795
  formatter: formatIssueTime,
2687
2796
  label: "Issue time",
2688
2797
  name: "issueDate",
2689
2798
  disabled: true
2690
- })), isChangeGroup && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
2799
+ })), isChangeGroup && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
2691
2800
  item: true,
2692
2801
  xs: true,
2693
2802
  style: {
2694
2803
  display: 'flex'
2695
2804
  }
2696
- }, dragHandle), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2805
+ }, dragHandle), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2697
2806
  label: "Prob",
2698
2807
  name: fieldNames.probability,
2699
2808
  disabled: disabled,
@@ -2713,10 +2822,11 @@
2713
2822
  }],
2714
2823
  onBlur: function onBlur() {
2715
2824
  if (isChangeGroup) {
2716
- trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2825
+ var nextValidFieldName = getFieldFromNextRow();
2826
+ trigger(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)), __read(nextValidFieldName)));
2717
2827
  }
2718
2828
  }
2719
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2829
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2720
2830
  label: "Change",
2721
2831
  name: fieldNames.change,
2722
2832
  disabled: disabled,
@@ -2742,10 +2852,11 @@
2742
2852
  }],
2743
2853
  onBlur: function onBlur() {
2744
2854
  if (isChangeGroup) {
2745
- trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2855
+ var nextValidFieldName = getFieldFromNextRow();
2856
+ trigger(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)), __read(nextValidFieldName)));
2746
2857
  }
2747
2858
  }
2748
- })), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2859
+ })), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2749
2860
  label: "Valid",
2750
2861
  name: fieldNames.valid,
2751
2862
  // always disabled for baseforecast row
@@ -2759,15 +2870,17 @@
2759
2870
  },
2760
2871
  validateValidChangeGroupInterField: function validateValidChangeGroupInterField$1(value) {
2761
2872
  return isChangeGroup ? validateValidChangeGroupInterField(value, getValues(fieldNames.change), getValues('validDateStart'), getValues('validDateEnd')) : true;
2762
- }
2873
+ },
2874
+ validatePreviousRow: validatePreviousRow
2763
2875
  }
2764
2876
  },
2765
2877
  onBlur: function onBlur() {
2766
2878
  if (isChangeGroup) {
2767
- trigger(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)));
2879
+ var nextValidFieldName = getFieldFromNextRow();
2880
+ trigger(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(subFields)), __read(mainOptionalFields)), __read(mainFields)), __read(nextValidFieldName)));
2768
2881
  }
2769
2882
  }
2770
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2883
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2771
2884
  label: "Wind",
2772
2885
  name: fieldNames.wind,
2773
2886
  disabled: disabled,
@@ -2787,7 +2900,7 @@
2787
2900
  }
2788
2901
  },
2789
2902
  autoFocus: !isChangeGroup
2790
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2903
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2791
2904
  label: "Visibility",
2792
2905
  name: fieldNames.visibility,
2793
2906
  disabled: disabled,
@@ -2806,9 +2919,10 @@
2806
2919
  value: 'CAVOK'
2807
2920
  }],
2808
2921
  onBlur: function onBlur() {
2809
- trigger(isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : subFields);
2922
+ var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : subFields;
2923
+ trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.weather1, fieldNames.weather2, fieldNames.weather3]));
2810
2924
  }
2811
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2925
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2812
2926
  label: "Weather",
2813
2927
  name: fieldNames.weather1,
2814
2928
  disabled: disabled,
@@ -2828,7 +2942,7 @@
2828
2942
  var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2829
2943
  return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.weather2, fieldNames.weather3]));
2830
2944
  }
2831
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2945
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2832
2946
  label: "Weather",
2833
2947
  name: fieldNames.weather2,
2834
2948
  disabled: disabled,
@@ -2844,7 +2958,7 @@
2844
2958
  var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2845
2959
  return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.weather3]));
2846
2960
  }
2847
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2961
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2848
2962
  label: "Weather",
2849
2963
  name: fieldNames.weather3,
2850
2964
  disabled: disabled,
@@ -2856,7 +2970,7 @@
2856
2970
  }
2857
2971
  }
2858
2972
  }
2859
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2973
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2860
2974
  label: "Cloud",
2861
2975
  name: fieldNames.cloud1,
2862
2976
  disabled: disabled,
@@ -2876,7 +2990,7 @@
2876
2990
  var fields = isChangeGroup ? __spreadArray(__spreadArray([], __read(subFields)), __read(mainFields)) : [];
2877
2991
  return trigger(__spreadArray(__spreadArray([], __read(fields)), [fieldNames.cloud2, fieldNames.cloud3, fieldNames.cloud4]));
2878
2992
  }
2879
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
2993
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2880
2994
  label: "Cloud",
2881
2995
  name: fieldNames.cloud2,
2882
2996
  disabled: disabled,
@@ -2891,7 +3005,7 @@
2891
3005
  onBlur: function onBlur() {
2892
3006
  return trigger([fieldNames.cloud3, fieldNames.cloud4]);
2893
3007
  }
2894
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
3008
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2895
3009
  label: "Cloud",
2896
3010
  name: fieldNames.cloud3,
2897
3011
  disabled: disabled,
@@ -2906,7 +3020,7 @@
2906
3020
  onBlur: function onBlur() {
2907
3021
  return trigger(fieldNames.cloud4);
2908
3022
  }
2909
- }), /*#__PURE__*/React__default['default'].createElement(TafFormTextField, {
3023
+ }), /*#__PURE__*/React__default["default"].createElement(TafFormTextField, {
2910
3024
  label: "Cloud",
2911
3025
  name: fieldNames.cloud4,
2912
3026
  disabled: disabled,
@@ -2918,13 +3032,13 @@
2918
3032
  }
2919
3033
  }
2920
3034
  }
2921
- }), (!isChangeGroup || disabled) && /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3035
+ }), (!isChangeGroup || disabled) && /*#__PURE__*/React__default["default"].createElement(core.Grid, {
2922
3036
  item: true,
2923
3037
  xs: true
2924
- }), isChangeGroup && !disabled && /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3038
+ }), isChangeGroup && !disabled && /*#__PURE__*/React__default["default"].createElement(core.Grid, {
2925
3039
  item: true,
2926
3040
  xs: true
2927
- }, /*#__PURE__*/React__default['default'].createElement(core.IconButton, __assign({
3041
+ }, /*#__PURE__*/React__default["default"].createElement(core.IconButton, __assign({
2928
3042
  "aria-label": "delete",
2929
3043
  "data-testid": "remove-changeGroup",
2930
3044
  onClick: function onClick() {
@@ -2932,7 +3046,7 @@
2932
3046
  }
2933
3047
  }, lastRow ? {
2934
3048
  tabIndex: '-1'
2935
- } : {}), /*#__PURE__*/React__default['default'].createElement(icons.Delete, null))));
3049
+ } : {}), /*#__PURE__*/React__default["default"].createElement(icons.Delete, null))));
2936
3050
  });
2937
3051
 
2938
3052
  var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
@@ -2984,20 +3098,20 @@
2984
3098
  };
2985
3099
 
2986
3100
  var ThumbsUp = function ThumbsUp(props) {
2987
- return /*#__PURE__*/React__default['default'].createElement(core.SvgIcon, __assign({
3101
+ return /*#__PURE__*/React__default["default"].createElement(core.SvgIcon, __assign({
2988
3102
  fontSize: "inherit",
2989
3103
  viewBox: "0 0 58 69"
2990
- }, props), /*#__PURE__*/React__default['default'].createElement("title", null, "Thumbs up"), /*#__PURE__*/React__default['default'].createElement("g", {
3104
+ }, props), /*#__PURE__*/React__default["default"].createElement("title", null, "Thumbs up"), /*#__PURE__*/React__default["default"].createElement("g", {
2991
3105
  id: "Thumbs-up",
2992
3106
  stroke: "none",
2993
3107
  strokeWidth: "1",
2994
3108
  fill: "none",
2995
3109
  fillRule: "evenodd"
2996
- }, /*#__PURE__*/React__default['default'].createElement("path", {
3110
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
2997
3111
  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",
2998
3112
  id: "Path-2",
2999
3113
  fill: "#FFBF00"
3000
- }), /*#__PURE__*/React__default['default'].createElement("path", {
3114
+ }), /*#__PURE__*/React__default["default"].createElement("path", {
3001
3115
  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",
3002
3116
  id: "Path",
3003
3117
  fill: "#F28700"
@@ -3201,7 +3315,7 @@
3201
3315
  var errors = reactHookForm.useFormContext().errors;
3202
3316
  var errorList = filterDuplicateErrors(getErrors(errors));
3203
3317
 
3204
- var _b = __read(React__default['default'].useState(false), 2),
3318
+ var _b = __read(React__default["default"].useState(false), 2),
3205
3319
  isIssuesPaneOpen = _b[0],
3206
3320
  setIsIssuesPaneOpen = _b[1];
3207
3321
 
@@ -3209,19 +3323,19 @@
3209
3323
  return setIsIssuesPaneOpen(!isIssuesPaneOpen);
3210
3324
  };
3211
3325
 
3212
- return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3326
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3213
3327
  container: true,
3214
3328
  justify: "space-between",
3215
3329
  alignItems: "center",
3216
3330
  className: classes.lifecycleButtons
3217
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3331
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3218
3332
  item: true
3219
- }, /*#__PURE__*/React__default['default'].createElement(IssuesButton, {
3333
+ }, /*#__PURE__*/React__default["default"].createElement(IssuesButton, {
3220
3334
  sumOfErrors: errorList.length,
3221
3335
  togglePane: toggleIssuesPane
3222
- })), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3336
+ })), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3223
3337
  item: true
3224
- }, /*#__PURE__*/React__default['default'].createElement(core.Button, {
3338
+ }, /*#__PURE__*/React__default["default"].createElement(core.Button, {
3225
3339
  "data-testid": "discardtaf",
3226
3340
  variant: "outlined",
3227
3341
  color: "secondary",
@@ -3231,7 +3345,7 @@
3231
3345
  // Simply discard the changes and close the dialog.
3232
3346
  onTafFormButtonPress('DISCARD');
3233
3347
  }
3234
- }, "Discard"), /*#__PURE__*/React__default['default'].createElement(core.Button, {
3348
+ }, "Discard"), /*#__PURE__*/React__default["default"].createElement(core.Button, {
3235
3349
  "data-testid": "savedrafttaf",
3236
3350
  variant: "outlined",
3237
3351
  color: "secondary",
@@ -3261,7 +3375,7 @@
3261
3375
  break;
3262
3376
  }
3263
3377
  }
3264
- }, "Save"), /*#__PURE__*/React__default['default'].createElement(core.Button, {
3378
+ }, "Save"), /*#__PURE__*/React__default["default"].createElement(core.Button, {
3265
3379
  "data-testid": "publishtaf",
3266
3380
  variant: "outlined",
3267
3381
  color: "secondary",
@@ -3291,7 +3405,7 @@
3291
3405
  break;
3292
3406
  }
3293
3407
  }
3294
- }, "Publish"))), /*#__PURE__*/React__default['default'].createElement(IssuesPane, {
3408
+ }, "Publish"))), /*#__PURE__*/React__default["default"].createElement(IssuesPane, {
3295
3409
  errorList: errorList,
3296
3410
  handleClose: toggleIssuesPane,
3297
3411
  isOpen: isIssuesPaneOpen
@@ -3335,15 +3449,17 @@
3335
3449
  isDisabled = _c === void 0 ? false : _c,
3336
3450
  index = _a.index;
3337
3451
  var classes = useStyles$7(isSorting);
3338
- return /*#__PURE__*/React__default['default'].createElement(core.IconButton, {
3452
+ return /*#__PURE__*/React__default["default"].createElement(core.IconButton, {
3339
3453
  className: classes.dragHandle + " handle",
3340
3454
  "data-testid": "dragHandle-" + index,
3341
3455
  disableRipple: true,
3342
3456
  disabled: isDisabled
3343
- }, /*#__PURE__*/React__default['default'].createElement(icons.DragIndicator, null));
3457
+ }, /*#__PURE__*/React__default["default"].createElement(icons.DragIndicator, null));
3344
3458
  };
3345
3459
 
3346
- var emptyRow = {
3460
+ var noop = function noop() {};
3461
+
3462
+ var emptyChangegroup = {
3347
3463
  valid: '',
3348
3464
  wind: '',
3349
3465
  visibility: '',
@@ -3363,8 +3479,7 @@
3363
3479
  };
3364
3480
 
3365
3481
  var TafForm = function TafForm(_a) {
3366
- var mode = _a.mode,
3367
- changeGroups = _a.changeGroups,
3482
+ var isDisabled = _a.isDisabled,
3368
3483
  tafAction = _a.tafAction,
3369
3484
  _b = _a.staticTAC,
3370
3485
  staticTAC = _b === void 0 ? '' : _b,
@@ -3381,19 +3496,21 @@
3381
3496
 
3382
3497
  var api$1 = api.useApiContext().api;
3383
3498
  var isMounted = shared.useIsMounted().isMounted;
3384
- var isDisabled = mode === 'view';
3385
3499
 
3386
3500
  var _e = reactHookForm.useFormContext(),
3387
3501
  control = _e.control,
3388
3502
  handleSubmit = _e.handleSubmit,
3389
3503
  watch = _e.watch,
3390
- getValues = _e.getValues,
3391
- errors = _e.errors,
3392
- trigger = _e.trigger;
3504
+ trigger = _e.trigger,
3505
+ formState = _e.formState,
3506
+ getValues = _e.getValues;
3393
3507
 
3508
+ var isFormDirty = formState.isDirty,
3509
+ errors = formState.errors;
3510
+ shared.usePreventBrowserClose(isFormDirty && !isDisabled);
3394
3511
  var hiddenInputFields = ['baseTime', 'issueDate', 'type', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
3395
3512
 
3396
- var _f = __read(React__default['default'].useState(watch()), 2),
3513
+ var _f = __read(React__default["default"].useState(watch()), 2),
3397
3514
  delayedFormValues = _f[0],
3398
3515
  setDelayedFormValues = _f[1];
3399
3516
 
@@ -3401,35 +3518,26 @@
3401
3518
  TAC = _g[0],
3402
3519
  updateTAC = _g[1];
3403
3520
 
3404
- React__default['default'].useEffect(function () {
3405
- if (!Object.keys(errors).length && staticTAC === '' && isMounted.current) {
3406
- updateTAC(convertTafValuesToObject(delayedFormValues));
3407
- } // eslint-disable-next-line react-hooks/exhaustive-deps
3408
-
3409
- }, [delayedFormValues]);
3521
+ var hasErrors = Object.keys(errors).length;
3410
3522
 
3411
3523
  var onFormBlur = function onFormBlur() {
3412
3524
  setDelayedFormValues(getValues());
3413
3525
  };
3414
3526
 
3415
- var _h = __read(React__default['default'].useState(false), 2),
3416
- isFormDirty = _h[0],
3417
- setFormDirty = _h[1];
3418
-
3419
- var onFormChange = function onFormChange() {
3420
- return !isFormDirty ? setFormDirty(true) : null;
3421
- };
3527
+ React__default["default"].useEffect(function () {
3528
+ if (staticTAC === '' && isMounted.current && isFormDirty) {
3529
+ var newTAC = hasErrors ? null : convertTafValuesToObject(delayedFormValues);
3530
+ updateTAC(newTAC);
3531
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
3422
3532
 
3423
- shared.usePreventBrowserClose(isFormDirty && !isDisabled);
3533
+ }, [delayedFormValues]);
3534
+ React__default["default"].useEffect(function () {
3535
+ // prevent updating an error while typing
3536
+ if (!hasErrors && isFormDirty && document.activeElement.tagName !== 'INPUT') {
3537
+ updateTAC(convertTafValuesToObject(delayedFormValues));
3538
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
3424
3539
 
3425
- var _j = reactHookForm.useFieldArray({
3426
- control: control,
3427
- name: 'changeGroups'
3428
- }),
3429
- fields = _j.fields,
3430
- append = _j.append,
3431
- remove = _j.remove,
3432
- move = _j.move;
3540
+ }, [hasErrors]);
3433
3541
 
3434
3542
  var onSubmit = function onSubmit(data) {
3435
3543
  // eslint-disable-next-line no-console
@@ -3483,69 +3591,69 @@
3483
3591
  }
3484
3592
  };
3485
3593
 
3486
- var onAddRow = function onAddRow() {
3487
- append(emptyRow);
3488
- };
3489
-
3490
- React__default['default'].useEffect(function () {
3491
- // set changegroups on mount (if no changegroups - add empty one by default)
3492
- if (changeGroups.length > 0) {
3493
- changeGroups.forEach(function (group) {
3494
- append(group, false);
3495
- });
3496
- } else if (!isDisabled) {
3497
- append(emptyRow, false);
3498
- } // eslint-disable-next-line react-hooks/exhaustive-deps
3594
+ var _h = reactHookForm.useFieldArray({
3595
+ control: control,
3596
+ name: 'changeGroups'
3597
+ }),
3598
+ fields = _h.fields,
3599
+ append = _h.append,
3600
+ remove = _h.remove,
3601
+ move = _h.move;
3499
3602
 
3500
- }, []);
3603
+ var lastTotalFields = shared.usePrevious(fields.length);
3501
3604
 
3502
- var _k = useDragOrder(trigger, move, fields),
3503
- onChangeOrder = _k.onChangeOrder,
3504
- sortedFields = _k.sortedFields,
3505
- setSortedFields = _k.setSortedFields;
3605
+ var _j = useDragOrder(trigger, move, onFormBlur),
3606
+ onChangeOrder = _j.onChangeOrder,
3607
+ onStartDrag = _j.onStartDrag,
3608
+ activeDraggingIndex = _j.activeDraggingIndex;
3506
3609
 
3507
3610
  var onRemoverow = function onRemoverow(index) {
3508
3611
  remove(index);
3509
- var newList = fields.length > 1 ? fields.filter(function (_, fieldIndex) {
3510
- return fieldIndex === index;
3511
- }) : [];
3512
- setSortedFields(newList);
3513
3612
  };
3514
3613
 
3515
- return /*#__PURE__*/React__default['default'].createElement("form", {
3614
+ var onAddRow = function onAddRow() {
3615
+ append(emptyChangegroup, true);
3616
+ };
3617
+
3618
+ React__default["default"].useEffect(function () {
3619
+ if (isFormDirty && fields.length !== lastTotalFields) {
3620
+ onFormBlur();
3621
+ trigger(); // trigger all field validation,
3622
+ } // eslint-disable-next-line react-hooks/exhaustive-deps
3623
+
3624
+ }, [fields.length, isFormDirty]);
3625
+ return /*#__PURE__*/React__default["default"].createElement("form", {
3516
3626
  onSubmit: handleSubmit(onSubmit),
3517
- onChange: onFormChange,
3518
3627
  onBlur: onFormBlur
3519
- }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3628
+ }, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3520
3629
  className: classes.tacTitle
3521
- }, "TAC"), /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3630
+ }, "TAC"), /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3522
3631
  "data-testid": "form-tac-message",
3523
3632
  className: classes.tacText
3524
3633
  }, TAC.split('\n').map(function (line) {
3525
- return /*#__PURE__*/React__default['default'].createElement("span", {
3634
+ return /*#__PURE__*/React__default["default"].createElement("span", {
3526
3635
  key: line,
3527
3636
  className: classes.tacLine,
3528
3637
  "data-testid": "tafform-tac-message-line"
3529
3638
  }, line);
3530
- })), /*#__PURE__*/React__default['default'].createElement(TafFormRow, {
3639
+ })), /*#__PURE__*/React__default["default"].createElement(TafFormRow, {
3531
3640
  disabled: isDisabled
3532
- }), /*#__PURE__*/React__default['default'].createElement(reactSortablejs.ReactSortable, {
3641
+ }), /*#__PURE__*/React__default["default"].createElement(reactSortablejs.ReactSortable, {
3533
3642
  tag: "div",
3534
- list: sortedFields,
3535
- setList: setSortedFields,
3643
+ list: fields,
3644
+ setList: noop,
3536
3645
  animation: 200,
3537
3646
  onSort: onChangeOrder,
3538
3647
  handle: ".handle",
3539
3648
  direction: "vertical",
3540
3649
  // hover props
3541
3650
  forceFallback: true,
3542
- onStart: function onStart() {
3651
+ onStart: function onStart(event) {
3652
+ onStartDrag(event);
3543
3653
  reactSortablejs.Sortable.ghost.style.opacity = '1';
3544
3654
  }
3545
- }, sortedFields.map(function (_a, index) {
3546
- var chosen = _a.chosen;
3547
- var item = fields[index];
3548
- return /*#__PURE__*/React__default['default'].createElement(TafFormRow, {
3655
+ }, fields.map(function (item, index) {
3656
+ return /*#__PURE__*/React__default["default"].createElement(TafFormRow, {
3549
3657
  field: item,
3550
3658
  className: classes.formRow,
3551
3659
  key: item.id,
@@ -3554,31 +3662,31 @@
3554
3662
  disabled: isDisabled,
3555
3663
  onRemoveChangeGroup: onRemoverow,
3556
3664
  isChangeGroup: true,
3557
- dragHandle: /*#__PURE__*/React__default['default'].createElement(DragHandle, {
3558
- isDisabled: sortedFields.length === 1 || isDisabled,
3559
- isSorting: chosen,
3665
+ dragHandle: /*#__PURE__*/React__default["default"].createElement(DragHandle, {
3666
+ isDisabled: fields.length === 1 || isDisabled,
3667
+ isSorting: activeDraggingIndex === index,
3560
3668
  index: index
3561
3669
  })
3562
3670
  });
3563
- })), !isDisabled && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3671
+ })), !isDisabled && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3564
3672
  container: true,
3565
3673
  item: true,
3566
3674
  xs: 12,
3567
3675
  justify: "flex-end"
3568
- }, /*#__PURE__*/React__default['default'].createElement(core.IconButton, {
3676
+ }, /*#__PURE__*/React__default["default"].createElement(core.IconButton, {
3569
3677
  "aria-label": "add",
3570
3678
  "data-testid": "add-changeGroup",
3571
3679
  onClick: onAddRow,
3572
3680
  className: classes.addButton
3573
- }, /*#__PURE__*/React__default['default'].createElement(icons.Add, null))), /*#__PURE__*/React__default['default'].createElement(TafFormButtons, {
3681
+ }, /*#__PURE__*/React__default["default"].createElement(icons.Add, null))), /*#__PURE__*/React__default["default"].createElement(TafFormButtons, {
3574
3682
  tafAction: tafAction,
3575
3683
  onTafFormButtonPress: onTafButtonPress
3576
3684
  })), hiddenInputFields.map(function (field) {
3577
- return /*#__PURE__*/React__default['default'].createElement(formFields.ReactHookFormHiddenInput, {
3685
+ return /*#__PURE__*/React__default["default"].createElement(formFields.ReactHookFormHiddenInput, {
3578
3686
  name: field,
3579
3687
  key: field
3580
3688
  });
3581
- }), /*#__PURE__*/React__default['default'].createElement(DraftFieldHelper, null));
3689
+ }), /*#__PURE__*/React__default["default"].createElement(DraftFieldHelper, null));
3582
3690
  };
3583
3691
 
3584
3692
  var getMessageType = function getMessageType(taf, tafAction) {
@@ -3598,8 +3706,8 @@
3598
3706
  var previousValidDateEnd = taf.previousValidDateEnd && tafAction !== 'AMEND' ? taf.previousValidDateEnd : taf.validDateEnd; // For amendment change valid start time to current time
3599
3707
  // only do this if we're already within the validity period
3600
3708
 
3601
- if ((tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND') && moment__default['default'].utc() >= moment__default['default'].utc(taf.validDateStart)) {
3602
- var now = moment__default['default'].utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
3709
+ if ((tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND') && moment__default["default"].utc() >= moment__default["default"].utc(taf.validDateStart)) {
3710
+ var now = moment__default["default"].utc().format('YYYY-MM-DDTHH:mm:ss[Z]');
3603
3711
  var validObj = {
3604
3712
  start: now,
3605
3713
  end: taf.baseForecast.valid.end
@@ -3619,15 +3727,21 @@
3619
3727
  previousValidDateEnd: previousValidDateEnd
3620
3728
  });
3621
3729
  };
3622
- var prepareTafValues = function prepareTafValues(_taf, tafAction) {
3623
- // If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
3730
+ var prepareTafValues = function prepareTafValues(_taf, tafAction, addEmptyChangeGroup) {
3731
+ if (addEmptyChangeGroup === void 0) {
3732
+ addEmptyChangeGroup = false;
3733
+ } // If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
3624
3734
  // If action is AMEND/DRAFT_AMEND - update validity start time to current time
3735
+
3736
+
3625
3737
  var taf = tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND' || tafAction === 'CORRECT' || tafAction === 'DRAFT_CORRECT' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
3626
- return __assign(__assign(__assign({}, taf), {
3738
+ return __assign(__assign(__assign(__assign({}, taf), {
3627
3739
  messageType: getMessageType(taf, tafAction),
3628
3740
  baseForecast: formatFormValues(taf.baseForecast)
3629
3741
  }), taf.changeGroups && {
3630
3742
  changeGroups: taf.changeGroups.map(formatFormValues)
3743
+ }), addEmptyChangeGroup && {
3744
+ changeGroups: [emptyChangegroup]
3631
3745
  });
3632
3746
  };
3633
3747
 
@@ -3638,24 +3752,19 @@
3638
3752
  _b = _a.TAC,
3639
3753
  TAC = _b === void 0 ? '' : _b,
3640
3754
  onFormAction = _a.onFormAction;
3641
- var taf = tafFromBackend.taf; // react-hook-form doesn't work well when setting defaultValues on dynamic list, that's why it's send seperate, and build up in the mount effect
3642
-
3643
- var _c = prepareTafValues(taf, tafAction),
3644
- _d = _c.changeGroups,
3645
- changeGroups = _d === void 0 ? [] : _d,
3646
- defaultValues = __rest(_c, ["changeGroups"]);
3647
-
3755
+ var taf = tafFromBackend.taf;
3756
+ var isDisabled = mode === 'view';
3757
+ var defaultValues = prepareTafValues(taf, tafAction, !isDisabled && !taf.changeGroups);
3648
3758
  var options = {
3649
3759
  defaultValues: defaultValues,
3650
3760
  mode: 'onTouched',
3651
3761
  reValidateMode: 'onChange',
3652
3762
  criteriaMode: 'all'
3653
3763
  };
3654
- return /*#__PURE__*/React__default['default'].createElement(formFields.ReactHookFormProvider, {
3764
+ return /*#__PURE__*/React__default["default"].createElement(formFields.ReactHookFormProvider, {
3655
3765
  options: options
3656
- }, /*#__PURE__*/React__default['default'].createElement(TafForm, {
3657
- mode: mode,
3658
- changeGroups: changeGroups,
3766
+ }, /*#__PURE__*/React__default["default"].createElement(TafForm, {
3767
+ isDisabled: isDisabled,
3659
3768
  tafAction: tafAction,
3660
3769
  staticTAC: TAC,
3661
3770
  onFormAction: onFormAction
@@ -3753,11 +3862,11 @@
3753
3862
  * */
3754
3863
 
3755
3864
  var getActiveStatus = function getActiveStatus(listType, className) {
3756
- return listType === 'ACTIVE' ? /*#__PURE__*/React__default['default'].createElement(icons.CheckCircle, {
3865
+ return listType === 'ACTIVE' ? /*#__PURE__*/React__default["default"].createElement(icons.CheckCircle, {
3757
3866
  "data-testid": "status-active",
3758
3867
  className: className,
3759
3868
  fontSize: "small"
3760
- }) : /*#__PURE__*/React__default['default'].createElement(icons.Schedule, {
3869
+ }) : /*#__PURE__*/React__default["default"].createElement(icons.Schedule, {
3761
3870
  "data-testid": "status-upcoming",
3762
3871
  className: className,
3763
3872
  fontSize: "small"
@@ -3769,13 +3878,13 @@
3769
3878
  if (taf.status === 'NEW') return null;
3770
3879
 
3771
3880
  if (taf.status === 'CANCELLED') {
3772
- return /*#__PURE__*/React__default['default'].createElement(shared.StatusTag, {
3881
+ return /*#__PURE__*/React__default["default"].createElement(shared.StatusTag, {
3773
3882
  content: "cancelled",
3774
3883
  color: "red"
3775
3884
  });
3776
3885
  }
3777
3886
 
3778
- return /*#__PURE__*/React__default['default'].createElement(shared.StatusTag, {
3887
+ return /*#__PURE__*/React__default["default"].createElement(shared.StatusTag, {
3779
3888
  content: taf.status.toLowerCase(),
3780
3889
  color: taf.status === 'EXPIRED' ? 'grey' : 'green'
3781
3890
  });
@@ -3819,101 +3928,101 @@
3819
3928
  _c = _a.showTac,
3820
3929
  showTac = _c === void 0 ? false : _c;
3821
3930
  var classes = useStyles$5();
3822
- var validTimeDate = moment__default['default'].utc(taf.validDateStart).format('DD MMM');
3823
- var baseTime = moment__default['default'].utc(taf.baseTime).format('HH:mm');
3824
- return /*#__PURE__*/React__default['default'].createElement(core.Card, {
3931
+ var validTimeDate = moment__default["default"].utc(taf.validDateStart).format('DD MMM');
3932
+ var baseTime = moment__default["default"].utc(taf.baseTime).format('HH:mm');
3933
+ return /*#__PURE__*/React__default["default"].createElement(core.Card, {
3825
3934
  elevation: 0,
3826
3935
  className: classes.cardWrapper
3827
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3936
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3828
3937
  container: true,
3829
3938
  alignItems: "center",
3830
3939
  spacing: 1
3831
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3940
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3832
3941
  item: true,
3833
3942
  xs: 3,
3834
3943
  sm: 2,
3835
3944
  md: 1
3836
- }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3945
+ }, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3837
3946
  variant: "subtitle2",
3838
3947
  noWrap: true,
3839
3948
  className: classes.font
3840
- }, taf.location)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3949
+ }, taf.location)), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3841
3950
  item: true,
3842
3951
  xs: 3,
3843
3952
  sm: 3,
3844
3953
  md: 1,
3845
3954
  container: true
3846
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3955
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3847
3956
  item: true,
3848
3957
  xs: 3,
3849
3958
  sm: 3,
3850
3959
  md: 3,
3851
3960
  className: classes.alignIcon
3852
- }, showTac && /*#__PURE__*/React__default['default'].createElement(core.Tooltip, {
3961
+ }, showTac && /*#__PURE__*/React__default["default"].createElement(core.Tooltip, {
3853
3962
  "data-testid": "taflistrow-tactooltip",
3854
- title: /*#__PURE__*/React__default['default'].createElement("div", {
3963
+ title: /*#__PURE__*/React__default["default"].createElement("div", {
3855
3964
  style: {
3856
3965
  whiteSpace: 'pre-line'
3857
3966
  }
3858
3967
  }, TAC),
3859
3968
  placement: "bottom-start"
3860
- }, /*#__PURE__*/React__default['default'].createElement(icons.InfoOutlined, {
3969
+ }, /*#__PURE__*/React__default["default"].createElement(icons.InfoOutlined, {
3861
3970
  "data-testid": "taflistrow-tacicon",
3862
3971
  color: "secondary",
3863
3972
  fontSize: "small"
3864
- }))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3973
+ }))), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3865
3974
  item: true,
3866
3975
  xs: 9,
3867
3976
  sm: 9,
3868
3977
  md: 9
3869
- }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3978
+ }, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3870
3979
  variant: "subtitle2",
3871
3980
  className: classes.font,
3872
3981
  "data-testid": "baseTime"
3873
- }, baseTime))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3982
+ }, baseTime))), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3874
3983
  item: true,
3875
3984
  xs: 3,
3876
3985
  sm: 2,
3877
3986
  md: 1
3878
- }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3987
+ }, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3879
3988
  variant: "subtitle2",
3880
3989
  className: classes.font,
3881
3990
  "data-testid": "validTimeDate"
3882
- }, validTimeDate)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
3991
+ }, validTimeDate)), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3883
3992
  item: true,
3884
3993
  xs: 3,
3885
3994
  sm: 3,
3886
3995
  md: 6
3887
- }, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
3996
+ }, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
3888
3997
  variant: "subtitle2",
3889
3998
  className: classes.font,
3890
3999
  "data-testid": "validTimeSlot"
3891
4000
  }, formatValidToString({
3892
4001
  start: taf.validDateStart,
3893
4002
  end: taf.validDateEnd
3894
- }))), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4003
+ }))), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3895
4004
  item: true,
3896
4005
  xs: 12,
3897
4006
  sm: 4,
3898
4007
  md: 3
3899
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4008
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3900
4009
  container: true,
3901
4010
  justify: "flex-start",
3902
4011
  spacing: 2
3903
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4012
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3904
4013
  item: true,
3905
4014
  xs: 8,
3906
4015
  container: true,
3907
4016
  justify: "flex-end"
3908
- }, taf.status === 'DRAFT' || taf.status === 'DRAFT_CORRECTED' || taf.status === 'DRAFT_AMENDED' ? /*#__PURE__*/React__default['default'].createElement(core.Button, {
4017
+ }, taf.status === 'DRAFT' || taf.status === 'DRAFT_CORRECTED' || taf.status === 'DRAFT_AMENDED' ? /*#__PURE__*/React__default["default"].createElement(core.Button, {
3909
4018
  color: "secondary",
3910
4019
  size: "small",
3911
4020
  "data-testid": "tafRow-draft",
3912
- startIcon: /*#__PURE__*/React__default['default'].createElement(icons.Create, {
4021
+ startIcon: /*#__PURE__*/React__default["default"].createElement(icons.Create, {
3913
4022
  fontSize: "small",
3914
4023
  color: "secondary"
3915
4024
  })
3916
- }, getDraftTitle(taf.status)) : getStatusTagList(taf)), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4025
+ }, getDraftTitle(taf.status)) : getStatusTagList(taf)), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
3917
4026
  item: true,
3918
4027
  className: classes.alignIcon
3919
4028
  }, taf.status !== 'NEW' && taf.status !== 'DRAFT' && taf.status !== 'DRAFT_CORRECTED' && taf.status !== 'DRAFT_AMENDED' && taf.status !== 'CANCELLED' && listType !== 'EXPIRED' && getActiveStatus(listType, classes.activeStatus))))));
@@ -3937,10 +4046,10 @@
3937
4046
  * */
3938
4047
  var getListType = function getListType(taf, locationSettings) {
3939
4048
  if (!taf) return null;
3940
- var now = moment__default['default'].utc();
3941
- var baseTime = moment__default['default'].utc(taf.baseTime);
4049
+ var now = moment__default["default"].utc();
4050
+ var baseTime = moment__default["default"].utc(taf.baseTime);
3942
4051
  var activityPeriod = locationSettings[taf.location].activity_period;
3943
- var nextBaseTime = moment__default['default'].utc(taf.baseTime).add(activityPeriod, 'hours');
4052
+ var nextBaseTime = moment__default["default"].utc(taf.baseTime).add(activityPeriod, 'hours');
3944
4053
 
3945
4054
  if (taf.status === 'EXPIRED') {
3946
4055
  return 'EXPIRED';
@@ -3980,10 +4089,10 @@
3980
4089
  onFormAction = _a.onFormAction;
3981
4090
  var taf = tafFromBackend ? tafFromBackend.taf : null;
3982
4091
  var locationSettings = useTafSettings(tafConfig).locations;
3983
- return /*#__PURE__*/React__default['default'].createElement(ContentDialog, {
4092
+ return /*#__PURE__*/React__default["default"].createElement(ContentDialog, {
3984
4093
  open: open,
3985
4094
  toggleDialogStatus: toggleFormDialog,
3986
- titleComponent: /*#__PURE__*/React__default['default'].createElement(TafListRow, {
4095
+ titleComponent: /*#__PURE__*/React__default["default"].createElement(TafListRow, {
3987
4096
  taf: taf,
3988
4097
  listType: getListType(taf, locationSettings)
3989
4098
  }),
@@ -4021,34 +4130,34 @@
4021
4130
  canBe = _a.canBe,
4022
4131
  onClickTafActionButton = _a.onClickTafActionButton;
4023
4132
  var classes = useStyles$4();
4024
- return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4133
+ return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4025
4134
  container: true,
4026
4135
  alignItems: "center",
4027
4136
  justify: "flex-end",
4028
4137
  "data-testid": "taflist-canbebuttons",
4029
4138
  spacing: 1,
4030
4139
  className: classes.actionButtons
4031
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4140
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4032
4141
  item: true
4033
- }, canBe.includes('CANCELLED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
4142
+ }, canBe.includes('CANCELLED') && /*#__PURE__*/React__default["default"].createElement(core.Button, {
4034
4143
  "data-testid": "canceltaf",
4035
4144
  variant: "outlined",
4036
4145
  color: "secondary",
4037
4146
  onClick: function onClick() {
4038
4147
  return onClickTafActionButton(uuid, 'CANCEL');
4039
4148
  }
4040
- }, "Cancel")), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4149
+ }, "Cancel")), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4041
4150
  item: true
4042
- }, canBe.includes('CORRECTED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
4151
+ }, canBe.includes('CORRECTED') && /*#__PURE__*/React__default["default"].createElement(core.Button, {
4043
4152
  "data-testid": "correctaf",
4044
4153
  variant: "outlined",
4045
4154
  color: "secondary",
4046
4155
  onClick: function onClick() {
4047
4156
  return onClickTafActionButton(uuid, 'CORRECT');
4048
4157
  }
4049
- }, "Correct")), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4158
+ }, "Correct")), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4050
4159
  item: true
4051
- }, canBe.includes('AMENDED') && /*#__PURE__*/React__default['default'].createElement(core.Button, {
4160
+ }, canBe.includes('AMENDED') && /*#__PURE__*/React__default["default"].createElement(core.Button, {
4052
4161
  "data-testid": "amendtaf",
4053
4162
  variant: "outlined",
4054
4163
  color: "secondary",
@@ -4097,7 +4206,7 @@
4097
4206
  TAC = _c[0],
4098
4207
  requestTAC = _c[1];
4099
4208
 
4100
- React__default['default'].useEffect(function () {
4209
+ React__default["default"].useEffect(function () {
4101
4210
  // only re-retrieve TAC if draft state
4102
4211
  if (tafListItem.taf.status === 'DRAFT' || tafListItem.taf.status === 'DRAFT_AMENDED' || tafListItem.taf.status === 'DRAFT_CORRECTED') {
4103
4212
  requestTAC(tafListItem.taf);
@@ -4105,7 +4214,7 @@
4105
4214
 
4106
4215
  }, [tafListItem.taf]);
4107
4216
  var popOut = status === 'NEW' || status === 'DRAFT' || status === 'DRAFT_AMENDED' || status === 'DRAFT_CORRECTED';
4108
- return /*#__PURE__*/React__default['default'].createElement(core.Accordion, __assign({
4217
+ return /*#__PURE__*/React__default["default"].createElement(core.Accordion, __assign({
4109
4218
  "data-testid": "tafListItem",
4110
4219
  className: classes.accordion
4111
4220
  }, popOut ? {
@@ -4119,41 +4228,41 @@
4119
4228
  TransitionProps: {
4120
4229
  unmountOnExit: true
4121
4230
  }
4122
- }), /*#__PURE__*/React__default['default'].createElement(core.AccordionSummary, {
4231
+ }), /*#__PURE__*/React__default["default"].createElement(core.AccordionSummary, {
4123
4232
  "data-testid": "tafListSectionAccordionSummary",
4124
- expandIcon: popOut ? /*#__PURE__*/React__default['default'].createElement(core.Tooltip, {
4233
+ expandIcon: popOut ? /*#__PURE__*/React__default["default"].createElement(core.Tooltip, {
4125
4234
  title: "Popout to edit"
4126
- }, /*#__PURE__*/React__default['default'].createElement(icons.OpenInNew, {
4235
+ }, /*#__PURE__*/React__default["default"].createElement(icons.OpenInNew, {
4127
4236
  "data-testid": "popOutIcon",
4128
4237
  fontSize: "small"
4129
- })) : /*#__PURE__*/React__default['default'].createElement(icons.ExpandMore, {
4238
+ })) : /*#__PURE__*/React__default["default"].createElement(icons.ExpandMore, {
4130
4239
  "data-testid": "expandIcon"
4131
4240
  })
4132
- }, /*#__PURE__*/React__default['default'].createElement(TafListRow, {
4241
+ }, /*#__PURE__*/React__default["default"].createElement(TafListRow, {
4133
4242
  taf: tafListItem.taf,
4134
4243
  listType: listType,
4135
4244
  TAC: TAC,
4136
4245
  showTac: true
4137
- })), /*#__PURE__*/React__default['default'].createElement(core.AccordionDetails, null, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4246
+ })), /*#__PURE__*/React__default["default"].createElement(core.AccordionDetails, null, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4138
4247
  container: true,
4139
4248
  direction: "column"
4140
4249
  }, errorCancelTaf.length > 0 && errorCancelTaf.find(function (uuid) {
4141
4250
  return uuid === tafListItem.taf.uuid;
4142
- }) && /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
4251
+ }) && /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4143
4252
  severity: "error",
4144
4253
  title: "Cancelling this TAF failed, please try again",
4145
4254
  dataTestId: "tafList-cancelAlert"
4146
- }), /*#__PURE__*/React__default['default'].createElement("div", {
4255
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
4147
4256
  className: classes.formPadding
4148
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4257
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4149
4258
  item: true
4150
- }, /*#__PURE__*/React__default['default'].createElement(TafFormWrapper, {
4259
+ }, /*#__PURE__*/React__default["default"].createElement(TafFormWrapper, {
4151
4260
  tafFromBackend: tafListItem,
4152
4261
  mode: "view",
4153
4262
  TAC: TAC
4154
- })), /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4263
+ })), /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4155
4264
  item: true
4156
- }, /*#__PURE__*/React__default['default'].createElement(TafListButtons, {
4265
+ }, /*#__PURE__*/React__default["default"].createElement(TafListButtons, {
4157
4266
  canBe: tafListItem.canbe,
4158
4267
  uuid: tafListItem.taf.uuid,
4159
4268
  onClickTafActionButton: onClickTafActionButton
@@ -4196,13 +4305,13 @@
4196
4305
  errorCancelTaf = _b === void 0 ? [] : _b,
4197
4306
  onClickTafActionButton = _a.onClickTafActionButton;
4198
4307
  var classes = useStyles$2();
4199
- return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(core.Typography, {
4308
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(core.Typography, {
4200
4309
  variant: "subtitle2",
4201
4310
  className: classes.listHeaders
4202
- }, title), /*#__PURE__*/React__default['default'].createElement("div", {
4311
+ }, title), /*#__PURE__*/React__default["default"].createElement("div", {
4203
4312
  "data-testid": "tafList" + listType
4204
4313
  }, tafList.map(function (tafListItem) {
4205
- return /*#__PURE__*/React__default['default'].createElement(TafListAccordion, {
4314
+ return /*#__PURE__*/React__default["default"].createElement(TafListAccordion, {
4206
4315
  key: tafListItem.taf.uuid + "-" + tafListItem.taf.status,
4207
4316
  tafListItem: tafListItem,
4208
4317
  listType: listType,
@@ -4244,10 +4353,10 @@
4244
4353
  try {
4245
4354
  for (var tafList_1 = __values(tafList), tafList_1_1 = tafList_1.next(); !tafList_1_1.done; tafList_1_1 = tafList_1.next()) {
4246
4355
  var taf = tafList_1_1.value;
4247
- var now = moment__default['default'].utc();
4248
- var baseTime = moment__default['default'].utc(taf.taf.baseTime);
4356
+ var now = moment__default["default"].utc();
4357
+ var baseTime = moment__default["default"].utc(taf.taf.baseTime);
4249
4358
  var activityPeriod = locationSettings[taf.taf.location].activity_period;
4250
- var nextBaseTime = moment__default['default'].utc(taf.taf.baseTime).add(activityPeriod, 'hours');
4359
+ var nextBaseTime = moment__default["default"].utc(taf.taf.baseTime).add(activityPeriod, 'hours');
4251
4360
 
4252
4361
  if (taf.taf.status === 'EXPIRED') {
4253
4362
  expiredTafs.push(taf);
@@ -4270,37 +4379,37 @@
4270
4379
  }
4271
4380
  }
4272
4381
 
4273
- return /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4382
+ return /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4274
4383
  container: true,
4275
4384
  direction: "column",
4276
4385
  alignItems: "stretch"
4277
- }, /*#__PURE__*/React__default['default'].createElement(core.Grid, {
4386
+ }, /*#__PURE__*/React__default["default"].createElement(core.Grid, {
4278
4387
  item: true,
4279
4388
  className: classes.listBody
4280
- }, error && /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
4389
+ }, error && /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4281
4390
  severity: "error",
4282
4391
  title: "An error has occurred while retrieving the list, please try again",
4283
4392
  info: error.message ? error.message : '',
4284
4393
  dataTestId: "tafList-alert"
4285
- }), tafList && /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafListSection, {
4394
+ }), tafList && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4286
4395
  title: "Upcoming",
4287
4396
  listType: "UPCOMING",
4288
4397
  tafList: upcomingTafs,
4289
4398
  errorCancelTaf: errorCancelTaf,
4290
4399
  onClickTafActionButton: onClickTafActionButton
4291
- }), /*#__PURE__*/React__default['default'].createElement(TafListSection, {
4400
+ }), /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4292
4401
  title: "Current time slot",
4293
4402
  listType: "ACTIVE",
4294
4403
  tafList: currentTafs,
4295
4404
  errorCancelTaf: errorCancelTaf,
4296
4405
  onClickTafActionButton: onClickTafActionButton
4297
- }), /*#__PURE__*/React__default['default'].createElement(TafListSection, {
4406
+ }), /*#__PURE__*/React__default["default"].createElement(TafListSection, {
4298
4407
  title: "Expired",
4299
4408
  listType: "EXPIRED",
4300
4409
  tafList: expiredTafs,
4301
4410
  errorCancelTaf: errorCancelTaf,
4302
4411
  onClickTafActionButton: onClickTafActionButton
4303
- })), isLoading && /*#__PURE__*/React__default['default'].createElement(lab.Skeleton, {
4412
+ })), isLoading && /*#__PURE__*/React__default["default"].createElement(lab.Skeleton, {
4304
4413
  "data-testid": "tafList-skeleton",
4305
4414
  variant: "rect",
4306
4415
  height: "660px"
@@ -4332,10 +4441,10 @@
4332
4441
 
4333
4442
  var Spinner = function Spinner() {
4334
4443
  var classes = useStyles();
4335
- return /*#__PURE__*/React__default['default'].createElement(core.Backdrop, {
4444
+ return /*#__PURE__*/React__default["default"].createElement(core.Backdrop, {
4336
4445
  open: true,
4337
4446
  className: classes.backdrop
4338
- }, /*#__PURE__*/React__default['default'].createElement(core.CircularProgress, {
4447
+ }, /*#__PURE__*/React__default["default"].createElement(core.CircularProgress, {
4339
4448
  "data-testid": "spinner",
4340
4449
  color: "inherit"
4341
4450
  }));
@@ -4346,11 +4455,11 @@
4346
4455
  pollingInterval = 10000;
4347
4456
  }
4348
4457
 
4349
- var _a = __read(React__default['default'].useState([]), 2),
4458
+ var _a = __read(React__default["default"].useState([]), 2),
4350
4459
  errorCancelTaf = _a[0],
4351
4460
  setErrorCancelTaf = _a[1];
4352
4461
 
4353
- React__default['default'].useEffect(function () {
4462
+ React__default["default"].useEffect(function () {
4354
4463
  var cancelErrorMessageHandler = errorCancelTaf.length > 0 ? setTimeout(function () {
4355
4464
  if (errorCancelTaf.length > 0) {
4356
4465
  setErrorCancelTaf(errorCancelTaf.slice(1));
@@ -4375,27 +4484,27 @@
4375
4484
  var api$1 = api.useApiContext().api;
4376
4485
  var confirmDialog = shared.useConfirmationDialog();
4377
4486
 
4378
- var _a = __read(React__default['default'].useState(false), 2),
4487
+ var _a = __read(React__default["default"].useState(false), 2),
4379
4488
  isTafDialogOpen = _a[0],
4380
4489
  setTafDialogOpen = _a[1];
4381
4490
 
4382
- var _b = __read(React__default['default'].useState(null), 2),
4491
+ var _b = __read(React__default["default"].useState(null), 2),
4383
4492
  selectedTafId = _b[0],
4384
4493
  setselectedTafId = _b[1];
4385
4494
 
4386
- var _c = __read(React__default['default'].useState(null), 2),
4495
+ var _c = __read(React__default["default"].useState(null), 2),
4387
4496
  tafDialogAction = _c[0],
4388
4497
  setTafDialogAction = _c[1];
4389
4498
 
4390
- var _d = __read(React__default['default'].useState(false), 2),
4499
+ var _d = __read(React__default["default"].useState(false), 2),
4391
4500
  errorPostMessage = _d[0],
4392
4501
  setErrorPostMessage = _d[1];
4393
4502
 
4394
- var _e = __read(React__default['default'].useState(''), 2),
4503
+ var _e = __read(React__default["default"].useState(''), 2),
4395
4504
  errorPostMessageText = _e[0],
4396
4505
  setErrorPostMessageText = _e[1];
4397
4506
 
4398
- var _f = __read(React__default['default'].useState(false), 2),
4507
+ var _f = __read(React__default["default"].useState(false), 2),
4399
4508
  showSpinner = _f[0],
4400
4509
  setSpinner = _f[1]; // clear error message for cancel after 10 seconds
4401
4510
 
@@ -4426,7 +4535,7 @@
4426
4535
  setTafDialogOpen(!isTafDialogOpen);
4427
4536
  };
4428
4537
 
4429
- React__default['default'].useEffect(function () {
4538
+ React__default["default"].useEffect(function () {
4430
4539
  if (selectedTafId) {
4431
4540
  toggleTafDialog();
4432
4541
  } // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -4568,28 +4677,28 @@
4568
4677
  };
4569
4678
 
4570
4679
  var selectedTaf = getSelectedTaf(selectedTafId, tafList);
4571
- return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(TafList, {
4680
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(TafList, {
4572
4681
  tafList: tafList,
4573
4682
  isLoading: isLoadingList,
4574
4683
  error: errorList,
4575
4684
  onClickTafActionButton: onClickTafActionButton,
4576
4685
  errorCancelTaf: errorCancelTaf
4577
- }), showSpinner && /*#__PURE__*/React__default['default'].createElement(Spinner, null), selectedTaf !== undefined && /*#__PURE__*/React__default['default'].createElement(TafFormDialog, {
4686
+ }), showSpinner && /*#__PURE__*/React__default["default"].createElement(Spinner, null), selectedTaf !== undefined && /*#__PURE__*/React__default["default"].createElement(TafFormDialog, {
4578
4687
  open: isTafDialogOpen,
4579
4688
  toggleFormDialog: toggleTafDialog,
4580
4689
  tafFromBackend: selectedTaf,
4581
- alertBanner: errorPostMessage ? /*#__PURE__*/React__default['default'].createElement(shared.AlertBanner, {
4690
+ alertBanner: errorPostMessage ? /*#__PURE__*/React__default["default"].createElement(shared.AlertBanner, {
4582
4691
  severity: "error",
4583
4692
  title: "An error has occurred while saving, please try again",
4584
4693
  info: errorPostMessageText
4585
4694
  }) : null,
4586
4695
  onFormAction: onFormAction
4587
- }, /*#__PURE__*/React__default['default'].createElement(TafFormWrapper, {
4696
+ }, /*#__PURE__*/React__default["default"].createElement(TafFormWrapper, {
4588
4697
  mode: "edit",
4589
4698
  tafFromBackend: selectedTaf,
4590
4699
  tafAction: tafDialogAction,
4591
4700
  onFormAction: onFormAction
4592
- }), showSpinner && /*#__PURE__*/React__default['default'].createElement(Spinner, null)));
4701
+ }), showSpinner && /*#__PURE__*/React__default["default"].createElement(Spinner, null)));
4593
4702
  };
4594
4703
  /**
4595
4704
  * Shows the list of Tafs and allows to create, edit and view Tafs.
@@ -4601,11 +4710,11 @@
4601
4710
 
4602
4711
 
4603
4712
  var ConfirmationWrapper = function ConfirmationWrapper() {
4604
- return /*#__PURE__*/React__default['default'].createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__default['default'].createElement(TafWrapper, null));
4713
+ return /*#__PURE__*/React__default["default"].createElement(shared.ConfirmationServiceProvider, null, /*#__PURE__*/React__default["default"].createElement(TafWrapper, null));
4605
4714
  };
4606
4715
 
4607
- var createApi = function createApi(url, appUrl, auth, setAuth, authTokenUrl) {
4608
- var axiosInstance = api.createApiInstance(url, appUrl, auth, setAuth, authTokenUrl);
4716
+ var createApi = function createApi(url, appUrl, auth, setAuth, authTokenUrl, authClientId) {
4717
+ var axiosInstance = api.createApiInstance(url, appUrl, auth, setAuth, authTokenUrl, authClientId);
4609
4718
  return {
4610
4719
  // api data
4611
4720
  getTafList: function getTafList() {
@@ -4631,4 +4740,4 @@
4631
4740
 
4632
4741
  Object.defineProperty(exports, '__esModule', { value: true });
4633
4742
 
4634
- })));
4743
+ }));