@opengeoweb/taf 2.12.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.umd.js CHANGED
@@ -1,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@mui/material'), require('react-hook-form'), require('react-sortablejs'), require('@opengeoweb/form-fields'), require('@opengeoweb/shared'), require('lodash'), require('moment'), require('@opengeoweb/theme'), require('@mui/styles/makeStyles'), require('react-dom'), require('@opengeoweb/api'), require('@mui/material/LinearProgress'), require('@mui/material/Box')) :
3
- typeof define === 'function' && define.amd ? define(['exports', 'react', '@mui/material', 'react-hook-form', 'react-sortablejs', '@opengeoweb/form-fields', '@opengeoweb/shared', 'lodash', 'moment', '@opengeoweb/theme', '@mui/styles/makeStyles', 'react-dom', '@opengeoweb/api', '@mui/material/LinearProgress', '@mui/material/Box'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Taf = {}, global.React, global.material, global.reactHookForm, global.reactSortablejs, global.formFields, global.shared, global.lodash, global.moment, global.theme, global.makeStyles, global.ReactDOM, global.api, global.LinearProgress, global.Box));
5
- })(this, (function (exports, React, material, reactHookForm, reactSortablejs, formFields, shared, lodash, moment, theme, makeStyles, ReactDOM, api, LinearProgress, Box) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('@mui/material'), require('react-hook-form'), require('react-sortablejs'), require('lodash'), require('@opengeoweb/authentication'), require('@opengeoweb/form-fields'), require('@opengeoweb/shared'), require('moment'), require('@opengeoweb/theme'), require('@mui/styles/makeStyles'), require('react-dom'), require('@opengeoweb/api'), require('@mui/material/LinearProgress'), require('@mui/material/Box')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'react', '@mui/material', 'react-hook-form', 'react-sortablejs', 'lodash', '@opengeoweb/authentication', '@opengeoweb/form-fields', '@opengeoweb/shared', 'moment', '@opengeoweb/theme', '@mui/styles/makeStyles', 'react-dom', '@opengeoweb/api', '@mui/material/LinearProgress', '@mui/material/Box'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Taf = {}, global.React, global.material, global.reactHookForm, global.reactSortablejs, global.lodash, global.authentication, global.formFields, global.shared, global.moment, global.theme, global.makeStyles, global.ReactDOM, global.api, global.LinearProgress, global.Box));
5
+ })(this, (function (exports, React, material, reactHookForm, reactSortablejs, lodash, authentication, formFields, shared, moment, theme, makeStyles, ReactDOM, api, LinearProgress, Box) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -3825,7 +3825,12 @@
3825
3825
  fontSize: '4rem'
3826
3826
  },
3827
3827
  "data-testid": "zeroIssuesImage"
3828
- }, /*#__PURE__*/React__namespace.createElement(theme.ThumbsUp, null)), errorList.length > 0 && errorList.map(function (error, index) {
3828
+ }, /*#__PURE__*/React__namespace.createElement(theme.ThumbsUp, {
3829
+ sx: {
3830
+ height: '69px',
3831
+ width: '58px'
3832
+ }
3833
+ })), errorList.length > 0 && errorList.map(function (error, index) {
3829
3834
  return /*#__PURE__*/React__namespace.createElement(material.Typography // eslint-disable-next-line react/no-array-index-key
3830
3835
  , {
3831
3836
  // eslint-disable-next-line react/no-array-index-key
@@ -3909,9 +3914,59 @@
3909
3914
  }, children);
3910
3915
  };
3911
3916
 
3917
+ var styles = {
3918
+ label: {
3919
+ color: 'geowebColors.buttons.tertiary.default.color',
3920
+ opacity: 1,
3921
+ fontSize: '12px',
3922
+ fontWeight: 500
3923
+ }
3924
+ };
3925
+
3926
+ var SwitchButton = function SwitchButton(props) {
3927
+ return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3928
+ title: "Switch mode"
3929
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(material.FormLabel, {
3930
+ sx: styles.label
3931
+ }, "Viewer"), /*#__PURE__*/React__namespace.createElement(material.Switch, __assign({
3932
+ "data-testid": "switchMode"
3933
+ }, props)), /*#__PURE__*/React__namespace.createElement(material.FormLabel, {
3934
+ sx: styles.label
3935
+ }, "Editor")));
3936
+ };
3937
+
3938
+ /* *
3939
+ * Licensed under the Apache License, Version 2.0 (the "License");
3940
+ * you may not use this file except in compliance with the License.
3941
+ * You may obtain a copy of the License at
3942
+ *
3943
+ * http://www.apache.org/licenses/LICENSE-2.0
3944
+ *
3945
+ * Unless required by applicable law or agreed to in writing, software
3946
+ * distributed under the License is distributed on an "AS IS" BASIS,
3947
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3948
+ * See the License for the specific language governing permissions and
3949
+ * limitations under the License.
3950
+ *
3951
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3952
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
3953
+ * */
3954
+
3955
+ var TafAvatar = function TafAvatar(_a) {
3956
+ var editor = _a.editor,
3957
+ _b = _a.tooltipPlacement,
3958
+ tooltipPlacement = _b === void 0 ? 'bottom' : _b;
3959
+ return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3960
+ title: "Editor: " + editor,
3961
+ placement: tooltipPlacement
3962
+ }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(shared.Avatar, {
3963
+ size: "small"
3964
+ }, shared.getInitials(editor))));
3965
+ };
3966
+
3912
3967
  var noop = function noop() {};
3913
3968
 
