@opengeoweb/sigmet-airmet 9.3.1 → 9.4.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/index.esm.js CHANGED
@@ -417,6 +417,15 @@ function _nonIterableRest() {
417
417
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
418
418
  }
419
419
 
420
+ /**
421
+ * The possible type for the airmet
422
+ */
423
+ var AirmetType;
424
+ (function (AirmetType) {
425
+ AirmetType["NORMAL"] = "Normal";
426
+ AirmetType["TEST"] = "Test";
427
+ AirmetType["EXERCISE"] = "Exercise";
428
+ })(AirmetType || (AirmetType = {}));
420
429
  /**
421
430
  * The possible type for the sigmet
422
431
  */
@@ -425,6 +434,8 @@ var SigmetType;
425
434
  SigmetType["NORMAL"] = "Normal";
426
435
  SigmetType["TEST"] = "Test";
427
436
  SigmetType["EXERCISE"] = "Exercise";
437
+ SigmetType["SHORT_TEST"] = "Short test";
438
+ SigmetType["SHORT_VA_TEST"] = "Short VA test";
428
439
  })(SigmetType || (SigmetType = {}));
429
440
  /**
430
441
  * The possible phenomena for the sigmet
@@ -761,6 +772,51 @@ var ProductFormFieldLayout = function ProductFormFieldLayout(_a) {
761
772
  }, children));
762
773
  };
763
774
 
775
+ /* *
776
+ * Licensed under the Apache License, Version 2.0 (the "License");
777
+ * you may not use this file except in compliance with the License.
778
+ * You may obtain a copy of the License at
779
+ *
780
+ * http://www.apache.org/licenses/LICENSE-2.0
781
+ *
782
+ * Unless required by applicable law or agreed to in writing, software
783
+ * distributed under the License is distributed on an "AS IS" BASIS,
784
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
785
+ * See the License for the specific language governing permissions and
786
+ * limitations under the License.
787
+ *
788
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
789
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
790
+ * */
791
+ var useShortTestHelpers = function useShortTestHelpers() {
792
+ var _useFormContext = useFormContext(),
793
+ getValues = _useFormContext.getValues,
794
+ setValue = _useFormContext.setValue,
795
+ clearErrors = _useFormContext.clearErrors;
796
+ var unusedFields = ['isObservationOrForecast', 'change', 'startGeometry', 'startGeometryIntersect', 'endGeometry', 'endGeometryIntersect', 'levelInfoMode', 'level', 'lowerLevel', 'movementType', 'movementDirection', 'movementUnit', 'movementSpeed', 'change', 'vaSigmetVolcanoName', 'vaSigmetVolcanoCoordinates.latitude', 'vaSigmetVolcanoCoordinates.longitude'];
797
+ var isShortTest = function isShortTest() {
798
+ var type = getValues('type');
799
+ return type === 'SHORT_TEST' || type === 'SHORT_VA_TEST';
800
+ };
801
+ var onTypeChange = function onTypeChange() {
802
+ if (getValues('type') === 'SHORT_TEST') {
803
+ setValue('phenomenon', 'EMBD_TS');
804
+ } else if (getValues('type') === 'SHORT_VA_TEST') {
805
+ setValue('phenomenon', 'VA_CLD');
806
+ }
807
+ if (isShortTest()) {
808
+ unusedFields.forEach(function (field) {
809
+ setValue(field, null);
810
+ });
811
+ clearErrors(unusedFields);
812
+ }
813
+ };
814
+ return {
815
+ isShortTest: isShortTest,
816
+ onTypeChange: onTypeChange
817
+ };
818
+ };
819
+
764
820
  /* *
765
821
  * Licensed under the Apache License, Version 2.0 (the "License");
766
822
  * you may not use this file except in compliance with the License.
@@ -781,7 +837,13 @@ var Change = function Change(_ref) {
781
837
  var isDisabled = _ref.isDisabled,
782
838
  isReadOnly = _ref.isReadOnly;
783
839
  var _useDraftFormHelpers = useDraftFormHelpers(),
784
- isRequired = _useDraftFormHelpers.isRequired;
840
+ isRequiredField = _useDraftFormHelpers.isRequired;
841
+ var _useShortTestHelpers = useShortTestHelpers(),
842
+ isShortTest = _useShortTestHelpers.isShortTest;
843
+ var isRequired = function isRequired(value) {
844
+ return isShortTest() || isRequiredField(value);
845
+ };
846
+ var fieldsDisabled = isDisabled || isShortTest();
785
847
  return /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
786
848
  title: "Change",
787
849
  sx: styles$2.containerItem
@@ -795,22 +857,22 @@ var Change = function Change(_ref) {
795
857
  isRequired: isRequired
796
858
  }
797
859
  },
798
- disabled: isDisabled,
860
+ disabled: fieldsDisabled,
799
861
  isReadOnly: isReadOnly
800
862
  }, /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
801
863
  value: "WKN",
802
864
  label: "Weakening",
803
- disabled: isDisabled,
865
+ disabled: fieldsDisabled,
804
866
  "data-testid": "change-WKN"
805
867
  }), /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
806
868
  value: "NC",
807
869
  label: "No change",
808
- disabled: isDisabled,
870
+ disabled: fieldsDisabled,
809
871
  "data-testid": "change-NC"
810
872
  }), /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
811
873
  value: "INTSF",
812
874
  label: "Intensifying",
813
- disabled: isDisabled,
875
+ disabled: fieldsDisabled,
814
876
  "data-testid": "change-INTSF"
815
877
  }))));
816
878
  };
@@ -1127,7 +1189,7 @@ var getProductFormLifecycleButtons = function getProductFormLifecycleButtons(_re
1127
1189
  }))));
1128
1190
  };
1129
1191
  var hasValue = function hasValue(value) {
1130
- return value !== null && value.toString() !== 'NaN' && value !== '';
1192
+ return value !== undefined && value !== null && value !== 'null' && value.toString() !== 'NaN' && value !== '';
1131
1193
  };
1132
1194
  var prepareFormValues = function prepareFormValues(product) {
1133
1195
  return Object.keys(product).reduce(function (list, key) {
@@ -1384,7 +1446,9 @@ var styles$1 = {
1384
1446
  var DrawTools = function DrawTools(_ref) {
1385
1447
  var activeTool = _ref.activeTool,
1386
1448
  tools = _ref.tools,
1387
- onChangeTool = _ref.onChangeTool;
1449
+ onChangeTool = _ref.onChangeTool,
1450
+ _ref$isDisabled = _ref.isDisabled,
1451
+ isDisabled = _ref$isDisabled === void 0 ? false : _ref$isDisabled;
1388
1452
  return /*#__PURE__*/React__default.createElement(Grid, {
1389
1453
  item: true,
1390
1454
  xs: 12,
@@ -1403,6 +1467,7 @@ var DrawTools = function DrawTools(_ref) {
1403
1467
  value: true,
1404
1468
  checkedIcon: getToolIcon(tool.drawModeId),
1405
1469
  checked: activeTool === tool.drawModeId,
1470
+ disabled: isDisabled,
1406
1471
  onChange: function onChange() {
1407
1472
  onChangeTool(tool);
1408
1473
  },
@@ -1490,10 +1555,16 @@ var Levels = function Levels(_ref) {
1490
1555
  clearErrors = _useFormContext.clearErrors,
1491
1556
  unregister = _useFormContext.unregister;
1492
1557
  var _useDraftFormHelpers = useDraftFormHelpers(),
1493
- isRequired = _useDraftFormHelpers.isRequired;
1558
+ isRequiredField = _useDraftFormHelpers.isRequired;
1559
+ var _useShortTestHelpers = useShortTestHelpers(),
1560
+ isShortTest = _useShortTestHelpers.isShortTest;
1561
+ var isRequired = function isRequired(value) {
1562
+ return isShortTest() || isRequiredField(value);
1563
+ };
1494
1564
  var level = watch('level.value');
1495
1565
  var levelInfoMode = watch('levelInfoMode');
1496
1566
  var isRadioactiveCloud = watch('phenomenon') === 'RDOACT_CLD';
1567
+ var fieldsDisabled = isDisabled || isShortTest() || isRadioactiveCloud;
1497
1568
  var getFIRValue = function getFIRValue() {
1498
1569
  return getValues('locationIndicatorATSR');
1499
1570
  };
@@ -1523,7 +1594,7 @@ var Levels = function Levels(_ref) {
1523
1594
  isRequired: isRequired
1524
1595
  }
1525
1596
  },
1526
- disabled: isDisabled || isRadioactiveCloud,
1597
+ disabled: fieldsDisabled,
1527
1598
  isReadOnly: isReadOnly,
1528
1599
  onChange: function onChange() {
1529
1600
  // Reset default value for the level value to '' so when it rerenders it uses this empty default value
@@ -1537,7 +1608,7 @@ var Levels = function Levels(_ref) {
1537
1608
  label: "At",
1538
1609
  checked: levelInfoMode === 'AT' || levelInfoMode === 'TOPS',
1539
1610
  "data-testid": "levels-AT",
1540
- disabled: isDisabled || isRadioactiveCloud
1611
+ disabled: fieldsDisabled
1541
1612
  }), (levelInfoMode === 'AT' || levelInfoMode === 'TOPS') && !isRadioactiveCloud ? ( /*#__PURE__*/React__default.createElement(Grid, {
1542
1613
  item: true,
1543
1614
  xs: 12,
@@ -1629,7 +1700,7 @@ var Levels = function Levels(_ref) {
1629
1700
  label: "Between",
1630
1701
  checked: levelInfoMode === 'BETW' || levelInfoMode === 'BETW_SFC',
1631
1702
  "data-testid": "levels-BETW",
1632
- disabled: isDisabled || isRadioactiveCloud
1703
+ disabled: fieldsDisabled
1633
1704
  }), levelInfoMode === 'BETW' || levelInfoMode === 'BETW_SFC' ? ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Grid, {
1634
1705
  item: true,
1635
1706
  xs: 12,
@@ -1659,7 +1730,7 @@ var Levels = function Levels(_ref) {
1659
1730
  },
1660
1731
  size: "small",
1661
1732
  sx: styles$2.unit,
1662
- disabled: isDisabled || isRadioactiveCloud,
1733
+ disabled: fieldsDisabled,
1663
1734
  isReadOnly: isReadOnly,
1664
1735
  defaultValue: 'FL',
1665
1736
  onChange: function onChange() {
@@ -1705,7 +1776,7 @@ var Levels = function Levels(_ref) {
1705
1776
  }
1706
1777
  }
1707
1778
  },
1708
- disabled: isDisabled || isRadioactiveCloud,
1779
+ disabled: fieldsDisabled,
1709
1780
  isReadOnly: isReadOnly,
1710
1781
  onChange: function onChange() {
1711
1782
  triggerValidations(['lowerLevel.value'], getValues, trigger);
@@ -1733,7 +1804,7 @@ var Levels = function Levels(_ref) {
1733
1804
  },
1734
1805
  name: "checkedF",
1735
1806
  color: "secondary",
1736
- disabled: isDisabled || isRadioactiveCloud
1807
+ disabled: fieldsDisabled
1737
1808
  }),
1738
1809
  "data-testid": "levels-SFC",
1739
1810
  label: "SFC"
@@ -1812,7 +1883,7 @@ var Levels = function Levels(_ref) {
1812
1883
  }))))))) : null, /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
