@wenle_2523097/agri-map 2.0.1 → 2.0.2
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/dist/components/ColorSwatch/__tests__/index.test.d.ts +5 -0
- package/dist/components/FullscreenControl/__tests__/index.test.d.ts +5 -0
- package/dist/components/Marker/useEditHandlers.d.ts +2 -2
- package/dist/components/Measurement/__tests__/toolbar.test.d.ts +2 -2
- package/dist/components/Notification/__tests__/index.test.d.ts +1 -1
- package/dist/components/PerformanceDashboard/__tests__/index.test.d.ts +1 -1
- package/dist/components/PlotLayer/__tests__/index.test.d.ts +2 -3
- package/dist/components/Popup/__tests__/index.test.d.ts +5 -0
- package/dist/components/Road/hooks/useRoadEvents.d.ts +4 -0
- package/dist/components/SelectIcon/__tests__/index.test.d.ts +4 -0
- package/dist/components/StyleSelector/__tests__/index.test.d.ts +5 -0
- package/dist/components/TrackPlayer/__tests__/index.test.d.ts +5 -0
- package/dist/components/irrigation.esm.js +12 -2
- package/dist/components/irrigation.esm.js.map +1 -1
- package/dist/components/marker.esm.js.map +1 -1
- package/dist/components/plotgrouplayer.esm.js +3 -1
- package/dist/components/plotgrouplayer.esm.js.map +1 -1
- package/dist/components/road.esm.js +41 -13
- package/dist/components/road.esm.js.map +1 -1
- package/dist/hooks/__tests__/useRenderOptimization.test.d.ts +0 -1
- package/dist/hooks/index.esm.js +3 -2
- package/dist/hooks/index.esm.js.map +1 -1
- package/dist/hooks/usePolylineDraw.d.ts +75 -0
- package/dist/hooks/usePolylineEdit.d.ts +70 -0
- package/dist/hooks/usePolylineRenderer.d.ts +1 -1
- package/dist/hooks/useSnapManager.d.ts +50 -0
- package/dist/hooks/useVertexMarkers.d.ts +51 -0
- package/dist/index.esm.js +53 -14
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +53 -14
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +53 -14
- package/dist/index.umd.js.map +1 -1
- package/dist/tests/setup/antd-mock.d.ts +34 -0
- package/dist/tests/setup/browser-mock.d.ts +53 -0
- package/dist/tests/setup/index.d.ts +22 -0
- package/dist/tests/setup/leaflet-mock.d.ts +28 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/irrigation.d.ts +4 -123
- package/dist/types/marker.d.ts +12 -113
- package/dist/types/mixins/DataSourceMixin.d.ts +56 -0
- package/dist/types/mixins/EditableMixin.d.ts +124 -0
- package/dist/types/mixins/InteractionMixin.d.ts +43 -0
- package/dist/types/mixins/LifecycleMixin.d.ts +23 -0
- package/dist/types/mixins/LoadingMixin.d.ts +44 -0
- package/dist/types/mixins/SelectableMixin.d.ts +52 -0
- package/dist/types/mixins/StyleMixin.d.ts +49 -0
- package/dist/types/mixins/ViewControlMixin.d.ts +36 -0
- package/dist/types/mixins/index.d.ts +13 -0
- package/dist/types/plot.d.ts +13 -67
- package/dist/types/road.d.ts +11 -157
- package/dist/types/track.d.ts +5 -15
- package/dist/utils/__tests__/RTreeIndex.test.d.ts +0 -1
- package/dist/utils/drawContext.d.ts +65 -0
- package/package.json +1 -1
|
@@ -3973,6 +3973,10 @@ var RoadEditToolbar = function RoadEditToolbar(_ref) {
|
|
|
3973
3973
|
* - click 模式:点击道路切换 Popup 显示/隐藏(toggle)
|
|
3974
3974
|
* - hover 模式:鼠标进入道路延迟显示 Popup,离开立即隐藏(带防抖)
|
|
3975
3975
|
* - 地图点击:点击地图空白区域自动关闭 Popup
|
|
3976
|
+
*
|
|
3977
|
+
* 【稳定性优化】
|
|
3978
|
+
* handleRoadClick 和 handleRoadHover 通过 useRef 保持稳定引用,
|
|
3979
|
+
* 避免因内部状态变化导致回调函数引用改变。
|
|
3976
3980
|
*/
|
|
3977
3981
|
/**
|
|
3978
3982
|
* 计算 Popup 位置参数(用于 usePopupTrigger)
|
|
@@ -4028,6 +4032,11 @@ function useRoadEvents(options) {
|
|
|
4028
4032
|
},
|
|
4029
4033
|
canClose: popupTrigger.canClosePopup
|
|
4030
4034
|
});
|
|
4035
|
+
// ========== 稳定性优化:使用 ref 保持 popupTrigger 稳定引用 ==========
|
|
4036
|
+
// popupTrigger 来自 usePopupState,其内部状态变化会导致函数引用改变
|
|
4037
|
+
// 通过 ref 缓存,避免 handleRoadClick/handleRoadHover 依赖变化
|
|
4038
|
+
var popupTriggerLocalRef = useRef(popupTrigger);
|
|
4039
|
+
popupTriggerLocalRef.current = popupTrigger;
|
|
4031
4040
|
// ========== 业务逻辑 ==========
|
|
4032
4041
|
/** 计算 Popup 参数的辅助函数 */
|
|
4033
4042
|
var getPopupParams = useCallback(function (road, layer) {
|
|
@@ -4037,30 +4046,30 @@ function useRoadEvents(options) {
|
|
|
4037
4046
|
// 处理道路点击
|
|
4038
4047
|
var handleRoadClick = useCallback(function (roadId, road, layer) {
|
|
4039
4048
|
// Popup 处理(仅 click 模式)
|
|
4040
|
-
if (
|
|
4049
|
+
if (popupTriggerRef.current === 'click' && onPopupOpenRef !== null && onPopupOpenRef !== void 0 && onPopupOpenRef.current) {
|
|
4041
4050
|
var _getPopupParams = getPopupParams(road, layer),
|
|
4042
4051
|
position = _getPopupParams.position,
|
|
4043
4052
|
bounds = _getPopupParams.bounds;
|
|
4044
|
-
|
|
4053
|
+
popupTriggerLocalRef.current.handleItemClick(roadId, road, layer, position, bounds);
|
|
4045
4054
|
}
|
|
4046
|
-
}, [
|
|
4055
|
+
}, [onPopupOpenRef, getPopupParams, popupTriggerRef]);
|
|
4047
4056
|
// 处理道路悬停进入
|
|
4048
4057
|
var handleRoadHover = useCallback(function (roadId, road, layer, type) {
|
|
4049
4058
|
if (type === 'mouseover') {
|
|
4050
4059
|
// Popup 处理(仅 hover 模式)
|
|
4051
|
-
if (
|
|
4060
|
+
if (popupTriggerRef.current === 'hover' && onPopupOpenRef !== null && onPopupOpenRef !== void 0 && onPopupOpenRef.current) {
|
|
4052
4061
|
var _getPopupParams2 = getPopupParams(road, layer),
|
|
4053
4062
|
position = _getPopupParams2.position,
|
|
4054
4063
|
bounds = _getPopupParams2.bounds;
|
|
4055
|
-
|
|
4064
|
+
popupTriggerLocalRef.current.handleMouseOver(roadId, road, layer, position, bounds);
|
|
4056
4065
|
}
|
|
4057
4066
|
} else {
|
|
4058
4067
|
// mouseout: 清除防抖定时器
|
|
4059
|
-
if (
|
|
4060
|
-
|
|
4068
|
+
if (popupTriggerRef.current === 'hover') {
|
|
4069
|
+
popupTriggerLocalRef.current.handleMouseOut();
|
|
4061
4070
|
}
|
|
4062
4071
|
}
|
|
4063
|
-
}, [
|
|
4072
|
+
}, [onPopupOpenRef, getPopupParams, popupTriggerRef]);
|
|
4064
4073
|
// 处理道路右键
|
|
4065
4074
|
var handleRoadContextMenu = useCallback(function (_roadId, _road, _layer, _event) {
|
|
4066
4075
|
// 右键默认行为由外层处理,这里仅提供基础支持
|
|
@@ -5800,7 +5809,7 @@ function useEditMode(editModeProp, defaultButtons) {
|
|
|
5800
5809
|
* 管理线要素图层的创建与清理
|
|
5801
5810
|
*
|
|
5802
5811
|
* 负责:
|
|
5803
|
-
* 1. 编辑模式下过滤数据(create/
|
|
5812
|
+
* 1. 编辑模式下过滤数据(create/redraw 模式不渲染已有要素)
|
|
5804
5813
|
* 2. 创建 LayerGroup 并将数据渲染进去
|
|
5805
5814
|
* 3. 组件卸载时移除 editingLayerRef
|
|
5806
5815
|
*
|
|
@@ -5853,7 +5862,8 @@ function usePolylineRenderer(options) {
|
|
|
5853
5862
|
return renderItem(item, layerGroup, index);
|
|
5854
5863
|
});
|
|
5855
5864
|
// 数据变化时清理编辑图层(新建保存后数据源更新时,移除临时的编辑图层避免重复)
|
|
5856
|
-
|
|
5865
|
+
// 注意:在 redraw 模式下 editingLayerRef 不应被清理(可能在编辑过程中)
|
|
5866
|
+
if (dataChanged && editingLayerRef.current && currentMode !== 'redraw') {
|
|
5857
5867
|
currentMap.removeLayer(editingLayerRef.current);
|
|
5858
5868
|
editingLayerRef.current = null;
|
|
5859
5869
|
}
|
|
@@ -7008,6 +7018,16 @@ var Road = /*#__PURE__*/forwardRef(function RoadComponent(props, ref) {
|
|
|
7008
7018
|
}, [map, editEnabled]);
|
|
7009
7019
|
var renderItem = useCallback(function (road, layerGroup, index) {
|
|
7010
7020
|
var _onRowRef$current, _onRowRef$current2;
|
|
7021
|
+
// ========== 方案一修复:redraw 模式下跳过正在编辑的道路 ==========
|
|
7022
|
+
// 修复描述:当进入重绘模式时,被选中的道路(id === value)不应该被 renderItem 渲染
|
|
7023
|
+
// 原因:被选中的道路已经通过 editingLayerRef 在地图上以编辑样式(绿色)渲染
|
|
7024
|
+
// 如果 renderItem 仍然渲染,会导致同一道路以两种样式(红色原始样式 + 绿色编辑样式)同时显示
|
|
7025
|
+
// 撤销方法:删除以下 if 块及其注释即可恢复到修改前的状态
|
|
7026
|
+
// 问题根因:usePolylineRenderer 在 currentMode === 'redraw' 时仍然渲染了所有数据,包括被编辑的道路
|
|
7027
|
+
// ========== 方案一修复结束 ==========================================
|
|
7028
|
+
if (currentModeRef.current === 'redraw' && road.id === valueRef.current) {
|
|
7029
|
+
return; // 跳过渲染,由 editingLayerRef 处理该道路的显示
|
|
7030
|
+
}
|
|
7011
7031
|
var isSelected = road.id === value;
|
|
7012
7032
|
var style = getRoadStyle(road, isSelected);
|
|
7013
7033
|
var rowEvents = (_onRowRef$current = (_onRowRef$current2 = onRowRef.current) === null || _onRowRef$current2 === void 0 ? void 0 : _onRowRef$current2.call(onRowRef, road, index)) !== null && _onRowRef$current !== void 0 ? _onRowRef$current : {};
|
|
@@ -7176,8 +7196,10 @@ var Road = /*#__PURE__*/forwardRef(function RoadComponent(props, ref) {
|
|
|
7176
7196
|
}
|
|
7177
7197
|
}, [value, normalizedData, onEditRef, enabledButtonsRef]);
|
|
7178
7198
|
var handleRedraw = useCallback(function () {
|
|
7179
|
-
var _editingPath$vertexBo3, _editingPath$vertexFi3, _editingPath$vertexFi4, _editLayer$pm;
|
|
7180
|
-
if (!map || !enabledButtonsRef.current.includes('redraw') || !value || !map.pm)
|
|
7199
|
+
var _editingPath$vertexBo3, _editingPath$vertexFi3, _editingPath$vertexFi4, _map$pm, _map$pm$globalEditMod, _editLayer$pm;
|
|
7200
|
+
if (!map || !enabledButtonsRef.current.includes('redraw') || !value || !map.pm) {
|
|
7201
|
+
return;
|
|
7202
|
+
}
|
|
7181
7203
|
var layer = layerByIdRef.current[value];
|
|
7182
7204
|
if (!layer) return;
|
|
7183
7205
|
var road = normalizedData.find(function (r) {
|
|
@@ -7197,6 +7219,10 @@ var Road = /*#__PURE__*/forwardRef(function RoadComponent(props, ref) {
|
|
|
7197
7219
|
map.removeLayer(layerGroupRef.current);
|
|
7198
7220
|
layerGroupRef.current = null;
|
|
7199
7221
|
}
|
|
7222
|
+
// 禁用全局编辑模式
|
|
7223
|
+
if ((_map$pm = map.pm) !== null && _map$pm !== void 0 && (_map$pm$globalEditMod = _map$pm.globalEditModeEnabled) !== null && _map$pm$globalEditMod !== void 0 && _map$pm$globalEditMod.call(_map$pm)) {
|
|
7224
|
+
map.pm.disableGlobalEditMode();
|
|
7225
|
+
}
|
|
7200
7226
|
var editLayer = L$1.polyline(road.points, _objectSpread2(_objectSpread2({}, editingPath), {}, {
|
|
7201
7227
|
className: 'road-line'
|
|
7202
7228
|
})).addTo(map);
|
|
@@ -7218,7 +7244,9 @@ var Road = /*#__PURE__*/forwardRef(function RoadComponent(props, ref) {
|
|
|
7218
7244
|
}, [value, normalizedData, map, editingPath, enabledButtonsRef]);
|
|
7219
7245
|
useEffect(function () {
|
|
7220
7246
|
var _editingPath$vertexBo4, _editingPath$vertexFi5, _editingPath$vertexFi6;
|
|
7221
|
-
if (currentMode !== 'redraw' || !editingLayerRef.current || !map)
|
|
7247
|
+
if (currentMode !== 'redraw' || !editingLayerRef.current || !map) {
|
|
7248
|
+
return;
|
|
7249
|
+
}
|
|
7222
7250
|
editingLayerRef.current.setStyle(editingPath);
|
|
7223
7251
|
// 设置顶点样式 CSS 变量(与 PlotLayer 保持一致)
|
|
7224
7252
|
var vertexBorderColor = (_editingPath$vertexBo4 = editingPath.vertexBorderColor) !== null && _editingPath$vertexBo4 !== void 0 ? _editingPath$vertexBo4 : ROAD_STYLE.editing.vertexBorderColor;
|