3914
- var TafForm = function TafForm(_a) {
3969
+ var TafForm = /*#__PURE__*/React__default["default"].memo(function (_a) {
3915
3970
  var tafFromBackend = _a.tafFromBackend,
3916
3971
  _b = _a.onFormAction,
3917
3972
  onFormAction = _b === void 0 ? function () {
@@ -3928,43 +3983,50 @@
3928
3983
  _f = _a.setIsDisabled,
3929
3984
  setIsDisabled = _f === void 0 ? function () {
3930
3985
  return null;
3931
- } : _f;
3932
- var originalTaf = tafFromBackend.taf;
3986
+ } : _f,
3987
+ _g = _a.onSwitchEditor,
3988
+ onSwitchEditor = _g === void 0 ? function () {
3989
+ return null;
3990
+ } : _g;
3991
+ var originalTaf = tafFromBackend.taf,
3992
+ editor = tafFromBackend.editor;
3993
+ var auth = authentication.useAuthenticationContext().auth;
3994
+ var isEditor = editor === (auth === null || auth === void 0 ? void 0 : auth.username) || false;
3933
3995
  var isDefaultDisabled = getIsFormDefaultDisabled(tafFromBackend.taf.status);
3934
3996
  var confirmDialog = shared.useConfirmationDialog();
3935
3997
 
3936
- var _g = shared.useDraftFormHelpers(true),
3937
- toggleIsDraft = _g.toggleIsDraft,
3938
- DraftFieldHelper = _g.DraftFieldHelper;
3998
+ var _h = shared.useDraftFormHelpers(true),
3999
+ toggleIsDraft = _h.toggleIsDraft,
4000
+ DraftFieldHelper = _h.DraftFieldHelper;
3939
4001
 
3940
- var _h = useTafModuleContext(),
3941
- registerValidateForm = _h.registerValidateForm,
3942
- tafAction = _h.tafAction,
3943
- setIsFormDirty = _h.setIsFormDirty,
3944
- setTafAction = _h.setTafAction,
3945
- TAC = _h.TAC,
3946
- updateTAC = _h.updateTAC,
3947
- setTAC = _h.setTAC;
4002
+ var _j = useTafModuleContext(),
4003
+ registerValidateForm = _j.registerValidateForm,
4004
+ tafAction = _j.tafAction,
4005
+ setIsFormDirty = _j.setIsFormDirty,
4006
+ setTafAction = _j.setTafAction,
4007
+ TAC = _j.TAC,
4008
+ updateTAC = _j.updateTAC,
4009
+ setTAC = _j.setTAC;
3948
4010
 
3949
4011
  var isMounted = shared.useIsMounted().isMounted;
3950
4012
 
3951
- var _j = reactHookForm.useFormContext(),
3952
- control = _j.control,
3953
- handleSubmit = _j.handleSubmit,
3954
- trigger = _j.trigger,
3955
- formState = _j.formState,
3956
- getValues = _j.getValues,
3957
- setValue = _j.setValue,
3958
- reset = _j.reset;
4013
+ var _k = reactHookForm.useFormContext(),
4014
+ control = _k.control,
4015
+ handleSubmit = _k.handleSubmit,
4016
+ trigger = _k.trigger,
4017
+ formState = _k.formState,
4018
+ getValues = _k.getValues,
4019
+ setValue = _k.setValue,
4020
+ reset = _k.reset;
3959
4021
 
3960
4022
  var isFormDirty = formState.isDirty,
3961
4023
  errors = formState.errors;
3962
4024
  shared.usePreventBrowserClose(isFormDirty && !isDisabled);
3963
4025
  var hiddenInputFields = ['baseTime', 'issueDate', 'type', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
3964
4026
 
3965
- var _k = __read(React__default["default"].useState(getValues()), 2),
3966
- delayedFormValues = _k[0],
3967
- setDelayedFormValues = _k[1];
4027
+ var _l = __read(React__default["default"].useState(getValues()), 2),
4028
+ delayedFormValues = _l[0],
4029
+ setDelayedFormValues = _l[1];
3968
4030
 
3969
4031
  var hasErrors = Object.keys(errors).length;
3970
4032
 
@@ -4036,6 +4098,92 @@
4036
4098
  setTafAction(action);
4037
4099
  };
4038
4100
 
4101
+ var setIsEditor = function setIsEditor(checked) {
4102
+ return __awaiter(void 0, void 0, void 0, function () {
4103
+ var editor, didSucceed;
4104
+ return __generator(this, function (_a) {
4105
+ switch (_a.label) {
4106
+ case 0:
4107
+ editor = checked ? auth === null || auth === void 0 ? void 0 : auth.username : '';
4108
+
4109
+ if (editor === tafFromBackend.editor) {
4110
+ // do nothing, correct editor is already set
4111
+ return [2
4112
+ /*return*/
4113
+ , true];
4114
+ }
4115
+
4116
+ if (!(tafFromBackend.editor !== '' && tafFromBackend.editor !== null && tafFromBackend.editor !== (auth === null || auth === void 0 ? void 0 : auth.username))) return [3
4117
+ /*break*/
4118
+ , 2];
4119
+ return [4
4120
+ /*yield*/
4121
+ , confirmDialog({
4122
+ title: 'Switch to editor mode',
4123
+ description: 'This TAF is already in edit mode and important information could get lost in the switching process.',
4124
+ confirmLabel: 'Edit mode'
4125
+ })];
4126
+
4127
+ case 1:
4128
+ _a.sent();
4129
+
4130
+ _a.label = 2;
4131
+
4132
+ case 2:
4133
+ return [4
4134
+ /*yield*/
4135
+ , onSwitchEditor(__assign(__assign({}, tafFromBackend), {
4136
+ editor: editor
4137
+ }))];
4138
+
4139
+ case 3:
4140
+ didSucceed = _a.sent();
4141
+ return [2
4142
+ /*return*/
4143
+ , didSucceed];
4144
+ }
4145
+ });
4146
+ });
4147
+ };
4148
+
4149
+ var onSwitchMode = function onSwitchMode(event) {
4150
+ var checked = event.target.checked;
4151
+
4152
+ if (!checked && isFormDirty) {
4153
+ confirmDialog({
4154
+ title: 'Whoops',
4155
+ description: 'Are you sure you want to switch to viewer mode? Your unsaved changes will be lost.',
4156
+ confirmLabel: 'Switch mode'
4157
+ }).then(function () {
4158
+ return __awaiter(void 0, void 0, void 0, function () {
4159
+ var didSucceed;
4160
+ return __generator(this, function (_a) {
4161
+ switch (_a.label) {
4162
+ case 0:
4163
+ return [4
4164
+ /*yield*/
4165
+ , setIsEditor(checked)];
4166
+
4167
+ case 1:
4168
+ didSucceed = _a.sent();
4169
+
4170
+ if (didSucceed) {
4171
+ resetForm(undefined, isDefaultDisabled);
4172
+ resetTAC();
4173
+ }
4174
+
4175
+ return [2
4176
+ /*return*/
4177
+ ];
4178
+ }
4179
+ });
4180
+ });
4181
+ });
4182
+ } else {
4183
+ setIsEditor(checked);
4184
+ }
4185
+ };
4186
+
4039
4187
  var onTafEditModeButtonPress = function onTafEditModeButtonPress(action) {
4040
4188
  switch (action) {
4041
4189
  case 'DRAFT':
@@ -4109,7 +4257,23 @@
4109
4257
  switch (action) {
4110
4258
  case 'CANCEL':
4111
4259
  showConfirmDialog(action).then(function () {
4112
- onFormAction(action, convertTafValuesToObject(prepareTafValues(tafFromBackend.taf, action)));
4260
+ return __awaiter(void 0, void 0, void 0, function () {
4261
+ return __generator(this, function (_a) {
4262
+ switch (_a.label) {
4263
+ case 0:
4264
+ return [4
4265
+ /*yield*/
4266
+ , onFormAction(action, convertTafValuesToObject(prepareTafValues(tafFromBackend.taf, action)))];
4267
+
4268
+ case 1:
4269
+ _a.sent();
4270
+
4271
+ return [2
4272
+ /*return*/
4273
+ ];
4274
+ }
4275
+ });
4276
+ });
4113
4277
  });
4114
4278
  break;
4115
4279
 
@@ -4119,19 +4283,19 @@
4119
4283
  }
4120
4284
  };
4121
4285
 
4122
- var _l = reactHookForm.useFieldArray({
4286
+ var _m = reactHookForm.useFieldArray({
4123
4287
  control: control,
4124
4288
  name: 'changeGroups'
4125
4289
  }),
4126
- fields = _l.fields,
4127
- insert = _l.insert,
4128
- remove = _l.remove,
4129
- move = _l.move;
4290
+ fields = _m.fields,
4291
+ insert = _m.insert,
4292
+ remove = _m.remove,
4293
+ move = _m.move;
4130
4294
 
4131
- var _m = useDragOrder(trigger, move, onFormBlur),
4132
- onChangeOrder = _m.onChangeOrder,
4133
- onStartDrag = _m.onStartDrag,
4134
- activeDraggingIndex = _m.activeDraggingIndex;
4295
+ var _o = useDragOrder(trigger, move, onFormBlur),
4296
+ onChangeOrder = _o.onChangeOrder,
4297
+ onStartDrag = _o.onStartDrag,
4298
+ activeDraggingIndex = _o.activeDraggingIndex;
4135
4299
 
4136
4300
  var onRemoverow = function onRemoverow(index) {
4137
4301
  confirmDialog({
@@ -4212,12 +4376,12 @@
4212
4376
  });
4213
4377
  };
4214
4378
 
4215
- var _o = __read(React__default["default"].useState(false), 2),
4216
- shouldValidate = _o[0],
4217
- setShouldValidate = _o[1];
4379
+ var _p = __read(React__default["default"].useState(false), 2),
4380
+ shouldValidate = _p[0],
4381
+ setShouldValidate = _p[1];
4218
4382
 
4219
4383
  React__default["default"].useEffect(function () {
4220
- setIsDisabled(isDefaultDisabled);
4384
+ setIsDisabled(!isEditor || isDefaultDisabled);
4221
4385
  var defaultValues = prepareTafValues(tafFromBackend.taf, undefined, !isDefaultDisabled && !tafFromBackend.taf.changeGroups); // set initial form values
4222
4386
 
4223
4387
  reset(defaultValues); // set validate flag to validate after the values have been set
@@ -4252,9 +4416,13 @@
4252
4416
 
4253
4417
  reset(newValues); // eslint-disable-next-line react-hooks/exhaustive-deps
4254
4418
  }, [tafFromBackend]);
4419
+ React__default["default"].useEffect(function () {
4420
+ // update disabled state when editor changed
4421
+ setIsDisabled(!isEditor || isDefaultDisabled); // eslint-disable-next-line react-hooks/exhaustive-deps
4422
+ }, [editor]);
4255
4423
  React__default["default"].useEffect(function () {
4256
4424
  if (shouldValidate && !isDisabled) {
4257
- // trigger validation on all changegroup validity times after initial load since they could be outside the new validity period
4425
+ // trigger validation on all changegroup validity times after form is enabled since they could be outside the new validity period
4258
4426
  var _a = tafFromBackend.taf.changeGroups,
4259
4427
  changeGroups = _a === void 0 ? [] : _a;
4260
4428
  var validFields = changeGroups.map(function (_field, index) {
@@ -4263,8 +4431,33 @@
4263
4431
  trigger(validFields);
4264
4432
  } // eslint-disable-next-line react-hooks/exhaustive-deps
4265
4433
 
4266
- }, [shouldValidate]);
4267
- return /*#__PURE__*/React__default["default"].createElement("form", {
4434
+ }, [shouldValidate, isDisabled]);
4435
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(material.Box, {
4436
+ sx: {
4437
+ display: 'flex',
4438
+ flexDirection: 'row',
4439
+ alignItems: 'center',
4440
+ position: 'absolute',
4441
+ top: {
4442
+ xs: '20px',
4443
+ sm: '0px'
4444
+ },
4445
+ right: {
4446
+ xs: 'calc(50% - 70px)',
4447
+ sm: '8px'
4448
+ }
4449
+ }
4450
+ }, /*#__PURE__*/React__default["default"].createElement(SwitchButton, {
4451
+ checked: isEditor,
4452
+ onChange: onSwitchMode
4453
+ }), /*#__PURE__*/React__default["default"].createElement(material.Box, {
4454
+ sx: {
4455
+ width: '16px',
4456
+ marginLeft: 1
4457
+ }
4458
+ }, editor && /*#__PURE__*/React__default["default"].createElement(TafAvatar, {
4459
+ editor: editor
4460
+ }))), /*#__PURE__*/React__default["default"].createElement("form", {
4268
4461
  "data-testid": "taf-form",
4269
4462
  onSubmit: handleSubmit(onSubmit),
4270
4463
  onBlur: onFormBlur
@@ -4330,7 +4523,7 @@
4330
4523
  index: index
4331
4524
  })
4332
4525
  });
4333
- })), !isDisabled && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4526
+ })), !isDisabled && isEditor && /*#__PURE__*/React__default["default"].createElement(material.Grid, {
4334
4527
  container: true,
4335
4528
  justifyContent: "space-between",
4336
4529
  alignItems: "center",
@@ -4344,7 +4537,7 @@
4344
4537
  errors: errors,
4345
4538
  isIssuesPaneOpen: isIssuesPaneOpen,
4346
4539
  setIsIssuesPaneOpen: setIsIssuesPaneOpen
4347
- }))), /*#__PURE__*/React__default["default"].createElement(TafFormButtons, {
4540
+ }))), isEditor && /*#__PURE__*/React__default["default"].createElement(TafFormButtons, {
4348
4541
  isFormDisabled: isDisabled,
4349
4542
  tafAction: tafAction,
4350
4543
  canBe: tafFromBackend.canbe,
@@ -4355,8 +4548,12 @@
4355
4548
  name: field,
4356
4549
  key: field
4357
4550
  });