1813
1884
  value: "ABV",
1814
1885
  label: "Above",
1815
- disabled: isDisabled || isRadioactiveCloud,
1886
+ disabled: fieldsDisabled,
1816
1887
  checked: levelInfoMode === 'ABV' || levelInfoMode === 'TOPS_ABV',
1817
1888
  "data-testid": "levels-ABV"
1818
1889
  }), levelInfoMode === 'ABV' || levelInfoMode === 'TOPS_ABV' ? ( /*#__PURE__*/React__default.createElement(Grid, {
@@ -1926,7 +1997,13 @@ var ObservationForecast = function ObservationForecast(_ref) {
1926
1997
  trigger = _useFormContext.trigger,
1927
1998
  getValues = _useFormContext.getValues;
1928
1999
  var _useDraftFormHelpers = useDraftFormHelpers(),
1929
- isRequired = _useDraftFormHelpers.isRequired;
2000
+ isRequiredField = _useDraftFormHelpers.isRequired;
2001
+ var _useShortTestHelpers = useShortTestHelpers(),
2002
+ isShortTest = _useShortTestHelpers.isShortTest;
2003
+ var isRequired = function isRequired(value) {
2004
+ return isShortTest() || isRequiredField(value);
2005
+ };
2006
+ var fieldsDisabled = isDisabled || isShortTest();
1930
2007
  return /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
1931
2008
  sx: {
1932
2009
  paddingTop: '8px!important',
@@ -1937,7 +2014,7 @@ var ObservationForecast = function ObservationForecast(_ref) {
1937
2014
  }
1938
2015
  }, /*#__PURE__*/React__default.createElement(ReactHookFormRadioGroup, {
1939
2016
  name: "isObservationOrForecast",
1940
- disabled: isDisabled,
2017
+ disabled: fieldsDisabled,
1941
2018
  rules: {
1942
2019
  validate: {
1943
2020
  isRequired: isRequired
@@ -1950,12 +2027,12 @@ var ObservationForecast = function ObservationForecast(_ref) {
1950
2027
  }, (!isReadOnly || watch('isObservationOrForecast') === 'OBS') && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
1951
2028
  value: "OBS",
1952
2029
  label: "Observed",
1953
- disabled: isDisabled,
2030
+ disabled: fieldsDisabled,
1954
2031
  "data-testid": "isObservationOrForecast-OBS"
1955
2032
  })), (!isReadOnly || watch('isObservationOrForecast') === 'FCST') && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
1956
2033
  value: "FCST",
1957
2034
  label: "Forecast",
1958
- disabled: isDisabled,
2035
+ disabled: fieldsDisabled,
1959
2036
  "data-testid": "isObservationOrForecast-FCST"
1960
2037
  }))));
