@opengeoweb/taf 4.4.0 → 4.5.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.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import React__default from 'react';
3
- import { TextField, Grid, Box, Button, IconButton, Tooltip, Chip, Typography, FormLabel, Switch, Card, Tabs, Tab, Dialog, MenuList, MenuItem, Backdrop, CircularProgress } from '@mui/material';
3
+ import { TextField, Grid, Box, Button, IconButton, Chip, Typography, FormLabel, Switch, Card, Tabs, Tab, Dialog, MenuList, MenuItem, Backdrop, CircularProgress } from '@mui/material';
4
4
  import { useFormContext, Controller, useFieldArray } from 'react-hook-form';
5
5
  import { useDispatch } from 'react-redux';
6
6
  import { ReactSortable } from 'react-sortablejs';
@@ -8,7 +8,7 @@ import Sortable from 'sortablejs';
8
8
  import { isEqual } from 'lodash';
9
9
  import { useAuthenticationContext } from '@opengeoweb/authentication';
10
10
  import { getDeepProperty, ReactHookFormHiddenInput, ReactHookFormProvider } from '@opengeoweb/form-fields';
11
- import { useIsMounted, ToggleMenu, useDraftFormHelpers, ToolContainerDraggable, Avatar, getInitials, useConfirmationDialog, usePreventBrowserClose, ToolButton, ToolHeader, AlertBanner, getErrorMessage as getErrorMessage$1, getWarningMessage, ConfirmationServiceProvider, usePoller, ErrorBoundary } from '@opengeoweb/shared';
11
+ import { useIsMounted, ToggleMenu, useDraftFormHelpers, CustomTooltip, ToolContainerDraggable, Avatar, getInitials, useConfirmationDialog, usePreventBrowserClose, ToolButton, ToolHeader, AlertBanner, getErrorMessage as getErrorMessage$1, getWarningMessage, ConfirmationServiceProvider, usePoller, ErrorBoundary } from '@opengeoweb/shared';
12
12
  import { snackbarActions } from '@opengeoweb/core';
13
13
  import moment from 'moment';
14
14
  import { Add, Delete, Close, DragHandle as DragHandle$1, ThumbsUp, Clock, Cancel, Edit, Success, Export, ListItem, Cached } from '@opengeoweb/theme';
@@ -3692,7 +3692,7 @@ var IssuesButton = function IssuesButton(_ref) {
3692
3692
  toggleIssuesPane(newPosition);
3693
3693
  };
3694
3694
 