4358
- }), /*#__PURE__*/React__default["default"].createElement(DraftFieldHelper, null));
4359
- };
4551
+ }), /*#__PURE__*/React__default["default"].createElement(DraftFieldHelper, null)));
4552
+ }, function (prevProps, nextProps) {
4553
+ // prevent re-render
4554
+ return !nextProps.isDisabled && prevProps.tafFromBackend !== nextProps.tafFromBackend && // if editor changed it should rerender
4555
+ prevProps.tafFromBackend.editor === nextProps.tafFromBackend.editor;
4556
+ });
4360
4557
 
4361
4558
  /* *
4362
4559
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -4599,7 +4796,6 @@
4599
4796
  title: "Expired"
4600
4797
  }, /*#__PURE__*/React__namespace.createElement(theme.Clock, {
4601
4798
  "data-testid": "status-expired",
4602
- fontSize: "small",
4603
4799
  sx: {
4604
4800
  transform: 'scaleX(-1)',
4605
4801
  color: 'geowebColors.buttons.tertiary.disabled.color'
@@ -4612,7 +4808,6 @@
4612
4808
  title: "Cancelled"
4613
4809
  }, /*#__PURE__*/React__namespace.createElement(theme.Cancel, {
4614
4810
  "data-testid": "status-cancelled",
4615
- fontSize: "small",
4616
4811
  sx: {
4617
4812
  color: 'geowebColors.captions.captionError.rgba'
4618
4813
  }
@@ -4624,7 +4819,6 @@
4624
4819
  title: "Draft"
4625
4820
  }, /*#__PURE__*/React__namespace.createElement(theme.Edit, {
4626
4821
  "data-testid": "status-draft",
4627
- fontSize: "small",
4628
4822
  sx: {
4629
4823
  color: 'geowebColors.buttons.tertiary.default.color'
4630
4824
  }
@@ -4635,7 +4829,6 @@
4635
4829
  title: "Active"
4636
4830
  }, /*#__PURE__*/React__namespace.createElement(theme.Success, {
4637
4831
  "data-testid": "status-active",
4638
- fontSize: "small",
4639
4832
  sx: {
4640
4833
  color: 'geowebColors.functional.success'
4641
4834
  }
@@ -4643,7 +4836,6 @@
4643
4836
  title: "Upcoming"
4644
4837
  }, /*#__PURE__*/React__namespace.createElement(theme.Clock, {
4645
4838
  "data-testid": "status-upcoming",
4646
- fontSize: "small",
4647
4839
  sx: {
4648
4840
  color: 'geowebColors.functional.success'
4649
4841
  }
@@ -4967,7 +5159,7 @@
4967
5159
  },
4968
5160
  position: 'absolute',
4969
5161
  right: '8px',
4970
- top: '30px'
5162
+ top: '48px'
4971
5163
  }
4972
5164
  }, /*#__PURE__*/React__namespace.createElement(theme.ListItem, null)), /*#__PURE__*/React__namespace.createElement(material.Dialog, {
4973
5165
  open: isOpen,
@@ -5080,7 +5272,8 @@
5080
5272
  paddingTop: '32px'
5081
5273
  }
5082
5274
  }, tafList.map(function (_a, index) {
5083
- var taf = _a.taf;
5275
+ var taf = _a.taf,
5276
+ editor = _a.editor;
5084
5277
  return /*#__PURE__*/React__namespace.createElement(material.MenuItem, {
5085
5278
  key: taf.uuid,
5086
5279
  selected: index === activeIndex,
@@ -5105,8 +5298,18 @@
5105
5298
  onClick: function onClick() {
5106
5299
  return onChangeTab(index);
5107
5300
  }
5108
- }, /*#__PURE__*/React__namespace.createElement(Box__default["default"], {
5301
+ }, editor && /*#__PURE__*/React__namespace.createElement(Box__default["default"], {
5302
+ sx: {
5303
+ position: 'absolute',
5304
+ top: '4px',
5305
+ left: '8px'
5306
+ }
5307
+ }, /*#__PURE__*/React__namespace.createElement(TafAvatar, {
5308
+ editor: editor,
5309
+ tooltipPlacement: "right"
5310
+ })), /*#__PURE__*/React__namespace.createElement(Box__default["default"], {
5109
5311
  component: "span",
5312
+ "data-testid": "taf-location",
5110
5313
  sx: {
5111
5314
  fontSize: '12px',
5112
5315
  fontWeight: '500',
@@ -5116,9 +5319,9 @@
5116
5319
  component: "span",
5117
5320
  sx: {
5118
5321
  position: 'absolute',
5119
- bottom: '1px',
5120
- width: '20px',
5121
- height: '20px'
5322
+ bottom: '-1px',
5323
+ width: '24px',
5324
+ height: '24px'
5122
5325
  }
5123
5326
  }, /*#__PURE__*/React__namespace.createElement(StatusIcon, {
5124
5327
  timeSlot: timeSlot,
@@ -5165,13 +5368,15 @@
5165
5368
  };
5166
5369
 
5167
5370
  var parseErrorMessage = function parseErrorMessage(error, params) {
5371
+ var message = shared.getErrorMessage(error);
5168
5372
  return params.changeStatusTo === 'CANCELLED' ? {
5169
5373
  type: 'CANCELLED',
5170
- title: 'Cancelling this TAF failed, please try again'
5374
+ title: 'Cancelling this TAF failed, please try again',
5375
+ message: message
5171
5376
  } : {
5172
5377
  type: 'SERVER',
5173
5378
  title: 'An error has occurred while saving, please try again',
5174
- message: shared.isAxiosError(error) ? shared.getAxiosErrorMessage(error) : error.message
5379
+ message: message
5175
5380
  };
5176
5381
  };
5177
5382
 
@@ -5256,18 +5461,22 @@
5256
5461
  postTaf = _c === void 0 ? function () {
5257
5462
  return null;
5258
5463
  } : _c,
5259
- _d = _a.isIssuesPaneOpen,
5260
- isIssuesPaneOpen = _d === void 0 ? false : _d,
5261
- _e = _a.setIsIssuesPaneOpen,
5262
- setIsIssuesPaneOpen = _e === void 0 ? function () {
5464
+ _d = _a.patchTaf,
5465
+ patchTaf = _d === void 0 ? function () {
5263
5466
  return null;
5264
- } : _e,
5265
- _f = _a.isFormDisabled,
5266
- isFormDisabled = _f === void 0 ? false : _f,
5267
- _g = _a.setIsFormDisabled,
5268
- setIsFormDisabled = _g === void 0 ? function () {
5467
+ } : _d,
5468
+ _e = _a.isIssuesPaneOpen,
5469
+ isIssuesPaneOpen = _e === void 0 ? false : _e,
5470
+ _f = _a.setIsIssuesPaneOpen,
5471
+ setIsIssuesPaneOpen = _f === void 0 ? function () {
5269
5472
  return null;
5270
- } : _g,
5473
+ } : _f,
5474
+ _g = _a.isFormDisabled,
5475
+ isFormDisabled = _g === void 0 ? false : _g,
5476
+ _h = _a.setIsFormDisabled,
5477
+ setIsFormDisabled = _h === void 0 ? function () {
5478
+ return null;
5479
+ } : _h,
5271
5480
  error = _a.error;
5272
5481
 
5273
5482
  var onTafAction = function onTafAction(action, taf) {
@@ -5394,7 +5603,8 @@
5394
5603
  isIssuesPaneOpen: isIssuesPaneOpen,
5395
5604
  setIsIssuesPaneOpen: setIsIssuesPaneOpen,
5396
5605
  isDisabled: isFormDisabled,
5397
- setIsDisabled: setIsFormDisabled
5606
+ setIsDisabled: setIsFormDisabled,
5607
+ onSwitchEditor: patchTaf
5398
5608
  })));
5399
5609
  };
5400
5610
 
@@ -5406,6 +5616,57 @@
5406
5616
  }, props));
5407
5617
  };
5408
5618
 
5619
+ /* *
5620
+ * Licensed under the Apache License, Version 2.0 (the "License");
5621
+ * you may not use this file except in compliance with the License.
5622
+ * You may obtain a copy of the License at
5623
+ *
5624
+ * http://www.apache.org/licenses/LICENSE-2.0
5625
+ *
5626
+ * Unless required by applicable law or agreed to in writing, software
5627
+ * distributed under the License is distributed on an "AS IS" BASIS,
5628
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5629
+ * See the License for the specific language governing permissions and
5630
+ * limitations under the License.
5631
+ *
5632
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
5633
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
5634
+ * */
5635
+ var getLastUpdateTitle = function getLastUpdateTitle(time) {
5636
+ return "Last updated " + time;
5637
+ };
5638
+
5639
+ var LastUpdateTime = function LastUpdateTime(_a) {
5640
+ var _b = _a.onUpdateTaf,
5641
+ onUpdateTaf = _b === void 0 ? function () {} : _b,
5642
+ lastUpdateTime = _a.lastUpdateTime;
5643
+ return /*#__PURE__*/React__default["default"].createElement(material.Box, {
5644
+ sx: {
5645
+ display: 'flex',
5646
+ alignItems: 'center',
5647
+ height: '100%',
5648
+ justifyContent: 'flex-end'
5649
+ }
5650
+ }, /*#__PURE__*/React__default["default"].createElement(material.Typography, {
5651
+ sx: {
5652
+ color: 'geowebColors.captions.captionStatus.rgba',
5653
+ fontSize: '10px',
5654
+ lineHeight: '1.6',
5655
+ letterSpacing: '0.33px'
5656
+ },
5657
+ "data-testid": "lastupdated-time"
5658
+ }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
5659
+ title: "Click to refresh"
5660
+ }, /*#__PURE__*/React__default["default"].createElement(shared.ToolButton, {
5661
+ "data-testid": "updateTafBtn",
5662
+ onClick: onUpdateTaf,
5663
+ sx: {
5664
+ marginRight: 1,
5665
+ marginLeft: 1
5666
+ }
5667
+ }, /*#__PURE__*/React__default["default"].createElement(theme.Cached, null))));
5668
+ };
5669
+
5409
5670
  var CONFIRM_DIALOG_OPTIONS = {
5410
5671
  title: 'Whoops',
5411
5672
  description: "It's not possible to autosave this TAF due to the presence of issue(s). Are you sure you want to close this TAF? Any changes made will be lost.",
@@ -5415,8 +5676,9 @@
5415
5676
  var TafLayout = function TafLayout(_a) {
5416
5677
  var _b = _a.tafList,
5417
5678
  tafList = _b === void 0 ? [] : _b,
5418
- _c = _a.onPostTaf,
5419
- onPostTaf = _c === void 0 ? function () {} : _c;
5679
+ _c = _a.onUpdateTaf,
5680
+ onUpdateTaf = _c === void 0 ? function () {} : _c,
5681
+ lastUpdateTime = _a.lastUpdateTime;
5420
5682
  var api$1 = api.useApiContext().api;
5421
5683
  var confirmDialog = shared.useConfirmationDialog();
5422
5684
 
@@ -5429,39 +5691,46 @@
5429
5691
  var _e = usePostTafRequest(api$1.postTaf),
5430
5692
  isLoading = _e.isLoading,
5431
5693
  postTafRequest = _e.doRequest,
5432
- error = _e.error,
5433
- setError = _e.setError;
5694
+ postError = _e.error;
5695
+
5696
+ var _f = usePostTafRequest(api$1.patchTaf),
5697
+ patchTafRequest = _f.doRequest,
5698
+ patchError = _f.error;
5434
5699
 
5435
- var _f = useTafModuleContext(),
5436
- onValidateForm = _f.onValidateForm,
5437
- tafAction = _f.tafAction,
5438
- isFormDirty = _f.isFormDirty;
5700
+ var _g = useTafModuleContext(),
5701
+ onValidateForm = _g.onValidateForm,
5702
+ tafAction = _g.tafAction,
5703
+ isFormDirty = _g.isFormDirty;
5439
5704
 
5440
- var _g = __read(React__default["default"].useState(sortTafTimeSlots(tafList)), 2),
5441
- _h = _g[0],
5442
- upcoming = _h.upcoming,
5443
- current = _h.current,
5444
- expired = _h.expired,
5445
- updateSortedTafs = _g[1];
5705
+ var _h = __read(React__default["default"].useState(sortTafTimeSlots(tafList)), 2),
5706
+ _j = _h[0],
5707
+ upcoming = _j.upcoming,
5708
+ current = _j.current,
5709
+ expired = _j.expired,
5710
+ updateSortedTafs = _h[1];
5446
5711
 
5447
- var _j = __read(current.slice(-1), 1),
5448
- lastCurrentTaf = _j[0];
5712
+ var _k = __read(current.slice(-1), 1),
5713
+ lastCurrentTaf = _k[0];
5449
5714
 
5450
- var _k = __read(React__default["default"].useState('UPCOMING'), 2),
5451
- timeSlot = _k[0],
5452
- setTimeSlot = _k[1];
5715
+ var _l = __read(React__default["default"].useState('UPCOMING'), 2),
5716
+ timeSlot = _l[0],
5717
+ setTimeSlot = _l[1];
5453
5718
 
5454
- var _l = __read(React__default["default"].useState(upcoming), 2),
5455
- locations = _l[0],
5456
- setLocations = _l[1];
5719
+ var _m = __read(React__default["default"].useState(upcoming), 2),
5720
+ locations = _m[0],
5721
+ setLocations = _m[1];
5457
5722
 
5458
- var _m = __read(React__default["default"].useState(0), 2),
5459
- activeTafIndex = _m[0],
5460
- setActiveTafIndex = _m[1];
5723
+ var _o = __read(React__default["default"].useState(0), 2),
5724
+ activeTafIndex = _o[0],
5725
+ setActiveTafIndex = _o[1];
5461
5726
 
5462
- var _o = __read(React__default["default"].useState(false), 2),
5463
- isFormDisabled = _o[0],
5464
- setIsFormDisabled = _o[1];
5727
+ var _p = __read(React__default["default"].useState(false), 2),
5728
+ isFormDisabled = _p[0],
5729
+ setIsFormDisabled = _p[1];
5730
+
5731
+ var _q = __read(React__default["default"].useState(), 2),
5732
+ error = _q[0],
5733
+ setError = _q[1];
5465
5734
 
5466
5735
  var postTaf = function postTaf(data) {
5467
5736
  return __awaiter(void 0, void 0, void 0, function () {
@@ -5476,7 +5745,42 @@
5476
5745
  _a.sent(); // callback
5477
5746
 
5478
5747
 
5479
- onPostTaf();
5748
+ onUpdateTaf();
5749
+ return [2
5750
+ /*return*/
5751
+ ];
5752
+ }
5753
+ });
5754
+ });
5755
+ };
5756
+
5757
+ var patchTaf = function patchTaf(data) {
5758
+ return __awaiter(void 0, void 0, void 0, function () {
5759
+ return __generator(this, function (_a) {
5760
+ switch (_a.label) {
5761
+ case 0:
5762
+ _a.trys.push([0, 2,, 3]);
5763
+
5764
+ return [4
5765
+ /*yield*/
5766
+ , patchTafRequest(data)];
5767
+
5768
+ case 1:
5769
+ _a.sent(); // callback
5770
+
5771
+
5772
+ onUpdateTaf();
5773
+ return [2
5774
+ /*return*/
5775
+ , true];
5776
+
5777
+ case 2:
5778
+ _a.sent();
5779
+ return [2
5780
+ /*return*/
5781
+ , false];
5782
+
5783
+ case 3:
5480
5784
  return [2
5481
5785
  /*return*/
5482
5786
  ];
@@ -5578,7 +5882,8 @@
5578
5882
  setActiveTafIndex(newIndex); // eslint-disable-next-line react-hooks/exhaustive-deps
5579
5883
  }, [tafList, setLocations]);
5580
5884
  React__default["default"].useEffect(function () {
5581
- var cancelErrorTimeout = error && error.type === 'CANCELLED' ? setTimeout(function () {
5885
+ setError(postError);
5886
+ var cancelErrorTimeout = postError && postError.type === 'CANCELLED' ? setTimeout(function () {
5582
5887
  setError(null);
5583
5888
  }, 10000) : null;
5584
5889
  return function () {
@@ -5586,7 +5891,10 @@
5586
5891
  clearTimeout(cancelErrorTimeout);
5587
5892
  }
5588
5893
  };
5589
- }, [error, setError]);
5894
+ }, [postError]);
5895
+ React__default["default"].useEffect(function () {
5896
+ setError(patchError);
5897
+ }, [patchError]);
5590
5898
 
5591
5899
  if (!tafList) {
5592
5900
  return null;
@@ -5632,6 +5940,13 @@
5632
5940
  tafFromBackend: lastCurrentTaf,
5633
5941
  timeSlot: timeSlot,
5634
5942
  onChangeTimeSlot: onChangeTimeSlot
5943
+ })), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5944
+ item: true,
5945
+ xs: 12,
5946
+ sm: 3
5947
+ }, lastUpdateTime && /*#__PURE__*/React__default["default"].createElement(LastUpdateTime, {
5948
+ lastUpdateTime: lastUpdateTime,
5949
+ onUpdateTaf: onUpdateTaf
5635
5950
  }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
5636
5951
  container: true,
5637
5952
  flexGrow: 1,
@@ -5681,6 +5996,7 @@
5681
5996
  isFormDisabled: isFormDisabled,
5682
5997
  setIsFormDisabled: setIsFormDisabled,
5683
5998
  postTaf: postTaf,
5999
+ patchTaf: patchTaf,
5684
6000
  isLoading: isLoading,
5685
6001
  error: error
5686
6002
  });
