@mint-ui/map 1.2.0-test.5 → 1.2.0-test.6

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.
@@ -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
- options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems"]); // --------------------------------------------------------------------------
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 lastClickedItemRef = React.useRef(null);
95
+ var selectedItemRef = React.useRef(externalSelectedItem);
95
96
  /**
96
97
  * 선택된 항목의 ID Set
97
98
  *
@@ -439,7 +440,7 @@ var WoongKonvaMarkerComponent = function (_a) {
439
440
  hoveredItem: hoveredItemRef.current,
440
441
  utils: renderUtils,
441
442
  selectedItems: selectedItems,
442
- lastClickedItem: lastClickedItemRef.current
443
+ selectedItem: selectedItemRef.current
443
444
  });
444
445
  },
445
446
  perfectDrawEnabled: false,
@@ -643,9 +644,7 @@ var WoongKonvaMarkerComponent = function (_a) {
643
644
 
644
645
 
645
646
  var handleLocalClick = function (data) {
646
- // 0. 마지막 클릭 항목 저장
647
- lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
648
-
647
+ // 1. 선택 상태 업데이트
649
648
  if (enableMultiSelect) {
650
649
  // 다중 선택: Set과 Map 동시 업데이트
651
650
  var newSelected = new Set(selectedIdsRef.current);
@@ -953,6 +952,16 @@ var WoongKonvaMarkerComponent = function (_a) {
953
952
  doRenderEvent();
954
953
  }, [externalSelectedItems]); // 배열 자체를 dependency로 사용
955
954
  // --------------------------------------------------------------------------
955
+ // Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
956
+ // --------------------------------------------------------------------------
957
+
958
+ React.useEffect(function () {
959
+ if (!stageRef.current) return; // Ref 동기화
960
+
961
+ selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
962
+
963
+ doRenderEvent();
964
+ }, [externalSelectedItem]); // --------------------------------------------------------------------------
956
965
  // Lifecycle: 마커 데이터 변경 시 렌더링
957
966
  // --------------------------------------------------------------------------
958
967
 
@@ -111,8 +111,8 @@ export interface RenderEventParams<T> {
111
111
  utils: RenderUtils<T>;
112
112
  /** 현재 선택된 마커 데이터 배열 (선택 강조용) */
113
113
  selectedItems?: KonvaCanvasMarkerData<T>[];
114
- /** 마지막으로 클릭된 마커 데이터 */
115
- lastClickedItem: KonvaCanvasMarkerData<T> | null;
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
- options = __rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems"]); // --------------------------------------------------------------------------
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 lastClickedItemRef = useRef(null);
5445
+ var selectedItemRef = useRef(externalSelectedItem);
5445
5446
  /**
5446
5447
  * 선택된 항목의 ID Set
5447
5448
  *
@@ -5789,7 +5790,7 @@ var WoongKonvaMarkerComponent = function (_a) {
5789
5790
  hoveredItem: hoveredItemRef.current,
5790
5791
  utils: renderUtils,
5791
5792
  selectedItems: selectedItems,
5792
- lastClickedItem: lastClickedItemRef.current
5793
+ selectedItem: selectedItemRef.current
5793
5794
  });
5794
5795
  },
5795
5796
  perfectDrawEnabled: false,
@@ -5993,9 +5994,7 @@ var WoongKonvaMarkerComponent = function (_a) {
5993
5994
 
5994
5995
 
5995
5996
  var handleLocalClick = function (data) {
5996
- // 0. 마지막 클릭 항목 저장
5997
- lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
5998
-
5997
+ // 1. 선택 상태 업데이트
5999
5998
  if (enableMultiSelect) {
6000
5999
  // 다중 선택: Set과 Map 동시 업데이트
6001
6000
  var newSelected = new Set(selectedIdsRef.current);
@@ -6303,6 +6302,16 @@ var WoongKonvaMarkerComponent = function (_a) {
6303
6302
  doRenderEvent();
6304
6303
  }, [externalSelectedItems]); // 배열 자체를 dependency로 사용
6305
6304
  // --------------------------------------------------------------------------
6305
+ // Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
6306
+ // --------------------------------------------------------------------------
6307
+
6308
+ useEffect(function () {
6309
+ if (!stageRef.current) return; // Ref 동기화
6310
+
6311
+ selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
6312
+
6313
+ doRenderEvent();
6314
+ }, [externalSelectedItem]); // --------------------------------------------------------------------------
6306
6315
  // Lifecycle: 마커 데이터 변경 시 렌더링
6307
6316
  // --------------------------------------------------------------------------
6308
6317
 
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
- options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems"]); // --------------------------------------------------------------------------
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 lastClickedItemRef = React.useRef(null);
5449
+ var selectedItemRef = React.useRef(externalSelectedItem);
5449
5450
  /**
5450
5451
  * 선택된 항목의 ID Set
5451
5452
  *
@@ -5793,7 +5794,7 @@
5793
5794
  hoveredItem: hoveredItemRef.current,
5794
5795
  utils: renderUtils,
5795
5796
  selectedItems: selectedItems,
5796
- lastClickedItem: lastClickedItemRef.current
5797
+ selectedItem: selectedItemRef.current
5797
5798
  });
5798
5799
  },
5799
5800
  perfectDrawEnabled: false,
@@ -5997,9 +5998,7 @@
5997
5998
 
5998
5999
 
5999
6000
  var handleLocalClick = function (data) {
6000
- // 0. 마지막 클릭 항목 저장
6001
- lastClickedItemRef.current = data; // 1. 선택 상태 업데이트
6002
-
6001
+ // 1. 선택 상태 업데이트
6003
6002
  if (enableMultiSelect) {
6004
6003
  // 다중 선택: Set과 Map 동시 업데이트
6005
6004
  var newSelected = new Set(selectedIdsRef.current);
@@ -6307,6 +6306,16 @@
6307
6306
  doRenderEvent();
6308
6307
  }, [externalSelectedItems]); // 배열 자체를 dependency로 사용
6309
6308
  // --------------------------------------------------------------------------
6309
+ // Lifecycle: 외부 selectedItem 변경 시 Event Layer 리렌더링
6310
+ // --------------------------------------------------------------------------
6311
+
6312
+ React.useEffect(function () {
6313
+ if (!stageRef.current) return; // Ref 동기화
6314
+
6315
+ selectedItemRef.current = externalSelectedItem; // selectedItem이 변경되면 Event Layer만 다시 그림
6316
+
6317
+ doRenderEvent();
6318
+ }, [externalSelectedItem]); // --------------------------------------------------------------------------
6310
6319
  // Lifecycle: 마커 데이터 변경 시 렌더링
6311
6320
  // --------------------------------------------------------------------------
6312
6321
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.5",
3
+ "version": "1.2.0-test.6",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",