3695
- return /*#__PURE__*/React.createElement(Tooltip, {
3695
+ return /*#__PURE__*/React.createElement(CustomTooltip, {
3696
3696
  title: "View details"
3697
3697
  }, /*#__PURE__*/React.createElement(Chip, {
3698
3698
  "data-testid": "issuesButton",
@@ -3956,7 +3956,7 @@ var styles = {
3956
3956
  };
3957
3957
 
3958
3958
  var SwitchButton = function SwitchButton(props) {
3959
- return /*#__PURE__*/React.createElement(Tooltip, {
3959
+ return /*#__PURE__*/React.createElement(CustomTooltip, {
3960
3960
  title: "Switch mode"
3961
3961
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(FormLabel, {
3962
3962
  sx: styles.label
@@ -3967,28 +3967,11 @@ var SwitchButton = function SwitchButton(props) {
3967
3967
  }, "Editor")));
3968
3968
  };
3969
3969
 
3970
- /* *
3971
- * Licensed under the Apache License, Version 2.0 (the "License");
3972
- * you may not use this file except in compliance with the License.
3973
- * You may obtain a copy of the License at
3974
- *
3975
- * http://www.apache.org/licenses/LICENSE-2.0
3976
- *
3977
- * Unless required by applicable law or agreed to in writing, software
3978
- * distributed under the License is distributed on an "AS IS" BASIS,
3979
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3980
- * See the License for the specific language governing permissions and
3981
- * limitations under the License.
3982
- *
3983
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3984
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
3985
- * */
3986
-
3987
3970
  var TafAvatar = function TafAvatar(_ref) {
3988
3971
  var editor = _ref.editor,
3989
3972
  _ref$tooltipPlacement = _ref.tooltipPlacement,
3990
3973
  tooltipPlacement = _ref$tooltipPlacement === void 0 ? 'bottom' : _ref$tooltipPlacement;
3991
- return /*#__PURE__*/React.createElement(Tooltip, {
3974
+ return /*#__PURE__*/React.createElement(CustomTooltip, {
3992
3975
  title: "Editor: ".concat(editor),
3993
3976
  placement: tooltipPlacement
3994
3977
  }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(Avatar, {
@@ -4022,7 +4005,11 @@ var TafForm = /*#__PURE__*/React__default.memo(function (_ref) {
4022
4005
  _ref$onSwitchEditor = _ref.onSwitchEditor,
4023
4006
  onSwitchEditor = _ref$onSwitchEditor === void 0 ? function () {
4024
4007
  return null;
4025
- } : _ref$onSwitchEditor;
4008
+ } : _ref$onSwitchEditor,
4009
+ _ref$fetchNewTafList = _ref.fetchNewTafList,
4010
+ fetchNewTafList = _ref$fetchNewTafList === void 0 ? function () {
4011
+ return null;
4012
+ } : _ref$fetchNewTafList;
4026
4013
  var originalTaf = tafFromBackend.taf,
4027
4014
  editor = tafFromBackend.editor;
4028
4015
 
@@ -4141,42 +4128,64 @@ var TafForm = /*#__PURE__*/React__default.memo(function (_ref) {
4141
4128
  }));
4142
4129
  }, [dispatch]);
4143
4130
 
4131
+ var isLatestEditor = function isLatestEditor(latestEditor, userName) {
4132
+ return latestEditor !== '' && latestEditor !== null && latestEditor !== userName;
4133
+ };
4134
+
4144
4135
  var setIsEditor = function setIsEditor(checked) {
4145
4136
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
4146
- var editor, didSucceed;
4137
+ var username, latestList, _latestList$find, latestEditor, didSucceed;
4138
+
4147
4139
  return regeneratorRuntime.wrap(function _callee$(_context) {
4148
4140
  while (1) {
4149
4141
  switch (_context.prev = _context.next) {
4150
4142
  case 0:
4151
- editor = checked ? auth === null || auth === void 0 ? void 0 : auth.username : '';
4143
+ username = checked ? auth === null || auth === void 0 ? void 0 : auth.username : ''; // make sure to get the latest changes
4144
+
4145
+ _context.next = 3;
4146
+ return fetchNewTafList();
4152
4147
 
4153
- if (!(editor === tafFromBackend.editor)) {
4154
- _context.next = 3;
4148
+ case 3:
4149
+ latestList = _context.sent;
4150
+ _latestList$find = latestList.find(function (taf) {
4151
+ return taf.taf.uuid === originalTaf.uuid;
4152
+ }), latestEditor = _latestList$find.editor;
4153
+
4154
+ if (!(username === latestEditor)) {
4155
+ _context.next = 7;
4155
4156
  break;
4156
4157
  }
4157
4158
 
4158
4159
  return _context.abrupt("return", true);
4159
4160
 
4160
- case 3:
4161
- if (!(tafFromBackend.editor !== '' && tafFromBackend.editor !== null && tafFromBackend.editor !== (auth === null || auth === void 0 ? void 0 : auth.username))) {
4162
- _context.next = 6;
4161
+ case 7:
4162
+ if (!(!checked && isLatestEditor(latestEditor, auth === null || auth === void 0 ? void 0 : auth.username))) {
4163
+ _context.next = 9;
4164
+ break;
4165
+ }
4166
+
4167
+ return _context.abrupt("return", true);
4168
+
4169
+ case 9:
4170
+ if (!(checked && isLatestEditor(latestEditor, auth === null || auth === void 0 ? void 0 : auth.username))) {
4171
+ _context.next = 12;
4163
4172
  break;
4164
4173
  }
4165
4174
 
4166
- _context.next = 6;
4175
+ _context.next = 12;
4167
4176
  return confirmDialog({
4168
4177
  title: 'Switch to editor mode',
4169
4178
  description: 'This TAF is already in edit mode and important information could get lost in the switching process.',
4170
4179
  confirmLabel: 'Edit mode'
4171
4180
  });
4172
4181
 
4173
- case 6:
4174
- _context.next = 8;
4182
+ case 12:
4183
+ _context.next = 14;
4175
4184
  return onSwitchEditor(Object.assign(Object.assign({}, tafFromBackend), {
4176
- editor: editor
4185
+ editor: username
4177
4186
  }));
4178
4187
 
4179
- case 8:
4188
+ case 14:
4180
4189
  didSucceed = _context.sent;
4181
4190
 
4182
4191
  if (didSucceed) {
@@ -4185,7 +4194,7 @@ var TafForm = /*#__PURE__*/React__default.memo(function (_ref) {
4185
4194
 
4186
4195
  return _context.abrupt("return", didSucceed);
4187
4196
 
4188
- case 11:
4197
+ case 17:
4189
4198
  case "end":
4190
4199
  return _context.stop();
4191
4200
  }
@@ -4728,8 +4737,8 @@ var sortTafsOnIssueDate = function sortTafsOnIssueDate() {
4728
4737
  return _toConsumableArray(tafList).sort(function (_ref3, _ref4) {
4729
4738
  var tafA = _ref3.taf;
4730
4739
  var tafB = _ref4.taf;
4731
- if (tafA.issueDate < tafB.issueDate || tafA.issueDate && !tafB.issueDate) return -1;
4732
- return 1;
4740
+ if (tafA.issueDate < tafB.issueDate || tafA.issueDate && !tafB.issueDate) return 1;
4741
+ return -1;
4733
4742
  });
4734
4743
  };
4735
4744
  var getBaseTime = function getBaseTime(baseTime, location) {
@@ -4844,7 +4853,7 @@ var getNewTafLocationIndex = function getNewTafLocationIndex(tafLocations, previ
4844
4853
  var IconWithTooltip = function IconWithTooltip(_ref) {
4845
4854
  var title = _ref.title,
4846
4855
  children = _ref.children;
4847
- return /*#__PURE__*/React.createElement(Tooltip, {
4856
+ return /*#__PURE__*/React.createElement(CustomTooltip, {
4848
4857
  title: title,
4849
4858
  placement: "right"
4850
4859
  }, /*#__PURE__*/React.createElement(Box, {
@@ -4932,7 +4941,7 @@ var TOOLTIP_TITLE = 'Import TAC';
4932
4941
  var ExportButton = function ExportButton(_ref) {
4933
4942
  var onClick = _ref.onClick,
4934
4943
  isHidden = _ref.isHidden;
4935
- return isHidden ? null : /*#__PURE__*/React__default.createElement(Tooltip, {
4944
+ return isHidden ? null : /*#__PURE__*/React__default.createElement(CustomTooltip, {
4936
4945
  title: TOOLTIP_TITLE,
4937
4946
  placement: "left"
4938
4947
  }, /*#__PURE__*/React__default.createElement(ToolButton, {
@@ -5647,7 +5656,11 @@ var TafPanel = function TafPanel(_ref) {
5647
5656
  setIsFormDisabled = _ref$setIsFormDisable === void 0 ? function () {
5648
5657
  return null;
5649
5658
  } : _ref$setIsFormDisable,
5650
- error = _ref.error;
5659
+ error = _ref.error,
5660
+ _ref$fetchNewTafList = _ref.fetchNewTafList,
5661
+ fetchNewTafList = _ref$fetchNewTafList === void 0 ? function () {
5662
+ return null;
5663
+ } : _ref$fetchNewTafList;
5651
5664
  var severity = isWarning(error) ? 'warning' : 'error';
5652
5665
 
5653
5666
  var onTafAction = function onTafAction(action, taf) {
@@ -5729,7 +5742,8 @@ var TafPanel = function TafPanel(_ref) {
5729
5742
  setIsIssuesPaneOpen: setIsIssuesPaneOpen,
5730
5743
  isDisabled: isFormDisabled,
5731
5744
  setIsDisabled: setIsFormDisabled,
5732
- onSwitchEditor: patchTaf
5745
+ onSwitchEditor: patchTaf,
5746
+ fetchNewTafList: fetchNewTafList
5733
5747
  })));
5734
5748
  };
5735
5749
 
@@ -5799,7 +5813,7 @@ var LastUpdateTime = function LastUpdateTime(_ref) {
5799
5813
  letterSpacing: '0.33px'
5800
5814
  },
5801
5815
  "data-testid": "lastupdated-time"
5802
- }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default.createElement(Tooltip, {
5816
+ }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default.createElement(CustomTooltip, {
5803
5817
  title: "Click to refresh"
5804
5818
  }, /*#__PURE__*/React__default.createElement(ToolButton, {
5805
5819
  "data-testid": "updateTafBtn",
@@ -5866,7 +5880,9 @@ var TafLayout = function TafLayout(_ref2) {
5866
5880
  var _ref2$tafList = _ref2.tafList,
5867
5881
  tafList = _ref2$tafList === void 0 ? [] : _ref2$tafList,
5868
5882
  _ref2$onUpdateTaf = _ref2.onUpdateTaf,
5869
- onUpdateTaf = _ref2$onUpdateTaf === void 0 ? function () {} : _ref2$onUpdateTaf,
5883
+ onUpdateTaf = _ref2$onUpdateTaf === void 0 ? function () {
5884
+ return null;
5885
+ } : _ref2$onUpdateTaf,
5870
5886
  lastUpdateTime = _ref2.lastUpdateTime;
5871
5887
 
5872
5888
  var _useApiContext = useApiContext(),
@@ -6203,7 +6219,8 @@ var TafLayout = function TafLayout(_ref2) {
6203
6219
  postTaf: postTaf,
6204
6220
  patchTaf: patchTaf,
6205
6221
  isLoading: isLoading,
6206
- error: error
6222
+ error: error,
6223
+ fetchNewTafList: onUpdateTaf
6207
6224
  });
6208
6225
  }))), /*#__PURE__*/React__default.createElement(Grid, {
6209
6226
  item: true,
@@ -6289,26 +6306,39 @@ var TafModule = function TafModule() {
6289
6306
  setTafList(result.data);
6290
6307
  setIsLoading(false);
6291
6308
  setLastUpdateTime(getCurrentDate());
6292
- _context.next = 15;
6293
- break;
6309
+ return _context.abrupt("return", result.data);
6294
6310
 
6295
- case 11:
6296
- _context.prev = 11;
6311
+ case 12:
6312
+ _context.prev = 12;
6297
6313
  _context.t0 = _context["catch"](2);
6298
6314
  setError(_context.t0);
6299
6315
  setIsLoading(false);
6316
+ return _context.abrupt("return", []);
6300
6317
 
6301
- case 15:
6318
+ case 17:
6302
6319
  case "end":
6303
6320
  return _context.stop();
6304
6321
  }
6305
6322
  }
6306
- }, _callee, null, [[2, 11]]);
6323
+ }, _callee, null, [[2, 12]]);
6307
6324
  }));
6308
6325
  };
6309
6326
 
6310
6327
  var onUpdateTaf = function onUpdateTaf() {
6311
- fetchNewTafList();
6328
+ return __awaiter(void 0, void 0, void 0, /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
6329
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
6330
+ while (1) {
6331
+ switch (_context2.prev = _context2.next) {
6332
+ case 0:
6333
+ return _context2.abrupt("return", fetchNewTafList());
6334
+
6335
+ case 1:
6336
+ case "end":
6337
+ return _context2.stop();
6338
+ }
6339
+ }
6340
+ }, _callee2);
6341
+ }));
6312
6342
  };
6313
6343
 
6314
6344
  React.useEffect(function () {
package/index.umd.js CHANGED
@@ -3688,7 +3688,7 @@
3688
3688
  toggleIssuesPane(newPosition);
3689
3689
  };
3690
3690
 
3691
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3691
+ return /*#__PURE__*/React__namespace.createElement(shared.CustomTooltip, {
3692
3692
  title: "View details"
3693
3693
  }, /*#__PURE__*/React__namespace.createElement(material.Chip, {
3694
3694
  "data-testid": "issuesButton",
@@ -3926,7 +3926,7 @@
3926
3926
  };
3927
3927
 
3928
3928
  var SwitchButton = function SwitchButton(props) {
3929
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3929
+ return /*#__PURE__*/React__namespace.createElement(shared.CustomTooltip, {
3930
3930
  title: "Switch mode"
3931
3931
  }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(material.FormLabel, {
3932
3932
  sx: styles.label
@@ -3937,28 +3937,11 @@
3937
3937
  }, "Editor")));
3938
3938
  };
3939
3939
 
3940
- /* *
3941
- * Licensed under the Apache License, Version 2.0 (the "License");
3942
- * you may not use this file except in compliance with the License.
3943
- * You may obtain a copy of the License at
3944
- *
3945
- * http://www.apache.org/licenses/LICENSE-2.0
3946
- *
3947
- * Unless required by applicable law or agreed to in writing, software
3948
- * distributed under the License is distributed on an "AS IS" BASIS,
3949
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3950
- * See the License for the specific language governing permissions and
3951
- * limitations under the License.
3952
- *
3953
- * Copyright 2022 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3954
- * Copyright 2022 - Finnish Meteorological Institute (FMI)
3955
- * */
3956
-
3957
3940
  var TafAvatar = function TafAvatar(_a) {
3958
3941
  var editor = _a.editor,
3959
3942
  _b = _a.tooltipPlacement,
3960
3943
  tooltipPlacement = _b === void 0 ? 'bottom' : _b;
3961
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
3944
+ return /*#__PURE__*/React__namespace.createElement(shared.CustomTooltip, {
3962
3945
  title: "Editor: " + editor,
3963
3946
  placement: tooltipPlacement
3964
3947
  }, /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement(shared.Avatar, {
@@ -3992,7 +3975,11 @@
3992
3975
  _g = _a.onSwitchEditor,
3993
3976
  onSwitchEditor = _g === void 0 ? function () {
3994
3977
  return null;
3995
- } : _g;
3978
+ } : _g,
3979
+ _h = _a.fetchNewTafList,
3980
+ fetchNewTafList = _h === void 0 ? function () {
3981
+ return null;
3982
+ } : _h;
3996
3983
  var originalTaf = tafFromBackend.taf,
3997
3984
  editor = tafFromBackend.editor;
3998
3985
  var auth = authentication.useAuthenticationContext().auth;
@@ -4001,38 +3988,38 @@
4001
3988
  var isDefaultDisabled = getIsFormDefaultDisabled(originalTaf.status);
4002
3989
  var confirmDialog = shared.useConfirmationDialog();
4003
3990
 
4004
- var _h = shared.useDraftFormHelpers(true),
4005
- toggleIsDraft = _h.toggleIsDraft,
4006
- DraftFieldHelper = _h.DraftFieldHelper;
3991
+ var _j = shared.useDraftFormHelpers(true),
3992
+ toggleIsDraft = _j.toggleIsDraft,
3993
+ DraftFieldHelper = _j.DraftFieldHelper;
4007
3994
 
4008
- var _j = useTafModuleContext(),
4009
- registerValidateForm = _j.registerValidateForm,
4010
- tafAction = _j.tafAction,
4011
- setIsFormDirty = _j.setIsFormDirty,
4012
- setTafAction = _j.setTafAction,
4013
- TAC = _j.TAC,
4014
- updateTAC = _j.updateTAC,
4015
- setTAC = _j.setTAC;
3995
+ var _k = useTafModuleContext(),
3996
+ registerValidateForm = _k.registerValidateForm,
3997
+ tafAction = _k.tafAction,
3998
+ setIsFormDirty = _k.setIsFormDirty,
3999
+ setTafAction = _k.setTafAction,
4000
+ TAC = _k.TAC,
4001
+ updateTAC = _k.updateTAC,
4002
+ setTAC = _k.setTAC;
4016
4003
 
4017
4004
  var isMounted = shared.useIsMounted().isMounted;
4018
4005
 
4019
- var _k = reactHookForm.useFormContext(),
4020
- control = _k.control,
4021
- handleSubmit = _k.handleSubmit,
4022
- trigger = _k.trigger,
4023
- formState = _k.formState,
4024
- getValues = _k.getValues,
4025
- setValue = _k.setValue,
4026
- reset = _k.reset;
4006
+ var _l = reactHookForm.useFormContext(),
4007
+ control = _l.control,
4008
+ handleSubmit = _l.handleSubmit,
4009
+ trigger = _l.trigger,
4010
+ formState = _l.formState,
4011
+ getValues = _l.getValues,
4012
+ setValue = _l.setValue,
4013
+ reset = _l.reset;
4027
4014
 
4028
4015
  var isFormDirty = formState.isDirty,
4029
4016
  errors = formState.errors;
4030
4017
  shared.usePreventBrowserClose(isFormDirty && !isDisabled);
4031
4018
  var hiddenInputFields = ['baseTime', 'issueDate', 'uuid', 'validDateStart', 'validDateEnd', 'status', 'previousId', 'previousValidDateStart', 'previousValidDateEnd'];
4032
4019
 
4033
- var _l = __read(React__default["default"].useState(getValues()), 2),
4034
- delayedFormValues = _l[0],
4035
- setDelayedFormValues = _l[1];
4020
+ var _m = __read(React__default["default"].useState(getValues()), 2),
4021
+ delayedFormValues = _m[0],
4022
+ setDelayedFormValues = _m[1];
4036
4023
 
4037
4024
  var hasErrors = Object.keys(errors).length;
4038
4025
 
@@ -4110,24 +4097,44 @@
4110
4097
  }));
4111
4098
  }, [dispatch]);
4112
4099
 
4100
+ var isLatestEditor = function isLatestEditor(latestEditor, userName) {
4101
+ return latestEditor !== '' && latestEditor !== null && latestEditor !== userName;
4102
+ };
4103
+
4113
4104
  var setIsEditor = function setIsEditor(checked) {
4114
4105
  return __awaiter(void 0, void 0, void 0, function () {
4115
- var editor, didSucceed;
4106
+ var username, latestList, latestEditor, didSucceed;
4116
4107
  return __generator(this, function (_a) {
4117
4108
  switch (_a.label) {
4118
4109
  case 0:
4119
- editor = checked ? auth === null || auth === void 0 ? void 0 : auth.username : '';
4110
+ username = checked ? auth === null || auth === void 0 ? void 0 : auth.username : '';
4111
+ return [4
4112
+ /*yield*/
4113
+ , fetchNewTafList()];
4120
4114
 
4121
- if (editor === tafFromBackend.editor) {
4115
+ case 1:
4116
+ latestList = _a.sent();
4117
+ latestEditor = latestList.find(function (taf) {
4118
+ return taf.taf.uuid === originalTaf.uuid;
4119
+ }).editor;
4120
+
4121
+ if (username === latestEditor) {
4122
4122
  // do nothing, correct editor is already set
4123
4123
  return [2
4124
4124
  /*return*/
4125
4125
  , true];
4126
4126
  }
4127
4127
 
4128
- if (!(tafFromBackend.editor !== '' && tafFromBackend.editor !== null && tafFromBackend.editor !== (auth === null || auth === void 0 ? void 0 : auth.username))) return [3
4128
+ if (!checked && isLatestEditor(latestEditor, auth === null || auth === void 0 ? void 0 : auth.username)) {
4129
+ // do nothing, someone else is editor so user will already get set to viewer mode
4130
+ return [2
4131
+ /*return*/
4132
+ , true];
4133
+ }
4134
+
4135
+ if (!(checked && isLatestEditor(latestEditor, auth === null || auth === void 0 ? void 0 : auth.username))) return [3
4129
4136
  /*break*/
4130
- , 2];
4137
+ , 3];
4131
4138
  return [4
4132
4139
  /*yield*/
4133
4140
  , confirmDialog({
@@ -4136,19 +4143,19 @@
4136
4143
  confirmLabel: 'Edit mode'
4137
4144
  })];
4138
4145
 
4139
- case 1:
4146
+ case 2:
4140
4147
  _a.sent();
4141
4148
 
4142
- _a.label = 2;
4149
+ _a.label = 3;
4143
4150
 
4144
- case 2:
4151
+ case 3:
4145
4152
  return [4
4146
4153
  /*yield*/
4147
4154
  , onSwitchEditor(__assign(__assign({}, tafFromBackend), {
4148
- editor: editor
4155
+ editor: username
4149
4156
  }))];
4150
4157
 
4151
- case 3:
4158
+ case 4:
4152
4159
  didSucceed = _a.sent();
4153
4160
 
4154
4161
  if (didSucceed) {
@@ -4300,19 +4307,19 @@
4300
4307
  }
4301
4308
  };
4302
4309
 
4303
- var _m = reactHookForm.useFieldArray({
4310
+ var _o = reactHookForm.useFieldArray({
4304
4311
  control: control,
4305
4312
  name: 'changeGroups'
4306
4313
  }),
4307
- fields = _m.fields,
4308
- insert = _m.insert,
4309
- remove = _m.remove,
4310
- move = _m.move;
4314
+ fields = _o.fields,
4315
+ insert = _o.insert,
4316
+ remove = _o.remove,
4317
+ move = _o.move;
4311
4318
 
4312
- var _o = useDragOrder(trigger, move, onFormBlur),
4313
- onChangeOrder = _o.onChangeOrder,
4314
- onStartDrag = _o.onStartDrag,
4315
- activeDraggingIndex = _o.activeDraggingIndex;
4319
+ var _p = useDragOrder(trigger, move, onFormBlur),
4320
+ onChangeOrder = _p.onChangeOrder,
4321
+ onStartDrag = _p.onStartDrag,
4322
+ activeDraggingIndex = _p.activeDraggingIndex;
4316
4323
 
4317
4324
  var onRemoverow = function onRemoverow(index) {
4318
4325
  confirmDialog({
@@ -4393,9 +4400,9 @@
4393
4400
  });
4394
4401
  };
4395
4402
 
4396
- var _p = __read(React__default["default"].useState(false), 2),
4397
- shouldValidate = _p[0],
4398
- setShouldValidate = _p[1];
4403
+ var _q = __read(React__default["default"].useState(false), 2),
4404
+ shouldValidate = _q[0],
4405
+ setShouldValidate = _q[1];
4399
4406
 
4400
4407
  React__default["default"].useEffect(function () {
4401
4408
  setIsDisabled(!isEditor || isDefaultDisabled);
@@ -4706,8 +4713,8 @@
4706
4713
  return __spreadArray([], __read(tafList)).sort(function (_a, _b) {
4707
4714
  var tafA = _a.taf;
4708
4715
  var tafB = _b.taf;
4709
- if (tafA.issueDate < tafB.issueDate || tafA.issueDate && !tafB.issueDate) return -1;
4710
- return 1;
4716
+ if (tafA.issueDate < tafB.issueDate || tafA.issueDate && !tafB.issueDate) return 1;
4717
+ return -1;
4711
4718
  });
4712
4719
  };
4713
4720
  var getBaseTime = function getBaseTime(baseTime, location) {
@@ -4822,7 +4829,7 @@
4822
4829
  var IconWithTooltip = function IconWithTooltip(_a) {
4823
4830
  var title = _a.title,
4824
4831
  children = _a.children;
4825
- return /*#__PURE__*/React__namespace.createElement(material.Tooltip, {
4832
+ return /*#__PURE__*/React__namespace.createElement(shared.CustomTooltip, {
4826
4833
  title: title,
4827
4834
  placement: "right"
4828
4835
  }, /*#__PURE__*/React__namespace.createElement(material.Box, {
@@ -4910,7 +4917,7 @@
4910
4917
  var ExportButton = function ExportButton(_a) {
4911
4918
  var onClick = _a.onClick,
4912
4919
  isHidden = _a.isHidden;
4913
- return isHidden ? null : /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
4920
+ return isHidden ? null : /*#__PURE__*/React__default["default"].createElement(shared.CustomTooltip, {
4914
4921
  title: TOOLTIP_TITLE,
4915
4922
  placement: "left"
4916
4923
  }, /*#__PURE__*/React__default["default"].createElement(shared.ToolButton, {
@@ -5594,7 +5601,11 @@
5594
5601
  setIsFormDisabled = _h === void 0 ? function () {
5595
5602
  return null;
5596
5603
  } : _h,
5597
- error = _a.error;
5604
+ error = _a.error,
5605
+ _j = _a.fetchNewTafList,
5606
+ fetchNewTafList = _j === void 0 ? function () {
5607
+ return null;
5608
+ } : _j;
5598
5609
  var severity = isWarning(error) ? 'warning' : 'error';
5599
5610
 
5600
5611
  var onTafAction = function onTafAction(action, taf) {
@@ -5728,7 +5739,8 @@
5728
5739
  setIsIssuesPaneOpen: setIsIssuesPaneOpen,
5729
5740
  isDisabled: isFormDisabled,
5730
5741
  setIsDisabled: setIsFormDisabled,
5731
- onSwitchEditor: patchTaf
5742
+ onSwitchEditor: patchTaf,
5743
+ fetchNewTafList: fetchNewTafList
5732
5744
  })));
5733
5745
  };
5734
5746
 
@@ -5779,7 +5791,7 @@
5779
5791
  letterSpacing: '0.33px'
5780
5792
  },
5781
5793
  "data-testid": "lastupdated-time"
5782
- }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default["default"].createElement(material.Tooltip, {
5794
+ }, getLastUpdateTitle(lastUpdateTime)), /*#__PURE__*/React__default["default"].createElement(shared.CustomTooltip, {
5783
5795
  title: "Click to refresh"
5784
5796
  }, /*#__PURE__*/React__default["default"].createElement(shared.ToolButton, {
5785
5797
  "data-testid": "updateTafBtn",
@@ -5849,7 +5861,9 @@
5849
5861
  var _b = _a.tafList,
5850
5862
  tafList = _b === void 0 ? [] : _b,
5851
5863
  _c = _a.onUpdateTaf,
5852
- onUpdateTaf = _c === void 0 ? function () {} : _c,
5864
+ onUpdateTaf = _c === void 0 ? function () {
5865
+ return null;
5866
+ } : _c,
5853
5867
  lastUpdateTime = _a.lastUpdateTime;
5854
5868
  var api$1 = api.useApiContext().api;
5855
5869
  var dispatch = reactRedux.useDispatch();
@@ -6199,7 +6213,8 @@
6199
6213
  postTaf: postTaf,
6200
6214
  patchTaf: patchTaf,
6201
6215
  isLoading: isLoading,
6202
- error: error
6216
+ error: error,
6217
+ fetchNewTafList: onUpdateTaf
6203
6218
  });
6204
6219
  }))), /*#__PURE__*/React__default["default"].createElement(material.Grid, {
6205
6220
  item: true,
@@ -6284,17 +6299,17 @@
6284
6299
  setTafList(result.data);
6285
6300
  setIsLoading(false);
6286
6301
  setLastUpdateTime(getCurrentDate());
6287
- return [3
6288
- /*break*/
6289
- , 4];
6302
+ return [2
6303
+ /*return*/
6304
+ , result.data];
6290
6305
 
6291
6306
  case 3:
6292
6307
  error_1 = _a.sent();
6293
6308
  setError(error_1);
6294
6309
  setIsLoading(false);
6295
- return [3
6296
- /*break*/
6297
- , 4];
6310
+ return [2
6311
+ /*return*/
6312
+ , []];
6298
6313
 
6299
6314
  case 4:
6300
6315
  return [2
@@ -6306,7 +6321,13 @@
6306
6321
  };
6307
6322
 
6308
6323
  var onUpdateTaf = function onUpdateTaf() {
6309
- fetchNewTafList();
6324
+ return __awaiter(void 0, void 0, void 0, function () {
6325
+ return __generator(this, function (_a) {
6326
+ return [2
6327
+ /*return*/
6328
+ , fetchNewTafList()];
6329
+ });
6330
+ });
6310
6331
  };
6311
6332
 
6312
6333
  React__namespace.useEffect(function () {
@@ -10,6 +10,7 @@ export interface TafFormProps {
10
10
  isIssuesPaneOpen?: boolean;
11
11
  setIsIssuesPaneOpen?: (isOpen: boolean, position?: IssuesPanePosition) => void;
12
12
  onSwitchEditor?: (formValues: TafFromFrontEnd) => Promise<boolean>;
13
+ fetchNewTafList?: () => Promise<TafFromBackend[]>;
13
14
  }
14
15
  declare const TafForm: React.FC<TafFormProps>;
15
16
  export default TafForm;
@@ -9,7 +9,7 @@ export declare const getTafMessagePrefix: ({ location, validDateStart, messageTy
9
9
  export declare const getSnackbarMessage: (tafFromFrontEnd: TafFromFrontEnd, isAutoSaved?: boolean) => string;
10
10
  interface TafLayoutProps {
11
11
  tafList: TafFromBackend[];
12
- onUpdateTaf: () => void;
12
+ onUpdateTaf: () => Promise<TafFromBackend[]>;
13
13
  lastUpdateTime?: string;
14
14
  }
15
15
  declare const TafLayout: React.FC<TafLayoutProps>;
@@ -21,6 +21,7 @@ interface TafPanelProps {
21
21
  isFormDisabled?: boolean;
22
22
  setIsFormDisabled?: (isDisabled: boolean) => void;
23
23
  error?: TafError;
24
+ fetchNewTafList?: () => Promise<TafFromBackend[]>;
24
25
  }
25
26
  export declare const isWarning: (error: TafError) => boolean;
26
27
  export declare const usePostTafRequest: (request: (params?: unknown) => Promise<void>, errorParser?: (error: AxiosError | Error, params: TafFromFrontEnd) => TafError) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/taf",
3
- "version": "4.4.0",
3
+ "version": "4.5.0",
4
4
  "description": "GeoWeb TAF library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -12,24 +12,24 @@
12
12
  "typings": "./index.d.ts",
13
13
  "dependencies": {},
14
14
  "peerDependencies": {
15
- "@opengeoweb/core": "4.4.0",
15
+ "@opengeoweb/core": "4.5.0",
16
16
  "react": "^17.0.2",
17
- "@opengeoweb/theme": "4.4.0",
17
+ "@opengeoweb/theme": "4.5.0",
18
18
  "@mui/material": "^5.10.8",
19
19
  "moment": "^2.29.0",
20
20
  "react-redux": "^8.0.4",
21
21
  "react-intl": "^5.17.5",
22
- "lodash": "^4.17.20",
23
- "@opengeoweb/shared": "4.4.0",
22
+ "@opengeoweb/shared": "4.5.0",
24
23
  "react-draggable": "^4.4.5",
25
24
  "re-resizable": "^6.9.0",
26
25
  "@redux-eggs/core": "^2.2.0",
27
- "@opengeoweb/form-fields": "4.4.0",
26
+ "@opengeoweb/form-fields": "4.5.0",
28
27
  "react-hook-form": "^6.12.1",
29
28
  "moment-timezone": "^0.5.31",
30
29
  "@mui/x-date-pickers": "^5.0.4",
30
+ "lodash": "^4.17.20",
31
31
  "axios": "^0.25.0",
32
- "@opengeoweb/webmap": "4.4.0",
32
+ "@opengeoweb/webmap": "4.5.0",
33
33
  "throttle-debounce": "^3.0.1",
34
34
  "proj4": "^2.6.2",
35
35
  "react-sortablejs": "^6.1.4",
@@ -43,9 +43,9 @@
43
43
  "redux-saga": "^1.2.1",
44
44
  "@redux-eggs/redux-toolkit": "^2.2.0",
45
45
  "@redux-eggs/saga-extension": "^2.2.0",
46
- "@opengeoweb/api": "4.4.0",
46
+ "@opengeoweb/api": "4.5.0",
47
47
  "react-dom": "^17.0.2",
48
- "@opengeoweb/authentication": "4.4.0",
48
+ "@opengeoweb/authentication": "4.5.0",
49
49
  "react-router-dom": "^6.4.2",
50
50
  "query-string": "^6.13.7"
51
51
  }