@@ -5722,23 +6038,80 @@
5722
6038
  }, children)));
5723
6039
  };
5724
6040
 
6041
+ var getCurrentDate = function getCurrentDate() {
6042
+ return moment__default["default"].utc().format('HH:mm');
6043
+ };
6044
+
5725
6045
  var TafModule = function TafModule() {
5726
6046
  var api$1 = api.useApiContext().api;
5727
6047
 
5728
- var _a = api.useApi(api$1.getTafList),
5729
- getTafListError = _a.error,
5730
- isLoading = _a.isLoading,
5731
- tafList = _a.result,
5732
- fetchNewTafList = _a.fetchApiData;
6048
+ var _a = __read(React__namespace.useState([]), 2),
6049
+ tafList = _a[0],
6050
+ setTafList = _a[1];
5733
6051
 
5734
- shared.usePoller([tafList, getTafListError], function () {
5735
- return fetchNewTafList({});
5736
- });
6052
+ var _b = __read(React__namespace.useState(true), 2),
6053
+ isLoading = _b[0],
6054
+ setIsLoading = _b[1];
6055
+
6056
+ var _c = __read(React__namespace.useState(null), 2),
6057
+ getTafListError = _c[0],
6058
+ setError = _c[1];
6059
+
6060
+ var _d = __read(React__namespace.useState(), 2),
6061
+ lastUpdateTime = _d[0],
6062
+ setLastUpdateTime = _d[1];
6063
+
6064
+ var fetchNewTafList = function fetchNewTafList() {
6065
+ return __awaiter(void 0, void 0, void 0, function () {
6066
+ var result, error_1;
6067
+ return __generator(this, function (_a) {
6068
+ switch (_a.label) {
6069
+ case 0:
6070
+ setIsLoading(true);
6071
+ setError(null);
6072
+ _a.label = 1;
6073
+
6074
+ case 1:
6075
+ _a.trys.push([1, 3,, 4]);
6076
+
6077
+ return [4
6078
+ /*yield*/
6079
+ , api$1.getTafList()];
6080
+
6081
+ case 2:
6082
+ result = _a.sent();
6083
+ setTafList(result.data);
6084
+ setIsLoading(false);
6085
+ setLastUpdateTime(getCurrentDate());
6086
+ return [3
6087
+ /*break*/
6088
+ , 4];
5737
6089
 
5738
- var onPostTaf = function onPostTaf() {
5739
- fetchNewTafList({});
6090
+ case 3:
6091
+ error_1 = _a.sent();
6092
+ setError(error_1);
6093
+ setIsLoading(false);
6094
+ return [3
6095
+ /*break*/
6096
+ , 4];
6097
+
6098
+ case 4:
6099
+ return [2
6100
+ /*return*/
6101
+ ];
6102
+ }
6103
+ });
6104
+ });
5740
6105
  };
5741
6106
 
6107
+ var onUpdateTaf = function onUpdateTaf() {
6108
+ fetchNewTafList();
6109
+ };
6110
+
6111
+ React__namespace.useEffect(function () {
6112
+ fetchNewTafList(); // eslint-disable-next-line react-hooks/exhaustive-deps
6113
+ }, []);
6114
+ shared.usePoller([tafList, getTafListError], fetchNewTafList);
5742
6115
  var hasTafListError = getTafListError !== null;
5743
6116
  return /*#__PURE__*/React__namespace.createElement(material.Box, {
5744
6117
  component: "div",
@@ -5763,7 +6136,8 @@
5763
6136
  }
5764
6137
  }), /*#__PURE__*/React__namespace.createElement(TafLayout, {
5765
6138
  tafList: tafList,
5766
- onPostTaf: onPostTaf
6139
+ onUpdateTaf: onUpdateTaf,
6140
+ lastUpdateTime: lastUpdateTime
5767
6141
  }));
