@mint-ui/map 1.2.0-test.5 → 1.2.0-test.7
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/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.d.ts +3 -1
- package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.js +27 -8
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.d.ts +2 -2
- package/dist/index.es.js +27 -8
- package/dist/index.umd.js +27 -8
- package/package.json +1 -1
|
@@ -36,6 +36,8 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
|
|
|
36
36
|
maxCacheSize?: number;
|
|
37
37
|
/** 외부에서 제어하는 선택된 항목 배열 (선택) */
|
|
38
38
|
selectedItems?: KonvaCanvasMarkerData<T>[];
|
|
39
|
+
/** 외부에서 전달된 단일 선택 아이템 (특별한 효과용) */
|
|
40
|
+
selectedItem?: KonvaCanvasMarkerData<T> | null;
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
43
|
* 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
|
|
@@ -46,5 +48,5 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
|
|
|
46
48
|
*
|
|
47
49
|
* 주의: JSON.stringify() 사용 금지! (매우 느림)
|
|
48
50
|
*/
|
|
49
|
-
declare const WoongKonvaMarker: <T>({ markers, dataType, onClick, onMouseOver, onMouseOut, renderBase, renderAnimation, renderEvent, enableMultiSelect, topOnHover, enableViewportCulling, cullingMargin, maxCacheSize, selectedItems: externalSelectedItems, ...options }: WoongKonvaMarkerProps<T>) => React.ReactPortal;
|
|
51
|
+
declare const WoongKonvaMarker: <T>({ markers, dataType, onClick, onMouseOver, onMouseOut, renderBase, renderAnimation, renderEvent, enableMultiSelect, topOnHover, enableViewportCulling, cullingMargin, maxCacheSize, selectedItems: externalSelectedItems, selectedItem: externalSelectedItem, ...options }: WoongKonvaMarkerProps<T>) => React.ReactPortal;
|
|
50
52
|
export default WoongKonvaMarker;
|
|
@@ -55,7 +55,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
55
55
|
_f = _a.maxCacheSize,
|
|
56
56
|
maxCacheSize = _f === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _f,
|
|
57
57
|
externalSelectedItems = _a.selectedItems,
|
|
58
|
-
|
|
58
|
+
externalSelectedItem = _a.selectedItem,
|
|
59
|
+
options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem"]); // --------------------------------------------------------------------------
|
|
59
60
|
// Hooks & Context
|
|
60
61
|
// --------------------------------------------------------------------------
|
|
61
62
|
|
|
@@ -89,9 +90,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
89
90
|
/** 현재 Hover 중인 항목 */
|
|
90
91
|
|
|
91
92
|
var hoveredItemRef = React.useRef(null);
|
|
92
|
-
/**
|
|
93
|
+
/** 외부에서 전달된 선택 항목 (Ref로 관리하여 클로저 문제 해결) */
|
|
93
94
|
|
|
94
|
-
var
|
|
95
|
+
var selectedItemRef = React.useRef(externalSelectedItem);
|
|
95
96
|
/**
|
|
96
97
|
* 선택된 항목의 ID Set
|
|
97
98
|
*
|
|
@@ -419,6 +420,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
419
420
|
|
|
420
421
|
|
|
421
422
|
var doRenderEvent = function () {
|
|
423
|
+
if (!onClick && !onMouseOver && !onMouseOut) return;
|
|
422
424
|
if (!renderEvent) return;
|
|
423
425
|
var layer = eventLayerRef.current;
|
|
424
426
|
if (!layer) return; // 🔥 Shape 재사용: 이미 존재하면 재사용, 없으면 생성
|
|
@@ -439,7 +441,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
439
441
|
hoveredItem: hoveredItemRef.current,
|
|
440
442
|
utils: renderUtils,
|
|
441
443
|
selectedItems: selectedItems,
|
|
442
|
-
|
|
444
|
+
selectedItem: selectedItemRef.current
|
|
443
445
|
});
|
|
444
446
|
},
|
|
445
447
|
perfectDrawEnabled: false,
|
|
@@ -619,6 +621,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
619
621
|
|
|
620
622
|
|
|
621
623
|
var setHovered = function (data) {
|
|
624
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
622
625
|
hoveredItemRef.current = data;
|
|
623
626
|
|
|
624
627
|
if (draggingRef.current) {
|
|
@@ -643,8 +646,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
643
646
|
|
|
644
647
|
|
|
645
648
|
var handleLocalClick = function (data) {
|
|
646
|
-
//
|
|
647
|
-
lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
|
|
649
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
648
650
|
|
|
649
651
|
if (enableMultiSelect) {
|
|
650
652
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -695,6 +697,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
695
697
|
var handleClick = function (event) {
|
|
696
698
|
var _a;
|
|
697
699
|
|
|
700
|
+
if (!onClick) return;
|
|
698
701
|
if (context$1 || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
699
702
|
|
|
700
703
|
try {
|
|
@@ -703,7 +706,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
703
706
|
|
|
704
707
|
if (data) {
|
|
705
708
|
handleLocalClick(data);
|
|
706
|
-
|
|
709
|
+
onClick(data, selectedIdsRef.current);
|
|
707
710
|
}
|
|
708
711
|
} catch (error) {
|
|
709
712
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -717,6 +720,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
717
720
|
var handleMouseMove = function (event) {
|
|
718
721
|
var _a;
|
|
719
722
|
|
|
723
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
720
724
|
if (context$1 || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
721
725
|
|
|
722
726
|
try {
|
|
@@ -757,6 +761,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
757
761
|
|
|
758
762
|
|
|
759
763
|
var handleMouseLeave = function () {
|
|
764
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
760
765
|
var prevHovered = hoveredItemRef.current;
|
|
761
766
|
|
|
762
767
|
if (prevHovered) {
|
|
@@ -910,7 +915,11 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
910
915
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
911
916
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
912
917
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
913
|
-
|
|
918
|
+
|
|
919
|
+
if (onClick) {
|
|
920
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
921
|
+
}
|
|
922
|
+
|
|
914
923
|
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
915
924
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
916
925
|
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
@@ -953,6 +962,16 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
953
962
|
doRenderEvent();
|
|
954
963
|
}, [externalSelectedItems]); // 배열 자체를 dependency로 사용
|
|
955
964
|
// --------------------------------------------------------------------------
|
|
965
|
+
// Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
|
|
966
|
+
// --------------------------------------------------------------------------
|
|
967
|
+
|
|
968
|
+
React.useEffect(function () {
|
|
969
|
+
if (!stageRef.current) return; // Ref 동기화
|
|
970
|
+
|
|
971
|
+
selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
|
|
972
|
+
|
|
973
|
+
doRenderEvent();
|
|
974
|
+
}, [externalSelectedItem]); // --------------------------------------------------------------------------
|
|
956
975
|
// Lifecycle: 마커 데이터 변경 시 렌더링
|
|
957
976
|
// --------------------------------------------------------------------------
|
|
958
977
|
|
|
@@ -111,8 +111,8 @@ export interface RenderEventParams<T> {
|
|
|
111
111
|
utils: RenderUtils<T>;
|
|
112
112
|
/** 현재 선택된 마커 데이터 배열 (선택 강조용) */
|
|
113
113
|
selectedItems?: KonvaCanvasMarkerData<T>[];
|
|
114
|
-
/**
|
|
115
|
-
|
|
114
|
+
/** 외부에서 전달된 단일 선택 아이템 (특별한 효과용) */
|
|
115
|
+
selectedItem?: KonvaCanvasMarkerData<T> | null;
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
118
|
* 커스텀 렌더링 함수 타입 - Event Layer
|
package/dist/index.es.js
CHANGED
|
@@ -5405,7 +5405,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5405
5405
|
_f = _a.maxCacheSize,
|
|
5406
5406
|
maxCacheSize = _f === void 0 ? DEFAULT_MAX_CACHE_SIZE : _f,
|
|
5407
5407
|
externalSelectedItems = _a.selectedItems,
|
|
5408
|
-
|
|
5408
|
+
externalSelectedItem = _a.selectedItem,
|
|
5409
|
+
options = __rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem"]); // --------------------------------------------------------------------------
|
|
5409
5410
|
// Hooks & Context
|
|
5410
5411
|
// --------------------------------------------------------------------------
|
|
5411
5412
|
|
|
@@ -5439,9 +5440,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5439
5440
|
/** 현재 Hover 중인 항목 */
|
|
5440
5441
|
|
|
5441
5442
|
var hoveredItemRef = useRef(null);
|
|
5442
|
-
/**
|
|
5443
|
+
/** 외부에서 전달된 선택 항목 (Ref로 관리하여 클로저 문제 해결) */
|
|
5443
5444
|
|
|
5444
|
-
var
|
|
5445
|
+
var selectedItemRef = useRef(externalSelectedItem);
|
|
5445
5446
|
/**
|
|
5446
5447
|
* 선택된 항목의 ID Set
|
|
5447
5448
|
*
|
|
@@ -5769,6 +5770,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5769
5770
|
|
|
5770
5771
|
|
|
5771
5772
|
var doRenderEvent = function () {
|
|
5773
|
+
if (!onClick && !onMouseOver && !onMouseOut) return;
|
|
5772
5774
|
if (!renderEvent) return;
|
|
5773
5775
|
var layer = eventLayerRef.current;
|
|
5774
5776
|
if (!layer) return; // 🔥 Shape 재사용: 이미 존재하면 재사용, 없으면 생성
|
|
@@ -5789,7 +5791,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5789
5791
|
hoveredItem: hoveredItemRef.current,
|
|
5790
5792
|
utils: renderUtils,
|
|
5791
5793
|
selectedItems: selectedItems,
|
|
5792
|
-
|
|
5794
|
+
selectedItem: selectedItemRef.current
|
|
5793
5795
|
});
|
|
5794
5796
|
},
|
|
5795
5797
|
perfectDrawEnabled: false,
|
|
@@ -5969,6 +5971,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5969
5971
|
|
|
5970
5972
|
|
|
5971
5973
|
var setHovered = function (data) {
|
|
5974
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
5972
5975
|
hoveredItemRef.current = data;
|
|
5973
5976
|
|
|
5974
5977
|
if (draggingRef.current) {
|
|
@@ -5993,8 +5996,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5993
5996
|
|
|
5994
5997
|
|
|
5995
5998
|
var handleLocalClick = function (data) {
|
|
5996
|
-
//
|
|
5997
|
-
lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
|
|
5999
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
5998
6000
|
|
|
5999
6001
|
if (enableMultiSelect) {
|
|
6000
6002
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -6045,6 +6047,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6045
6047
|
var handleClick = function (event) {
|
|
6046
6048
|
var _a;
|
|
6047
6049
|
|
|
6050
|
+
if (!onClick) return;
|
|
6048
6051
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6049
6052
|
|
|
6050
6053
|
try {
|
|
@@ -6053,7 +6056,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6053
6056
|
|
|
6054
6057
|
if (data) {
|
|
6055
6058
|
handleLocalClick(data);
|
|
6056
|
-
|
|
6059
|
+
onClick(data, selectedIdsRef.current);
|
|
6057
6060
|
}
|
|
6058
6061
|
} catch (error) {
|
|
6059
6062
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -6067,6 +6070,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6067
6070
|
var handleMouseMove = function (event) {
|
|
6068
6071
|
var _a;
|
|
6069
6072
|
|
|
6073
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6070
6074
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6071
6075
|
|
|
6072
6076
|
try {
|
|
@@ -6107,6 +6111,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6107
6111
|
|
|
6108
6112
|
|
|
6109
6113
|
var handleMouseLeave = function () {
|
|
6114
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6110
6115
|
var prevHovered = hoveredItemRef.current;
|
|
6111
6116
|
|
|
6112
6117
|
if (prevHovered) {
|
|
@@ -6260,7 +6265,11 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6260
6265
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
6261
6266
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6262
6267
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6263
|
-
|
|
6268
|
+
|
|
6269
|
+
if (onClick) {
|
|
6270
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
6271
|
+
}
|
|
6272
|
+
|
|
6264
6273
|
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6265
6274
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
6266
6275
|
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
@@ -6303,6 +6312,16 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6303
6312
|
doRenderEvent();
|
|
6304
6313
|
}, [externalSelectedItems]); // 배열 자체를 dependency로 사용
|
|
6305
6314
|
// --------------------------------------------------------------------------
|
|
6315
|
+
// Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
|
|
6316
|
+
// --------------------------------------------------------------------------
|
|
6317
|
+
|
|
6318
|
+
useEffect(function () {
|
|
6319
|
+
if (!stageRef.current) return; // Ref 동기화
|
|
6320
|
+
|
|
6321
|
+
selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
|
|
6322
|
+
|
|
6323
|
+
doRenderEvent();
|
|
6324
|
+
}, [externalSelectedItem]); // --------------------------------------------------------------------------
|
|
6306
6325
|
// Lifecycle: 마커 데이터 변경 시 렌더링
|
|
6307
6326
|
// --------------------------------------------------------------------------
|
|
6308
6327
|
|
package/dist/index.umd.js
CHANGED
|
@@ -5409,7 +5409,8 @@
|
|
|
5409
5409
|
_f = _a.maxCacheSize,
|
|
5410
5410
|
maxCacheSize = _f === void 0 ? DEFAULT_MAX_CACHE_SIZE : _f,
|
|
5411
5411
|
externalSelectedItems = _a.selectedItems,
|
|
5412
|
-
|
|
5412
|
+
externalSelectedItem = _a.selectedItem,
|
|
5413
|
+
options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem"]); // --------------------------------------------------------------------------
|
|
5413
5414
|
// Hooks & Context
|
|
5414
5415
|
// --------------------------------------------------------------------------
|
|
5415
5416
|
|
|
@@ -5443,9 +5444,9 @@
|
|
|
5443
5444
|
/** 현재 Hover 중인 항목 */
|
|
5444
5445
|
|
|
5445
5446
|
var hoveredItemRef = React.useRef(null);
|
|
5446
|
-
/**
|
|
5447
|
+
/** 외부에서 전달된 선택 항목 (Ref로 관리하여 클로저 문제 해결) */
|
|
5447
5448
|
|
|
5448
|
-
var
|
|
5449
|
+
var selectedItemRef = React.useRef(externalSelectedItem);
|
|
5449
5450
|
/**
|
|
5450
5451
|
* 선택된 항목의 ID Set
|
|
5451
5452
|
*
|
|
@@ -5773,6 +5774,7 @@
|
|
|
5773
5774
|
|
|
5774
5775
|
|
|
5775
5776
|
var doRenderEvent = function () {
|
|
5777
|
+
if (!onClick && !onMouseOver && !onMouseOut) return;
|
|
5776
5778
|
if (!renderEvent) return;
|
|
5777
5779
|
var layer = eventLayerRef.current;
|
|
5778
5780
|
if (!layer) return; // 🔥 Shape 재사용: 이미 존재하면 재사용, 없으면 생성
|
|
@@ -5793,7 +5795,7 @@
|
|
|
5793
5795
|
hoveredItem: hoveredItemRef.current,
|
|
5794
5796
|
utils: renderUtils,
|
|
5795
5797
|
selectedItems: selectedItems,
|
|
5796
|
-
|
|
5798
|
+
selectedItem: selectedItemRef.current
|
|
5797
5799
|
});
|
|
5798
5800
|
},
|
|
5799
5801
|
perfectDrawEnabled: false,
|
|
@@ -5973,6 +5975,7 @@
|
|
|
5973
5975
|
|
|
5974
5976
|
|
|
5975
5977
|
var setHovered = function (data) {
|
|
5978
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
5976
5979
|
hoveredItemRef.current = data;
|
|
5977
5980
|
|
|
5978
5981
|
if (draggingRef.current) {
|
|
@@ -5997,8 +6000,7 @@
|
|
|
5997
6000
|
|
|
5998
6001
|
|
|
5999
6002
|
var handleLocalClick = function (data) {
|
|
6000
|
-
//
|
|
6001
|
-
lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
|
|
6003
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
6002
6004
|
|
|
6003
6005
|
if (enableMultiSelect) {
|
|
6004
6006
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -6049,6 +6051,7 @@
|
|
|
6049
6051
|
var handleClick = function (event) {
|
|
6050
6052
|
var _a;
|
|
6051
6053
|
|
|
6054
|
+
if (!onClick) return;
|
|
6052
6055
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6053
6056
|
|
|
6054
6057
|
try {
|
|
@@ -6057,7 +6060,7 @@
|
|
|
6057
6060
|
|
|
6058
6061
|
if (data) {
|
|
6059
6062
|
handleLocalClick(data);
|
|
6060
|
-
|
|
6063
|
+
onClick(data, selectedIdsRef.current);
|
|
6061
6064
|
}
|
|
6062
6065
|
} catch (error) {
|
|
6063
6066
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -6071,6 +6074,7 @@
|
|
|
6071
6074
|
var handleMouseMove = function (event) {
|
|
6072
6075
|
var _a;
|
|
6073
6076
|
|
|
6077
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6074
6078
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6075
6079
|
|
|
6076
6080
|
try {
|
|
@@ -6111,6 +6115,7 @@
|
|
|
6111
6115
|
|
|
6112
6116
|
|
|
6113
6117
|
var handleMouseLeave = function () {
|
|
6118
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6114
6119
|
var prevHovered = hoveredItemRef.current;
|
|
6115
6120
|
|
|
6116
6121
|
if (prevHovered) {
|
|
@@ -6264,7 +6269,11 @@
|
|
|
6264
6269
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
6265
6270
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6266
6271
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6267
|
-
|
|
6272
|
+
|
|
6273
|
+
if (onClick) {
|
|
6274
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
6275
|
+
}
|
|
6276
|
+
|
|
6268
6277
|
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6269
6278
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
6270
6279
|
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
@@ -6307,6 +6316,16 @@
|
|
|
6307
6316
|
doRenderEvent();
|
|
6308
6317
|
}, [externalSelectedItems]); // 배열 자체를 dependency로 사용
|
|
6309
6318
|
// --------------------------------------------------------------------------
|
|
6319
|
+
// Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
|
|
6320
|
+
// --------------------------------------------------------------------------
|
|
6321
|
+
|
|
6322
|
+
React.useEffect(function () {
|
|
6323
|
+
if (!stageRef.current) return; // Ref 동기화
|
|
6324
|
+
|
|
6325
|
+
selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
|
|
6326
|
+
|
|
6327
|
+
doRenderEvent();
|
|
6328
|
+
}, [externalSelectedItem]); // --------------------------------------------------------------------------
|
|
6310
6329
|
// Lifecycle: 마커 데이터 변경 시 렌더링
|
|
6311
6330
|
// --------------------------------------------------------------------------
|
|
6312
6331
|
|