@opengeoweb/sigmet-airmet 19.1.1 → 19.3.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.
Files changed (2) hide show
  1. package/dist/index.esm.js +89 -26
  2. package/package.json +2 -2
package/dist/index.esm.js CHANGED
@@ -6,8 +6,8 @@ import { Grid, Typography, FormControlLabel, Radio, Box, Checkbox, MenuItem, For
6
6
  import { useFormContext } from 'react-hook-form';
7
7
  import { FORM_FIELDS_NAMESPACE, useDraftFormHelpers, ReactHookFormRadioGroup, hasValidGeometry, ReactHookFormSelect, ReactHookFormNumberField, isInteger, isValidMin, isValidMax, isEmpty, ReactHookFormDateTime, countIntersectionPoints, hasMulitpleIntersections, ReactHookFormHiddenInput, hasIntersectionWithFIR, isValidGeoJsonCoordinates, isMaximumOneDrawing, isXHoursBefore, isXHoursAfter, ReactHookFormTextField, DegreesMinutesField, isLatitude, isNonOrBothCoordinates, isLongitude, ReactHookFormFormControl, isGeometryDirty, ReactHookFormProvider, defaultFormOptions } from '@opengeoweb/form-fields';
8
8
  import { useSelector, useDispatch, shallowEqual } from 'react-redux';
9
- import { uiSelectors, uiTypes, useUpdateSharedData, mapSelectors, syncGroupsActions, layerActions, mapActions, defaultLayers, syncConstants, uiActions, layerUtils, genericSelectors, drawingToolActions } from '@opengeoweb/store';
10
- import { FEATURE_DRAW_SECONDARY_FILL_COLOR, FEATURE_DRAW_SECONDARY_STROKE_COLOR, defaultIntersectionStyleProperties, defaultGeoJSONStyleProperties, addSelectionTypeToGeoJSON, DRAWMODE, defaultLocation, addGeoJSONProperties, defaultBox, defaultPolygon, defaultDelete, getIcon, addFeatureProperties, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle, OpenLayersMapDraw, useMapDrawTool, rewindGeometry } from '@opengeoweb/webmap-react';
9
+ import { uiSelectors, uiTypes, useUpdateFeatureSyncLayers, mapSelectors, syncGroupsActions, layerActions, mapActions, defaultLayers, syncConstants, uiActions, layerUtils, genericSelectors, drawingToolActions } from '@opengeoweb/store';
10
+ import { FEATURE_DRAW_SECONDARY_FILL_COLOR, FEATURE_DRAW_SECONDARY_STROKE_COLOR, defaultIntersectionStyleProperties, defaultGeoJSONStyleProperties, addSelectionTypeToGeoJSON, DRAWMODE, defaultLocation, addGeoJSONProperties, defaultBox, defaultPolygon, defaultDelete, getIcon, OpenLayersFeatureLayer, genericOpenLayersFeatureStyle, OpenLayersMapDraw, useMapDrawTool, addFeatureProperties, rewindGeometry } from '@opengeoweb/webmap-react';
11
11
  import { useQueryClient, useMutation } from '@tanstack/react-query';
12
12
  import { getHeaders, handleResponse, useAuthenticationContext, useAuthQuery } from '@opengeoweb/api';
13
13
  import i18n from 'i18next';
@@ -5530,32 +5530,23 @@ var getToolIcon = function getToolIcon(selectionType) {
5530
5530
  }
5531
5531
  return jsx(DrawFIRLand, {});
5532
5532
  };
5533
+ var LINKED_FORM_LAYER_IDS = new Set(['geojsonlayer-fir', 'geojsonlayer-intersection-start', 'geojsonlayer-intersection-end']);
5533
5534
  var useFormLayers = function useFormLayers(layers) {
5534
- var formLayers = layers.map(function (layer) {
5535
- if (layer.isInEditMode) {
5536
- var geojson = addFeatureProperties(layer.geojson, {
5537
- inEditMode: true
5538
- });
5539
- return {
5540
- id: layer.id,
5541
- geoJSON: geojson
5542
- };
5543
- }
5544
- return {
5545
- id: layer.id,
5546
- geoJSON: layer.geojson
5547
- };
5548
- }).filter(function (layer) {
5549
- return layer.geoJSON !== undefined && layer.geoJSON !== null;
5550
- });
5551
5535
  var sourcePanelId = useSelector(function (store) {
5552
5536
  return uiSelectors.getSourcePanelId(store, uiTypes.DialogTypes.PublicWarnings);
5553
5537
  });
5554
- useUpdateSharedData({
5555
- formFeatures: formLayers
5556
- }, sourcePanelId, {
5557
- requireLinkedMaps: false
5558
- });
5538
+ var linkedFormLayersById = React.useMemo(function () {
5539
+ return layers.reduce(function (layersById, layer) {
5540
+ var _Object$assign4;
5541
+ if (!layer.id || !layer.geojson || !LINKED_FORM_LAYER_IDS.has(layer.id)) {
5542
+ return layersById;
5543
+ }
5544
+ return Object.assign({}, layersById, (_Object$assign4 = {}, _Object$assign4[layer.id] = {
5545
+ geojson: layer.geojson
5546
+ }, _Object$assign4));
5547
+ }, {});
5548
+ }, [layers]);
5549
+ useUpdateFeatureSyncLayers(linkedFormLayersById, sourcePanelId);
5559
5550
  };