5768
6142
  };
5769
6143
 
@@ -5785,10 +6159,32 @@
5785
6159
  return axiosInstance.post.apply(axiosInstance, __spreadArray(['/taf2tac'], __read(__spreadArray([__assign({}, tafData)], __read(signal ? [{
5786
6160
  signal: signal
5787
6161
  }] : [])))));
6162
+ },
6163
+ patchTaf: function patchTaf(formData) {
6164
+ return axiosInstance.patch('/taf', __assign({}, formData));
5788
6165
  }
5789
6166
  };
5790
6167
  };
5791
6168
 
6169
+ /* *
6170
+ * Licensed under the Apache License, Version 2.0 (the "License");
6171
+ * you may not use this file except in compliance with the License.
6172
+ * You may obtain a copy of the License at
6173
+ *
6174
+ * http://www.apache.org/licenses/LICENSE-2.0
6175
+ *
6176
+ * Unless required by applicable law or agreed to in writing, software
6177
+ * distributed under the License is distributed on an "AS IS" BASIS,
6178
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
6179
+ * See the License for the specific language governing permissions and
6180
+ * limitations under the License.
6181
+ *
6182
+ * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
6183
+ * Copyright 2022 - Finnish Meteorological Institute (FMI)
6184
+ * */
6185
+
6186
+ var MOCK_USERNAME = 'user.name';
6187
+
5792
6188
  var currentDate = moment__default["default"].utc().format('YYYY-MM-DD');
