@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/lib/TafDemo.stories.d.ts +1 -0
- package/lib/components/IssuesPane/IssuesPane.stories.d.ts +0 -4
- package/lib/components/Providers/Providers.d.ts +11 -0
- package/lib/components/TafForm/TafForm.d.ts +20 -3
- package/lib/components/TafForm/TafFormRow/validField.d.ts +7 -2
- package/lib/components/TafForm/TafFormRow/weather.d.ts +4 -0
- package/lib/components/TafForm/TafFormWrapper.d.ts +1 -1
- package/lib/components/TafForm/TafFormWrapper.stories.d.ts +1 -0
- package/lib/components/TafForm/utils.d.ts +6 -6
- package/lib/components/TafList/TafList.stories.d.ts +1 -0
- package/lib/utils/api.d.ts +1 -1
- package/lib/utils/mockdata/fakeTafList.d.ts +1 -0
- package/lib/utils/testUtils.d.ts +0 -2
- package/package.json +6 -6
- package/taf.esm.js +967 -712
- package/taf.umd.js +420 -311
package/taf.esm.js
CHANGED
|
@@ -3,122 +3,175 @@ import React__default from 'react';
|
|
|
3
3
|
import { makeStyles, Grid, TextField, IconButton, Tooltip, Chip, SvgIcon, Typography, Button, Dialog, DialogTitle, DialogContent, Card, Accordion, AccordionSummary, AccordionDetails, Backdrop, CircularProgress } from '@material-ui/core';
|
|
4
4
|
import { Skeleton } from '@material-ui/lab';
|
|
5
5
|
import moment from 'moment';
|
|
6
|
-
import { useDraftFormHelpers, ToolContainerDraggable, useConfirmationDialog,
|
|
6
|
+
import { useIsMounted, useDraftFormHelpers, ToolContainerDraggable, useConfirmationDialog, usePreventBrowserClose, usePrevious, StatusTag, AlertBanner, ConfirmationServiceProvider, usePoller, isAxiosError, getAxiosErrorMessage } from '@opengeoweb/shared';
|
|
7
7
|
import { Delete, DragIndicator, Add, Close, InfoOutlined, Create, CheckCircle, Schedule, OpenInNew, ExpandMore } from '@material-ui/icons';
|
|
8
8
|
import { useApiContext, useApi, createApiInstance } from '@opengeoweb/api';
|
|
9
9
|
import { getDeepProperty, ReactHookFormHiddenInput, ReactHookFormProvider } from '@opengeoweb/form-fields';
|
|
10
10
|
import { useFormContext, Controller, useFieldArray } from 'react-hook-form';
|
|
11
11
|
import { ReactSortable, Sortable } from 'react-sortablejs';
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
13
|
+
function _typeof(obj) {
|
|
14
|
+
"@babel/helpers - typeof";
|
|
15
|
+
|
|
16
|
+
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
17
|
+
_typeof = function (obj) {
|
|
18
|
+
return typeof obj;
|
|
19
|
+
};
|
|
20
|
+
} else {
|
|
21
|
+
_typeof = function (obj) {
|
|
22
|
+
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return _typeof(obj);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function _defineProperty(obj, key, value) {
|
|
30
|
+
if (key in obj) {
|
|
31
|
+
Object.defineProperty(obj, key, {
|
|
32
|
+
value: value,
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
obj[key] = value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return obj;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function _slicedToArray(arr, i) {
|
|
45
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function _toArray(arr) {
|
|
49
|
+
return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function _toConsumableArray(arr) {
|
|
53
|
+
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function _arrayWithoutHoles(arr) {
|
|
57
|
+
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function _arrayWithHoles(arr) {
|
|
61
|
+
if (Array.isArray(arr)) return arr;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function _iterableToArray(iter) {
|
|
65
|
+
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function _iterableToArrayLimit(arr, i) {
|
|
69
|
+
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
|
|
70
|
+
var _arr = [];
|
|
71
|
+
var _n = true;
|
|
72
|
+
var _d = false;
|
|
73
|
+
var _e = undefined;
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
|
77
|
+
_arr.push(_s.value);
|
|
78
|
+
|
|
79
|
+
if (i && _arr.length === i) break;
|
|
80
|
+
}
|
|
81
|
+
} catch (err) {
|
|
82
|
+
_d = true;
|
|
83
|
+
_e = err;
|
|
84
|
+
} finally {
|
|
85
|
+
try {
|
|
86
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
87
|
+
} finally {
|
|
88
|
+
if (_d) throw _e;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return _arr;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
96
|
+
if (!o) return;
|
|
97
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
98
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
99
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
100
|
+
if (n === "Map" || n === "Set") return Array.from(o);
|
|
101
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function _arrayLikeToArray(arr, len) {
|
|
105
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
106
|
+
|
|
107
|
+
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
108
|
+
|
|
109
|
+
return arr2;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function _nonIterableSpread() {
|
|
113
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function _nonIterableRest() {
|
|
117
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
121
|
+
var it;
|
|
122
|
+
|
|
123
|
+
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
|
124
|
+
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
125
|
+
if (it) o = it;
|
|
126
|
+
var i = 0;
|
|
127
|
+
|
|
128
|
+
var F = function () {};
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
s: F,
|
|
132
|
+
n: function () {
|
|
133
|
+
if (i >= o.length) return {
|
|
134
|
+
done: true
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
done: false,
|
|
138
|
+
value: o[i++]
|
|
139
|
+
};
|
|
140
|
+
},
|
|
141
|
+
e: function (e) {
|
|
142
|
+
throw e;
|
|
143
|
+
},
|
|
144
|
+
f: F
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var normalCompletion = true,
|
|
152
|
+
didErr = false,
|
|
153
|
+
err;
|
|
154
|
+
return {
|
|
155
|
+
s: function () {
|
|
156
|
+
it = o[Symbol.iterator]();
|
|
157
|
+
},
|
|
158
|
+
n: function () {
|
|
159
|
+
var step = it.next();
|
|
160
|
+
normalCompletion = step.done;
|
|
161
|
+
return step;
|
|
162
|
+
},
|
|
163
|
+
e: function (e) {
|
|
164
|
+
didErr = true;
|
|
165
|
+
err = e;
|
|
166
|
+
},
|
|
167
|
+
f: function () {
|
|
168
|
+
try {
|
|
169
|
+
if (!normalCompletion && it.return != null) it.return();
|
|
170
|
+
} finally {
|
|
171
|
+
if (didErr) throw err;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
};
|
|
122
175
|
}
|
|
123
176
|
|
|
124
177
|
/* *
|
|
@@ -177,20 +230,41 @@ var tafConfig = {
|
|
|
177
230
|
locations: locations
|
|
178
231
|
};
|
|
179
232
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
233
|
+
/*! *****************************************************************************
|
|
234
|
+
Copyright (c) Microsoft Corporation.
|
|
235
|
+
|
|
236
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
237
|
+
purpose with or without fee is hereby granted.
|
|
238
|
+
|
|
239
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
240
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
241
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
242
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
243
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
244
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
245
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
246
|
+
***************************************************************************** */
|
|
247
|
+
|
|
248
|
+
function __rest(s, e) {
|
|
249
|
+
var t = {};
|
|
250
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
251
|
+
t[p] = s[p];
|
|
252
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
253
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
254
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
255
|
+
t[p[i]] = s[p[i]];
|
|
256
|
+
}
|
|
257
|
+
return t;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
261
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
262
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
263
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
264
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
265
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
266
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
267
|
+
});
|
|
194
268
|
}
|
|
195
269
|
|
|
196
270
|
/* *
|
|
@@ -209,19 +283,21 @@ function _typeof(obj) {
|
|
|
209
283
|
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
210
284
|
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
211
285
|
* */
|
|
286
|
+
var FORMAT_DAYS_HOURS = 'DDHH';
|
|
287
|
+
var FORMAT_DAYS_HOURS_MINUTS = 'DDHHmm'; // formatters
|
|
212
288
|
|
|
213
289
|
var formatValidToString = function formatValidToString(valid) {
|
|
214
290
|
// Ensure end of valid period if midnight is shown as 24 and not 00
|
|
215
291
|
var endHours = moment.utc(valid.end).format('kk');
|
|
216
292
|
var endDate = endHours === '24' ? moment.utc(valid.end).add(-1, 'day').format('DD') : moment.utc(valid.end).format('DD');
|
|
217
|
-
return valid.end ? moment.utc(valid.start).format(
|
|
293
|
+
return valid.end ? "".concat(moment.utc(valid.start).format(FORMAT_DAYS_HOURS), "/").concat(endDate).concat(endHours) : moment.utc(valid.start).format(FORMAT_DAYS_HOURS_MINUTS);
|
|
218
294
|
};
|
|
219
295
|
|
|
220
296
|
var getSections = function getSections(value, format) {
|
|
221
297
|
return {
|
|
222
298
|
day: parseInt(value.substring(0, 2), 10),
|
|
223
299
|
hour: parseInt(value.substring(2, 4), 10),
|
|
224
|
-
min: format ===
|
|
300
|
+
min: format === FORMAT_DAYS_HOURS_MINUTS ? parseInt(value.substring(4), 10) : 0
|
|
225
301
|
};
|
|
226
302
|
};
|
|
227
303
|
|
|
@@ -251,7 +327,7 @@ var parseValidToObject = function parseValidToObject(value, tafStart, tafEnd) {
|
|
|
251
327
|
var tafStartMoment = moment.utc(tafStart);
|
|
252
328
|
var tafEndMoment = moment.utc(tafEnd);
|
|
253
329
|
var startEnd = trimmedValue.split('/');
|
|
254
|
-
var format = trimmedValue.indexOf('/') === -1 ?
|
|
330
|
+
var format = trimmedValue.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS;
|
|
255
331
|
var startSections = getSections(startEnd[0], format);
|
|
256
332
|
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
|
|
257
333
|
|
|
@@ -261,7 +337,7 @@ var parseValidToObject = function parseValidToObject(value, tafStart, tafEnd) {
|
|
|
261
337
|
};
|
|
262
338
|
}
|
|
263
339
|
|
|
264
|
-
var endSections = getSections(startEnd[1],
|
|
340
|
+
var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS);
|
|
265
341
|
var end = getValidityTimeStamp('end', endSections, tafStartMoment, tafEndMoment).format('YYYY-MM-DDTHH:mm:ss[Z]');
|
|
266
342
|
return {
|
|
267
343
|
start: start,
|
|
@@ -275,7 +351,6 @@ var invalidValidityMinutesMessage = 'Invalid validity period, specified minutes
|
|
|
275
351
|
var invalidValidityStartTimeMessage = 'Invalid validity start time, change group validity must lie within the TAF validity period';
|
|
276
352
|
var invalidValidityPeriodMessage = 'Invalid validity period, validity end time has to be after validity start time';
|
|
277
353
|
var invalidValidityEndTimeMessage = 'Invalid validity end time, change group validity must lie within the TAF validity period';
|
|
278
|
-
var invalidValidityLengthMessage = 'Invalid validity period, expected either DDHH/DDHH or DDHHmm';
|
|
279
354
|
var invalidChangeValidInterFieldMessage = 'Invalid validity period, expected DDHH/DDHH for BECMG and TEMPO or DDHHmm for FM';
|
|
280
355
|
var invalidBECMGDurationValidInterFieldMessage = 'Invalid validity period, for BECMG only validity periods with a duration of 1, 2, 3 or 4 hours are allowed'; // Validations
|
|
281
356
|
// Ensure all individual sections are correct (DD HH mm etc)
|
|
@@ -301,7 +376,7 @@ var validateIsValidDates = function validateIsValidDates(value, tafStart, tafEnd
|
|
|
301
376
|
var tafStartMoment = moment.utc(tafStart);
|
|
302
377
|
var tafEndMoment = moment.utc(tafEnd);
|
|
303
378
|
var startEnd = value.split('/');
|
|
304
|
-
var format = value.indexOf('/') === -1 ?
|
|
379
|
+
var format = value.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS;
|
|
305
380
|
var validateMsg = []; // Validate start time
|
|
306
381
|
|
|
307
382
|
var startSections = getSections(startEnd[0], format); // Validate individual sections for start
|
|
@@ -317,7 +392,7 @@ var validateIsValidDates = function validateIsValidDates(value, tafStart, tafEnd
|
|
|
317
392
|
|
|
318
393
|
|
|
319
394
|
if (startEnd.length > 1) {
|
|
320
|
-
var endSections = getSections(startEnd[1],
|
|
395
|
+
var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS); // Validate individual sections for end
|
|
321
396
|
|
|
322
397
|
var sectionValidationEnd = validateValidSections(endSections, 'end'); // If invalid end - return with errors
|
|
323
398
|
|
|
@@ -347,7 +422,7 @@ var validateValidField = function validateValidField(value, tafStart, tafEnd) {
|
|
|
347
422
|
|
|
348
423
|
|
|
349
424
|
if (trimmedValue.length < 6 || trimmedValue.length > 9 || !(trimmedValue.match(/^[0-9]{4}\/[0-9]{4}$/) || trimmedValue.match(/^[0-9]{6}$/))) {
|
|
350
|
-
return
|
|
425
|
+
return invalidChangeValidInterFieldMessage;
|
|
351
426
|
} // Ensure valid date(s) can be made
|
|
352
427
|
|
|
353
428
|
|
|
@@ -379,11 +454,11 @@ var validateValidChangeGroupInterField = function validateValidChangeGroupInterF
|
|
|
379
454
|
var tafStartMoment = moment.utc(tafStart);
|
|
380
455
|
var tafEndMoment = moment.utc(tafEnd);
|
|
381
456
|
var startEnd = trimmedValue.split('/');
|
|
382
|
-
var format = trimmedValue.indexOf('/') === -1 ?
|
|
457
|
+
var format = trimmedValue.indexOf('/') === -1 ? FORMAT_DAYS_HOURS_MINUTS : FORMAT_DAYS_HOURS; // Validate start time
|
|
383
458
|
|
|
384
459
|
var startSections = getSections(startEnd[0], format);
|
|
385
460
|
var startTimestamp = getValidityTimeStamp('start', startSections, tafStartMoment, tafEndMoment);
|
|
386
|
-
var endSections = getSections(startEnd[1],
|
|
461
|
+
var endSections = getSections(startEnd[1], FORMAT_DAYS_HOURS);
|
|
387
462
|
var endTimestamp = getValidityTimeStamp('end', endSections, tafStartMoment, tafEndMoment);
|
|
388
463
|
var timeDifference = endTimestamp.diff(startTimestamp, 'hours');
|
|
389
464
|
|
|
@@ -392,6 +467,57 @@ var validateValidChangeGroupInterField = function validateValidChangeGroupInterF
|
|
|
392
467
|
}
|
|
393
468
|
}
|
|
394
469
|
|
|
470
|
+
return true;
|
|
471
|
+
}; // validate previous changeGroup
|
|
472
|
+
|
|
473
|
+
var validProbChangeOrder = ['FM', 'BECMG', 'TEMPO', 'PROB40', 'PROB30', 'PROB40 TEMPO', 'PROB30 TEMPO'];
|
|
474
|
+
var invalidPreviousChangeGroupIsBeforeMessage = 'Valid time should be after previous valid time';
|
|
475
|
+
var invalidPreviousChangeGroupOrderMessage = "When valid times are equal, the change/probability order should be: ".concat(validProbChangeOrder.join(', '));
|
|
476
|
+
var invalidPreviousChangeGroupHasSameValue = "When valid times are equal, probability/change can't have the same value as previous row value";
|
|
477
|
+
var validatePreviousChangeGroup = function validatePreviousChangeGroup(currentChangeGroup, nextChangeGroup, tafStart, tafEnd) {
|
|
478
|
+
// extract the needed values from changeGroups
|
|
479
|
+
var valid = currentChangeGroup.valid,
|
|
480
|
+
_currentChangeGroup$c = currentChangeGroup.change,
|
|
481
|
+
change = _currentChangeGroup$c === void 0 ? '' : _currentChangeGroup$c,
|
|
482
|
+
_currentChangeGroup$p = currentChangeGroup.probability,
|
|
483
|
+
probability = _currentChangeGroup$p === void 0 ? '' : _currentChangeGroup$p;
|
|
484
|
+
var previousValid = nextChangeGroup.valid,
|
|
485
|
+
_nextChangeGroup$chan = nextChangeGroup.change,
|
|
486
|
+
previousChange = _nextChangeGroup$chan === void 0 ? '' : _nextChangeGroup$chan,
|
|
487
|
+
_nextChangeGroup$prob = nextChangeGroup.probability,
|
|
488
|
+
previousProbability = _nextChangeGroup$prob === void 0 ? '' : _nextChangeGroup$prob; // get the parsed values
|
|
489
|
+
|
|
490
|
+
var validValue = parseValidToObject(valid, tafStart, tafEnd);
|
|
491
|
+
var previousValidValue = parseValidToObject(previousValid, tafStart, tafEnd);
|
|
492
|
+
|
|
493
|
+
if (!validValue || !previousValidValue || !change.length && !probability.length) {
|
|
494
|
+
return true;
|
|
495
|
+
} // validate is valid time before
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
var currentStartTime = moment(validValue.start);
|
|
499
|
+
var previousRowStartTime = moment(previousValidValue.start);
|
|
500
|
+
|
|
501
|
+
if (currentStartTime.isBefore(previousRowStartTime)) {
|
|
502
|
+
return invalidPreviousChangeGroupIsBeforeMessage;
|
|
503
|
+
} // validate same valid time
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
if (currentStartTime.isSame(previousRowStartTime)) {
|
|
507
|
+
// validate change/probability order
|
|
508
|
+
var currentProbChangeValue = "".concat(probability, " ").concat(change).trim();
|
|
509
|
+
var previousProbChangeValue = "".concat(previousProbability, " ").concat(previousChange).trim();
|
|
510
|
+
|
|
511
|
+
if (validProbChangeOrder.indexOf(currentProbChangeValue) < validProbChangeOrder.indexOf(previousProbChangeValue)) {
|
|
512
|
+
return invalidPreviousChangeGroupOrderMessage;
|
|
513
|
+
} // validate same valid + change/probability value
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
if (currentProbChangeValue === previousProbChangeValue) {
|
|
517
|
+
return invalidPreviousChangeGroupHasSameValue;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
395
521
|
return true;
|
|
396
522
|
};
|
|
397
523
|
|
|
@@ -411,11 +537,10 @@ var validateValidChangeGroupInterField = function validateValidChangeGroupInterF
|
|
|
411
537
|
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
412
538
|
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
413
539
|
* */
|
|
414
|
-
|
|
415
540
|
var prependZeroes = function prependZeroes(value, totalDigits) {
|
|
416
541
|
var valueAsString = value.toString();
|
|
417
|
-
return
|
|
418
|
-
return "0"
|
|
542
|
+
return _toConsumableArray(Array(totalDigits - valueAsString.length)).reduce(function (newVal) {
|
|
543
|
+
return "0".concat(newVal);
|
|
419
544
|
}, valueAsString);
|
|
420
545
|
};
|
|
421
546
|
|
|
@@ -427,9 +552,7 @@ var config$1 = [{
|
|
|
427
552
|
size: 1
|
|
428
553
|
}];
|
|
429
554
|
var configAsObject$1 = Object.assign(config$1).reduce(function (list, item) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
return __assign(__assign({}, list), (_a = {}, _a[item.key] = item, _a));
|
|
555
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, item.key, item));
|
|
433
556
|
}, {}); // formatters
|
|
434
557
|
// if passed true - visibility is CAVOK, if passed a number - prepend zeroes to size 4
|
|
435
558
|
|
|
@@ -966,22 +1089,57 @@ var WeatherPhenomena;
|
|
|
966
1089
|
})(WeatherPhenomena || (WeatherPhenomena = {}));
|
|
967
1090
|
|
|
968
1091
|
var invalidWeatherMessage = 'Invalid weather input, expected NSW or a valid weather code';
|
|
1092
|
+
var invalidWeatherCodeMessage = 'Invalid weather input, invalid weather code';
|
|
969
1093
|
var invalidWeatherNSWMessage = 'Invalid weather input, NSW is not allowed in the baseforecast and can only be used in the first weather group';
|
|
970
1094
|
var invalidWeatherWithPreviousEmptyWeather = 'Invalid weather input, value is not allowed when previous weather group(s) are empty';
|
|
971
1095
|
var invalidWeatherNonUniqueValue = 'Invalid weather input, weather groups must be unique';
|
|
972
1096
|
var invalidWeatherNonEmptyNSWGroups = 'Invalid weather input, when NSW is used, other weather groups must be empty';
|
|
973
|
-
var invalidWeatherCAVOKMessage = 'Invalid weather input, when CAVOK is used, weather groups must be empty';
|
|
1097
|
+
var invalidWeatherCAVOKMessage = 'Invalid weather input, when CAVOK is used, weather groups must be empty';
|
|
1098
|
+
var invalidWeatherVisibilityBelow5000 = 'Invalid weather input, weather codes FU, DU, HZ, DRDU and BLDU need to be combined with a visibility of 5000m or less';
|
|
1099
|
+
var invalidWeatherBRVisibility = 'Invalid weather input, weather code BR needs to be combined with a visibility between 1000 and 5000m';
|
|
1100
|
+
var invalidWeatherFGVisibility = 'Invalid weather input, weather code FG needs to be combined with a visibility below 1000m'; // validations
|
|
1101
|
+
|
|
1102
|
+
var WeatherVisibilityBelow5000 = [WeatherPhenomena.FU, WeatherPhenomena.DU, WeatherPhenomena.HZ, WeatherPhenomena.DRDU, WeatherPhenomena.BLDU];
|
|
1103
|
+
var validateWeatherField = function validateWeatherField(value, visibilityValue) {
|
|
1104
|
+
var NSWAllowed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
1105
|
+
var trimmedValue = value.trim(); // if empty, validate as true
|
|
1106
|
+
|
|
1107
|
+
if (trimmedValue === '') {
|
|
1108
|
+
return true;
|
|
1109
|
+
} // In case of NSW - validate if allowed
|
|
1110
|
+
|
|
1111
|
+
|
|
1112
|
+
if (trimmedValue === 'NSW' && !NSWAllowed) {
|
|
1113
|
+
return invalidWeatherNSWMessage;
|
|
1114
|
+
} // Check if cavOK - then weather group should be empty
|
|
1115
|
+
|
|
1116
|
+
|
|
1117
|
+
if (trimmedValue && visibilityValue === 'CAVOK') {
|
|
1118
|
+
return invalidWeatherCAVOKMessage;
|
|
1119
|
+
} // Validate if entered weather is one of the allowed weather phenomena
|
|
1120
|
+
|
|
974
1121
|
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1122
|
+
if (!(trimmedValue in WeatherPhenomena) && trimmedValue !== 'NSW') {
|
|
1123
|
+
return NSWAllowed ? invalidWeatherMessage : invalidWeatherCodeMessage;
|
|
1124
|
+
} // Validate the weather code in combination with the visibility range
|
|
1125
|
+
|
|
1126
|
+
|
|
1127
|
+
var visibilityRange = parseInt(visibilityValue, 10);
|
|
1128
|
+
|
|
1129
|
+
if (WeatherVisibilityBelow5000.includes(trimmedValue) && visibilityRange > 5000) {
|
|
1130
|
+
return invalidWeatherVisibilityBelow5000;
|
|
978
1131
|
}
|
|
979
1132
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
1133
|
+
if (trimmedValue === WeatherPhenomena.BR && (visibilityRange < 1000 || visibilityRange > 5000)) {
|
|
1134
|
+
return invalidWeatherBRVisibility;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1137
|
+
if (trimmedValue === WeatherPhenomena.FG && visibilityRange >= 1000) {
|
|
1138
|
+
return invalidWeatherFGVisibility;
|
|
1139
|
+
} // Everything validated ok - return true
|
|
1140
|
+
|
|
1141
|
+
|
|
1142
|
+
return true;
|
|
985
1143
|
};
|
|
986
1144
|
var validateSecondWeatherField = function validateSecondWeatherField(weather1Value, weather2Value, visibilityValue) {
|
|
987
1145
|
var trimmedWeather2Value = weather2Value.trim(); // Field can be left empty
|
|
@@ -1039,18 +1197,16 @@ var validateThirdWeatherField = function validateThirdWeatherField(weather1Value
|
|
|
1039
1197
|
|
|
1040
1198
|
function parseWeatherToObject(value) {
|
|
1041
1199
|
var trimmedWeather = Object.keys(value).reduce(function (obj, key) {
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1200
|
+
// only parse it if it has a value
|
|
1045
1201
|
if (value[key] && value[key].trim()) {
|
|
1046
|
-
return
|
|
1202
|
+
return Object.assign(Object.assign({}, obj), _defineProperty({}, key, obj[key].trim()));
|
|
1047
1203
|
} // if it doesn't have a value, remove it from the list
|
|
1048
1204
|
|
|
1049
1205
|
|
|
1050
|
-
var
|
|
1051
|
-
|
|
1052
|
-
_b
|
|
1053
|
-
var rest = __rest(
|
|
1206
|
+
var _a = obj,
|
|
1207
|
+
_b = key;
|
|
1208
|
+
_a[_b];
|
|
1209
|
+
var rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
|
|
1054
1210
|
|
|
1055
1211
|
return rest;
|
|
1056
1212
|
}, value);
|
|
@@ -1075,9 +1231,7 @@ var config = [{
|
|
|
1075
1231
|
size: 2
|
|
1076
1232
|
}];
|
|
1077
1233
|
var configAsObject = Object.assign(config).reduce(function (list, item) {
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
return __assign(__assign({}, list), (_a = {}, _a[item.key] = item, _a));
|
|
1234
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, item.key, item));
|
|
1081
1235
|
}, {}); // wind formatters:
|
|
1082
1236
|
|
|
1083
1237
|
var formatWindValues = function formatWindValues(key, value) {
|
|
@@ -1098,22 +1252,22 @@ var formatWindValues = function formatWindValues(key, value) {
|
|
|
1098
1252
|
return 'P99';
|
|
1099
1253
|
}
|
|
1100
1254
|
|
|
1101
|
-
var
|
|
1102
|
-
return prependZeroes(value,
|
|
1255
|
+
var _size = configAsObject[key].size;
|
|
1256
|
+
return prependZeroes(value, _size);
|
|
1103
1257
|
}
|
|
1104
1258
|
|
|
1105
1259
|
case 'gust':
|
|
1106
1260
|
{
|
|
1107
1261
|
// if there is a P as first character - return P99
|
|
1108
|
-
var
|
|
1262
|
+
var _valueAsString = value.toString();
|
|
1109
1263
|
|
|
1110
|
-
if (
|
|
1264
|
+
if (_valueAsString.length && _valueAsString[0] === 'P') {
|
|
1111
1265
|
return 'GP99';
|
|
1112
1266
|
}
|
|
1113
1267
|
|
|
1114
|
-
var
|
|
1115
|
-
var newValue = prependZeroes(value,
|
|
1116
|
-
return "G"
|
|
1268
|
+
var _size2 = configAsObject[key].size;
|
|
1269
|
+
var newValue = prependZeroes(value, _size2);
|
|
1270
|
+
return "G".concat(newValue.toString());
|
|
1117
1271
|
}
|
|
1118
1272
|
|
|
1119
1273
|
case 'unit':
|
|
@@ -1140,11 +1294,8 @@ var formatWindToString = function formatWindToString(value) {
|
|
|
1140
1294
|
}, '');
|
|
1141
1295
|
};
|
|
1142
1296
|
|
|
1143
|
-
var extractValidateWindSections = function extractValidateWindSections(value
|
|
1144
|
-
|
|
1145
|
-
validation = false;
|
|
1146
|
-
}
|
|
1147
|
-
|
|
1297
|
+
var extractValidateWindSections = function extractValidateWindSections(value) {
|
|
1298
|
+
var validation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1148
1299
|
return config.reduce(function (obj, item) {
|
|
1149
1300
|
var key = item.key,
|
|
1150
1301
|
size = item.size;
|
|
@@ -1161,14 +1312,14 @@ var extractValidateWindSections = function extractValidateWindSections(value, va
|
|
|
1161
1312
|
var valDirection = validateDirection(direction); // If validated not ok - add validation feedback
|
|
1162
1313
|
|
|
1163
1314
|
var validations = valDirection !== true ? obj.validations.concat(valDirection) : obj.validations;
|
|
1164
|
-
return
|
|
1315
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1165
1316
|
direction: direction,
|
|
1166
1317
|
remainder: remainder,
|
|
1167
1318
|
validations: validations
|
|
1168
1319
|
});
|
|
1169
1320
|
}
|
|
1170
1321
|
|
|
1171
|
-
return
|
|
1322
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1172
1323
|
direction: direction,
|
|
1173
1324
|
remainder: remainder
|
|
1174
1325
|
});
|
|
@@ -1181,22 +1332,25 @@ var extractValidateWindSections = function extractValidateWindSections(value, va
|
|
|
1181
1332
|
|
|
1182
1333
|
var dirLength = obj.remainder.length && obj.remainder[0] === 'P' ? maxSize : minSize;
|
|
1183
1334
|
var speed = obj.remainder.slice(0, dirLength);
|
|
1184
|
-
|
|
1335
|
+
|
|
1336
|
+
var _remainder = obj.remainder.substring(dirLength); // Validate speed
|
|
1337
|
+
|
|
1185
1338
|
|
|
1186
1339
|
if (validation) {
|
|
1187
1340
|
var valSpeed = validateSpeed(speed); // If validated not ok - add validation feedback
|
|
1188
1341
|
|
|
1189
|
-
var
|
|
1190
|
-
|
|
1342
|
+
var _validations = valSpeed !== true ? obj.validations.concat(valSpeed) : obj.validations;
|
|
1343
|
+
|
|
1344
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1191
1345
|
speed: speed,
|
|
1192
|
-
remainder:
|
|
1193
|
-
validations:
|
|
1346
|
+
remainder: _remainder,
|
|
1347
|
+
validations: _validations
|
|
1194
1348
|
});
|
|
1195
1349
|
}
|
|
1196
1350
|
|
|
1197
|
-
return
|
|
1351
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1198
1352
|
speed: speed,
|
|
1199
|
-
remainder:
|
|
1353
|
+
remainder: _remainder
|
|
1200
1354
|
});
|
|
1201
1355
|
}
|
|
1202
1356
|
|
|
@@ -1204,30 +1358,35 @@ var extractValidateWindSections = function extractValidateWindSections(value, va
|
|
|
1204
1358
|
{
|
|
1205
1359
|
// Only parse gust if still chars left and these start with G
|
|
1206
1360
|
if (obj.remainder.length && obj.remainder !== 'KT' && obj.remainder[0] === 'G') {
|
|
1207
|
-
var
|
|
1208
|
-
|
|
1361
|
+
var _maxSize = item.maxSize,
|
|
1362
|
+
_minSize = item.minSize; // Remove G
|
|
1209
1363
|
|
|
1210
1364
|
var rest = obj.remainder.substring(1); // In case the first char of the gust is a P - it's 3 chars long, otherwise 2
|
|
1211
1365
|
|
|
1212
|
-
var
|
|
1213
|
-
|
|
1214
|
-
var
|
|
1366
|
+
var _dirLength = rest[0] === 'P' ? _maxSize : _minSize;
|
|
1367
|
+
|
|
1368
|
+
var gust = rest.slice(0, _dirLength);
|
|
1369
|
+
|
|
1370
|
+
var _remainder2 = rest.substring(_dirLength); // Validate gusts
|
|
1371
|
+
|
|
1215
1372
|
|
|
1216
1373
|
if (validation) {
|
|
1217
1374
|
var valGust = validateGust(gust); // If validated not ok - add validation feedback
|
|
1218
1375
|
|
|
1219
1376
|
valGust !== true && returnObj.validations.push(valGust);
|
|
1220
|
-
|
|
1221
|
-
|
|
1377
|
+
|
|
1378
|
+
var _validations2 = valGust !== true ? obj.validations.concat(valGust) : obj.validations;
|
|
1379
|
+
|
|
1380
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1222
1381
|
gust: gust,
|
|
1223
|
-
remainder:
|
|
1224
|
-
validations:
|
|
1382
|
+
remainder: _remainder2,
|
|
1383
|
+
validations: _validations2
|
|
1225
1384
|
});
|
|
1226
1385
|
}
|
|
1227
1386
|
|
|
1228
|
-
return
|
|
1387
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1229
1388
|
gust: gust,
|
|
1230
|
-
remainder:
|
|
1389
|
+
remainder: _remainder2
|
|
1231
1390
|
});
|
|
1232
1391
|
}
|
|
1233
1392
|
|
|
@@ -1239,9 +1398,11 @@ var extractValidateWindSections = function extractValidateWindSections(value, va
|
|
|
1239
1398
|
if (obj.remainder.length) {
|
|
1240
1399
|
// Validate units
|
|
1241
1400
|
var valUnits = validateUnit(returnObj.remainder);
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1401
|
+
|
|
1402
|
+
var _validations3 = valUnits !== true ? obj.validations.concat(valUnits) : obj.validations;
|
|
1403
|
+
|
|
1404
|
+
return Object.assign(Object.assign({}, obj), {
|
|
1405
|
+
validations: _validations3
|
|
1245
1406
|
});
|
|
1246
1407
|
}
|
|
1247
1408
|
|
|
@@ -1268,8 +1429,7 @@ var parseWindToObject = function parseWindToObject(value) {
|
|
|
1268
1429
|
|
|
1269
1430
|
var windSections = extractValidateWindSections(trimmedValue, false);
|
|
1270
1431
|
var gust = windSections.gust === 'P99' || windSections.gust === '' ? windSections.gust : parseInt(windSections.gust, 10);
|
|
1271
|
-
|
|
1272
|
-
var windObject = __assign(__assign({
|
|
1432
|
+
var windObject = Object.assign(Object.assign({
|
|
1273
1433
|
direction: windSections.direction === 'VRB' ? windSections.direction : parseInt(windSections.direction, 10),
|
|
1274
1434
|
speed: windSections.speed === 'P99' ? windSections.speed : parseInt(windSections.speed, 10)
|
|
1275
1435
|
}, gust !== '' ? {
|
|
@@ -1277,7 +1437,6 @@ var parseWindToObject = function parseWindToObject(value) {
|
|
|
1277
1437
|
} : {}), {
|
|
1278
1438
|
unit: windSections.unit
|
|
1279
1439
|
});
|
|
1280
|
-
|
|
1281
1440
|
return windObject;
|
|
1282
1441
|
}; // messages
|
|
1283
1442
|
|
|
@@ -1376,7 +1535,7 @@ var validateWindField = function validateWindField(value) {
|
|
|
1376
1535
|
|
|
1377
1536
|
var formatSingleCloud = function formatSingleCloud(value) {
|
|
1378
1537
|
if (!value) return null;
|
|
1379
|
-
return value.type ? ""
|
|
1538
|
+
return value.type ? "".concat(value.coverage).concat(prependZeroes(value.height, 3)).concat(value.type) : "".concat(value.coverage).concat(prependZeroes(value.height, 3));
|
|
1380
1539
|
}; // TODO: clouds type = Clouds, but couldn't get it to work properly https://gitlab.com/opengeoweb/opengeoweb/-/issues/119
|
|
1381
1540
|
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
1382
1541
|
|
|
@@ -1385,30 +1544,28 @@ var formatCloudsToString = function formatCloudsToString(clouds) {
|
|
|
1385
1544
|
if (!clouds) return null;
|
|
1386
1545
|
return Object.keys(clouds).reduce(function (list, key) {
|
|
1387
1546
|
// only format it if it has a value
|
|
1388
|
-
var _a, _b, _c, _d;
|
|
1389
|
-
|
|
1390
1547
|
if (clouds[key]) {
|
|
1391
1548
|
switch (key) {
|
|
1392
1549
|
case 'cloud1':
|
|
1393
1550
|
{
|
|
1394
1551
|
if (clouds[key].verticalVisibility !== undefined) {
|
|
1395
1552
|
// Format Vertical Visibility
|
|
1396
|
-
return
|
|
1553
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, "VV".concat(prependZeroes(clouds[key].verticalVisibility, 3))));
|
|
1397
1554
|
}
|
|
1398
1555
|
|
|
1399
1556
|
if (clouds[key].coverage) {
|
|
1400
1557
|
// Format Cloud
|
|
1401
|
-
return
|
|
1558
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, formatSingleCloud(clouds[key])));
|
|
1402
1559
|
} // Format No Significant Clouds
|
|
1403
1560
|
|
|
1404
1561
|
|
|
1405
|
-
return
|
|
1562
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, clouds[key]));
|
|
1406
1563
|
}
|
|
1407
1564
|
|
|
1408
1565
|
default:
|
|
1409
1566
|
{
|
|
1410
1567
|
// Other cloud keys can only contain a cloud
|
|
1411
|
-
return
|
|
1568
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, formatSingleCloud(clouds[key])));
|
|
1412
1569
|
}
|
|
1413
1570
|
}
|
|
1414
1571
|
}
|
|
@@ -1421,7 +1578,7 @@ var parseSingleCloud = function parseSingleCloud(value) {
|
|
|
1421
1578
|
if (!value) return null;
|
|
1422
1579
|
var trimmedCloud = value.trim();
|
|
1423
1580
|
var cloudType = trimmedCloud.substr(6, 3);
|
|
1424
|
-
return
|
|
1581
|
+
return Object.assign({
|
|
1425
1582
|
coverage: trimmedCloud.substr(0, 3),
|
|
1426
1583
|
height: parseInt(trimmedCloud.substr(3, 3), 10)
|
|
1427
1584
|
}, cloudType && {
|
|
@@ -1434,42 +1591,40 @@ var parseSingleCloud = function parseSingleCloud(value) {
|
|
|
1434
1591
|
var parseCloudsToObject = function parseCloudsToObject(clouds) {
|
|
1435
1592
|
if (!clouds) return null;
|
|
1436
1593
|
return Object.keys(clouds).reduce(function (list, key) {
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1594
|
+
// only parse it if it has a value
|
|
1440
1595
|
if (clouds[key] && clouds[key].trim()) {
|
|
1441
1596
|
switch (key) {
|
|
1442
1597
|
case 'cloud1':
|
|
1443
1598
|
{
|
|
1444
1599
|
if (isVerticalVisibility(clouds[key])) {
|
|
1445
1600
|
// Parse Vertical Visibility
|
|
1446
|
-
return
|
|
1601
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, {
|
|
1447
1602
|
verticalVisibility: parseInt(clouds[key].substr(2, 3), 10)
|
|
1448
|
-
}
|
|
1603
|
+
}));
|
|
1449
1604
|
}
|
|
1450
1605
|
|
|
1451
1606
|
if (clouds[key] === 'NSC') {
|
|
1452
1607
|
// Parse No Significant Clouds
|
|
1453
|
-
return
|
|
1608
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, clouds[key]));
|
|
1454
1609
|
} // Parse Cloud
|
|
1455
1610
|
|
|
1456
1611
|
|
|
1457
|
-
return
|
|
1612
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, parseSingleCloud(clouds[key])));
|
|
1458
1613
|
}
|
|
1459
1614
|
|
|
1460
1615
|
default:
|
|
1461
1616
|
{
|
|
1462
1617
|
// Other cloud keys can only contain a cloud
|
|
1463
|
-
return
|
|
1618
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, parseSingleCloud(clouds[key])));
|
|
1464
1619
|
}
|
|
1465
1620
|
}
|
|
1466
1621
|
} // if it doesn't have a value, remove it from the list
|
|
1467
1622
|
|
|
1468
1623
|
|
|
1469
|
-
var
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
var rest = __rest(
|
|
1624
|
+
var _a = list,
|
|
1625
|
+
_b = key;
|
|
1626
|
+
_a[_b];
|
|
1627
|
+
var rest = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
|
|
1473
1628
|
|
|
1474
1629
|
return rest;
|
|
1475
1630
|
}, clouds);
|
|
@@ -1562,10 +1717,10 @@ var isVerticalVisibilityValid = function isVerticalVisibilityValid(value) {
|
|
|
1562
1717
|
return true;
|
|
1563
1718
|
};
|
|
1564
1719
|
|
|
1565
|
-
var sharedCloudValidations = function sharedCloudValidations(
|
|
1566
|
-
var value =
|
|
1567
|
-
|
|
1568
|
-
canBeNSC =
|
|
1720
|
+
var sharedCloudValidations = function sharedCloudValidations(_ref) {
|
|
1721
|
+
var value = _ref.value,
|
|
1722
|
+
_ref$canBeNSC = _ref.canBeNSC,
|
|
1723
|
+
canBeNSC = _ref$canBeNSC === void 0 ? false : _ref$canBeNSC;
|
|
1569
1724
|
var errorMessages = []; // Validate length and ensure it doesn't contain any invalid characters
|
|
1570
1725
|
|
|
1571
1726
|
if (!isLengthValid(value)) {
|
|
@@ -1641,10 +1796,12 @@ var validateFirstCloud = function validateFirstCloud(value, visibilityValue) {
|
|
|
1641
1796
|
return true;
|
|
1642
1797
|
}
|
|
1643
1798
|
|
|
1644
|
-
var
|
|
1799
|
+
var _sharedCloudValidatio = sharedCloudValidations({
|
|
1645
1800
|
value: trimmedValue,
|
|
1646
1801
|
canBeNSC: true
|
|
1647
|
-
})
|
|
1802
|
+
}),
|
|
1803
|
+
errorMessages = _sharedCloudValidatio.errorMessages; // Return first error if any
|
|
1804
|
+
|
|
1648
1805
|
|
|
1649
1806
|
return errorMessages.length ? errorMessages[0] : true;
|
|
1650
1807
|
};
|
|
@@ -1656,13 +1813,13 @@ var validateSecondCloud = function validateSecondCloud(firstCloudValue, secondCl
|
|
|
1656
1813
|
} // Generic validations
|
|
1657
1814
|
|
|
1658
1815
|
|
|
1659
|
-
var
|
|
1816
|
+
var _sharedCloudValidatio2 = sharedCloudValidations({
|
|
1660
1817
|
value: trimmedValue
|
|
1661
1818
|
}),
|
|
1662
|
-
coverage =
|
|
1663
|
-
height =
|
|
1664
|
-
type =
|
|
1665
|
-
errorMessages =
|
|
1819
|
+
coverage = _sharedCloudValidatio2.coverage,
|
|
1820
|
+
height = _sharedCloudValidatio2.height,
|
|
1821
|
+
type = _sharedCloudValidatio2.type,
|
|
1822
|
+
errorMessages = _sharedCloudValidatio2.errorMessages; // Return first error if any
|
|
1666
1823
|
|
|
1667
1824
|
|
|
1668
1825
|
if (errorMessages.length) {
|
|
@@ -1714,13 +1871,13 @@ var validateThirdCloud = function validateThirdCloud(firstCloudValue, secondClou
|
|
|
1714
1871
|
} // Generic validations
|
|
1715
1872
|
|
|
1716
1873
|
|
|
1717
|
-
var
|
|
1874
|
+
var _sharedCloudValidatio3 = sharedCloudValidations({
|
|
1718
1875
|
value: trimmedValue
|
|
1719
1876
|
}),
|
|
1720
|
-
coverage =
|
|
1721
|
-
height =
|
|
1722
|
-
type =
|
|
1723
|
-
errorMessages =
|
|
1877
|
+
coverage = _sharedCloudValidatio3.coverage,
|
|
1878
|
+
height = _sharedCloudValidatio3.height,
|
|
1879
|
+
type = _sharedCloudValidatio3.type,
|
|
1880
|
+
errorMessages = _sharedCloudValidatio3.errorMessages; // Return generic errors if any
|
|
1724
1881
|
|
|
1725
1882
|
|
|
1726
1883
|
if (errorMessages.length) {
|
|
@@ -1780,12 +1937,12 @@ var validateFourthCloud = function validateFourthCloud(firstCloudValue, secondCl
|
|
|
1780
1937
|
} // Generic validations
|
|
1781
1938
|
|
|
1782
1939
|
|
|
1783
|
-
var
|
|
1940
|
+
var _sharedCloudValidatio4 = sharedCloudValidations({
|
|
1784
1941
|
value: trimmedValue
|
|
1785
1942
|
}),
|
|
1786
|
-
height =
|
|
1787
|
-
type =
|
|
1788
|
-
errorMessages =
|
|
1943
|
+
height = _sharedCloudValidatio4.height,
|
|
1944
|
+
type = _sharedCloudValidatio4.type,
|
|
1945
|
+
errorMessages = _sharedCloudValidatio4.errorMessages; // Return generic errors if any
|
|
1789
1946
|
|
|
1790
1947
|
|
|
1791
1948
|
if (errorMessages.length) {
|
|
@@ -1842,21 +1999,21 @@ var validateFourthCloud = function validateFourthCloud(firstCloudValue, secondCl
|
|
|
1842
1999
|
};
|
|
1843
2000
|
|
|
1844
2001
|
var formatIssueTime = function formatIssueTime(issueDate) {
|
|
1845
|
-
return issueDate ? moment(issueDate).utc().format('DDHHmm')
|
|
2002
|
+
return issueDate ? "".concat(moment(issueDate).utc().format('DDHHmm'), "Z") : 'Not issued';
|
|
1846
2003
|
};
|
|
1847
2004
|
function formatFormValues(row) {
|
|
1848
2005
|
return Object.keys(row).reduce(function (list, key) {
|
|
1849
2006
|
switch (key) {
|
|
1850
2007
|
case 'valid':
|
|
1851
2008
|
{
|
|
1852
|
-
return
|
|
2009
|
+
return Object.assign(Object.assign({}, list), {
|
|
1853
2010
|
valid: formatValidToString(list[key])
|
|
1854
2011
|
});
|
|
1855
2012
|
}
|
|
1856
2013
|
|
|
1857
2014
|
case 'wind':
|
|
1858
2015
|
{
|
|
1859
|
-
return
|
|
2016
|
+
return Object.assign(Object.assign({}, list), {
|
|
1860
2017
|
wind: formatWindToString(list[key])
|
|
1861
2018
|
});
|
|
1862
2019
|
}
|
|
@@ -1864,7 +2021,7 @@ function formatFormValues(row) {
|
|
|
1864
2021
|
case 'visibility':
|
|
1865
2022
|
{
|
|
1866
2023
|
// Assume if visibility field set - no cavOK
|
|
1867
|
-
return
|
|
2024
|
+
return Object.assign(Object.assign({}, list), {
|
|
1868
2025
|
visibility: formatVisibilityToString(list[key])
|
|
1869
2026
|
});
|
|
1870
2027
|
}
|
|
@@ -1872,14 +2029,14 @@ function formatFormValues(row) {
|
|
|
1872
2029
|
case 'cavOK':
|
|
1873
2030
|
{
|
|
1874
2031
|
// Assume if cavOK field set to true - no visibility field, otherwise return the original list containing the visibility
|
|
1875
|
-
return list[key] ?
|
|
2032
|
+
return list[key] ? Object.assign(Object.assign({}, list), {
|
|
1876
2033
|
visibility: formatVisibilityToString(list[key])
|
|
1877
2034
|
}) : list;
|
|
1878
2035
|
}
|
|
1879
2036
|
|
|
1880
2037
|
case 'cloud':
|
|
1881
2038
|
{
|
|
1882
|
-
return
|
|
2039
|
+
return Object.assign(Object.assign({}, list), {
|
|
1883
2040
|
cloud: formatCloudsToString(list[key])
|
|
1884
2041
|
});
|
|
1885
2042
|
}
|
|
@@ -1899,33 +2056,33 @@ function reduceRowValues(row, tafStart, tafEnd) {
|
|
|
1899
2056
|
switch (key) {
|
|
1900
2057
|
case 'valid':
|
|
1901
2058
|
{
|
|
1902
|
-
return
|
|
2059
|
+
return Object.assign(Object.assign({}, list), {
|
|
1903
2060
|
valid: parseValidToObject(list[key], tafStart, tafEnd)
|
|
1904
2061
|
});
|
|
1905
2062
|
}
|
|
1906
2063
|
|
|
1907
2064
|
case 'wind':
|
|
1908
2065
|
{
|
|
1909
|
-
return
|
|
2066
|
+
return Object.assign(Object.assign({}, list), {
|
|
1910
2067
|
wind: parseWindToObject(list[key])
|
|
1911
2068
|
});
|
|
1912
2069
|
}
|
|
1913
2070
|
|
|
1914
2071
|
case 'visibility':
|
|
1915
2072
|
{
|
|
1916
|
-
return
|
|
2073
|
+
return Object.assign(Object.assign({}, list), parseVisibilityToObject(list[key]));
|
|
1917
2074
|
}
|
|
1918
2075
|
|
|
1919
2076
|
case 'weather':
|
|
1920
2077
|
{
|
|
1921
|
-
return
|
|
2078
|
+
return Object.assign(Object.assign({}, list), {
|
|
1922
2079
|
weather: parseWeatherToObject(list[key])
|
|
1923
2080
|
});
|
|
1924
2081
|
}
|
|
1925
2082
|
|
|
1926
2083
|
case 'cloud':
|
|
1927
2084
|
{
|
|
1928
|
-
return
|
|
2085
|
+
return Object.assign(Object.assign({}, list), {
|
|
1929
2086
|
cloud: parseCloudsToObject(list[key])
|
|
1930
2087
|
});
|
|
1931
2088
|
}
|
|
@@ -1934,7 +2091,7 @@ function reduceRowValues(row, tafStart, tafEnd) {
|
|
|
1934
2091
|
case 'change':
|
|
1935
2092
|
case 'probability':
|
|
1936
2093
|
{
|
|
1937
|
-
return
|
|
2094
|
+
return Object.assign(Object.assign({}, list), _defineProperty({}, key, (_a = list[key]) === null || _a === void 0 ? void 0 : _a.trim()));
|
|
1938
2095
|
}
|
|
1939
2096
|
|
|
1940
2097
|
default:
|
|
@@ -1967,9 +2124,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
1967
2124
|
// If cloud is undefined or empty, remove it from the list
|
|
1968
2125
|
if (!reducedRow.cloud || Object.keys(reducedRow.cloud).length === 0) {
|
|
1969
2126
|
list.cloud;
|
|
1970
|
-
var
|
|
2127
|
+
var _rest = __rest(list, ["cloud"]);
|
|
1971
2128
|
|
|
1972
|
-
return
|
|
2129
|
+
return _rest;
|
|
1973
2130
|
}
|
|
1974
2131
|
|
|
1975
2132
|
return list;
|
|
@@ -1980,9 +2137,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
1980
2137
|
// If empty, remove it from the list
|
|
1981
2138
|
if (!reducedRow.weather.weather1) {
|
|
1982
2139
|
list.weather;
|
|
1983
|
-
var
|
|
2140
|
+
var _rest2 = __rest(list, ["weather"]);
|
|
1984
2141
|
|
|
1985
|
-
return
|
|
2142
|
+
return _rest2;
|
|
1986
2143
|
}
|
|
1987
2144
|
|
|
1988
2145
|
return list;
|
|
@@ -1993,9 +2150,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
1993
2150
|
// If empty, remove it from the list
|
|
1994
2151
|
if (!reducedRow.wind.direction && isNaN(Number(reducedRow.wind.direction))) {
|
|
1995
2152
|
list.wind;
|
|
1996
|
-
var
|
|
2153
|
+
var _rest3 = __rest(list, ["wind"]);
|
|
1997
2154
|
|
|
1998
|
-
return
|
|
2155
|
+
return _rest3;
|
|
1999
2156
|
}
|
|
2000
2157
|
|
|
2001
2158
|
return list;
|
|
@@ -2006,9 +2163,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
2006
2163
|
// If empty, remove it from the list
|
|
2007
2164
|
if (!reducedRow.visibility.range && isNaN(reducedRow.visibility.range)) {
|
|
2008
2165
|
list.visibility;
|
|
2009
|
-
var
|
|
2166
|
+
var _rest4 = __rest(list, ["visibility"]);
|
|
2010
2167
|
|
|
2011
|
-
return
|
|
2168
|
+
return _rest4;
|
|
2012
2169
|
}
|
|
2013
2170
|
|
|
2014
2171
|
return list;
|
|
@@ -2021,9 +2178,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
2021
2178
|
var _a = list,
|
|
2022
2179
|
_b = key;
|
|
2023
2180
|
_a[_b];
|
|
2024
|
-
var
|
|
2181
|
+
var _rest5 = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
|
|
2025
2182
|
|
|
2026
|
-
return
|
|
2183
|
+
return _rest5;
|
|
2027
2184
|
}
|
|
2028
2185
|
|
|
2029
2186
|
return list;
|
|
@@ -2035,9 +2192,9 @@ function parseFormValues(row, tafStart, tafEnd) {
|
|
|
2035
2192
|
var _c = list,
|
|
2036
2193
|
_d = key;
|
|
2037
2194
|
_c[_d];
|
|
2038
|
-
var
|
|
2195
|
+
var _rest6 = __rest(_c, [_typeof(_d) === "symbol" ? _d : _d + ""]);
|
|
2039
2196
|
|
|
2040
|
-
return
|
|
2197
|
+
return _rest6;
|
|
2041
2198
|
}
|
|
2042
2199
|
|
|
2043
2200
|
return list;
|
|
@@ -2063,12 +2220,10 @@ var convertTafValuesToObject = function convertTafValuesToObject(formData) {
|
|
|
2063
2220
|
.filter(function (value) {
|
|
2064
2221
|
return Object.keys(value).length;
|
|
2065
2222
|
});
|
|
2066
|
-
|
|
2067
|
-
var parsedFormValues = __assign(__assign({}, productToPost), {
|
|
2223
|
+
var parsedFormValues = Object.assign(Object.assign({}, productToPost), {
|
|
2068
2224
|
baseForecast: parseFormValues(productToPost.baseForecast, tafStart, tafEnd),
|
|
2069
2225
|
changeGroups: parsedChangeGroups
|
|
2070
2226
|
});
|
|
2071
|
-
|
|
2072
2227
|
return Object.keys(parsedFormValues).reduce(function (list, key) {
|
|
2073
2228
|
switch (key) {
|
|
2074
2229
|
case 'changeGroups':
|
|
@@ -2094,9 +2249,9 @@ var convertTafValuesToObject = function convertTafValuesToObject(formData) {
|
|
|
2094
2249
|
var _a = list,
|
|
2095
2250
|
_b = key;
|
|
2096
2251
|
_a[_b];
|
|
2097
|
-
var
|
|
2252
|
+
var _rest7 = __rest(_a, [_typeof(_b) === "symbol" ? _b : _b + ""]);
|
|
2098
2253
|
|
|
2099
|
-
return
|
|
2254
|
+
return _rest7;
|
|
2100
2255
|
}
|
|
2101
2256
|
|
|
2102
2257
|
return list;
|
|
@@ -2108,8 +2263,7 @@ var convertTafValuesToObject = function convertTafValuesToObject(formData) {
|
|
|
2108
2263
|
}
|
|
2109
2264
|
}
|
|
2110
2265
|
}, parsedFormValues);
|
|
2111
|
-
};
|
|
2112
|
-
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
|
|
2266
|
+
}; // 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
|
|
2113
2267
|
|
|
2114
2268
|
var shouldRetrieveTAC = function shouldRetrieveTAC(product) {
|
|
2115
2269
|
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)) {
|
|
@@ -2119,46 +2273,55 @@ var shouldRetrieveTAC = function shouldRetrieveTAC(product) {
|
|
|
2119
2273
|
return false;
|
|
2120
2274
|
};
|
|
2121
2275
|
var getFieldNames = function getFieldNames(isChangeGroup, index) {
|
|
2122
|
-
var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups["
|
|
2123
|
-
return
|
|
2276
|
+
var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups[".concat(index, "]");
|
|
2277
|
+
return Object.assign(Object.assign(Object.assign({}, !isChangeGroup && {
|
|
2124
2278
|
messageType: 'messageType',
|
|
2125
2279
|
location: 'location',
|
|
2126
2280
|
issueDate: 'issueDate'
|
|
2127
2281
|
}), isChangeGroup && {
|
|
2128
|
-
probability: namePrefix
|
|
2129
|
-
change: namePrefix
|
|
2282
|
+
probability: "".concat(namePrefix, ".probability"),
|
|
2283
|
+
change: "".concat(namePrefix, ".change")
|
|
2130
2284
|
}), {
|
|
2131
|
-
valid: namePrefix
|
|
2132
|
-
wind: namePrefix
|
|
2133
|
-
visibility: namePrefix
|
|
2134
|
-
weather1: namePrefix
|
|
2135
|
-
weather2: namePrefix
|
|
2136
|
-
weather3: namePrefix
|
|
2137
|
-
cloud1: namePrefix
|
|
2138
|
-
cloud2: namePrefix
|
|
2139
|
-
cloud3: namePrefix
|
|
2140
|
-
cloud4: namePrefix
|
|
2285
|
+
valid: "".concat(namePrefix, ".valid"),
|
|
2286
|
+
wind: "".concat(namePrefix, ".wind"),
|
|
2287
|
+
visibility: "".concat(namePrefix, ".visibility"),
|
|
2288
|
+
weather1: "".concat(namePrefix, ".weather.weather1"),
|
|
2289
|
+
weather2: "".concat(namePrefix, ".weather.weather2"),
|
|
2290
|
+
weather3: "".concat(namePrefix, ".weather.weather3"),
|
|
2291
|
+
cloud1: "".concat(namePrefix, ".cloud.cloud1"),
|
|
2292
|
+
cloud2: "".concat(namePrefix, ".cloud.cloud2"),
|
|
2293
|
+
cloud3: "".concat(namePrefix, ".cloud.cloud3"),
|
|
2294
|
+
cloud4: "".concat(namePrefix, ".cloud.cloud4")
|
|
2141
2295
|
});
|
|
2142
2296
|
};
|
|
2143
|
-
var
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2297
|
+
var TAC_MISSING_DATA = 'Missing data: no TAC can be generated';
|
|
2298
|
+
var TAC_NOT_AVAILABLE = 'No TAC available';
|
|
2299
|
+
var TAC_RETRIEVING_DATA = 'Retrieving TAC';
|
|
2300
|
+
var useTACGenerator = function useTACGenerator(taf, requestTAC) {
|
|
2301
|
+
var standardTAC = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
|
|
2302
|
+
|
|
2303
|
+
var _React$useState = React__default.useState(taf.status === 'NEW' ? TAC_NOT_AVAILABLE : TAC_RETRIEVING_DATA),
|
|
2304
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
2305
|
+
TAC = _React$useState2[0],
|
|
2306
|
+
setTAC = _React$useState2[1];
|
|
2147
2307
|
|
|
2148
|
-
var
|
|
2149
|
-
|
|
2150
|
-
setTAC = _a[1];
|
|
2308
|
+
var _useIsMounted = useIsMounted(),
|
|
2309
|
+
isMounted = _useIsMounted.isMounted;
|
|
2151
2310
|
|
|
2152
2311
|
var retrieveTAC = function retrieveTAC(tafToPost) {
|
|
2153
2312
|
if (shouldRetrieveTAC(tafToPost)) {
|
|
2154
2313
|
requestTAC(tafToPost).then(function (result) {
|
|
2155
|
-
|
|
2314
|
+
if (isMounted.current) {
|
|
2315
|
+
setTAC(result.data);
|
|
2316
|
+
}
|
|
2156
2317
|
})["catch"](function () {
|
|
2157
|
-
|
|
2318
|
+
if (isMounted.current) {
|
|
2319
|
+
setTAC('Failed to retrieve TAC');
|
|
2320
|
+
}
|
|
2158
2321
|
});
|
|
2322
|
+
} else {
|
|
2323
|
+
setTAC(TAC_MISSING_DATA);
|
|
2159
2324
|
}
|
|
2160
|
-
|
|
2161
|
-
setTAC(noTAC);
|
|
2162
2325
|
};
|
|
2163
2326
|
|
|
2164
2327
|
React__default.useEffect(function () {
|
|
@@ -2174,69 +2337,57 @@ var useTACGenerator = function useTACGenerator(taf, requestTAC, standardTAC) {
|
|
|
2174
2337
|
}, [standardTAC]);
|
|
2175
2338
|
return [TAC, retrieveTAC];
|
|
2176
2339
|
};
|
|
2177
|
-
var
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
lastDragOrder = _b[0],
|
|
2192
|
-
onUpdatelastDragOrder = _b[1];
|
|
2193
|
-
|
|
2194
|
-
var onChangeOrder = function onChangeOrder(_a) {
|
|
2195
|
-
var oldIndex = _a.oldIndex,
|
|
2196
|
-
newIndex = _a.newIndex;
|
|
2340
|
+
var useDragOrder = function useDragOrder(trigger, move, onFormBlur) {
|
|
2341
|
+
var _React$useState3 = React__default.useState(null),
|
|
2342
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
2343
|
+
activeDraggingIndex = _React$useState4[0],
|
|
2344
|
+
setIsDragging = _React$useState4[1];
|
|
2345
|
+
|
|
2346
|
+
var _React$useState5 = React__default.useState([null, null]),
|
|
2347
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
2348
|
+
lastDragOrder = _React$useState6[0],
|
|
2349
|
+
onUpdatelastDragOrder = _React$useState6[1];
|
|
2350
|
+
|
|
2351
|
+
var onChangeOrder = function onChangeOrder(_ref) {
|
|
2352
|
+
var oldIndex = _ref.oldIndex,
|
|
2353
|
+
newIndex = _ref.newIndex;
|
|
2197
2354
|
if (oldIndex === undefined || newIndex === undefined) return;
|
|
2198
2355
|
move(oldIndex, newIndex);
|
|
2199
2356
|
onUpdatelastDragOrder([oldIndex, newIndex]);
|
|
2357
|
+
setIsDragging(false);
|
|
2200
2358
|
};
|
|
2201
2359
|
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
chosen: false
|
|
2208
|
-
};
|
|
2209
|
-
}));
|
|
2210
|
-
}, [fields]); // triggers validation AFTER render of new sorted elements
|
|
2360
|
+
var onStartDrag = function onStartDrag(_ref2) {
|
|
2361
|
+
var oldIndex = _ref2.oldIndex;
|
|
2362
|
+
return setIsDragging(oldIndex);
|
|
2363
|
+
}; // triggers validation AFTER render of new sorted elements
|
|
2364
|
+
|
|
2211
2365
|
|
|
2212
2366
|
React__default.useEffect(function () {
|
|
2213
|
-
var
|
|
2214
|
-
oldIndex =
|
|
2215
|
-
newIndex =
|
|
2367
|
+
var _lastDragOrder = _slicedToArray(lastDragOrder, 2),
|
|
2368
|
+
oldIndex = _lastDragOrder[0],
|
|
2369
|
+
newIndex = _lastDragOrder[1];
|
|
2216
2370
|
|
|
2217
2371
|
if (oldIndex !== null && newIndex !== null) {
|
|
2218
|
-
// trigger validation of
|
|
2219
|
-
|
|
2220
|
-
return a - b;
|
|
2221
|
-
}), 2),
|
|
2222
|
-
start = _b[0],
|
|
2223
|
-
end = _b[1];
|
|
2224
|
-
|
|
2225
|
-
var changedRows = getRange(start, end);
|
|
2226
|
-
var fieldsToValidate = changedRows.reduce(function (list, rowIndex) {
|
|
2227
|
-
var fieldsDict = getFieldNames(true, rowIndex);
|
|
2228
|
-
var fields = Object.keys(fieldsDict).map(function (key) {
|
|
2229
|
-
return fieldsDict[key];
|
|
2230
|
-
});
|
|
2231
|
-
return list.concat(fields);
|
|
2232
|
-
}, []);
|
|
2233
|
-
trigger(fieldsToValidate);
|
|
2372
|
+
// trigger validation of all fields
|
|
2373
|
+
trigger();
|
|
2234
2374
|
}
|
|
2235
|
-
}, [lastDragOrder, trigger]);
|
|
2375
|
+
}, [lastDragOrder, trigger]); // trigger onFormBlur AFTER render of new sorted elements so the TAC gets updated
|
|
2376
|
+
|
|
2377
|
+
React__default.useEffect(function () {
|
|
2378
|
+
var _lastDragOrder2 = _slicedToArray(lastDragOrder, 2),
|
|
2379
|
+
oldIndex = _lastDragOrder2[0],
|
|
2380
|
+
newIndex = _lastDragOrder2[1];
|
|
2381
|
+
|
|
2382
|
+
if (oldIndex !== null && newIndex !== null) {
|
|
2383
|
+
onFormBlur();
|
|
2384
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2385
|
+
|
|
2386
|
+
}, [lastDragOrder]);
|
|
2236
2387
|
return {
|
|
2237
2388
|
onChangeOrder: onChangeOrder,
|
|
2238
|
-
|
|
2239
|
-
|
|
2389
|
+
activeDraggingIndex: activeDraggingIndex,
|
|
2390
|
+
onStartDrag: onStartDrag
|
|
2240
2391
|
};
|
|
2241
2392
|
}; // dialog utils
|
|
2242
2393
|
|
|
@@ -2370,7 +2521,7 @@ var getDisplayValue = function getDisplayValue(value, disabled) {
|
|
|
2370
2521
|
};
|
|
2371
2522
|
var BaseTextField = /*#__PURE__*/React__default.memo(function (props) {
|
|
2372
2523
|
var classes = useStyles$9();
|
|
2373
|
-
return /*#__PURE__*/React__default.createElement(TextField,
|
|
2524
|
+
return /*#__PURE__*/React__default.createElement(TextField, Object.assign({
|
|
2374
2525
|
type: "text",
|
|
2375
2526
|
variant: "filled",
|
|
2376
2527
|
InputProps: {
|
|
@@ -2389,48 +2540,49 @@ var BaseTextField = /*#__PURE__*/React__default.memo(function (props) {
|
|
|
2389
2540
|
return prevProps.value === nextProps.value && prevProps.error === nextProps.error && prevProps.name === nextProps.name;
|
|
2390
2541
|
});
|
|
2391
2542
|
|
|
2392
|
-
var TafFormTextField = function TafFormTextField(
|
|
2393
|
-
var label =
|
|
2394
|
-
|
|
2395
|
-
disabled =
|
|
2396
|
-
|
|
2397
|
-
name =
|
|
2398
|
-
|
|
2399
|
-
onChange =
|
|
2400
|
-
|
|
2401
|
-
onBlur =
|
|
2402
|
-
|
|
2403
|
-
defaultValue =
|
|
2404
|
-
|
|
2405
|
-
formatter =
|
|
2406
|
-
rules =
|
|
2407
|
-
|
|
2408
|
-
autoComplete =
|
|
2409
|
-
|
|
2410
|
-
autoFocus =
|
|
2543
|
+
var TafFormTextField = function TafFormTextField(_ref) {
|
|
2544
|
+
var label = _ref.label,
|
|
2545
|
+
_ref$disabled = _ref.disabled,
|
|
2546
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
2547
|
+
_ref$name = _ref.name,
|
|
2548
|
+
name = _ref$name === void 0 ? '' : _ref$name,
|
|
2549
|
+
_ref$onChange = _ref.onChange,
|
|
2550
|
+
onChange = _ref$onChange === void 0 ? function () {} : _ref$onChange,
|
|
2551
|
+
_ref$onBlur = _ref.onBlur,
|
|
2552
|
+
onBlur = _ref$onBlur === void 0 ? function () {} : _ref$onBlur,
|
|
2553
|
+
_ref$defaultValue = _ref.defaultValue,
|
|
2554
|
+
defaultValue = _ref$defaultValue === void 0 ? '' : _ref$defaultValue,
|
|
2555
|
+
_ref$formatter = _ref.formatter,
|
|
2556
|
+
formatter = _ref$formatter === void 0 ? null : _ref$formatter,
|
|
2557
|
+
rules = _ref.rules,
|
|
2558
|
+
_ref$autoComplete = _ref.autoComplete,
|
|
2559
|
+
autoComplete = _ref$autoComplete === void 0 ? [] : _ref$autoComplete,
|
|
2560
|
+
_ref$autoFocus = _ref.autoFocus,
|
|
2561
|
+
autoFocus = _ref$autoFocus === void 0 ? false : _ref$autoFocus;
|
|
2411
2562
|
var classes = useStyles$9();
|
|
2412
2563
|
|
|
2413
|
-
var
|
|
2414
|
-
control =
|
|
2415
|
-
getValues =
|
|
2416
|
-
setValue =
|
|
2417
|
-
errors =
|
|
2564
|
+
var _useFormContext = useFormContext(),
|
|
2565
|
+
control = _useFormContext.control,
|
|
2566
|
+
getValues = _useFormContext.getValues,
|
|
2567
|
+
setValue = _useFormContext.setValue,
|
|
2568
|
+
errors = _useFormContext.errors;
|
|
2418
2569
|
|
|
2419
2570
|
var inputRef = React__default.useRef(null);
|
|
2420
2571
|
var fieldErrors = getTafErrors(name, errors);
|
|
2421
2572
|
|
|
2422
|
-
var
|
|
2423
|
-
|
|
2424
|
-
|
|
2573
|
+
var _React$useState = React__default.useState(null),
|
|
2574
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
2575
|
+
maxLength = _React$useState2[0],
|
|
2576
|
+
setMaxLength = _React$useState2[1];
|
|
2425
2577
|
|
|
2426
2578
|
var onKeyDown = React__default.useCallback(function (event) {
|
|
2427
2579
|
var currentValue = getValues(name).toString();
|
|
2428
2580
|
var textSelection = currentValue.substring(inputRef.current.selectionStart, inputRef.current.selectionEnd);
|
|
2429
2581
|
|
|
2430
2582
|
if (autoComplete && !currentValue.length || textSelection.length && currentValue.length && textSelection === currentValue) {
|
|
2431
|
-
var
|
|
2583
|
+
var pressedKey = event.key.toString().toUpperCase();
|
|
2432
2584
|
var foundValue = autoComplete.find(function (el) {
|
|
2433
|
-
return el.key ===
|
|
2585
|
+
return el.key === pressedKey;
|
|
2434
2586
|
}) || null;
|
|
2435
2587
|
|
|
2436
2588
|
if (foundValue) {
|
|
@@ -2574,34 +2726,37 @@ var getRequiredCrossFields = function getRequiredCrossFields(fieldNames) {
|
|
|
2574
2726
|
};
|
|
2575
2727
|
|
|
2576
2728
|
var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
2577
|
-
var
|
|
2578
|
-
isChangeGroup =
|
|
2579
|
-
|
|
2580
|
-
disabled =
|
|
2581
|
-
|
|
2582
|
-
index =
|
|
2583
|
-
|
|
2584
|
-
lastRow =
|
|
2729
|
+
var _a$isChangeGroup = _a.isChangeGroup,
|
|
2730
|
+
isChangeGroup = _a$isChangeGroup === void 0 ? false : _a$isChangeGroup,
|
|
2731
|
+
_a$disabled = _a.disabled,
|
|
2732
|
+
disabled = _a$disabled === void 0 ? false : _a$disabled,
|
|
2733
|
+
_a$index = _a.index,
|
|
2734
|
+
index = _a$index === void 0 ? -1 : _a$index,
|
|
2735
|
+
_a$lastRow = _a.lastRow,
|
|
2736
|
+
lastRow = _a$lastRow === void 0 ? false : _a$lastRow,
|
|
2585
2737
|
onRemoveChangeGroup = _a.onRemoveChangeGroup,
|
|
2586
|
-
|
|
2587
|
-
field =
|
|
2588
|
-
|
|
2589
|
-
dragHandle =
|
|
2738
|
+
_a$field = _a.field,
|
|
2739
|
+
field = _a$field === void 0 ? null : _a$field,
|
|
2740
|
+
_a$dragHandle = _a.dragHandle,
|
|
2741
|
+
dragHandle = _a$dragHandle === void 0 ? null : _a$dragHandle,
|
|
2590
2742
|
props = __rest(_a, ["isChangeGroup", "disabled", "index", "lastRow", "onRemoveChangeGroup", "field", "dragHandle"]);
|
|
2591
2743
|
|
|
2592
|
-
var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups["
|
|
2744
|
+
var namePrefix = !isChangeGroup ? 'baseForecast' : "changeGroups[".concat(index, "]");
|
|
2593
2745
|
var fieldNames = getFieldNames(isChangeGroup, index);
|
|
2594
2746
|
|
|
2595
|
-
var
|
|
2596
|
-
getValues =
|
|
2597
|
-
trigger =
|
|
2747
|
+
var _useFormContext = useFormContext(),
|
|
2748
|
+
getValues = _useFormContext.getValues,
|
|
2749
|
+
trigger = _useFormContext.trigger;
|
|
2750
|
+
|
|
2751
|
+
var _useDraftFormHelpers = useDraftFormHelpers(),
|
|
2752
|
+
isNotRequiredForAction = _useDraftFormHelpers.isRequired; // cross-field required validation
|
|
2598
2753
|
|
|
2599
|
-
var isNotRequiredForAction = useDraftFormHelpers().isRequired; // cross-field required validation
|
|
2600
2754
|
|
|
2601
|
-
var
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2755
|
+
var _getRequiredCrossFiel = getRequiredCrossFields(fieldNames),
|
|
2756
|
+
_getRequiredCrossFiel2 = _slicedToArray(_getRequiredCrossFiel, 3),
|
|
2757
|
+
mainFields = _getRequiredCrossFiel2[0],
|
|
2758
|
+
mainOptionalFields = _getRequiredCrossFiel2[1],
|
|
2759
|
+
subFields = _getRequiredCrossFiel2[2];
|
|
2605
2760
|
|
|
2606
2761
|
var hasFieldsValue = function hasFieldsValue(fields) {
|
|
2607
2762
|
return fields.map(getValues).find(function (field) {
|
|
@@ -2626,8 +2781,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2626
2781
|
|
|
2627
2782
|
|
|
2628
2783
|
var _validateRequiredMainFields = function validateRequiredMainFields(value, fieldName) {
|
|
2629
|
-
var changeField = getValues(namePrefix
|
|
2630
|
-
var visibilityField = getValues(namePrefix
|
|
2784
|
+
var changeField = getValues("".concat(namePrefix, ".change"));
|
|
2785
|
+
var visibilityField = getValues("".concat(namePrefix, ".visibility"));
|
|
2631
2786
|
var isFM = changeField && changeField.trim() === 'FM';
|
|
2632
2787
|
var isCAVOK = visibilityField && visibilityField.trim() === 'CAVOK';
|
|
2633
2788
|
|
|
@@ -2643,15 +2798,37 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2643
2798
|
return true;
|
|
2644
2799
|
}
|
|
2645
2800
|
|
|
2646
|
-
return fieldName
|
|
2801
|
+
return "".concat(fieldName, " is required");
|
|
2647
2802
|
}
|
|
2648
2803
|
}
|
|
2649
2804
|
|
|
2650
2805
|
return true;
|
|
2651
2806
|
};
|
|
2652
2807
|
|
|
2653
|
-
|
|
2654
|
-
|
|
2808
|
+
var validatePreviousRow = React__default.useCallback(function () {
|
|
2809
|
+
if (isChangeGroup && index > 0) {
|
|
2810
|
+
var _getValues = getValues(),
|
|
2811
|
+
validDateEnd = _getValues.validDateEnd,
|
|
2812
|
+
validDateStart = _getValues.validDateStart,
|
|
2813
|
+
changeGroups = _getValues.changeGroups;
|
|
2814
|
+
|
|
2815
|
+
var currentChangeGroup = changeGroups[index];
|
|
2816
|
+
var previousChangeGroup = changeGroups[index - 1];
|
|
2817
|
+
return validatePreviousChangeGroup(currentChangeGroup, previousChangeGroup, validDateStart, validDateEnd);
|
|
2818
|
+
}
|
|
2819
|
+
|
|
2820
|
+
return true;
|
|
2821
|
+
}, [index, isChangeGroup, getValues]);
|
|
2822
|
+
|
|
2823
|
+
var getFieldFromNextRow = function getFieldFromNextRow() {
|
|
2824
|
+
var fieldname = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'valid';
|
|
2825
|
+
var nextValidFieldName = "changeGroups[".concat(index + 1, "].").concat(fieldname);
|
|
2826
|
+
var nextRowValidValue = getValues(nextValidFieldName);
|
|
2827
|
+
return nextRowValidValue ? [nextValidFieldName] : [];
|
|
2828
|
+
};
|
|
2829
|
+
|
|
2830
|
+
return /*#__PURE__*/React__default.createElement(Grid, Object.assign({
|
|
2831
|
+
"data-testid": "row-".concat(namePrefix),
|
|
2655
2832
|
container: true,
|
|
2656
2833
|
ref: ref
|
|
2657
2834
|
}, props), !isChangeGroup && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
@@ -2693,7 +2870,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2693
2870
|
}],
|
|
2694
2871
|
onBlur: function onBlur() {
|
|
2695
2872
|
if (isChangeGroup) {
|
|
2696
|
-
|
|
2873
|
+
var nextValidFieldName = getFieldFromNextRow();
|
|
2874
|
+
trigger([].concat(_toConsumableArray(subFields), _toConsumableArray(mainOptionalFields), _toConsumableArray(mainFields), _toConsumableArray(nextValidFieldName)));
|
|
2697
2875
|
}
|
|
2698
2876
|
}
|
|
2699
2877
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
@@ -2722,7 +2900,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2722
2900
|
}],
|
|
2723
2901
|
onBlur: function onBlur() {
|
|
2724
2902
|
if (isChangeGroup) {
|
|
2725
|
-
|
|
2903
|
+
var nextValidFieldName = getFieldFromNextRow();
|
|
2904
|
+
trigger([].concat(_toConsumableArray(subFields), _toConsumableArray(mainOptionalFields), _toConsumableArray(mainFields), _toConsumableArray(nextValidFieldName)));
|
|
2726
2905
|
}
|
|
2727
2906
|
}
|
|
2728
2907
|
})), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
@@ -2739,12 +2918,14 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2739
2918
|
},
|
|
2740
2919
|
validateValidChangeGroupInterField: function validateValidChangeGroupInterField$1(value) {
|
|
2741
2920
|
return isChangeGroup ? validateValidChangeGroupInterField(value, getValues(fieldNames.change), getValues('validDateStart'), getValues('validDateEnd')) : true;
|
|
2742
|
-
}
|
|
2921
|
+
},
|
|
2922
|
+
validatePreviousRow: validatePreviousRow
|
|
2743
2923
|
}
|
|
2744
2924
|
},
|
|
2745
2925
|
onBlur: function onBlur() {
|
|
2746
2926
|
if (isChangeGroup) {
|
|
2747
|
-
|
|
2927
|
+
var nextValidFieldName = getFieldFromNextRow();
|
|
2928
|
+
trigger([].concat(_toConsumableArray(subFields), _toConsumableArray(mainOptionalFields), _toConsumableArray(mainFields), _toConsumableArray(nextValidFieldName)));
|
|
2748
2929
|
}
|
|
2749
2930
|
}
|
|
2750
2931
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
@@ -2763,7 +2944,7 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2763
2944
|
},
|
|
2764
2945
|
onBlur: function onBlur() {
|
|
2765
2946
|
if (isChangeGroup) {
|
|
2766
|
-
trigger(
|
|
2947
|
+
trigger([].concat(_toConsumableArray(subFields), _toConsumableArray(mainFields)));
|
|
2767
2948
|
}
|
|
2768
2949
|
},
|
|
2769
2950
|
autoFocus: !isChangeGroup
|
|
@@ -2786,7 +2967,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2786
2967
|
value: 'CAVOK'
|
|
2787
2968
|
}],
|
|
2788
2969
|
onBlur: function onBlur() {
|
|
2789
|
-
|
|
2970
|
+
var fields = isChangeGroup ? [].concat(_toConsumableArray(subFields), _toConsumableArray(mainFields)) : subFields;
|
|
2971
|
+
trigger([].concat(_toConsumableArray(fields), [fieldNames.weather1, fieldNames.weather2, fieldNames.weather3]));
|
|
2790
2972
|
}
|
|
2791
2973
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
2792
2974
|
label: "Weather",
|
|
@@ -2805,8 +2987,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2805
2987
|
}
|
|
2806
2988
|
},
|
|
2807
2989
|
onBlur: function onBlur() {
|
|
2808
|
-
var fields = isChangeGroup ?
|
|
2809
|
-
return trigger(
|
|
2990
|
+
var fields = isChangeGroup ? [].concat(_toConsumableArray(subFields), _toConsumableArray(mainFields)) : [];
|
|
2991
|
+
return trigger([].concat(_toConsumableArray(fields), [fieldNames.weather2, fieldNames.weather3]));
|
|
2810
2992
|
}
|
|
2811
2993
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
2812
2994
|
label: "Weather",
|
|
@@ -2821,8 +3003,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2821
3003
|
}
|
|
2822
3004
|
},
|
|
2823
3005
|
onBlur: function onBlur() {
|
|
2824
|
-
var fields = isChangeGroup ?
|
|
2825
|
-
return trigger(
|
|
3006
|
+
var fields = isChangeGroup ? [].concat(_toConsumableArray(subFields), _toConsumableArray(mainFields)) : [];
|
|
3007
|
+
return trigger([].concat(_toConsumableArray(fields), [fieldNames.weather3]));
|
|
2826
3008
|
}
|
|
2827
3009
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
2828
3010
|
label: "Weather",
|
|
@@ -2853,8 +3035,8 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2853
3035
|
}
|
|
2854
3036
|
},
|
|
2855
3037
|
onBlur: function onBlur() {
|
|
2856
|
-
var fields = isChangeGroup ?
|
|
2857
|
-
return trigger(
|
|
3038
|
+
var fields = isChangeGroup ? [].concat(_toConsumableArray(subFields), _toConsumableArray(mainFields)) : [];
|
|
3039
|
+
return trigger([].concat(_toConsumableArray(fields), [fieldNames.cloud2, fieldNames.cloud3, fieldNames.cloud4]));
|
|
2858
3040
|
}
|
|
2859
3041
|
}), /*#__PURE__*/React__default.createElement(TafFormTextField, {
|
|
2860
3042
|
label: "Cloud",
|
|
@@ -2904,7 +3086,7 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2904
3086
|
}), isChangeGroup && !disabled && /*#__PURE__*/React__default.createElement(Grid, {
|
|
2905
3087
|
item: true,
|
|
2906
3088
|
xs: true
|
|
2907
|
-
}, /*#__PURE__*/React__default.createElement(IconButton,
|
|
3089
|
+
}, /*#__PURE__*/React__default.createElement(IconButton, Object.assign({
|
|
2908
3090
|
"aria-label": "delete",
|
|
2909
3091
|
"data-testid": "remove-changeGroup",
|
|
2910
3092
|
onClick: function onClick() {
|
|
@@ -2915,6 +3097,23 @@ var TafFormRow = /*#__PURE__*/React__default.forwardRef(function (_a, ref) {
|
|
|
2915
3097
|
} : {}), /*#__PURE__*/React__default.createElement(Delete, null))));
|
|
2916
3098
|
});
|
|
2917
3099
|
|
|
3100
|
+
/* *
|
|
3101
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3102
|
+
* you may not use this file except in compliance with the License.
|
|
3103
|
+
* You may obtain a copy of the License at
|
|
3104
|
+
*
|
|
3105
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
3106
|
+
*
|
|
3107
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3108
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3109
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3110
|
+
* See the License for the specific language governing permissions and
|
|
3111
|
+
* limitations under the License.
|
|
3112
|
+
*
|
|
3113
|
+
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
3114
|
+
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
3115
|
+
* */
|
|
3116
|
+
|
|
2918
3117
|
var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
|
|
2919
3118
|
switch (sumOfErrors) {
|
|
2920
3119
|
case 0:
|
|
@@ -2924,7 +3123,7 @@ var getIssuesLabel = function getIssuesLabel(sumOfErrors) {
|
|
|
2924
3123
|
return '1 issue';
|
|
2925
3124
|
|
|
2926
3125
|
default:
|
|
2927
|
-
return sumOfErrors
|
|
3126
|
+
return "".concat(sumOfErrors, " issues");
|
|
2928
3127
|
}
|
|
2929
3128
|
};
|
|
2930
3129
|
|
|
@@ -2948,9 +3147,9 @@ var buttonStyle = function buttonStyle(color) {
|
|
|
2948
3147
|
};
|
|
2949
3148
|
};
|
|
2950
3149
|
|
|
2951
|
-
var IssuesButton = function IssuesButton(
|
|
2952
|
-
var togglePane =
|
|
2953
|
-
sumOfErrors =
|
|
3150
|
+
var IssuesButton = function IssuesButton(_ref) {
|
|
3151
|
+
var togglePane = _ref.togglePane,
|
|
3152
|
+
sumOfErrors = _ref.sumOfErrors;
|
|
2954
3153
|
var color = sumOfErrors > 0 ? 'red' : 'green';
|
|
2955
3154
|
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
2956
3155
|
title: "View details"
|
|
@@ -2958,13 +3157,29 @@ var IssuesButton = function IssuesButton(_a) {
|
|
|
2958
3157
|
"data-testid": "issuesButton",
|
|
2959
3158
|
size: "small",
|
|
2960
3159
|
label: getIssuesLabel(sumOfErrors),
|
|
2961
|
-
style:
|
|
3160
|
+
style: Object.assign({}, buttonStyle(color)),
|
|
2962
3161
|
onClick: togglePane
|
|
2963
3162
|
}));
|
|
2964
3163
|
};
|
|
2965
3164
|
|
|
3165
|
+
/* *
|
|
3166
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3167
|
+
* you may not use this file except in compliance with the License.
|
|
3168
|
+
* You may obtain a copy of the License at
|
|
3169
|
+
*
|
|
3170
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
3171
|
+
*
|
|
3172
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3173
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3174
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3175
|
+
* See the License for the specific language governing permissions and
|
|
3176
|
+
* limitations under the License.
|
|
3177
|
+
*
|
|
3178
|
+
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
3179
|
+
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
3180
|
+
* */
|
|
2966
3181
|
var ThumbsUp = function ThumbsUp(props) {
|
|
2967
|
-
return /*#__PURE__*/React__default.createElement(SvgIcon,
|
|
3182
|
+
return /*#__PURE__*/React__default.createElement(SvgIcon, Object.assign({
|
|
2968
3183
|
fontSize: "inherit",
|
|
2969
3184
|
viewBox: "0 0 58 69"
|
|
2970
3185
|
}, props), /*#__PURE__*/React__default.createElement("title", null, "Thumbs up"), /*#__PURE__*/React__default.createElement("g", {
|
|
@@ -3037,10 +3252,10 @@ var getErrorDefaultMessage = function getErrorDefaultMessage(error) {
|
|
|
3037
3252
|
}
|
|
3038
3253
|
};
|
|
3039
3254
|
|
|
3040
|
-
var capitalizeWord = function capitalizeWord(
|
|
3041
|
-
var
|
|
3042
|
-
firstLetter =
|
|
3043
|
-
restOfWord =
|
|
3255
|
+
var capitalizeWord = function capitalizeWord(_ref) {
|
|
3256
|
+
var _ref2 = _toArray(_ref),
|
|
3257
|
+
firstLetter = _ref2[0],
|
|
3258
|
+
restOfWord = _ref2.slice(1);
|
|
3044
3259
|
|
|
3045
3260
|
return firstLetter.toUpperCase() + restOfWord.join('');
|
|
3046
3261
|
};
|
|
@@ -3048,19 +3263,20 @@ var humanizeErrorMessage = function humanizeErrorMessage(nameAsString) {
|
|
|
3048
3263
|
var nameWithoutBrackets = nameAsString.replace(/[[\]']+/g, '');
|
|
3049
3264
|
var nameLowerCase = nameWithoutBrackets.toLowerCase();
|
|
3050
3265
|
|
|
3051
|
-
var
|
|
3266
|
+
var _nameLowerCase$split$ = nameLowerCase.split(/([0-9]+)/) // split numbers from field and build array
|
|
3052
3267
|
.filter(function (s) {
|
|
3053
3268
|
return s.length;
|
|
3054
|
-
}),
|
|
3055
|
-
|
|
3056
|
-
|
|
3269
|
+
}),
|
|
3270
|
+
_nameLowerCase$split$2 = _slicedToArray(_nameLowerCase$split$, 2),
|
|
3271
|
+
fieldName = _nameLowerCase$split$2[0],
|
|
3272
|
+
fieldNumberedValue = _nameLowerCase$split$2[1];
|
|
3057
3273
|
|
|
3058
3274
|
var nameCapitalized = capitalizeWord(fieldName);
|
|
3059
3275
|
|
|
3060
3276
|
if (fieldNumberedValue) {
|
|
3061
3277
|
// when name contains a number we assume it's a formgroup and we add a index +1 for human readability
|
|
3062
3278
|
var fieldNumber = parseInt(fieldNumberedValue, 10) + 1;
|
|
3063
|
-
return nameCapitalized
|
|
3279
|
+
return "".concat(nameCapitalized, " ").concat(fieldNumber);
|
|
3064
3280
|
}
|
|
3065
3281
|
|
|
3066
3282
|
return nameCapitalized;
|
|
@@ -3068,18 +3284,19 @@ var humanizeErrorMessage = function humanizeErrorMessage(nameAsString) {
|
|
|
3068
3284
|
var getErrorMessage = function getErrorMessage(error, index) {
|
|
3069
3285
|
var name = error.ref.name;
|
|
3070
3286
|
|
|
3071
|
-
var
|
|
3072
|
-
|
|
3287
|
+
var _name$split = name.split('.'),
|
|
3288
|
+
_name$split2 = _slicedToArray(_name$split, 1),
|
|
3289
|
+
firstNamePart = _name$split2[0];
|
|
3073
3290
|
|
|
3074
3291
|
var fieldErrorTitle = humanizeErrorMessage(firstNamePart);
|
|
3075
|
-
return index + 1
|
|
3292
|
+
return "".concat(index + 1, ". ").concat(fieldErrorTitle, ": ").concat(getErrorDefaultMessage(error));
|
|
3076
3293
|
};
|
|
3077
3294
|
|
|
3078
|
-
var IssuesPane = function IssuesPane(
|
|
3079
|
-
var isOpen =
|
|
3080
|
-
handleClose =
|
|
3081
|
-
|
|
3082
|
-
errorList =
|
|
3295
|
+
var IssuesPane = function IssuesPane(_ref3) {
|
|
3296
|
+
var isOpen = _ref3.isOpen,
|
|
3297
|
+
handleClose = _ref3.handleClose,
|
|
3298
|
+
_ref3$errorList = _ref3.errorList,
|
|
3299
|
+
errorList = _ref3$errorList === void 0 ? [] : _ref3$errorList;
|
|
3083
3300
|
var classes = useStyles$8();
|
|
3084
3301
|
return /*#__PURE__*/React.createElement(ToolContainerDraggable, {
|
|
3085
3302
|
startSize: {
|
|
@@ -3106,7 +3323,7 @@ var IssuesPane = function IssuesPane(_a) {
|
|
|
3106
3323
|
return /*#__PURE__*/React.createElement(Typography // eslint-disable-next-line react/no-array-index-key
|
|
3107
3324
|
, {
|
|
3108
3325
|
// eslint-disable-next-line react/no-array-index-key
|
|
3109
|
-
key: "message-"
|
|
3326
|
+
key: "message-".concat(index),
|
|
3110
3327
|
variant: "body1",
|
|
3111
3328
|
"data-testid": "errorMessage"
|
|
3112
3329
|
}, getErrorMessage(error, index));
|
|
@@ -3118,7 +3335,7 @@ var getCustomError = function getCustomError(error) {
|
|
|
3118
3335
|
var isChangeGroup = name.includes('changeGroups');
|
|
3119
3336
|
var matchRowNumber = name.match(/\[(.*?)\]/);
|
|
3120
3337
|
var row = matchRowNumber ? parseInt(matchRowNumber[1], 10) : null;
|
|
3121
|
-
return
|
|
3338
|
+
return Object.assign(Object.assign({}, error), {
|
|
3122
3339
|
isChangeGroup: isChangeGroup,
|
|
3123
3340
|
row: row
|
|
3124
3341
|
});
|
|
@@ -3127,7 +3344,7 @@ var getCustomError = function getCustomError(error) {
|
|
|
3127
3344
|
var getErrorValues = function getErrorValues(fieldErrors) {
|
|
3128
3345
|
if (!fieldErrors) return [];
|
|
3129
3346
|
return Object.keys(fieldErrors).reduce(function (list, key) {
|
|
3130
|
-
var error =
|
|
3347
|
+
var error = Object.assign({}, fieldErrors[key]);
|
|
3131
3348
|
|
|
3132
3349
|
if (error.ref) {
|
|
3133
3350
|
return list.concat(getCustomError(error));
|
|
@@ -3145,7 +3362,7 @@ var getErrors = function getErrors(errors) {
|
|
|
3145
3362
|
var errorValues = errorValue.reduce(function (l, i) {
|
|
3146
3363
|
return l.concat(getErrorValues(i));
|
|
3147
3364
|
}, []);
|
|
3148
|
-
return list.concat.apply(list,
|
|
3365
|
+
return list.concat.apply(list, _toConsumableArray(errorValues));
|
|
3149
3366
|
}
|
|
3150
3367
|
|
|
3151
3368
|
return list.concat(getErrorValues(errorValue));
|
|
@@ -3164,26 +3381,31 @@ var filterDuplicateErrors = function filterDuplicateErrors(errors) {
|
|
|
3164
3381
|
}
|
|
3165
3382
|
|
|
3166
3383
|
if (error.type === 'validateRequiredMainOptional') {
|
|
3167
|
-
var
|
|
3384
|
+
var _exist = list.find(function (e) {
|
|
3168
3385
|
return e.type === 'validateRequiredMainOptional' && e.row === error.row;
|
|
3169
3386
|
});
|
|
3170
|
-
|
|
3387
|
+
|
|
3388
|
+
return _exist ? list : list.concat(error);
|
|
3171
3389
|
}
|
|
3172
3390
|
|
|
3173
3391
|
return list.concat(error);
|
|
3174
3392
|
}, []);
|
|
3175
3393
|
};
|
|
3176
3394
|
|
|
3177
|
-
var TafFormButtons = function TafFormButtons(
|
|
3178
|
-
var tafAction =
|
|
3179
|
-
onTafFormButtonPress =
|
|
3395
|
+
var TafFormButtons = function TafFormButtons(_ref) {
|
|
3396
|
+
var tafAction = _ref.tafAction,
|
|
3397
|
+
onTafFormButtonPress = _ref.onTafFormButtonPress;
|
|
3180
3398
|
var classes = useStyles$9();
|
|
3181
|
-
|
|
3399
|
+
|
|
3400
|
+
var _useFormContext = useFormContext(),
|
|
3401
|
+
errors = _useFormContext.errors;
|
|
3402
|
+
|
|
3182
3403
|
var errorList = filterDuplicateErrors(getErrors(errors));
|
|
3183
3404
|
|
|
3184
|
-
var
|
|
3185
|
-
|
|
3186
|
-
|
|
3405
|
+
var _React$useState = React__default.useState(false),
|
|
3406
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
3407
|
+
isIssuesPaneOpen = _React$useState2[0],
|
|
3408
|
+
setIsIssuesPaneOpen = _React$useState2[1];
|
|
3187
3409
|
|
|
3188
3410
|
var toggleIssuesPane = function toggleIssuesPane() {
|
|
3189
3411
|
return setIsIssuesPaneOpen(!isIssuesPaneOpen);
|
|
@@ -3308,22 +3530,24 @@ var useStyles$7 = makeStyles(function () {
|
|
|
3308
3530
|
};
|
|
3309
3531
|
});
|
|
3310
3532
|
|
|
3311
|
-
var DragHandle = function DragHandle(
|
|
3312
|
-
var
|
|
3313
|
-
isSorting =
|
|
3314
|
-
|
|
3315
|
-
isDisabled =
|
|
3316
|
-
index =
|
|
3533
|
+
var DragHandle = function DragHandle(_ref) {
|
|
3534
|
+
var _ref$isSorting = _ref.isSorting,
|
|
3535
|
+
isSorting = _ref$isSorting === void 0 ? false : _ref$isSorting,
|
|
3536
|
+
_ref$isDisabled = _ref.isDisabled,
|
|
3537
|
+
isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled,
|
|
3538
|
+
index = _ref.index;
|
|
3317
3539
|
var classes = useStyles$7(isSorting);
|
|
3318
3540
|
return /*#__PURE__*/React__default.createElement(IconButton, {
|
|
3319
|
-
className: classes.dragHandle
|
|
3320
|
-
"data-testid": "dragHandle-"
|
|
3541
|
+
className: "".concat(classes.dragHandle, " handle"),
|
|
3542
|
+
"data-testid": "dragHandle-".concat(index),
|
|
3321
3543
|
disableRipple: true,
|
|
3322
3544
|
disabled: isDisabled
|
|
3323
3545
|
}, /*#__PURE__*/React__default.createElement(DragIndicator, null));
|
|
3324
3546
|
};
|
|
3325
3547
|
|
|
3326
|
-
var
|
|
3548
|
+
var noop = function noop() {};
|
|
3549
|
+
|
|
3550
|
+
var emptyChangegroup = {
|
|
3327
3551
|
valid: '',
|
|
3328
3552
|
wind: '',
|
|
3329
3553
|
visibility: '',
|
|
@@ -3342,74 +3566,71 @@ var emptyRow = {
|
|
|
3342
3566
|
probability: null
|
|
3343
3567
|
};
|
|
3344
3568
|
|
|
3345
|
-
var TafForm = function TafForm(
|
|
3346
|
-
var
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
onFormAction = _c === void 0 ? function () {
|
|
3569
|
+
var TafForm = function TafForm(_ref) {
|
|
3570
|
+
var isDisabled = _ref.isDisabled,
|
|
3571
|
+
tafAction = _ref.tafAction,
|
|
3572
|
+
_ref$staticTAC = _ref.staticTAC,
|
|
3573
|
+
staticTAC = _ref$staticTAC === void 0 ? '' : _ref$staticTAC,
|
|
3574
|
+
_ref$onFormAction = _ref.onFormAction,
|
|
3575
|
+
onFormAction = _ref$onFormAction === void 0 ? function () {
|
|
3353
3576
|
return null;
|
|
3354
|
-
} :
|
|
3577
|
+
} : _ref$onFormAction;
|
|
3355
3578
|
var classes = useStyles$9();
|
|
3356
3579
|
var confirmDialog = useConfirmationDialog();
|
|
3357
3580
|
|
|
3358
|
-
var
|
|
3359
|
-
toggleIsDraft =
|
|
3360
|
-
DraftFieldHelper =
|
|
3581
|
+
var _useDraftFormHelpers = useDraftFormHelpers(),
|
|
3582
|
+
toggleIsDraft = _useDraftFormHelpers.toggleIsDraft,
|
|
3583
|
+
DraftFieldHelper = _useDraftFormHelpers.DraftFieldHelper;
|
|
3361
3584
|
|
|
3362
|
-
var
|
|
3363
|
-
|
|
3364
|
-
var isDisabled = mode === 'view';
|
|
3585
|
+
var _useApiContext = useApiContext(),
|
|
3586
|
+
api = _useApiContext.api;
|
|
3365
3587
|
|
|
3366
|
-
var
|
|
3367
|
-
|
|
3368
|
-
handleSubmit = _e.handleSubmit,
|
|
3369
|
-
watch = _e.watch,
|
|
3370
|
-
getValues = _e.getValues,
|
|
3371
|
-
errors = _e.errors,
|
|
3372
|
-
trigger = _e.trigger;
|
|
3588
|
+
var _useIsMounted = useIsMounted(),
|
|
3589
|
+
isMounted = _useIsMounted.isMounted;
|
|
3373
3590
|
|
|
3374
|
-
var
|
|
3591
|
+
var _useFormContext = useFormContext(),
|
|
3592
|
+
control = _useFormContext.control,
|
|
3593
|
+
handleSubmit = _useFormContext.handleSubmit,
|
|
3594
|
+
watch = _useFormContext.watch,
|
|
3595
|
+
trigger = _useFormContext.trigger,
|
|
3596
|
+
formState = _useFormContext.formState,
|
|
3597
|
+
getValues = _useFormContext.getValues;
|
|
3375
3598
|
|
|
3376
|
-
var
|
|
3377
|
-
|
|
3378
|
-
|
|
3599
|
+
var isFormDirty = formState.isDirty,
|
|
3600
|
+
errors = formState.errors;
|
|
3601
|
+
usePreventBrowserClose(isFormDirty && !isDisabled);
|
|
3602
|
+
var hiddenInputFields = ['baseTime', 'issueDate', 'type', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
|
|
3379
3603
|
|
|
3380
|
-
var
|
|
3381
|
-
|
|
3382
|
-
|
|
3604
|
+
var _React$useState = React__default.useState(watch()),
|
|
3605
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
3606
|
+
delayedFormValues = _React$useState2[0],
|
|
3607
|
+
setDelayedFormValues = _React$useState2[1];
|
|
3383
3608
|
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3609
|
+
var _useTACGenerator = useTACGenerator(convertTafValuesToObject(delayedFormValues), api.getTAC, staticTAC),
|
|
3610
|
+
_useTACGenerator2 = _slicedToArray(_useTACGenerator, 2),
|
|
3611
|
+
TAC = _useTACGenerator2[0],
|
|
3612
|
+
updateTAC = _useTACGenerator2[1];
|
|
3388
3613
|
|
|
3389
|
-
|
|
3614
|
+
var hasErrors = Object.keys(errors).length;
|
|
3390
3615
|
|
|
3391
3616
|
var onFormBlur = function onFormBlur() {
|
|
3392
3617
|
setDelayedFormValues(getValues());
|
|
3393
3618
|
};
|
|
3394
3619
|
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3400
|
-
return !isFormDirty ? setFormDirty(true) : null;
|
|
3401
|
-
};
|
|
3620
|
+
React__default.useEffect(function () {
|
|
3621
|
+
if (staticTAC === '' && isMounted.current && isFormDirty) {
|
|
3622
|
+
var newTAC = hasErrors ? null : convertTafValuesToObject(delayedFormValues);
|
|
3623
|
+
updateTAC(newTAC);
|
|
3624
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3402
3625
|
|
|
3403
|
-
|
|
3626
|
+
}, [delayedFormValues]);
|
|
3627
|
+
React__default.useEffect(function () {
|
|
3628
|
+
// prevent updating an error while typing
|
|
3629
|
+
if (!hasErrors && isFormDirty && document.activeElement.tagName !== 'INPUT') {
|
|
3630
|
+
updateTAC(convertTafValuesToObject(delayedFormValues));
|
|
3631
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3404
3632
|
|
|
3405
|
-
|
|
3406
|
-
control: control,
|
|
3407
|
-
name: 'changeGroups'
|
|
3408
|
-
}),
|
|
3409
|
-
fields = _j.fields,
|
|
3410
|
-
append = _j.append,
|
|
3411
|
-
remove = _j.remove,
|
|
3412
|
-
move = _j.move;
|
|
3633
|
+
}, [hasErrors]);
|
|
3413
3634
|
|
|
3414
3635
|
var onSubmit = function onSubmit(data) {
|
|
3415
3636
|
// eslint-disable-next-line no-console
|
|
@@ -3463,38 +3684,39 @@ var TafForm = function TafForm(_a) {
|
|
|
3463
3684
|
}
|
|
3464
3685
|
};
|
|
3465
3686
|
|
|
3466
|
-
var
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
append(group, false);
|
|
3475
|
-
});
|
|
3476
|
-
} else if (!isDisabled) {
|
|
3477
|
-
append(emptyRow, false);
|
|
3478
|
-
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3687
|
+
var _useFieldArray = useFieldArray({
|
|
3688
|
+
control: control,
|
|
3689
|
+
name: 'changeGroups'
|
|
3690
|
+
}),
|
|
3691
|
+
fields = _useFieldArray.fields,
|
|
3692
|
+
append = _useFieldArray.append,
|
|
3693
|
+
remove = _useFieldArray.remove,
|
|
3694
|
+
move = _useFieldArray.move;
|
|
3479
3695
|
|
|
3480
|
-
|
|
3696
|
+
var lastTotalFields = usePrevious(fields.length);
|
|
3481
3697
|
|
|
3482
|
-
var
|
|
3483
|
-
onChangeOrder =
|
|
3484
|
-
|
|
3485
|
-
|
|
3698
|
+
var _useDragOrder = useDragOrder(trigger, move, onFormBlur),
|
|
3699
|
+
onChangeOrder = _useDragOrder.onChangeOrder,
|
|
3700
|
+
onStartDrag = _useDragOrder.onStartDrag,
|
|
3701
|
+
activeDraggingIndex = _useDragOrder.activeDraggingIndex;
|
|
3486
3702
|
|
|
3487
3703
|
var onRemoverow = function onRemoverow(index) {
|
|
3488
3704
|
remove(index);
|
|
3489
|
-
var newList = fields.length > 1 ? fields.filter(function (_, fieldIndex) {
|
|
3490
|
-
return fieldIndex === index;
|
|
3491
|
-
}) : [];
|
|
3492
|
-
setSortedFields(newList);
|
|
3493
3705
|
};
|
|
3494
3706
|
|
|
3707
|
+
var onAddRow = function onAddRow() {
|
|
3708
|
+
append(emptyChangegroup, true);
|
|
3709
|
+
};
|
|
3710
|
+
|
|
3711
|
+
React__default.useEffect(function () {
|
|
3712
|
+
if (isFormDirty && fields.length !== lastTotalFields) {
|
|
3713
|
+
onFormBlur();
|
|
3714
|
+
trigger(); // trigger all field validation,
|
|
3715
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3716
|
+
|
|
3717
|
+
}, [fields.length, isFormDirty]);
|
|
3495
3718
|
return /*#__PURE__*/React__default.createElement("form", {
|
|
3496
3719
|
onSubmit: handleSubmit(onSubmit),
|
|
3497
|
-
onChange: onFormChange,
|
|
3498
3720
|
onBlur: onFormBlur
|
|
3499
3721
|
}, /*#__PURE__*/React__default.createElement(Typography, {
|
|
3500
3722
|
className: classes.tacTitle
|
|
@@ -3511,20 +3733,19 @@ var TafForm = function TafForm(_a) {
|
|
|
3511
3733
|
disabled: isDisabled
|
|
3512
3734
|
}), /*#__PURE__*/React__default.createElement(ReactSortable, {
|
|
3513
3735
|
tag: "div",
|
|
3514
|
-
list:
|
|
3515
|
-
setList:
|
|
3736
|
+
list: fields,
|
|
3737
|
+
setList: noop,
|
|
3516
3738
|
animation: 200,
|
|
3517
3739
|
onSort: onChangeOrder,
|
|
3518
3740
|
handle: ".handle",
|
|
3519
3741
|
direction: "vertical",
|
|
3520
3742
|
// hover props
|
|
3521
3743
|
forceFallback: true,
|
|
3522
|
-
onStart: function onStart() {
|
|
3744
|
+
onStart: function onStart(event) {
|
|
3745
|
+
onStartDrag(event);
|
|
3523
3746
|
Sortable.ghost.style.opacity = '1';
|
|
3524
3747
|
}
|
|
3525
|
-
},
|
|
3526
|
-
var chosen = _a.chosen;
|
|
3527
|
-
var item = fields[index];
|
|
3748
|
+
}, fields.map(function (item, index) {
|
|
3528
3749
|
return /*#__PURE__*/React__default.createElement(TafFormRow, {
|
|
3529
3750
|
field: item,
|
|
3530
3751
|
className: classes.formRow,
|
|
@@ -3535,8 +3756,8 @@ var TafForm = function TafForm(_a) {
|
|
|
3535
3756
|
onRemoveChangeGroup: onRemoverow,
|
|
3536
3757
|
isChangeGroup: true,
|
|
3537
3758
|
dragHandle: /*#__PURE__*/React__default.createElement(DragHandle, {
|
|
3538
|
-
isDisabled:
|
|
3539
|
-
isSorting:
|
|
3759
|
+
isDisabled: fields.length === 1 || isDisabled,
|
|
3760
|
+
isSorting: activeDraggingIndex === index,
|
|
3540
3761
|
index: index
|
|
3541
3762
|
})
|
|
3542
3763
|
});
|
|
@@ -3561,6 +3782,22 @@ var TafForm = function TafForm(_a) {
|
|
|
3561
3782
|
}), /*#__PURE__*/React__default.createElement(DraftFieldHelper, null));
|
|
3562
3783
|
};
|
|
3563
3784
|
|
|
3785
|
+
/* *
|
|
3786
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3787
|
+
* you may not use this file except in compliance with the License.
|
|
3788
|
+
* You may obtain a copy of the License at
|
|
3789
|
+
*
|
|
3790
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
3791
|
+
*
|
|
3792
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
3793
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
3794
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
3795
|
+
* See the License for the specific language governing permissions and
|
|
3796
|
+
* limitations under the License.
|
|
3797
|
+
*
|
|
3798
|
+
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
3799
|
+
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
3800
|
+
* */
|
|
3564
3801
|
var getMessageType = function getMessageType(taf, tafAction) {
|
|
3565
3802
|
if (tafAction === 'CORRECT') {
|
|
3566
3803
|
return 'COR';
|
|
@@ -3584,47 +3821,46 @@ var getAmendedCorrectedTafTimes = function getAmendedCorrectedTafTimes(taf, tafA
|
|
|
3584
3821
|
start: now,
|
|
3585
3822
|
end: taf.baseForecast.valid.end
|
|
3586
3823
|
};
|
|
3587
|
-
return
|
|
3824
|
+
return Object.assign(Object.assign({}, taf), {
|
|
3588
3825
|
previousValidDateStart: previousValidDateStart,
|
|
3589
3826
|
previousValidDateEnd: previousValidDateEnd,
|
|
3590
3827
|
validDateStart: now,
|
|
3591
|
-
baseForecast:
|
|
3828
|
+
baseForecast: Object.assign(Object.assign({}, taf.baseForecast), {
|
|
3592
3829
|
valid: validObj
|
|
3593
3830
|
})
|
|
3594
3831
|
});
|
|
3595
3832
|
}
|
|
3596
3833
|
|
|
3597
|
-
return
|
|
3834
|
+
return Object.assign(Object.assign({}, taf), {
|
|
3598
3835
|
previousValidDateStart: previousValidDateStart,
|
|
3599
3836
|
previousValidDateEnd: previousValidDateEnd
|
|
3600
3837
|
});
|
|
3601
3838
|
};
|
|
3602
3839
|
var prepareTafValues = function prepareTafValues(_taf, tafAction) {
|
|
3840
|
+
var addEmptyChangeGroup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
3603
3841
|
// If action is AMEND/CORRECT/DRAFT_AMEND/DRAFT_CORRECTION - add previous valid start and end
|
|
3604
3842
|
// If action is AMEND/DRAFT_AMEND - update validity start time to current time
|
|
3605
3843
|
var taf = tafAction === 'AMEND' || tafAction === 'DRAFT_AMEND' || tafAction === 'CORRECT' || tafAction === 'DRAFT_CORRECT' ? getAmendedCorrectedTafTimes(_taf, tafAction) : _taf;
|
|
3606
|
-
return
|
|
3844
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({}, taf), {
|
|
3607
3845
|
messageType: getMessageType(taf, tafAction),
|
|
3608
3846
|
baseForecast: formatFormValues(taf.baseForecast)
|
|
3609
3847
|
}), taf.changeGroups && {
|
|
3610
3848
|
changeGroups: taf.changeGroups.map(formatFormValues)
|
|
3849
|
+
}), addEmptyChangeGroup && {
|
|
3850
|
+
changeGroups: [emptyChangegroup]
|
|
3611
3851
|
});
|
|
3612
3852
|
};
|
|
3613
3853
|
|
|
3614
|
-
var TafFormWrapper = function TafFormWrapper(
|
|
3615
|
-
var tafFromBackend =
|
|
3616
|
-
mode =
|
|
3617
|
-
tafAction =
|
|
3618
|
-
|
|
3619
|
-
TAC =
|
|
3620
|
-
onFormAction =
|
|
3621
|
-
var taf = tafFromBackend.taf;
|
|
3622
|
-
|
|
3623
|
-
var
|
|
3624
|
-
_d = _c.changeGroups,
|
|
3625
|
-
changeGroups = _d === void 0 ? [] : _d,
|
|
3626
|
-
defaultValues = __rest(_c, ["changeGroups"]);
|
|
3627
|
-
|
|
3854
|
+
var TafFormWrapper = function TafFormWrapper(_ref) {
|
|
3855
|
+
var tafFromBackend = _ref.tafFromBackend,
|
|
3856
|
+
mode = _ref.mode,
|
|
3857
|
+
tafAction = _ref.tafAction,
|
|
3858
|
+
_ref$TAC = _ref.TAC,
|
|
3859
|
+
TAC = _ref$TAC === void 0 ? '' : _ref$TAC,
|
|
3860
|
+
onFormAction = _ref.onFormAction;
|
|
3861
|
+
var taf = tafFromBackend.taf;
|
|
3862
|
+
var isDisabled = mode === 'view';
|
|
3863
|
+
var defaultValues = prepareTafValues(taf, tafAction, !isDisabled && !taf.changeGroups);
|
|
3628
3864
|
var options = {
|
|
3629
3865
|
defaultValues: defaultValues,
|
|
3630
3866
|
mode: 'onTouched',
|
|
@@ -3634,8 +3870,7 @@ var TafFormWrapper = function TafFormWrapper(_a) {
|
|
|
3634
3870
|
return /*#__PURE__*/React__default.createElement(ReactHookFormProvider, {
|
|
3635
3871
|
options: options
|
|
3636
3872
|
}, /*#__PURE__*/React__default.createElement(TafForm, {
|
|
3637
|
-
|
|
3638
|
-
changeGroups: changeGroups,
|
|
3873
|
+
isDisabled: isDisabled,
|
|
3639
3874
|
tafAction: tafAction,
|
|
3640
3875
|
staticTAC: TAC,
|
|
3641
3876
|
onFormAction: onFormAction
|
|
@@ -3672,13 +3907,13 @@ var ContentDialog = function ContentDialog(_a) {
|
|
|
3672
3907
|
var titleComponent = _a.titleComponent,
|
|
3673
3908
|
children = _a.children;
|
|
3674
3909
|
_a.onClose;
|
|
3675
|
-
var
|
|
3676
|
-
alertBanner =
|
|
3910
|
+
var _a$alertBanner = _a.alertBanner,
|
|
3911
|
+
alertBanner = _a$alertBanner === void 0 ? null : _a$alertBanner,
|
|
3677
3912
|
onFormAction = _a.onFormAction,
|
|
3678
3913
|
other = __rest(_a, ["open", "toggleDialogStatus", "titleComponent", "children", "onClose", "alertBanner", "onFormAction"]);
|
|
3679
3914
|
|
|
3680
3915
|
var classes = useStyles$6();
|
|
3681
|
-
return /*#__PURE__*/React.createElement(Dialog,
|
|
3916
|
+
return /*#__PURE__*/React.createElement(Dialog, Object.assign({
|
|
3682
3917
|
"data-testid": "contentDialog",
|
|
3683
3918
|
open: open,
|
|
3684
3919
|
onClose: function onClose() {
|
|
@@ -3791,13 +4026,13 @@ var useStyles$5 = makeStyles({
|
|
|
3791
4026
|
}
|
|
3792
4027
|
});
|
|
3793
4028
|
|
|
3794
|
-
var TafListRow = function TafListRow(
|
|
3795
|
-
var taf =
|
|
3796
|
-
listType =
|
|
3797
|
-
|
|
3798
|
-
TAC =
|
|
3799
|
-
|
|
3800
|
-
showTac =
|
|
4029
|
+
var TafListRow = function TafListRow(_ref) {
|
|
4030
|
+
var taf = _ref.taf,
|
|
4031
|
+
listType = _ref.listType,
|
|
4032
|
+
_ref$TAC = _ref.TAC,
|
|
4033
|
+
TAC = _ref$TAC === void 0 ? '' : _ref$TAC,
|
|
4034
|
+
_ref$showTac = _ref.showTac,
|
|
4035
|
+
showTac = _ref$showTac === void 0 ? false : _ref$showTac;
|
|
3801
4036
|
var classes = useStyles$5();
|
|
3802
4037
|
var validTimeDate = moment.utc(taf.validDateStart).format('DD MMM');
|
|
3803
4038
|
var baseTime = moment.utc(taf.baseTime).format('HH:mm');
|
|
@@ -3950,16 +4185,19 @@ var getListType = function getListType(taf, locationSettings) {
|
|
|
3950
4185
|
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
3951
4186
|
* */
|
|
3952
4187
|
|
|
3953
|
-
var TafFormDialog = function TafFormDialog(
|
|
3954
|
-
var open =
|
|
3955
|
-
toggleFormDialog =
|
|
3956
|
-
tafFromBackend =
|
|
3957
|
-
children =
|
|
3958
|
-
|
|
3959
|
-
alertBanner =
|
|
3960
|
-
onFormAction =
|
|
4188
|
+
var TafFormDialog = function TafFormDialog(_ref) {
|
|
4189
|
+
var open = _ref.open,
|
|
4190
|
+
toggleFormDialog = _ref.toggleFormDialog,
|
|
4191
|
+
tafFromBackend = _ref.tafFromBackend,
|
|
4192
|
+
children = _ref.children,
|
|
4193
|
+
_ref$alertBanner = _ref.alertBanner,
|
|
4194
|
+
alertBanner = _ref$alertBanner === void 0 ? null : _ref$alertBanner,
|
|
4195
|
+
onFormAction = _ref.onFormAction;
|
|
3961
4196
|
var taf = tafFromBackend ? tafFromBackend.taf : null;
|
|
3962
|
-
|
|
4197
|
+
|
|
4198
|
+
var _useTafSettings = useTafSettings(tafConfig),
|
|
4199
|
+
locationSettings = _useTafSettings.locations;
|
|
4200
|
+
|
|
3963
4201
|
return /*#__PURE__*/React__default.createElement(ContentDialog, {
|
|
3964
4202
|
open: open,
|
|
3965
4203
|
toggleDialogStatus: toggleFormDialog,
|
|
@@ -3996,10 +4234,10 @@ var useStyles$4 = makeStyles({
|
|
|
3996
4234
|
}
|
|
3997
4235
|
});
|
|
3998
4236
|
|
|
3999
|
-
var TafListButtons = function TafListButtons(
|
|
4000
|
-
var uuid =
|
|
4001
|
-
canBe =
|
|
4002
|
-
onClickTafActionButton =
|
|
4237
|
+
var TafListButtons = function TafListButtons(_ref) {
|
|
4238
|
+
var uuid = _ref.uuid,
|
|
4239
|
+
canBe = _ref.canBe,
|
|
4240
|
+
onClickTafActionButton = _ref.onClickTafActionButton;
|
|
4003
4241
|
var classes = useStyles$4();
|
|
4004
4242
|
return !canBe.includes('CANCELLED') && !canBe.includes('CORRECTED') && !canBe.includes('AMENDED') ? null : /*#__PURE__*/React__default.createElement(Grid, {
|
|
4005
4243
|
container: true,
|
|
@@ -4063,19 +4301,22 @@ var fromStatusToAction = function fromStatusToAction(tafStatus) {
|
|
|
4063
4301
|
}
|
|
4064
4302
|
};
|
|
4065
4303
|
|
|
4066
|
-
var TafListAccordion = function TafListAccordion(
|
|
4067
|
-
var tafListItem =
|
|
4068
|
-
listType =
|
|
4069
|
-
|
|
4070
|
-
errorCancelTaf =
|
|
4071
|
-
onClickTafActionButton =
|
|
4304
|
+
var TafListAccordion = function TafListAccordion(_ref) {
|
|
4305
|
+
var tafListItem = _ref.tafListItem,
|
|
4306
|
+
listType = _ref.listType,
|
|
4307
|
+
_ref$errorCancelTaf = _ref.errorCancelTaf,
|
|
4308
|
+
errorCancelTaf = _ref$errorCancelTaf === void 0 ? [] : _ref$errorCancelTaf,
|
|
4309
|
+
onClickTafActionButton = _ref.onClickTafActionButton;
|
|
4072
4310
|
var classes = useStyles$3();
|
|
4073
4311
|
var status = tafListItem.taf.status;
|
|
4074
|
-
var api = useApiContext().api;
|
|
4075
4312
|
|
|
4076
|
-
var
|
|
4077
|
-
|
|
4078
|
-
|
|
4313
|
+
var _useApiContext = useApiContext(),
|
|
4314
|
+
api = _useApiContext.api;
|
|
4315
|
+
|
|
4316
|
+
var _useTACGenerator = useTACGenerator(tafListItem.taf, api.getTAC),
|
|
4317
|
+
_useTACGenerator2 = _slicedToArray(_useTACGenerator, 2),
|
|
4318
|
+
TAC = _useTACGenerator2[0],
|
|
4319
|
+
requestTAC = _useTACGenerator2[1];
|
|
4079
4320
|
|
|
4080
4321
|
React__default.useEffect(function () {
|
|
4081
4322
|
// only re-retrieve TAC if draft state
|
|
@@ -4085,7 +4326,7 @@ var TafListAccordion = function TafListAccordion(_a) {
|
|
|
4085
4326
|
|
|
4086
4327
|
}, [tafListItem.taf]);
|
|
4087
4328
|
var popOut = status === 'NEW' || status === 'DRAFT' || status === 'DRAFT_AMENDED' || status === 'DRAFT_CORRECTED';
|
|
4088
|
-
return /*#__PURE__*/React__default.createElement(Accordion,
|
|
4329
|
+
return /*#__PURE__*/React__default.createElement(Accordion, Object.assign({
|
|
4089
4330
|
"data-testid": "tafListItem",
|
|
4090
4331
|
className: classes.accordion
|
|
4091
4332
|
}, popOut ? {
|
|
@@ -4168,22 +4409,22 @@ var useStyles$2 = makeStyles({
|
|
|
4168
4409
|
}
|
|
4169
4410
|
});
|
|
4170
4411
|
|
|
4171
|
-
var TafListSection = function TafListSection(
|
|
4172
|
-
var tafList =
|
|
4173
|
-
title =
|
|
4174
|
-
listType =
|
|
4175
|
-
|
|
4176
|
-
errorCancelTaf =
|
|
4177
|
-
onClickTafActionButton =
|
|
4412
|
+
var TafListSection = function TafListSection(_ref) {
|
|
4413
|
+
var tafList = _ref.tafList,
|
|
4414
|
+
title = _ref.title,
|
|
4415
|
+
listType = _ref.listType,
|
|
4416
|
+
_ref$errorCancelTaf = _ref.errorCancelTaf,
|
|
4417
|
+
errorCancelTaf = _ref$errorCancelTaf === void 0 ? [] : _ref$errorCancelTaf,
|
|
4418
|
+
onClickTafActionButton = _ref.onClickTafActionButton;
|
|
4178
4419
|
var classes = useStyles$2();
|
|
4179
4420
|
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Typography, {
|
|
4180
4421
|
variant: "subtitle2",
|
|
4181
4422
|
className: classes.listHeaders
|
|
4182
4423
|
}, title), /*#__PURE__*/React__default.createElement("div", {
|
|
4183
|
-
"data-testid": "tafList"
|
|
4424
|
+
"data-testid": "tafList".concat(listType)
|
|
4184
4425
|
}, tafList.map(function (tafListItem) {
|
|
4185
4426
|
return /*#__PURE__*/React__default.createElement(TafListAccordion, {
|
|
4186
|
-
key: tafListItem.taf.uuid
|
|
4427
|
+
key: "".concat(tafListItem.taf.uuid, "-").concat(tafListItem.taf.status),
|
|
4187
4428
|
tafListItem: tafListItem,
|
|
4188
4429
|
listType: listType,
|
|
4189
4430
|
errorCancelTaf: errorCancelTaf,
|
|
@@ -4205,25 +4446,29 @@ var useStyles$1 = makeStyles({
|
|
|
4205
4446
|
}
|
|
4206
4447
|
});
|
|
4207
4448
|
|
|
4208
|
-
var TafList = function TafList(
|
|
4209
|
-
var
|
|
4210
|
-
|
|
4211
|
-
|
|
4212
|
-
|
|
4213
|
-
|
|
4214
|
-
|
|
4215
|
-
errorCancelTaf = _c === void 0 ? [] : _c,
|
|
4216
|
-
onClickTafActionButton = _a.onClickTafActionButton;
|
|
4449
|
+
var TafList = function TafList(_ref) {
|
|
4450
|
+
var tafList = _ref.tafList,
|
|
4451
|
+
isLoading = _ref.isLoading,
|
|
4452
|
+
error = _ref.error,
|
|
4453
|
+
_ref$errorCancelTaf = _ref.errorCancelTaf,
|
|
4454
|
+
errorCancelTaf = _ref$errorCancelTaf === void 0 ? [] : _ref$errorCancelTaf,
|
|
4455
|
+
onClickTafActionButton = _ref.onClickTafActionButton;
|
|
4217
4456
|
var classes = useStyles$1();
|
|
4218
|
-
|
|
4457
|
+
|
|
4458
|
+
var _useTafSettings = useTafSettings(tafConfig),
|
|
4459
|
+
locationSettings = _useTafSettings.locations;
|
|
4460
|
+
|
|
4219
4461
|
var upcomingTafs = [];
|
|
4220
4462
|
var currentTafs = [];
|
|
4221
4463
|
var expiredTafs = [];
|
|
4222
4464
|
|
|
4223
4465
|
if (tafList) {
|
|
4466
|
+
var _iterator = _createForOfIteratorHelper(tafList),
|
|
4467
|
+
_step;
|
|
4468
|
+
|
|
4224
4469
|
try {
|
|
4225
|
-
for (
|
|
4226
|
-
var taf =
|
|
4470
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
4471
|
+
var taf = _step.value;
|
|
4227
4472
|
var now = moment.utc();
|
|
4228
4473
|
var baseTime = moment.utc(taf.taf.baseTime);
|
|
4229
4474
|
var activityPeriod = locationSettings[taf.taf.location].activity_period;
|
|
@@ -4237,16 +4482,10 @@ var TafList = function TafList(_a) {
|
|
|
4237
4482
|
upcomingTafs.push(taf);
|
|
4238
4483
|
}
|
|
4239
4484
|
}
|
|
4240
|
-
} catch (
|
|
4241
|
-
|
|
4242
|
-
error: e_1_1
|
|
4243
|
-
};
|
|
4485
|
+
} catch (err) {
|
|
4486
|
+
_iterator.e(err);
|
|
4244
4487
|
} finally {
|
|
4245
|
-
|
|
4246
|
-
if (tafList_1_1 && !tafList_1_1.done && (_b = tafList_1["return"])) _b.call(tafList_1);
|
|
4247
|
-
} finally {
|
|
4248
|
-
if (e_1) throw e_1.error;
|
|
4249
|
-
}
|
|
4488
|
+
_iterator.f();
|
|
4250
4489
|
}
|
|
4251
4490
|
}
|
|
4252
4491
|
|
|
@@ -4321,14 +4560,13 @@ var Spinner = function Spinner() {
|
|
|
4321
4560
|
}));
|
|
4322
4561
|
};
|
|
4323
4562
|
|
|
4324
|
-
var useTimeoutCancelError = function useTimeoutCancelError(
|
|
4325
|
-
|
|
4326
|
-
pollingInterval = 10000;
|
|
4327
|
-
}
|
|
4563
|
+
var useTimeoutCancelError = function useTimeoutCancelError() {
|
|
4564
|
+
var pollingInterval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10000;
|
|
4328
4565
|
|
|
4329
|
-
var
|
|
4330
|
-
|
|
4331
|
-
|
|
4566
|
+
var _React$useState = React__default.useState([]),
|
|
4567
|
+
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
4568
|
+
errorCancelTaf = _React$useState2[0],
|
|
4569
|
+
setErrorCancelTaf = _React$useState2[1];
|
|
4332
4570
|
|
|
4333
4571
|
React__default.useEffect(function () {
|
|
4334
4572
|
var cancelErrorMessageHandler = errorCancelTaf.length > 0 ? setTimeout(function () {
|
|
@@ -4352,44 +4590,53 @@ var getSelectedTaf = function getSelectedTaf(selectedTafId, tafList) {
|
|
|
4352
4590
|
};
|
|
4353
4591
|
|
|
4354
4592
|
var TafWrapper = function TafWrapper() {
|
|
4355
|
-
var
|
|
4593
|
+
var _useApiContext = useApiContext(),
|
|
4594
|
+
api = _useApiContext.api;
|
|
4595
|
+
|
|
4356
4596
|
var confirmDialog = useConfirmationDialog();
|
|
4357
4597
|
|
|
4358
|
-
var
|
|
4359
|
-
|
|
4360
|
-
|
|
4598
|
+
var _React$useState3 = React__default.useState(false),
|
|
4599
|
+
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
4600
|
+
isTafDialogOpen = _React$useState4[0],
|
|
4601
|
+
setTafDialogOpen = _React$useState4[1];
|
|
4361
4602
|
|
|
4362
|
-
var
|
|
4363
|
-
|
|
4364
|
-
|
|
4603
|
+
var _React$useState5 = React__default.useState(null),
|
|
4604
|
+
_React$useState6 = _slicedToArray(_React$useState5, 2),
|
|
4605
|
+
selectedTafId = _React$useState6[0],
|
|
4606
|
+
setselectedTafId = _React$useState6[1];
|
|
4365
4607
|
|
|
4366
|
-
var
|
|
4367
|
-
|
|
4368
|
-
|
|
4608
|
+
var _React$useState7 = React__default.useState(null),
|
|
4609
|
+
_React$useState8 = _slicedToArray(_React$useState7, 2),
|
|
4610
|
+
tafDialogAction = _React$useState8[0],
|
|
4611
|
+
setTafDialogAction = _React$useState8[1];
|
|
4369
4612
|
|
|
4370
|
-
var
|
|
4371
|
-
|
|
4372
|
-
|
|
4613
|
+
var _React$useState9 = React__default.useState(false),
|
|
4614
|
+
_React$useState10 = _slicedToArray(_React$useState9, 2),
|
|
4615
|
+
errorPostMessage = _React$useState10[0],
|
|
4616
|
+
setErrorPostMessage = _React$useState10[1];
|
|
4373
4617
|
|
|
4374
|
-
var
|
|
4375
|
-
|
|
4376
|
-
|
|
4618
|
+
var _React$useState11 = React__default.useState(''),
|
|
4619
|
+
_React$useState12 = _slicedToArray(_React$useState11, 2),
|
|
4620
|
+
errorPostMessageText = _React$useState12[0],
|
|
4621
|
+
setErrorPostMessageText = _React$useState12[1];
|
|
4377
4622
|
|
|
4378
|
-
var
|
|
4379
|
-
|
|
4380
|
-
|
|
4623
|
+
var _React$useState13 = React__default.useState(false),
|
|
4624
|
+
_React$useState14 = _slicedToArray(_React$useState13, 2),
|
|
4625
|
+
showSpinner = _React$useState14[0],
|
|
4626
|
+
setSpinner = _React$useState14[1]; // clear error message for cancel after 10 seconds
|
|
4381
4627
|
|
|
4382
4628
|
|
|
4383
|
-
var
|
|
4384
|
-
|
|
4385
|
-
|
|
4629
|
+
var _useTimeoutCancelErro = useTimeoutCancelError(),
|
|
4630
|
+
_useTimeoutCancelErro2 = _slicedToArray(_useTimeoutCancelErro, 2),
|
|
4631
|
+
errorCancelTaf = _useTimeoutCancelErro2[0],
|
|
4632
|
+
setErrorCancelTaf = _useTimeoutCancelErro2[1]; // Retrieve list of tafs
|
|
4386
4633
|
|
|
4387
4634
|
|
|
4388
|
-
var
|
|
4389
|
-
errorList =
|
|
4390
|
-
isLoadingList =
|
|
4391
|
-
tafList =
|
|
4392
|
-
fetchNewTafList =
|
|
4635
|
+
var _useApi = useApi(api.getTafList),
|
|
4636
|
+
errorList = _useApi.error,
|
|
4637
|
+
isLoadingList = _useApi.isLoading,
|
|
4638
|
+
tafList = _useApi.result,
|
|
4639
|
+
fetchNewTafList = _useApi.fetchApiData;
|
|
4393
4640
|
|
|
4394
4641
|
var getNewTafList = function getNewTafList() {
|
|
4395
4642
|
fetchNewTafList({});
|
|
@@ -4420,7 +4667,9 @@ var TafWrapper = function TafWrapper() {
|
|
|
4420
4667
|
description: 'Are you sure you want to cancel this TAF?',
|
|
4421
4668
|
confirmLabel: 'Cancel'
|
|
4422
4669
|
}).then(function () {
|
|
4423
|
-
var
|
|
4670
|
+
var _getSelectedTaf = getSelectedTaf(tafUuid, tafList),
|
|
4671
|
+
taf = _getSelectedTaf.taf;
|
|
4672
|
+
|
|
4424
4673
|
postTaf({
|
|
4425
4674
|
taf: taf,
|
|
4426
4675
|
changeStatusTo: 'CANCELLED'
|
|
@@ -4436,59 +4685,49 @@ var TafWrapper = function TafWrapper() {
|
|
|
4436
4685
|
};
|
|
4437
4686
|
|
|
4438
4687
|
var postTaf = function postTaf(data) {
|
|
4439
|
-
return __awaiter(void 0, void 0, void 0, function () {
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
4448
|
-
|
|
4449
|
-
|
|
4450
|
-
|
|
4451
|
-
|
|
4452
|
-
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4460
|
-
|
|
4461
|
-
|
|
4462
|
-
|
|
4463
|
-
|
|
4464
|
-
|
|
4465
|
-
|
|
4466
|
-
|
|
4467
|
-
|
|
4468
|
-
|
|
4469
|
-
|
|
4470
|
-
|
|
4471
|
-
setErrorCancelTaf(__spreadArray(__spreadArray([], __read(errorCancelTaf)), [data.taf.uuid]));
|
|
4472
|
-
} else {
|
|
4473
|
-
setErrorPostMessage(true);
|
|
4474
|
-
|
|
4475
|
-
if (isAxiosError(error_1)) {
|
|
4476
|
-
setErrorPostMessageText(getAxiosErrorMessage(error_1));
|
|
4688
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
4689
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
4690
|
+
while (1) {
|
|
4691
|
+
switch (_context.prev = _context.next) {
|
|
4692
|
+
case 0:
|
|
4693
|
+
setSpinner(true);
|
|
4694
|
+
_context.prev = 1;
|
|
4695
|
+
_context.next = 4;
|
|
4696
|
+
return api.postTaf(data);
|
|
4697
|
+
|
|
4698
|
+
case 4:
|
|
4699
|
+
if (isTafDialogOpen) toggleTafDialog();
|
|
4700
|
+
setSpinner(false); // fetch new taflist
|
|
4701
|
+
|
|
4702
|
+
getNewTafList(); // If a post has succeeded remove error message
|
|
4703
|
+
|
|
4704
|
+
setErrorCancelTaf([]);
|
|
4705
|
+
_context.next = 14;
|
|
4706
|
+
break;
|
|
4707
|
+
|
|
4708
|
+
case 10:
|
|
4709
|
+
_context.prev = 10;
|
|
4710
|
+
_context.t0 = _context["catch"](1);
|
|
4711
|
+
|
|
4712
|
+
if (data.changeStatusTo === 'CANCELLED') {
|
|
4713
|
+
setErrorCancelTaf([].concat(_toConsumableArray(errorCancelTaf), [data.taf.uuid]));
|
|
4714
|
+
} else {
|
|
4715
|
+
setErrorPostMessage(true);
|
|
4716
|
+
|
|
4717
|
+
if (isAxiosError(_context.t0)) {
|
|
4718
|
+
setErrorPostMessageText(getAxiosErrorMessage(_context.t0));
|
|
4719
|
+
}
|
|
4477
4720
|
}
|
|
4478
|
-
}
|
|
4479
4721
|
|
|
4480
|
-
|
|
4481
|
-
return [3
|
|
4482
|
-
/*break*/
|
|
4483
|
-
, 4];
|
|
4722
|
+
setSpinner(false);
|
|
4484
4723
|
|
|
4485
|
-
|
|
4486
|
-
|
|
4487
|
-
|
|
4488
|
-
|
|
4724
|
+
case 14:
|
|
4725
|
+
case "end":
|
|
4726
|
+
return _context.stop();
|
|
4727
|
+
}
|
|
4489
4728
|
}
|
|
4490
|
-
});
|
|
4491
|
-
});
|
|
4729
|
+
}, _callee, null, [[1, 10]]);
|
|
4730
|
+
}));
|
|
4492
4731
|
};
|
|
4493
4732
|
|
|
4494
4733
|
var fromActionToStatus = function fromActionToStatus(tafAction) {
|
|
@@ -4584,18 +4823,34 @@ var ConfirmationWrapper = function ConfirmationWrapper() {
|
|
|
4584
4823
|
return /*#__PURE__*/React__default.createElement(ConfirmationServiceProvider, null, /*#__PURE__*/React__default.createElement(TafWrapper, null));
|
|
4585
4824
|
};
|
|
4586
4825
|
|
|
4587
|
-
|
|
4588
|
-
|
|
4826
|
+
/* *
|
|
4827
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
4828
|
+
* you may not use this file except in compliance with the License.
|
|
4829
|
+
* You may obtain a copy of the License at
|
|
4830
|
+
*
|
|
4831
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
4832
|
+
*
|
|
4833
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
4834
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
4835
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
4836
|
+
* See the License for the specific language governing permissions and
|
|
4837
|
+
* limitations under the License.
|
|
4838
|
+
*
|
|
4839
|
+
* Copyright 2021 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
4840
|
+
* Copyright 2021 - Finnish Meteorological Institute (FMI)
|
|
4841
|
+
* */
|
|
4842
|
+
var createApi = function createApi(url, appUrl, auth, setAuth, authTokenUrl, authClientId) {
|
|
4843
|
+
var axiosInstance = createApiInstance(url, appUrl, auth, setAuth, authTokenUrl, authClientId);
|
|
4589
4844
|
return {
|
|
4590
4845
|
// api data
|
|
4591
4846
|
getTafList: function getTafList() {
|
|
4592
4847
|
return axiosInstance.get('/taflist');
|
|
4593
4848
|
},
|
|
4594
4849
|
postTaf: function postTaf(formData) {
|
|
4595
|
-
return axiosInstance.post('/taf',
|
|
4850
|
+
return axiosInstance.post('/taf', Object.assign({}, formData));
|
|
4596
4851
|
},
|
|
4597
4852
|
getTAC: function getTAC(tafData) {
|
|
4598
|
-
return axiosInstance.post('/taf2tac',
|
|
4853
|
+
return axiosInstance.post('/taf2tac', Object.assign({}, tafData));
|
|
4599
4854
|
}
|
|
4600
4855
|
};
|
|
4601
4856
|
};
|