@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.
@@ -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
  *
@@ -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
- lastClickedItem: lastClickedItemRef.current
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
- // 0. 마지막 클릭 항목 저장
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
- if (onClick) onClick(data, selectedIdsRef.current);
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
- controller.removeEventListener('CLICK', handleClick);
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
- 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
  *
@@ -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
- lastClickedItem: lastClickedItemRef.current
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
- // 0. 마지막 클릭 항목 저장
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
- if (onClick) onClick(data, selectedIdsRef.current);
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
- controller.removeEventListener('CLICK', handleClick);
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
- 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
  *
@@ -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
- lastClickedItem: lastClickedItemRef.current
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
- // 0. 마지막 클릭 항목 저장
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
- if (onClick) onClick(data, selectedIdsRef.current);
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
- controller.removeEventListener('CLICK', handleClick);
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
 
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.7",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",