5793
6189
  var tomorrowDate = moment__default["default"].utc().add(1, 'day').format('YYYY-MM-DD');
5794
6190
  var airportPeriod = 6;
@@ -5824,6 +6220,7 @@
5824
6220
  var fakeTafList = [{
5825
6221
  creationDate: upcomingValidDateStart,
5826
6222
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6223
+ editor: MOCK_USERNAME,
5827
6224
  taf: {
5828
6225
  uuid: '5f9583fjdf0f337925',
5829
6226
  baseTime: upcomingValidDateStart,
@@ -5843,6 +6240,7 @@
5843
6240
  }, {
5844
6241
  creationDate: upcomingValidDateStart,
5845
6242
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6243
+ editor: null,
5846
6244
  taf: {
5847
6245
  uuid: '5f9583fjd111137925',
5848
6246
  baseTime: upcomingValidDateStart,
@@ -5868,6 +6266,7 @@
5868
6266
  }, {
5869
6267
  creationDate: upcomingValidDateStart,
5870
6268
  canbe: ['CANCELLED', 'AMENDED', 'DISCARDED'],
6269
+ editor: null,
5871
6270
  taf: {
5872
6271
  uuid: '754905485',
5873
6272
  baseTime: upcomingValidDateStart,
@@ -5925,6 +6324,7 @@
5925
6324
  }, {
5926
6325
  creationDate: upcomingValidDateStart,
5927
6326
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6327
+ editor: MOCK_USERNAME,
5928
6328
  taf: {
5929
6329
  uuid: '43545345345',
5930
6330
  issueDate: upcomingValidDateStart,
@@ -5995,6 +6395,7 @@
5995
6395
  }, {
5996
6396
  creationDate: upcomingValidDateStart,
5997
6397
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6398
+ editor: null,
5998
6399
  taf: {
5999
6400
  uuid: '5f9583fjdf45ff4330f337925',
6000
6401
  issueDate: upcomingValidDateStart,
@@ -6050,6 +6451,7 @@
6050
6451
  }, {
6051
6452
  creationDate: upcomingValidDateStart,
6052
6453
  canbe: ['AMENDED'],
6454
+ editor: null,
6053
6455
  taf: {
6054
6456
  uuid: '5464565464',
6055
6457
  previousId: '5445fghrfg3546456',
@@ -6091,6 +6493,7 @@
6091
6493
  }, {
6092
6494
  creationDate: upcomingValidDateStart,
6093
6495
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6496
+ editor: 'max.jansen',
6094
6497
  taf: {
6095
6498
  uuid: 'gh56734fghfgh',
6096
6499
  previousId: '8574jnf93475',
@@ -6132,6 +6535,7 @@
6132
6535
  }, {
6133
6536
  creationDate: currentValidDateStart,
6134
6537
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6538
+ editor: null,
6135
6539
  taf: {
6136
6540
  uuid: 'giskdj09845872039',
6137
6541
  issueDate: currentValidDateStart,
@@ -6171,6 +6575,7 @@
6171
6575
  }, {
6172
6576
  creationDate: currentValidDateStart,
6173
6577
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6578
+ editor: null,
6174
6579
  taf: {
6175
6580
  uuid: 'ghskdj09845872039',
6176
6581
  baseTime: currentValidDateStart,
@@ -6190,6 +6595,7 @@
6190
6595
  }, {
6191
6596
  creationDate: currentValidDateStart,
6192
6597
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6598
+ editor: null,
6193
6599
  taf: {
6194
6600
  uuid: 'ghskdj09845872040',
6195
6601
  issueDate: currentValidDateStart,
@@ -6210,6 +6616,7 @@
6210
6616
  }, {
6211
6617
  creationDate: currentDate + "T06:00:00Z",
6212
6618
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6619
+ editor: null,
6213
6620
  taf: {
6214
6621
  uuid: 'ghskdj09845872041',
6215
6622
  issueDate: currentValidDateStart,
@@ -6230,6 +6637,7 @@
6230
6637
  }, {
6231
6638
  creationDate: currentDate + "T06:00:00Z",
6232
6639
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6640
+ editor: null,
6233
6641
  taf: {
6234
6642
  uuid: 'ghskdj09845872042',
6235
6643
  issueDate: currentValidDateStart,
@@ -6250,6 +6658,7 @@
6250
6658
  }, {
6251
6659
  creationDate: currentDate + "T06:00:00Z",
6252
6660
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6661
+ editor: null,
6253
6662
  taf: {
6254
6663
  uuid: 'ghskdj09845872043',
6255
6664
  issueDate: currentValidDateStart,
@@ -6270,6 +6679,7 @@
6270
6679
  }, {
6271
6680
  creationDate: expiredValidDateStart,
6272
6681
  canbe: [],
6682
+ editor: null,
6273
6683
  taf: {
6274
6684
  uuid: 'sdkjhsdf90845890',
6275
6685
  issueDate: expiredValidDateStart,
@@ -6334,6 +6744,7 @@
6334
6744
  var fakeNewTaf = {
6335
6745
  creationDate: currentDate + "T12:00:00Z",
6336
6746
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6747
+ editor: null,
6337
6748
  taf: {
6338
6749
  type: 'NORMAL',
6339
6750
  messageType: 'ORG',
@@ -6354,6 +6765,7 @@
6354
6765
  ({
6355
6766
  creationDate: "2022-01-06T12:00:00Z",
6356
6767
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6768
+ editor: MOCK_USERNAME,
6357
6769
  taf: __assign(__assign({}, fakeNewTaf.taf), {
6358
6770
  baseTime: "2022-01-06T12:00:00Z",
6359
6771
  validDateStart: "2022-01-06T12:00:00Z",
@@ -6369,6 +6781,7 @@
6369
6781
  var fakePublishedTaf = {
6370
6782
  creationDate: currentDate + "T12:00:00Z",
6371
6783
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6784
+ editor: null,
6372
6785
  taf: {
6373
6786
  uuid: 'slsdkjg-023895',
6374
6787
  issueDate: currentDate + "T12:00:00Z",
@@ -6444,7 +6857,9 @@
6444
6857
  ({
6445
6858
  creationDate: "2022-01-06T12:00:00Z",
6446
6859
  canbe: ['CANCELLED', 'AMENDED', 'CORRECTED'],
6860
+ editor: MOCK_USERNAME,
6447
6861
  taf: __assign(__assign({}, fakePublishedTaf.taf), {
6862
+ uuid: 'sowi3u4o-lsdjflsk',
6448
6863
  location: 'EHGG',
6449
6864
  baseTime: "2022-01-06T12:00:00Z",
6450
6865
  issueDate: "2022-01-06T12:00:00Z",
@@ -6509,6 +6924,7 @@
6509
6924
  var fakeDraftTaf = {
6510
6925
  creationDate: currentDate + "T18:00:00Z",
6511
6926
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6927
+ editor: null,
6512
6928
  taf: {
6513
6929
  uuid: '5f9583fjdf0f337925',
6514
6930
  baseTime: currentDate + "T18:00:00Z",
@@ -6547,6 +6963,7 @@
6547
6963
  ({
6548
6964
  creationDate: "2022-01-06T18:00:00Z",
6549
6965
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6966
+ editor: MOCK_USERNAME,
6550
6967
  taf: __assign(__assign({}, fakeDraftTaf.taf), {
6551
6968
  baseTime: "2022-01-06T18:00:00Z",
6552
6969
  validDateStart: "2022-01-06T18:00:00Z",
@@ -6562,6 +6979,7 @@
6562
6979
  var fakeDraftAmendmentTaf = {
6563
6980
  creationDate: currentDate + "T14:00:00Z",
6564
6981
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
6982
+ editor: null,
6565
6983
  taf: {
6566
6984
  uuid: '954905487',
6567
6985
  previousId: '5f9583fjdf45ff4330f337925',
@@ -6622,6 +7040,7 @@
6622
7040
  ({
6623
7041
  creationDate: "2022-01-06T14:00:00Z",
6624
7042
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
7043
+ editor: null,
6625
7044
  taf: __assign(__assign({}, fakeDraftAmendmentTaf.taf), {
6626
7045
  location: 'EHRD',
6627
7046
  issueDate: "2022-01-06T14:00:00Z",
@@ -6642,6 +7061,7 @@
6642
7061
  var fakeAmendmentTaf = {
6643
7062
  creationDate: currentDate + "T14:00:00Z",
6644
7063
  canbe: ['CANCELLED', 'CORRECTED', 'AMENDED'],
7064
+ editor: null,
6645
7065
  taf: {
6646
7066
  uuid: '754905486',
6647
7067
  previousId: '5f9583fjdf45ff4330f337925',
@@ -6685,6 +7105,7 @@
6685
7105
  ({
6686
7106
  creationDate: "2022-01-06T14:00:00Z",
6687
7107
  canbe: ['CANCELLED', 'CORRECTED', 'AMENDED'],
7108
+ editor: MOCK_USERNAME,
6688
7109
  taf: __assign(__assign({}, fakeAmendmentTaf.taf), {
6689
7110
  uuid: '7549058980',
6690
7111
  issueDate: "2022-01-06T14:00:00Z",
@@ -6722,6 +7143,14 @@
6722
7143
  });
6723
7144
  };
6724
7145
 
7146
+ var fakeUpdatedTafList = __spreadArray([], __read(fakeTafList));
7147
+
7148
+ var setFakeUpdatedList = function setFakeUpdatedList(newList) {
7149
+ fakeUpdatedTafList = newList;
7150
+ };
7151
+ var getFakeUpdatedList = function getFakeUpdatedList() {
7152
+ return fakeUpdatedTafList;
7153
+ };
6725
7154
  var fakeAxiosInstance = {
6726
7155
  // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/explicit-module-boundary-types
6727
7156
  get: function get(_url, _params) {
@@ -6730,6 +7159,10 @@
6730
7159
  // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/explicit-module-boundary-types
6731
7160
  post: function post(_url, _params, _signal) {
6732
7161
  return fakePromise(false, _signal);
7162
+ },
7163
+ // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars, @typescript-eslint/explicit-module-boundary-types
7164
+ patch: function patch(_url, _params, _signal) {
7165
+ return fakePromise(false, _signal);
6733
7166
  }
6734
7167
  };
6735
7168
  var createApi = function createApi() {
@@ -6739,7 +7172,7 @@
6739
7172
  console.log('Retrieving new TAF list');
6740
7173
  return fakeAxiosInstance.get('/taflist').then(function () {
6741
7174
  return {
6742
- data: __spreadArray([], __read(fakeTafList))
7175
+ data: getFakeUpdatedList()
6743
7176
  };
6744
7177
  });
6745
7178
  },
@@ -6758,6 +7191,21 @@
6758
7191
  data: fakeTafTac
6759
7192
  };
6760
7193
  });
7194
+ },
7195
+ patchTaf: function patchTaf(_patchTaf) {
7196
+ var updatedList = getFakeUpdatedList().map(function (tafFromBackend) {
7197
+ if (tafFromBackend.taf.uuid === _patchTaf.taf.uuid) {
7198
+ return __assign(__assign({}, tafFromBackend), {
7199
+ editor: _patchTaf.editor
7200
+ });
7201
+ }
7202
+
7203
+ return tafFromBackend;
7204
+ });
7205
+ setFakeUpdatedList(updatedList); // eslint-disable-next-line no-console
7206
+
7207
+ console.log("The new editor of the taf will be " + (_patchTaf.editor || 'empty'));
7208
+ return fakeAxiosInstance.patch('/taf', _patchTaf);
6761
7209
  }
6762
7210
  };
6763
7211
  };