1961
2038
  };
@@ -1986,6 +2063,12 @@ var ObservationForecastTime = function ObservationForecastTime(_ref) {
1986
2063
  var _useFormContext = useFormContext(),
1987
2064
  watch = _useFormContext.watch;
1988
2065
  var label = getFieldLabel('Date and time', isReadOnly);
2066
+ var goZeroSeconds = function goZeroSeconds(val) {
2067
+ return moment.utc(val).seconds(0).milliseconds(0).toISOString();
2068
+ };
2069
+ var _useShortTestHelpers = useShortTestHelpers(),
2070
+ isShortTest = _useShortTestHelpers.isShortTest;
2071
+ var fieldsDisabled = isDisabled || isShortTest();
1989
2072
  return !isReadOnly || watch('observationOrForecastTime') !== null ? ( /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
1990
2073
  title: "At"
1991
2074
  }, /*#__PURE__*/React__default.createElement(ReactHookFormDateTime, {
@@ -2000,11 +2083,11 @@ var ObservationForecastTime = function ObservationForecastTime(_ref) {
2000
2083
  return watch('isObservationOrForecast') === 'OBS' && val ? isBefore(val, moment.utc().format()) || 'Observation time cannot be in the future' : true;
2001
2084
  },
2002
2085
  isBetween: function isBetween$1(val) {
2003
- return watch('isObservationOrForecast') === 'FCST' && val ? isBetween(val, watch('validDateStart'), watch('validDateEnd')) || ForecastTimeValidation : true;
2086
+ return watch('isObservationOrForecast') === 'FCST' && val ? isBetween(goZeroSeconds(val), goZeroSeconds(watch('validDateStart')), goZeroSeconds(watch('validDateEnd'))) || ForecastTimeValidation : true;
2004
2087
  }
2005
2088
  }
2006
2089
  },
2007
- disabled: isDisabled,
2090
+ disabled: fieldsDisabled,
2008
2091
  isReadOnly: isReadOnly,
2009
2092
  helperText: helperText,
2010
2093
  onChange: function onChange() {
@@ -2041,9 +2124,12 @@ var Phenomenon = function Phenomenon(_ref) {
2041
2124
  getValues = _useFormContext.getValues,
2042
2125
  setValue = _useFormContext.setValue,
2043
2126
  trigger = _useFormContext.trigger;
2127
+ var _useShortTestHelpers = useShortTestHelpers(),
2128
+ isShortTest = _useShortTestHelpers.isShortTest;
2044
2129
  var isSigmet = productType === 'sigmet';
2045
2130
  var phenomenaList = isSigmet ? SigmetPhenomena : AirmetPhenomena;
2046
2131
  var label = getFieldLabel('Phenomenon', isReadOnly);
2132
+ var fieldsDisabled = isDisabled || isShortTest();
2047
2133
  return /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
2048
2134
  title: "What"
2049
2135
  }, /*#__PURE__*/React__default.createElement(ReactHookFormSelect, {
@@ -2052,7 +2138,7 @@ var Phenomenon = function Phenomenon(_ref) {
2052
2138
  rules: {
2053
2139
  required: true
2054
2140
  },
2055
- disabled: isDisabled,
2141
+ disabled: fieldsDisabled,
2056
2142
  isReadOnly: isReadOnly,
2057
2143
  size: "small",
2058
2144
  "data-testid": "phenomenon",
@@ -2112,6 +2198,8 @@ var StartGeometry = function StartGeometry(_ref) {
2112
2198
  watch = _useFormContext.watch;
2113
2199
  var _useDraftFormHelpers = useDraftFormHelpers(),
2114
2200
  isDraft = _useDraftFormHelpers.isDraft;
2201
+ var _useShortTestHelpers = useShortTestHelpers(),
2202
+ isShortTest = _useShortTestHelpers.isShortTest;
2115
2203
  return !isReadOnly ? ( /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
2116
2204
  title: "Start position",
2117
2205
  sx: styles$2.drawSection,
@@ -2119,7 +2207,8 @@ var StartGeometry = function StartGeometry(_ref) {
2119
2207
  }, /*#__PURE__*/React__default.createElement(DrawTools, {
2120
2208
  activeTool: activeTool,
2121
2209
  tools: tools,
2122
- onChangeTool: onChangeTool
2210
+ onChangeTool: onChangeTool,
2211
+ isDisabled: isShortTest()
2123
2212
  }), activeTool && ( /*#__PURE__*/React__default.createElement(FormHelperText, {
2124
2213
  variant: "filled",
2125
2214
  sx: styles$2.quitDrawModeMessage
@@ -2142,7 +2231,7 @@ var StartGeometry = function StartGeometry(_ref) {
2142
2231
  return hasIntersectionWithFIR(value, watch('startGeometryIntersect')) || noIntersectionMessage$1;
2143
2232
  },
2144
2233
  coordinatesNotEmpty: function coordinatesNotEmpty(value) {
2145
- return isDraft() ? true : isValidGeoJsonCoordinates(value) || coordinatesEmptyMessage$1;
2234
+ return isDraft() || isShortTest() ? true : isValidGeoJsonCoordinates(value) || coordinatesEmptyMessage$1;
2146
2235
  },
2147
2236
  hasMaxFeaturePoints: function hasMaxFeaturePoints$1(value) {
2148
2237
  return isFir(value) ? true : !hasMaxFeaturePoints(value) || maximum6PointsMessage$1;
@@ -2225,8 +2314,13 @@ var Progress = function Progress(_ref) {
2225
2314
  errors = _useFormContext.formState.errors,
2226
2315
  unregister = _useFormContext.unregister;
2227
2316
  var _useDraftFormHelpers = useDraftFormHelpers(),
2228
- isRequired = _useDraftFormHelpers.isRequired,
2317
+ isRequiredField = _useDraftFormHelpers.isRequired,
2229
2318
  isDraft = _useDraftFormHelpers.isDraft;
2319
+ var _useShortTestHelpers = useShortTestHelpers(),
2320
+ isShortTest = _useShortTestHelpers.isShortTest;
2321
+ var isRequired = function isRequired(value) {
2322
+ return isShortTest() || isRequiredField(value);
2323
+ };
2230
2324
  var movementType = watch('movementType');
2231
2325
  var getFIRValue = function getFIRValue() {
2232
2326
  return getValues('locationIndicatorATSR');
@@ -2247,6 +2341,8 @@ var Progress = function Progress(_ref) {
2247
2341
  var isSigmet = productType === 'sigmet';
2248
2342
  var isRadioactiveCloud = watch('phenomenon') === 'RDOACT_CLD';
2249
2343
  var isVolcanicCloud = watch('phenomenon') === 'VA_CLD';
2344
+ var isShortTestOrRdoact = isShortTest() || isRadioactiveCloud;
2345
+ var fieldsDisabled = isDisabled || isShortTestOrRdoact;
2250
2346
  return /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
2251
2347
  title: "Progress",
2252
2348
  sx: styles$2.containerItem
@@ -2273,31 +2369,33 @@ var Progress = function Progress(_ref) {
2273
2369
  }, isVolcanicCloud && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2274
2370
  value: "NO_VA_EXP",
2275
2371
  label: "No volcanic ash expected",
2276
- disabled: isDisabled,
2372
+ disabled: fieldsDisabled,
2277
2373
  "data-testid": "movementType-NO_VA_EXP"
2278
2374
  })), /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2279
2375
  value: "STATIONARY",
2280
2376
  label: "Stationary",
2281
- disabled: isDisabled || isRadioactiveCloud,
2377
+ disabled: fieldsDisabled,
2282
2378
  "data-testid": "movementType-STATIONARY"
2283
2379
  }), /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2284
2380
  value: "MOVEMENT",
2285
2381
  label: "Movement",
2286
- disabled: isDisabled || isRadioactiveCloud,
2382
+ disabled: fieldsDisabled,
2287
2383
  "data-testid": "movementType-MOVEMENT"
2288
- }), isSigmet && isRadioactiveCloud && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2384
+ }), isSigmet && isShortTestOrRdoact && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2289
2385
  value: "FORECAST_POSITION",
2290
2386
  label: "End position",
2291
- disabled: isDisabled || isRadioactiveCloud,
2387
+ disabled: fieldsDisabled,
2292
2388
  "data-testid": "movementType-FORECAST_POSITION"
2293
- }))), movementType === 'MOVEMENT' && !isRadioactiveCloud && ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Grid, {
2389
+ }))), movementType === 'MOVEMENT' && !isShortTestOrRdoact && ( /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Grid, {
2294
2390
  item: true,
2295
2391
  xs: 12
2296
2392
  }, /*#__PURE__*/React__default.createElement(ReactHookFormSelect, {
2297
2393
  name: "movementDirection",
2298
2394
  label: "Set direction",
2299
2395
  rules: {
2300
- validate: isRequired
2396
+ validate: {
2397
+ isRequired: isRequired
2398
+ }
2301
2399
  },
2302
2400
  size: "small",
2303
2401
  sx: styles$2.movement,
@@ -2325,7 +2423,9 @@ var Progress = function Progress(_ref) {
2325
2423
  name: "movementUnit",
2326
2424
  label: "Unit",
2327
2425
  rules: {
2328
- validate: isRequired
2426
+ validate: {
2427
+ isRequired: isRequired
2428
+ }
2329
2429
  },
2330
2430
  size: "small",
2331
2431
  sx: styles$2.unit,
@@ -2380,12 +2480,12 @@ var Progress = function Progress(_ref) {
2380
2480
  onChange: function onChange(event) {
2381
2481
  return event && event.stopPropagation();
2382
2482
  }
2383
- }))))), isSigmet && !isRadioactiveCloud && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2483
+ }))))), isSigmet && !isShortTestOrRdoact && ( /*#__PURE__*/React__default.createElement(RadioButtonAndLabel, {
2384
2484
  value: "FORECAST_POSITION",
2385
2485
  label: "End position",
2386
2486
  disabled: isDisabled,
2387
2487
  "data-testid": "movementType-FORECAST_POSITION"
2388
- }))), isSigmet && !isRadioactiveCloud && movementType === 'FORECAST_POSITION' && ( /*#__PURE__*/React__default.createElement(Grid, {
2488
+ }))), isSigmet && !isShortTestOrRdoact && movementType === 'FORECAST_POSITION' && ( /*#__PURE__*/React__default.createElement(Grid, {
2389
2489
  item: true,
2390
2490
  xs: 12,
2391
2491
  "data-testid": "endGeometry",
@@ -2549,7 +2649,8 @@ var SelectFIR = function SelectFIR(_ref) {
2549
2649
  * Copyright 2022 - Finnish Meteorological Institute (FMI)
2550
2650
  * */
2551
2651
  var Type = function Type(_ref) {
2552
- var isReadOnly = _ref.isReadOnly,
2652
+ var productType = _ref.productType,
2653
+ isReadOnly = _ref.isReadOnly,
2553
2654
  isDisabled = _ref.isDisabled,
2554
2655
  _ref$onChange = _ref.onChange,
2555
2656
  _onChange = _ref$onChange === void 0 ? function () {} : _ref$onChange;
@@ -2557,6 +2658,9 @@ var Type = function Type(_ref) {
2557
2658
  getValues = _useFormContext.getValues,
2558
2659
  trigger = _useFormContext.trigger;
2559
2660
  var label = getFieldLabel('Type', isReadOnly);
2661
+ var _useShortTestHelpers = useShortTestHelpers(),
2662
+ onTypeChange = _useShortTestHelpers.onTypeChange;
2663
+ var messageType = productType === 'airmet' ? AirmetType : SigmetType;
2560
2664
  return /*#__PURE__*/React__default.createElement(ProductFormFieldLayout, {
2561
2665
  title: "Type"
2562
2666
  }, /*#__PURE__*/React__default.createElement(ReactHookFormSelect, {
@@ -2568,15 +2672,16 @@ var Type = function Type(_ref) {
2568
2672
  "data-testid": "type",
2569
2673
  defaultValue: "NORMAL",
2570
2674
  onChange: function onChange() {
2675
+ onTypeChange();
2571
2676
  triggerValidations(['validDateStart', 'validDateEnd'], getValues, trigger);
2572
2677
  _onChange();
2573
2678
  },
2574
2679
  autoFocus: true
2575
- }, Object.keys(SigmetType).map(function (key) {
2680
+ }, Object.keys(messageType).map(function (key) {
2576
2681
  return /*#__PURE__*/React__default.createElement(MenuItem, {
2577
2682
  value: key,
2578
2683
  key: key
2579
- }, SigmetType[key]);
2684
+ }, messageType[key]);
2580
2685
  })));
2581
2686
  };
2582
2687
 
@@ -3489,6 +3594,10 @@ var shouldRetrieveTAC = function shouldRetrieveTAC(product, omitChange) {
3489
3594
  if (product && isInstanceOfCancelSigmetOrAirmet(product)) {
3490
3595
  return true;
3491
3596
  }
3597
+ // retrieve for short (va) test sigmets with less mandatory fields
3598
+ if (product && isInstanceOfSigmetOrAirmet(product) && (product.type === 'SHORT_TEST' || product.type === 'SHORT_VA_TEST') && product.phenomenon && product.phenomenon !== '') {
3599
+ return true;
3600
+ }
3492
3601
  if (product && isInstanceOfSigmetOrAirmet(product) && product.phenomenon && product.phenomenon !== '' && product.isObservationOrForecast && product.isObservationOrForecast !== '' && product.validDateStart && product.validDateStart !== null && product.validDateEnd && product.validDateEnd !== null && isLevelFieldsComplete(product) && product.startGeometry && product.startGeometry !== null && product.startGeometryIntersect && product.startGeometryIntersect !== null && product.movementType && product.movementType !== '' && isChangeComplete(product, omitChange) && isSurfaceVisComplete(product)) {
3493
3602
  return true;
3494
3603
  }
@@ -7117,6 +7226,8 @@ var SigmetForm = function SigmetForm(_ref) {
7117
7226
  var _useConditionalFields = useConditionalFields$1(productConfig),
7118
7227
  hasVolcanicAshes = _useConditionalFields.hasVolcanicAshes,
7119
7228
  omitChange = _useConditionalFields.omitChange;
7229
+ var _useShortTestHelpers = useShortTestHelpers(),
7230
+ isShortTest = _useShortTestHelpers.isShortTest;
7120
7231
  var onChangeFir = function onChangeFir(event) {
7121
7232
  var newFIRValue = event === null || event === void 0 ? void 0 : event.target.value;
7122
7233
  var newFirGeoJSON = addFeatureProperties(getFir(productConfig, newFIRValue), featurePropsFIR);
@@ -7156,6 +7267,7 @@ var SigmetForm = function SigmetForm(_ref) {
7156
7267
  }
7157
7268
  }
7158
7269
  }, /*#__PURE__*/React__default.createElement(Type, {
7270
+ productType: "sigmet",
7159
7271
  isDisabled: isDisabled,
7160
7272
  isReadOnly: isReadOnly,
7161
7273
  onChange: onChangeForm
@@ -7172,7 +7284,7 @@ var SigmetForm = function SigmetForm(_ref) {
7172
7284
  isReadOnly: isReadOnly,
7173
7285
  helperText: helperText,
7174
7286
  onChange: onChangeForm
7175
- })), !isCancelSigmet && hasVolcanicAshes && ( /*#__PURE__*/React__default.createElement(VolcanicFields, {
7287
+ })), !isCancelSigmet && hasVolcanicAshes && !isShortTest() && ( /*#__PURE__*/React__default.createElement(VolcanicFields, {
7176
7288
  isDisabled: isDisabled,
7177
7289
  isReadOnly: isReadOnly,
7178
7290
  helperText: helperText
@@ -7426,6 +7538,7 @@ var AirmetForm = function AirmetForm(_ref) {
7426
7538
  }
7427
7539
  }
7428
7540
  }, /*#__PURE__*/React__default.createElement(Type, {
7541
+ productType: "airmet",
7429
7542
  isDisabled: isDisabled,
7430
7543
  isReadOnly: isReadOnly,
7431
7544
  onChange: onChangeForm
@@ -8170,6 +8283,8 @@ var ProductFormDialogContent = function ProductFormDialogContent(_ref) {
8170
8283
  var _useDraftFormHelpers = useDraftFormHelpers(),
8171
8284
  toggleIsDraft = _useDraftFormHelpers.toggleIsDraft,
8172
8285
  DraftFieldHelper = _useDraftFormHelpers.DraftFieldHelper;
8286
+ var _useShortTestHelpers = useShortTestHelpers(),
8287
+ isShortTest = _useShortTestHelpers.isShortTest;
8173
8288
  usePreventBrowserClose(isDirty);
8174
8289
  var confirmationDialog = useConfirmationDialog();
8175
8290
  var _React$useState = React.useState(false),
@@ -8216,7 +8331,7 @@ var ProductFormDialogContent = function ProductFormDialogContent(_ref) {
8216
8331
  confirmLabel: getConfirmationDialogButtonLabel(action, productType),
8217
8332
  cancelLabel: getConfirmationDialogCancelLabel(action),
8218
8333
  catchOnCancel: action === 'CLOSED',
8219
- content: isVAPhenomenon(product, action) ? ( /*#__PURE__*/React.createElement(CancelSigmetVolcanicMovements, {
8334
+ content: isVAPhenomenon(product, action) && !isShortTest() ? ( /*#__PURE__*/React.createElement(CancelSigmetVolcanicMovements, {
8220
8335
  sigmet: product,
8221
8336
  productConfig: productConfig
8222
8337
  })) : null
@@ -10494,6 +10609,50 @@ var fakeSigmetList = [{
10494
10609
  }]
10495
10610
  }
10496
10611
  });
10612
+ ({
10613
+ creationDate: '2020-09-17T12:00:00Z',
10614
+ canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
10615
+ sigmet: {
10616
+ uuid: 'someuniqueidprescibedbyBE',
10617
+ phenomenon: 'EMBD_TS',
10618
+ sequence: 'Z01',
10619
+ validDateStart: dateUtils.dateToString(dateUtils.add(dateUtils.utc(), {
10620
+ hours: 1
10621
+ })),
10622
+ validDateEnd: dateUtils.dateToString(dateUtils.add(dateUtils.utc(), {
10623
+ hours: 3
10624
+ })),
10625
+ firName: 'AMSTERDAM FIR',
10626
+ locationIndicatorATSU: 'EHAA',
10627
+ locationIndicatorATSR: 'EHAA',
10628
+ locationIndicatorMWO: 'EHDB',
10629
+ type: 'SHORT_TEST',
10630
+ status: 'DRAFT',
10631
+ firGeometry: getFir(sigmetConfig)
10632
+ }
10633
+ });
10634
+ ({
10635
+ creationDate: '2020-09-17T12:00:00Z',
10636
+ canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
10637
+ sigmet: {
10638
+ uuid: 'someuniqueidprescibedbyBE',
10639
+ phenomenon: 'VA_CLD',
10640
+ sequence: 'Y01',
10641
+ validDateStart: dateUtils.dateToString(dateUtils.add(dateUtils.utc(), {
10642
+ hours: 1
10643
+ })),
10644
+ validDateEnd: dateUtils.dateToString(dateUtils.add(dateUtils.utc(), {
10645
+ hours: 3
10646
+ })),
10647
+ firName: 'AMSTERDAM FIR',
10648
+ locationIndicatorATSU: 'EHAA',
10649
+ locationIndicatorATSR: 'EHAA',
10650
+ locationIndicatorMWO: 'EHDB',
10651
+ type: 'SHORT_VA_TEST',
10652
+ status: 'DRAFT',
10653
+ firGeometry: getFir(sigmetConfig)
10654
+ }
10655
+ });
10497
10656
  [{
10498
10657
  creationDate: '2020-09-17T12:00:00Z',
10499
10658
  canbe: ['DRAFTED', 'DISCARDED', 'PUBLISHED'],
@@ -11105,4 +11264,4 @@ var AirmetComponentsLookUp = function AirmetComponentsLookUp(payload, _ref) {
11105
11264
  }
11106
11265
  };
11107
11266
 
11108
- export { AirmetComponentsLookUp, AirmetForm, AirmetPhenomena, CloudLevelUnits, ContentDialog, Direction, DownloadSigmetAirmetConfigWrapper, LevelUnits, MapViewGeoJson, MetInfoWrapper, MovementUnit, ProductList, ProductListRow, ProductStatusDescription, SigmetComponentsLookUp, SigmetForm, SigmetPhenomena, SigmetType, StartOrEndDrawing, VisibilityCause, WindUnit, airmetConfig, createApi$1 as createApi, createApi as createFakeApi, isInstanceOfAirmet, isInstanceOfCancelAirmet, isInstanceOfCancelSigmet, isInstanceOfCancelSigmetOrAirmet, isInstanceOfSigmet, isInstanceOfSigmetOrAirmet, sigmetConfig };
11267
+ export { AirmetComponentsLookUp, AirmetForm, AirmetPhenomena, AirmetType, CloudLevelUnits, ContentDialog, Direction, DownloadSigmetAirmetConfigWrapper, LevelUnits, MapViewGeoJson, MetInfoWrapper, MovementUnit, ProductList, ProductListRow, ProductStatusDescription, SigmetComponentsLookUp, SigmetForm, SigmetPhenomena, SigmetType, StartOrEndDrawing, VisibilityCause, WindUnit, airmetConfig, createApi$1 as createApi, createApi as createFakeApi, isInstanceOfAirmet, isInstanceOfCancelAirmet, isInstanceOfCancelSigmet, isInstanceOfCancelSigmetOrAirmet, isInstanceOfSigmet, isInstanceOfSigmetOrAirmet, sigmetConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/sigmet-airmet",
3
- "version": "9.3.1",
3
+ "version": "9.4.1",
4
4
  "description": "GeoWeb Sigmet/Airmet library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -4,6 +4,7 @@ interface DrawToolsProps {
4
4
  activeTool: string;
5
5
  tools: DrawMode[];
6
6
  onChangeTool: (newToolMode: DrawMode) => void;
7
+ isDisabled?: boolean;
7
8
  }
8
9
  declare const DrawTools: React.FC<DrawToolsProps>;
9
10
  export default DrawTools;
@@ -0,0 +1,4 @@
1
+ export declare const useShortTestHelpers: () => {
2
+ isShortTest: () => boolean;
3
+ onTypeChange: () => void;
4
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,13 +1,23 @@
1
1
  /// <reference types="react" />
2
2
  import { mapTypes } from '@opengeoweb/store';
3
3
  export type ProductType = 'sigmet' | 'airmet';
4
+ /**
5
+ * The possible type for the airmet
6
+ */
7
+ export declare enum AirmetType {
8
+ 'NORMAL' = "Normal",
9
+ 'TEST' = "Test",
10
+ 'EXERCISE' = "Exercise"
11
+ }
4
12
  /**
5
13
  * The possible type for the sigmet
6
14
  */
7
15
  export declare enum SigmetType {
8
16
  'NORMAL' = "Normal",
9
17
  'TEST' = "Test",
10
- 'EXERCISE' = "Exercise"
18
+ 'EXERCISE' = "Exercise",
19
+ 'SHORT_TEST' = "Short test",
20
+ 'SHORT_VA_TEST' = "Short VA test"
11
21
  }
12
22
  /**
13
23
  * The possible phenomena for the sigmet
@@ -214,24 +224,24 @@ export type AirmetMovementType = 'STATIONARY' | 'MOVEMENT';
214
224
  export interface Sigmet extends BaseProduct {
215
225
  phenomenon: SigmetPhenomena;
216
226
  status: ProductStatus;
217
- isObservationOrForecast: ObservationOrForcast;
227
+ isObservationOrForecast?: ObservationOrForcast;
218
228
  observationOrForecastTime?: DateType;
219
- type: 'NORMAL' | 'TEST' | 'EXERCISE';
229
+ type: 'NORMAL' | 'TEST' | 'EXERCISE' | 'SHORT_TEST' | 'SHORT_VA_TEST';
220
230
  /** Change type of the Sigmet, can be:
221
231
  * INTSF:Intensifying
222
232
  * WKN: Weakening
223
233
  * NC: No change
224
234
  */
225
235
  change?: Change;
226
- levelInfoMode: LevelInfoMode;
227
- level: LevelType;
236
+ levelInfoMode?: LevelInfoMode;
237
+ level?: LevelType;
228
238
  lowerLevel?: LevelType;
229
239
  firGeometry?: GeoJSON.FeatureCollection;
230
- startGeometry: GeoJSON.FeatureCollection;
231
- startGeometryIntersect: GeoJSON.FeatureCollection;
240
+ startGeometry?: GeoJSON.FeatureCollection;
241
+ startGeometryIntersect?: GeoJSON.FeatureCollection;
232
242
  endGeometry?: GeoJSON.FeatureCollection;
233
243
  endGeometryIntersect?: GeoJSON.FeatureCollection;
234
- movementType: SigmetMovementType;
244
+ movementType?: SigmetMovementType;
235
245
  movementSpeed?: number;
236
246
  movementUnit?: MovementUnit;
237
247
  movementDirection?: Direction;
@@ -7,4 +7,6 @@ export declare const fakeNewSigmet: Sigmet;
7
7
  export declare const fakeSigmetMultiPolygon: SigmetFromBackend;
8
8
  export declare const fakeVolcanicCancelSigmetNoMoveTo: SigmetFromBackend;
9
9
  export declare const fakeVolcanicCancelSigmetWithMoveTo: SigmetFromBackend;
10
+ export declare const fakeShortTestSigmet: SigmetFromBackend;
11
+ export declare const fakeShortVaTestSigmet: SigmetFromBackend;
10
12
  export declare const fakeStaticSigmetList: SigmetFromBackend[];