5560
5551
  var getSequenceStyling = function getSequenceStyling(product, hasTac) {
5561
5552
  if (hasTac === void 0) {
@@ -8473,6 +8464,10 @@ var useGeoJSONHandling = function useGeoJSONHandling(_ref) {
8473
8464
  var linkedMaps = useSelector(function (store) {
8474
8465
  return genericSelectors.getLinkedMapIds(store, sourcePanelId);
8475
8466
  });
8467
+ var layersById = useSelector(function (state) {
8468
+ var _state$layers;
8469
+ return ((_state$layers = state.layers) == null ? void 0 : _state$layers.byId) || {};
8470
+ });
8476
8471
  var drawToolsDisabled = warningsDialogOpen ? linkedMaps.length === 0 : false;
8477
8472
  var reduxActiveStart = useSelector(function (state) {
8478
8473
  var _state$drawingtools;
@@ -8488,6 +8483,7 @@ var useGeoJSONHandling = function useGeoJSONHandling(_ref) {
8488
8483
  start: undefined,
8489
8484
  end: undefined
8490
8485
  });
8486
+ var linkedMapsRef = useRef(linkedMaps);
8491
8487
  var registeredToolsRef = useRef({
8492
8488
  start: new Set(),
8493
8489
  end: new Set()
@@ -8522,6 +8518,71 @@ var useGeoJSONHandling = function useGeoJSONHandling(_ref) {
8522
8518
  handleToolDeactivation(prevActiveToolRef.current.end, activeEndDrawTool, storedEndGeoJSON, endGeoJSON, deactivateEndTool || function () {}, updateEndGeoJson || function () {});
8523
8519
  prevActiveToolRef.current.end = activeEndDrawTool;
8524
8520
  }, [activeEndDrawTool, storedEndGeoJSON, deactivateEndTool, updateEndGeoJson, endGeoJSON]);
8521
+ useEffect(function () {
8522
+ var removedMapIds = linkedMapsRef.current.filter(function (mapId) {
8523
+ return !linkedMaps.includes(mapId);
8524
+ });
8525
+ removedMapIds.forEach(function (mapId) {
8526
+ registeredToolsRef.current.start["delete"](mapId);
8527
+ registeredToolsRef.current.end["delete"](mapId);
8528
+ });
8529
+ linkedMapsRef.current = linkedMaps;
8530
+ }, [linkedMaps]);
8531
+ var ensureActiveToolLayers = useCallback(function (type, activeTool, geoJSON, fallbackGeoJSON, editModes) {
8532
+ if (!activeTool || linkedMaps.length === 0) {
8533
+ return;
8534
+ }
8535
+ var drawToolId = "sigmet" + (type === 'start' ? 'Start' : 'End') + "Geometry";
8536
+ var toolKey = type === 'start' ? 'start' : 'end';
8537
+ var geoJSONToUse = geoJSON && geoJSON.features.length > 0 ? geoJSON : fallbackGeoJSON;
8538
+ linkedMaps.forEach(function (mapId) {
8539
+ var geometryLayerId = "drawLayer-" + drawToolId + "-" + mapId;
8540
+ if (!registeredToolsRef.current[toolKey].has(mapId) || !layersById[geometryLayerId]) {
8541
+ dispatch(layerActions.addLayer({
8542
+ mapId: mapId,
8543
+ layer: {
8544
+ geojson: geoJSONToUse || {
8545
+ type: 'FeatureCollection',
8546
+ features: []
8547
+ },
8548
+ layerType: LayerType.featureLayer
8549
+ },
8550
+ layerId: geometryLayerId,
8551
+ origin: 'PublicWarningsForm'
8552
+ }));
8553
+ registeredToolsRef.current[toolKey].add(mapId);
8554
+ }
8555
+ });
8556
+ var activeMapId = linkedMaps[linkedMaps.length - 1];
8557
+ if (!activeMapId) {
8558
+ return;
8559
+ }
8560
+ var activeLayerId = "drawLayer-" + drawToolId + "-" + activeMapId;
8561
+ dispatch(drawingToolActions.registerDrawTool({
8562
+ drawToolId: drawToolId,
8563
+ defaultDrawModes: editModes
8564
+ }));
8565
+ dispatch(drawingToolActions.updateGeoJSONLayerId({
8566
+ drawToolId: drawToolId,
8567
+ geoJSONLayerId: activeLayerId
8568
+ }));
8569
+ var activeDrawMode = editModes == null ? void 0 : editModes.find(function (drawMode) {
8570
+ return drawMode.drawModeId === activeTool;
8571
+ });
8572
+ if (activeDrawMode != null && activeDrawMode.isSelectable) {
8573
+ dispatch(layerActions.toggleFeatureMode({
8574
+ layerId: activeLayerId,
8575
+ isInEditMode: true,
8576
+ drawMode: activeDrawMode.value
8577
+ }));
8578
+ }
8579
+ }, [dispatch, layersById, linkedMaps]);
8580
+ useEffect(function () {
8581
+ ensureActiveToolLayers('start', activeStartDrawTool, storedGeoJSON, startGeoJSON, startEditModes);
8582
+ }, [activeStartDrawTool, ensureActiveToolLayers, startEditModes, startGeoJSON, storedGeoJSON]);
8583
+ useEffect(function () {
8584
+ ensureActiveToolLayers('end', activeEndDrawTool, storedEndGeoJSON, endGeoJSON, endEditModes);
8585
+ }, [activeEndDrawTool, endEditModes, endGeoJSON, ensureActiveToolLayers, storedEndGeoJSON]);
8525
8586
  var onChangeTool = useCallback(function (type, newTool, deactivateOtherTool, changeActiveTool, editModes) {
8526
8587
  deactivateOtherTool();
8527
8588
  changeActiveTool(newTool);
@@ -8797,7 +8858,8 @@ var SigmetForm = function SigmetForm(_ref) {
8797
8858
  exitDrawModeCallback: deactivateStartTool,
8798
8859
  updateGeojson: updateStartGeoJson
8799
8860
  }), getEndLayer('geoJSONIntersection', 'geojsonlayer-intersection-end'), getStartLayer('geoJSONIntersection', 'geojsonlayer-intersection-start')];
8800
- useFormLayers(layers);
8861
+ var linkedFormLayers = [getStartLayer('geoJSONIntersectionBounds', 'geojsonlayer-fir'), getEndLayer('geoJSONIntersection', 'geojsonlayer-intersection-end'), getStartLayer('geoJSONIntersection', 'geojsonlayer-intersection-start')];
8862
+ useFormLayers(linkedFormLayers);
8801
8863
  var _React$useState3 = React.useState(mode === 'view'),
8802
8864
  isDisabled = _React$useState3[0],
8803
8865
  setIsDisabled = _React$useState3[1];
@@ -9184,7 +9246,8 @@ var AirmetForm = function AirmetForm(_ref) {
9184
9246
  exitDrawModeCallback: deactivateStartTool,
9185
9247
  updateGeojson: updateStartGeoJson
9186
9248
  }), getStartLayer('geoJSONIntersection', 'geojsonlayer-intersection-start')];
9187
- useFormLayers(layers);
9249
+ var linkedFormLayers = [getStartLayer('geoJSONIntersectionBounds', 'geojsonlayer-fir'), getStartLayer('geoJSONIntersection', 'geojsonlayer-intersection-start')];
9250
+ useFormLayers(linkedFormLayers);
9188
9251
  var _React$useState3 = React.useState(mode === 'view'),
9189
9252
  isDisabled = _React$useState3[0],
9190
9253
  setIsDisabled = _React$useState3[1];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/sigmet-airmet",
3
- "version": "19.1.1",
3
+ "version": "19.3.0",
4
4
  "description": "GeoWeb Sigmet/Airmet library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -32,7 +32,7 @@
32
32
  "@mui/system": "^9.0.1",
33
33
  "@opengeoweb/form-fields": "*",
34
34
  "react-hook-form": "^7.50.1",
35
- "axios": "^1.16.0",
35
+ "axios": "^1.18.0",
36
36
  "lodash": "^4.18.1",
37
37
  "@reduxjs/toolkit": "^2.6.1",
38
38
  "i18next": "^25.0.1",