@mint-ui/map 1.2.0-test.8 → 1.2.0-test.9
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/MintMapController.d.ts +1 -0
- package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.d.ts +2 -2
- package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.js +64 -78
- package/dist/components/mint-map/core/wrapper/MapMarkerWrapper.js +22 -1
- package/dist/components/mint-map/google/GoogleMintMapController.d.ts +1 -0
- package/dist/components/mint-map/google/GoogleMintMapController.js +4 -0
- package/dist/components/mint-map/kakao/KakaoMintMapController.d.ts +1 -0
- package/dist/components/mint-map/kakao/KakaoMintMapController.js +4 -0
- package/dist/components/mint-map/naver/NaverMintMapController.d.ts +3 -0
- package/dist/components/mint-map/naver/NaverMintMapController.js +37 -3
- package/dist/index.es.js +131 -82
- package/dist/index.umd.js +131 -82
- package/package.json +1 -1
|
@@ -24,6 +24,7 @@ export declare abstract class MintMapController {
|
|
|
24
24
|
abstract updateMarker(marker: Marker, options: MarkerOptions): void;
|
|
25
25
|
abstract clearDrawable(drawable: Drawable): boolean;
|
|
26
26
|
abstract markerToTheTop(marker: Marker): void;
|
|
27
|
+
abstract restoreMarkerZIndex(marker: Marker): void;
|
|
27
28
|
abstract isMapDragged(): boolean;
|
|
28
29
|
abstract setMapDragged(value: boolean): void;
|
|
29
30
|
abstract setMarkerZIndex(marker: Marker, zIndex: number): void;
|
|
@@ -38,6 +38,7 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
|
|
|
38
38
|
selectedItems?: KonvaCanvasMarkerData<T>[];
|
|
39
39
|
/** 외부에서 전달된 단일 선택 아이템 (특별한 효과용) */
|
|
40
40
|
selectedItem?: KonvaCanvasMarkerData<T> | null;
|
|
41
|
+
disablePointerEvents?: boolean;
|
|
41
42
|
}
|
|
42
43
|
/**
|
|
43
44
|
* 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
|
|
@@ -45,9 +46,8 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
|
|
|
45
46
|
* 비교 전략:
|
|
46
47
|
* 1. markers 배열 비교
|
|
47
48
|
* 2. selectedItems 배열 비교 (외부 제어)
|
|
48
|
-
* 3. 이벤트 핸들러 비교 (onClick, onMouseOver, onMouseOut)
|
|
49
49
|
*
|
|
50
50
|
* 주의: JSON.stringify() 사용 금지! (매우 느림)
|
|
51
51
|
*/
|
|
52
|
-
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;
|
|
52
|
+
declare const WoongKonvaMarker: <T>({ markers, dataType, onClick, onMouseOver, onMouseOut, renderBase, renderAnimation, renderEvent, enableMultiSelect, topOnHover, enableViewportCulling, cullingMargin, maxCacheSize, selectedItems: externalSelectedItems, selectedItem: externalSelectedItem, disablePointerEvents, ...options }: WoongKonvaMarkerProps<T>) => React.ReactPortal;
|
|
53
53
|
export default WoongKonvaMarker;
|
|
@@ -56,7 +56,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
56
56
|
maxCacheSize = _f === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _f,
|
|
57
57
|
externalSelectedItems = _a.selectedItems,
|
|
58
58
|
externalSelectedItem = _a.selectedItem,
|
|
59
|
-
|
|
59
|
+
_g = _a.disablePointerEvents,
|
|
60
|
+
disablePointerEvents = _g === void 0 ? false : _g,
|
|
61
|
+
options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disablePointerEvents"]); // --------------------------------------------------------------------------
|
|
60
62
|
// Hooks & Context
|
|
61
63
|
// --------------------------------------------------------------------------
|
|
62
64
|
|
|
@@ -131,12 +133,6 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
131
133
|
x: 0,
|
|
132
134
|
y: 0
|
|
133
135
|
}); // --------------------------------------------------------------------------
|
|
134
|
-
// Event Handler Refs (클로저 문제 방지)
|
|
135
|
-
// --------------------------------------------------------------------------
|
|
136
|
-
|
|
137
|
-
var onClickRef = React.useRef(onClick);
|
|
138
|
-
var onMouseOverRef = React.useRef(onMouseOver);
|
|
139
|
-
var onMouseOutRef = React.useRef(onMouseOut); // --------------------------------------------------------------------------
|
|
140
136
|
// Performance Refs (캐싱 & 최적화)
|
|
141
137
|
// --------------------------------------------------------------------------
|
|
142
138
|
|
|
@@ -427,9 +423,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
427
423
|
|
|
428
424
|
var doRenderEvent = function () {
|
|
429
425
|
var layer = eventLayerRef.current;
|
|
430
|
-
if (!layer) return;
|
|
426
|
+
if (!layer) return;
|
|
431
427
|
|
|
432
|
-
if (!
|
|
428
|
+
if (!onClick && !onMouseOver && !onMouseOut) {
|
|
433
429
|
layer.destroyChildren();
|
|
434
430
|
layer.batchDraw();
|
|
435
431
|
return;
|
|
@@ -633,7 +629,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
633
629
|
|
|
634
630
|
|
|
635
631
|
var setHovered = function (data) {
|
|
636
|
-
if (!
|
|
632
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
637
633
|
hoveredItemRef.current = data;
|
|
638
634
|
|
|
639
635
|
if (draggingRef.current) {
|
|
@@ -658,7 +654,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
658
654
|
|
|
659
655
|
|
|
660
656
|
var handleLocalClick = function (data) {
|
|
661
|
-
if (!
|
|
657
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
662
658
|
|
|
663
659
|
if (enableMultiSelect) {
|
|
664
660
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -709,7 +705,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
709
705
|
var handleClick = function (event) {
|
|
710
706
|
var _a;
|
|
711
707
|
|
|
712
|
-
if (!
|
|
708
|
+
if (!onClick) return;
|
|
713
709
|
if (context$1 || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
714
710
|
|
|
715
711
|
try {
|
|
@@ -718,7 +714,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
718
714
|
|
|
719
715
|
if (data) {
|
|
720
716
|
handleLocalClick(data);
|
|
721
|
-
|
|
717
|
+
onClick(data, selectedIdsRef.current);
|
|
722
718
|
}
|
|
723
719
|
} catch (error) {
|
|
724
720
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -732,7 +728,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
732
728
|
var handleMouseMove = function (event) {
|
|
733
729
|
var _a;
|
|
734
730
|
|
|
735
|
-
if (!
|
|
731
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
736
732
|
if (context$1 || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
737
733
|
|
|
738
734
|
try {
|
|
@@ -742,8 +738,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
742
738
|
|
|
743
739
|
if (prevHovered !== hoveredItem) {
|
|
744
740
|
setHovered(hoveredItem);
|
|
745
|
-
if (prevHovered &&
|
|
746
|
-
if (hoveredItem &&
|
|
741
|
+
if (prevHovered && onMouseOut) onMouseOut(prevHovered);
|
|
742
|
+
if (hoveredItem && onMouseOver) onMouseOver(hoveredItem);
|
|
747
743
|
}
|
|
748
744
|
} catch (error) {
|
|
749
745
|
console.error('[WoongKonvaMarker] handleMouseMove error:', error);
|
|
@@ -773,7 +769,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
773
769
|
|
|
774
770
|
|
|
775
771
|
var handleMouseLeave = function () {
|
|
776
|
-
if (!
|
|
772
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
777
773
|
var prevHovered = hoveredItemRef.current;
|
|
778
774
|
|
|
779
775
|
if (prevHovered) {
|
|
@@ -781,8 +777,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
781
777
|
controller.setMapCursor('grab');
|
|
782
778
|
doRenderEvent();
|
|
783
779
|
|
|
784
|
-
if (
|
|
785
|
-
|
|
780
|
+
if (onMouseOut) {
|
|
781
|
+
onMouseOut(prevHovered);
|
|
786
782
|
}
|
|
787
783
|
}
|
|
788
784
|
}; // --------------------------------------------------------------------------
|
|
@@ -883,20 +879,13 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
883
879
|
controller.addEventListener('IDLE', handleIdle);
|
|
884
880
|
controller.addEventListener('ZOOMSTART', handleZoomStart);
|
|
885
881
|
controller.addEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
886
|
-
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
controller.addEventListener('CLICK', handleClick);
|
|
890
|
-
} // onMouseOver/onMouseOut이 있을 때만 MOUSEMOVE 이벤트 등록
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
if (onMouseOver || onMouseOut) {
|
|
894
|
-
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
895
|
-
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
896
|
-
}
|
|
897
|
-
|
|
882
|
+
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
883
|
+
controller.addEventListener('CLICK', handleClick);
|
|
884
|
+
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
898
885
|
controller.addEventListener('DRAGSTART', handleDragStart);
|
|
899
|
-
controller.addEventListener('DRAGEND', handleDragEnd);
|
|
886
|
+
controller.addEventListener('DRAGEND', handleDragEnd); // 맵 컨테이너에 mouseleave 이벤트 추가
|
|
887
|
+
|
|
888
|
+
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
900
889
|
renderAllImmediate(); // Context 사용 시 컴포넌트 등록 (다중 인스턴스 관리)
|
|
901
890
|
|
|
902
891
|
var componentInstance = null;
|
|
@@ -934,18 +923,11 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
934
923
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
935
924
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
936
925
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
controller.removeEventListener('CLICK', handleClick);
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
if (onMouseOver || onMouseOut) {
|
|
943
|
-
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
944
|
-
mapDiv.removeEventListener('mouseleave', handleMouseLeave);
|
|
945
|
-
}
|
|
946
|
-
|
|
926
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
927
|
+
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
947
928
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
948
|
-
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
929
|
+
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
930
|
+
mapDiv.removeEventListener('mouseleave', handleMouseLeave); // Context 정리
|
|
949
931
|
|
|
950
932
|
if (context$1 && componentInstance) {
|
|
951
933
|
context$1.unregisterComponent(componentInstance);
|
|
@@ -962,18 +944,6 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
962
944
|
spatialIndexRef.current.clear();
|
|
963
945
|
};
|
|
964
946
|
}, []); // --------------------------------------------------------------------------
|
|
965
|
-
// Lifecycle: 이벤트 핸들러 ref 동기화
|
|
966
|
-
// --------------------------------------------------------------------------
|
|
967
|
-
|
|
968
|
-
React.useEffect(function () {
|
|
969
|
-
onClickRef.current = onClick;
|
|
970
|
-
onMouseOverRef.current = onMouseOver;
|
|
971
|
-
onMouseOutRef.current = onMouseOut; // Event Layer 다시 렌더링 (이벤트 핸들러 변경 반영)
|
|
972
|
-
|
|
973
|
-
if (stageRef.current) {
|
|
974
|
-
doRenderEvent();
|
|
975
|
-
}
|
|
976
|
-
}, [onClick, onMouseOver, onMouseOut]); // --------------------------------------------------------------------------
|
|
977
947
|
// Lifecycle: 외부 selectedItems 동기화
|
|
978
948
|
// --------------------------------------------------------------------------
|
|
979
949
|
|
|
@@ -1064,23 +1034,15 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
1064
1034
|
|
|
1065
1035
|
renderAllImmediate();
|
|
1066
1036
|
}, [markers]);
|
|
1067
|
-
var hasAnyHandler = onClick || onMouseOver || onMouseOut;
|
|
1068
1037
|
return reactDom.createPortal(React__default["default"].createElement("div", {
|
|
1069
|
-
style: {
|
|
1070
|
-
zIndex: options.zIndex !== undefined ? options.zIndex + 1 : 9999,
|
|
1071
|
-
position: 'absolute',
|
|
1072
|
-
width: '100%',
|
|
1073
|
-
height: '100%',
|
|
1074
|
-
pointerEvents: hasAnyHandler ? 'none' : 'auto'
|
|
1075
|
-
}
|
|
1076
|
-
}, React__default["default"].createElement("div", {
|
|
1077
1038
|
ref: containerRef,
|
|
1078
1039
|
style: {
|
|
1079
1040
|
position: 'absolute',
|
|
1080
1041
|
width: '100%',
|
|
1081
|
-
height: '100%'
|
|
1042
|
+
height: '100%',
|
|
1043
|
+
pointerEvents: disablePointerEvents ? 'none' : 'auto'
|
|
1082
1044
|
}
|
|
1083
|
-
})
|
|
1045
|
+
}), divElement);
|
|
1084
1046
|
};
|
|
1085
1047
|
/**
|
|
1086
1048
|
* 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
|
|
@@ -1088,29 +1050,53 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
1088
1050
|
* 비교 전략:
|
|
1089
1051
|
* 1. markers 배열 비교
|
|
1090
1052
|
* 2. selectedItems 배열 비교 (외부 제어)
|
|
1091
|
-
* 3. 이벤트 핸들러 비교 (onClick, onMouseOver, onMouseOut)
|
|
1092
1053
|
*
|
|
1093
1054
|
* 주의: JSON.stringify() 사용 금지! (매우 느림)
|
|
1094
1055
|
*/
|
|
1095
1056
|
|
|
1096
1057
|
|
|
1097
1058
|
var WoongKonvaMarker = React__default["default"].memo(WoongKonvaMarkerComponent, function (prevProps, nextProps) {
|
|
1098
|
-
// markers
|
|
1099
|
-
|
|
1059
|
+
// 1. markers 비교
|
|
1060
|
+
var prevMarkers = prevProps.markers;
|
|
1061
|
+
var nextMarkers = nextProps.markers; // 참조가 같으면 스킵
|
|
1062
|
+
|
|
1063
|
+
if (prevMarkers !== nextMarkers) {
|
|
1064
|
+
// 길이가 다르면 변경됨
|
|
1065
|
+
if (prevMarkers.length !== nextMarkers.length) return false; // 각 마커의 ID 비교
|
|
1066
|
+
|
|
1067
|
+
for (var i = 0; i < prevMarkers.length; i++) {
|
|
1068
|
+
if (prevMarkers[i].id !== nextMarkers[i].id) {
|
|
1069
|
+
return false; // 변경됨 → 리렌더링
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
} // 2. selectedItems 비교 (참조만 비교)
|
|
1073
|
+
|
|
1074
|
+
|
|
1075
|
+
if (prevProps.selectedItems !== nextProps.selectedItems) {
|
|
1076
|
+
return false; // 변경됨 → 리렌더링
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
if (prevProps.selectedItem !== nextProps.selectedItem) {
|
|
1080
|
+
return false; // 변경됨 → 리렌더링
|
|
1081
|
+
}
|
|
1100
1082
|
|
|
1101
|
-
if (prevProps.
|
|
1083
|
+
if (prevProps.onClick !== nextProps.onClick) {
|
|
1084
|
+
return false; // 변경됨 → 리렌더링
|
|
1085
|
+
}
|
|
1102
1086
|
|
|
1103
|
-
if (prevProps.
|
|
1087
|
+
if (prevProps.onMouseOver !== nextProps.onMouseOver) {
|
|
1088
|
+
return false; // 변경됨 → 리렌더링
|
|
1089
|
+
}
|
|
1104
1090
|
|
|
1105
|
-
if (prevProps.
|
|
1106
|
-
|
|
1107
|
-
|
|
1091
|
+
if (prevProps.onMouseOut !== nextProps.onMouseOut) {
|
|
1092
|
+
return false; // 변경됨 → 리렌더링
|
|
1093
|
+
}
|
|
1108
1094
|
|
|
1109
|
-
if (prevProps.
|
|
1110
|
-
|
|
1111
|
-
|
|
1095
|
+
if (prevProps.disablePointerEvents !== nextProps.disablePointerEvents) {
|
|
1096
|
+
return false; // 변경됨 → 리렌더링
|
|
1097
|
+
}
|
|
1112
1098
|
|
|
1113
|
-
return true;
|
|
1099
|
+
return true; // 같음 → 리렌더링 스킵
|
|
1114
1100
|
});
|
|
1115
1101
|
|
|
1116
1102
|
Object.defineProperty(exports, 'CanvasDataType', {
|
|
@@ -172,7 +172,7 @@ function MapMarkerWrapper(_a) {
|
|
|
172
172
|
var onMouseOverHandler = function (e) {
|
|
173
173
|
var _a;
|
|
174
174
|
|
|
175
|
-
var marker = markerRef.current;
|
|
175
|
+
var marker = markerRef.current;
|
|
176
176
|
|
|
177
177
|
if (marker) {
|
|
178
178
|
var mouseOverHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseover');
|
|
@@ -185,6 +185,25 @@ function MapMarkerWrapper(_a) {
|
|
|
185
185
|
|
|
186
186
|
next && topOnHover && controller.markerToTheTop(marker);
|
|
187
187
|
}
|
|
188
|
+
}; // 20251014 | 장한별 | mouseleave 이벤트 추가, 마우스가 마커 위에서 떠날 때 원래 zindex 를 복구하기 위함
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
var onMouseLeaveHandler = function (e) {
|
|
192
|
+
var _a;
|
|
193
|
+
|
|
194
|
+
var marker = markerRef.current;
|
|
195
|
+
|
|
196
|
+
if (marker) {
|
|
197
|
+
var mouseOutHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseout');
|
|
198
|
+
var next = true;
|
|
199
|
+
|
|
200
|
+
if (mouseOutHandler) {
|
|
201
|
+
var hasNext = mouseOutHandler(e);
|
|
202
|
+
hasNext !== undefined && (next = hasNext);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
next && topOnHover && controller.restoreMarkerZIndex(marker);
|
|
206
|
+
}
|
|
188
207
|
}; //create object
|
|
189
208
|
|
|
190
209
|
|
|
@@ -202,10 +221,12 @@ function MapMarkerWrapper(_a) {
|
|
|
202
221
|
}); //드래그 여부 초기화를 먼저 수행하기 위해 capture : true 처리
|
|
203
222
|
|
|
204
223
|
divElement.addEventListener('mouseover', onMouseOverHandler);
|
|
224
|
+
divElement.addEventListener('mouseleave', onMouseLeaveHandler);
|
|
205
225
|
return function () {
|
|
206
226
|
divElement.removeEventListener('click', onClickHandler);
|
|
207
227
|
divElement.removeEventListener('mousedown', onMousedownHandler);
|
|
208
228
|
divElement.removeEventListener('mouseover', onMouseOverHandler);
|
|
229
|
+
divElement.removeEventListener('mouseleave', onMouseLeaveHandler);
|
|
209
230
|
|
|
210
231
|
if (markerRef.current) {
|
|
211
232
|
controller.clearDrawable(markerRef.current);
|
|
@@ -28,6 +28,7 @@ export declare class GoogleMintMapController extends MintMapController {
|
|
|
28
28
|
private getMaxZIndex;
|
|
29
29
|
setMarkerZIndex(marker: Marker, zIndex: number): void;
|
|
30
30
|
markerToTheTop(marker: Marker): void;
|
|
31
|
+
restoreMarkerZIndex(marker: Marker): void;
|
|
31
32
|
clearDrawable(drawable: Drawable): boolean;
|
|
32
33
|
private dragged;
|
|
33
34
|
isMapDragged(): boolean;
|
|
@@ -340,6 +340,10 @@ function (_super) {
|
|
|
340
340
|
}
|
|
341
341
|
};
|
|
342
342
|
|
|
343
|
+
GoogleMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Google Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
344
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
345
|
+
};
|
|
346
|
+
|
|
343
347
|
GoogleMintMapController.prototype.clearDrawable = function (drawable) {
|
|
344
348
|
if (drawable && drawable.native) {
|
|
345
349
|
if (drawable.native instanceof google.maps.Marker || drawable.native instanceof google.maps.Polygon || drawable.native instanceof google.maps.Polyline) {
|
|
@@ -31,6 +31,7 @@ export declare class KakaoMintMapController extends MintMapController {
|
|
|
31
31
|
private getMaxZIndex;
|
|
32
32
|
setMarkerZIndex(marker: Marker, zIndex: number): void;
|
|
33
33
|
markerToTheTop(marker: Marker): void;
|
|
34
|
+
restoreMarkerZIndex(marker: Marker): void;
|
|
34
35
|
clearDrawable(drawable: Drawable): boolean;
|
|
35
36
|
private dragged;
|
|
36
37
|
isMapDragged(): boolean;
|
|
@@ -348,6 +348,10 @@ function (_super) {
|
|
|
348
348
|
}
|
|
349
349
|
};
|
|
350
350
|
|
|
351
|
+
KakaoMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Kakao Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
352
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
353
|
+
};
|
|
354
|
+
|
|
351
355
|
KakaoMintMapController.prototype.clearDrawable = function (drawable) {
|
|
352
356
|
var _this = this;
|
|
353
357
|
|
|
@@ -27,9 +27,12 @@ export declare class NaverMintMapController extends MintMapController {
|
|
|
27
27
|
createMarker(marker: Marker): void;
|
|
28
28
|
updateMarker(marker: Marker, options: MarkerOptions): void;
|
|
29
29
|
private markerMaxZIndex;
|
|
30
|
+
private markerOriginalZIndex;
|
|
30
31
|
private getMaxZIndex;
|
|
32
|
+
private getCurrentZIndex;
|
|
31
33
|
setMarkerZIndex(marker: Marker, zIndex: number): void;
|
|
32
34
|
markerToTheTop(marker: Marker): void;
|
|
35
|
+
restoreMarkerZIndex(marker: Marker): void;
|
|
33
36
|
clearDrawable(drawable: Drawable): boolean;
|
|
34
37
|
private dragged;
|
|
35
38
|
isMapDragged(): boolean;
|
|
@@ -340,20 +340,54 @@ function (_super) {
|
|
|
340
340
|
}
|
|
341
341
|
};
|
|
342
342
|
|
|
343
|
-
NaverMintMapController.prototype.
|
|
343
|
+
NaverMintMapController.prototype.getCurrentZIndex = function (marker) {
|
|
344
344
|
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
345
345
|
var parent_1 = marker.element.parentElement;
|
|
346
346
|
|
|
347
|
-
if (parent_1) {
|
|
348
|
-
|
|
347
|
+
if (parent_1 && parent_1.style.zIndex) {
|
|
348
|
+
var zIndex = Number(parent_1.style.zIndex);
|
|
349
|
+
return isNaN(zIndex) ? undefined : zIndex;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return undefined;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
NaverMintMapController.prototype.setMarkerZIndex = function (marker, zIndex) {
|
|
357
|
+
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
358
|
+
var parent_2 = marker.element.parentElement;
|
|
359
|
+
|
|
360
|
+
if (parent_2) {
|
|
361
|
+
parent_2.style.zIndex = String(zIndex);
|
|
349
362
|
}
|
|
350
363
|
}
|
|
351
364
|
};
|
|
352
365
|
|
|
353
366
|
NaverMintMapController.prototype.markerToTheTop = function (marker) {
|
|
367
|
+
// 이미 최상위로 올라간 상태면 (원래 zIndex가 이미 저장됨) 중복 실행 방지
|
|
368
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
var currentZIndex = this.getCurrentZIndex(marker); // undefined면 null로 저장 (원래 zIndex가 없었음을 표시)
|
|
373
|
+
|
|
374
|
+
this.markerOriginalZIndex = currentZIndex !== undefined ? currentZIndex : null;
|
|
354
375
|
this.setMarkerZIndex(marker, this.getMaxZIndex(1));
|
|
355
376
|
};
|
|
356
377
|
|
|
378
|
+
NaverMintMapController.prototype.restoreMarkerZIndex = function (marker) {
|
|
379
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
380
|
+
if (this.markerOriginalZIndex === null) {
|
|
381
|
+
// 원래 zIndex가 없었으면 제거 (또는 초기값 0으로)
|
|
382
|
+
this.setMarkerZIndex(marker, 0);
|
|
383
|
+
} else {
|
|
384
|
+
this.setMarkerZIndex(marker, this.markerOriginalZIndex);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
this.markerOriginalZIndex = undefined;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
|
|
357
391
|
NaverMintMapController.prototype.clearDrawable = function (drawable) {
|
|
358
392
|
var _a;
|
|
359
393
|
|
package/dist/index.es.js
CHANGED
|
@@ -2750,7 +2750,7 @@ function MapMarkerWrapper(_a) {
|
|
|
2750
2750
|
var onMouseOverHandler = function (e) {
|
|
2751
2751
|
var _a;
|
|
2752
2752
|
|
|
2753
|
-
var marker = markerRef.current;
|
|
2753
|
+
var marker = markerRef.current;
|
|
2754
2754
|
|
|
2755
2755
|
if (marker) {
|
|
2756
2756
|
var mouseOverHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseover');
|
|
@@ -2763,6 +2763,25 @@ function MapMarkerWrapper(_a) {
|
|
|
2763
2763
|
|
|
2764
2764
|
next && topOnHover && controller.markerToTheTop(marker);
|
|
2765
2765
|
}
|
|
2766
|
+
}; // 20251014 | 장한별 | mouseleave 이벤트 추가, 마우스가 마커 위에서 떠날 때 원래 zindex 를 복구하기 위함
|
|
2767
|
+
|
|
2768
|
+
|
|
2769
|
+
var onMouseLeaveHandler = function (e) {
|
|
2770
|
+
var _a;
|
|
2771
|
+
|
|
2772
|
+
var marker = markerRef.current;
|
|
2773
|
+
|
|
2774
|
+
if (marker) {
|
|
2775
|
+
var mouseOutHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseout');
|
|
2776
|
+
var next = true;
|
|
2777
|
+
|
|
2778
|
+
if (mouseOutHandler) {
|
|
2779
|
+
var hasNext = mouseOutHandler(e);
|
|
2780
|
+
hasNext !== undefined && (next = hasNext);
|
|
2781
|
+
}
|
|
2782
|
+
|
|
2783
|
+
next && topOnHover && controller.restoreMarkerZIndex(marker);
|
|
2784
|
+
}
|
|
2766
2785
|
}; //create object
|
|
2767
2786
|
|
|
2768
2787
|
|
|
@@ -2780,10 +2799,12 @@ function MapMarkerWrapper(_a) {
|
|
|
2780
2799
|
}); //드래그 여부 초기화를 먼저 수행하기 위해 capture : true 처리
|
|
2781
2800
|
|
|
2782
2801
|
divElement.addEventListener('mouseover', onMouseOverHandler);
|
|
2802
|
+
divElement.addEventListener('mouseleave', onMouseLeaveHandler);
|
|
2783
2803
|
return function () {
|
|
2784
2804
|
divElement.removeEventListener('click', onClickHandler);
|
|
2785
2805
|
divElement.removeEventListener('mousedown', onMousedownHandler);
|
|
2786
2806
|
divElement.removeEventListener('mouseover', onMouseOverHandler);
|
|
2807
|
+
divElement.removeEventListener('mouseleave', onMouseLeaveHandler);
|
|
2787
2808
|
|
|
2788
2809
|
if (markerRef.current) {
|
|
2789
2810
|
controller.clearDrawable(markerRef.current);
|
|
@@ -5385,7 +5406,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5385
5406
|
maxCacheSize = _f === void 0 ? DEFAULT_MAX_CACHE_SIZE : _f,
|
|
5386
5407
|
externalSelectedItems = _a.selectedItems,
|
|
5387
5408
|
externalSelectedItem = _a.selectedItem,
|
|
5388
|
-
|
|
5409
|
+
_g = _a.disablePointerEvents,
|
|
5410
|
+
disablePointerEvents = _g === void 0 ? false : _g,
|
|
5411
|
+
options = __rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disablePointerEvents"]); // --------------------------------------------------------------------------
|
|
5389
5412
|
// Hooks & Context
|
|
5390
5413
|
// --------------------------------------------------------------------------
|
|
5391
5414
|
|
|
@@ -5460,12 +5483,6 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5460
5483
|
x: 0,
|
|
5461
5484
|
y: 0
|
|
5462
5485
|
}); // --------------------------------------------------------------------------
|
|
5463
|
-
// Event Handler Refs (클로저 문제 방지)
|
|
5464
|
-
// --------------------------------------------------------------------------
|
|
5465
|
-
|
|
5466
|
-
var onClickRef = useRef(onClick);
|
|
5467
|
-
var onMouseOverRef = useRef(onMouseOver);
|
|
5468
|
-
var onMouseOutRef = useRef(onMouseOut); // --------------------------------------------------------------------------
|
|
5469
5486
|
// Performance Refs (캐싱 & 최적화)
|
|
5470
5487
|
// --------------------------------------------------------------------------
|
|
5471
5488
|
|
|
@@ -5756,9 +5773,9 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5756
5773
|
|
|
5757
5774
|
var doRenderEvent = function () {
|
|
5758
5775
|
var layer = eventLayerRef.current;
|
|
5759
|
-
if (!layer) return;
|
|
5776
|
+
if (!layer) return;
|
|
5760
5777
|
|
|
5761
|
-
if (!
|
|
5778
|
+
if (!onClick && !onMouseOver && !onMouseOut) {
|
|
5762
5779
|
layer.destroyChildren();
|
|
5763
5780
|
layer.batchDraw();
|
|
5764
5781
|
return;
|
|
@@ -5962,7 +5979,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5962
5979
|
|
|
5963
5980
|
|
|
5964
5981
|
var setHovered = function (data) {
|
|
5965
|
-
if (!
|
|
5982
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
5966
5983
|
hoveredItemRef.current = data;
|
|
5967
5984
|
|
|
5968
5985
|
if (draggingRef.current) {
|
|
@@ -5987,7 +6004,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
5987
6004
|
|
|
5988
6005
|
|
|
5989
6006
|
var handleLocalClick = function (data) {
|
|
5990
|
-
if (!
|
|
6007
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
5991
6008
|
|
|
5992
6009
|
if (enableMultiSelect) {
|
|
5993
6010
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -6038,7 +6055,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6038
6055
|
var handleClick = function (event) {
|
|
6039
6056
|
var _a;
|
|
6040
6057
|
|
|
6041
|
-
if (!
|
|
6058
|
+
if (!onClick) return;
|
|
6042
6059
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6043
6060
|
|
|
6044
6061
|
try {
|
|
@@ -6047,7 +6064,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6047
6064
|
|
|
6048
6065
|
if (data) {
|
|
6049
6066
|
handleLocalClick(data);
|
|
6050
|
-
|
|
6067
|
+
onClick(data, selectedIdsRef.current);
|
|
6051
6068
|
}
|
|
6052
6069
|
} catch (error) {
|
|
6053
6070
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -6061,7 +6078,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6061
6078
|
var handleMouseMove = function (event) {
|
|
6062
6079
|
var _a;
|
|
6063
6080
|
|
|
6064
|
-
if (!
|
|
6081
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6065
6082
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6066
6083
|
|
|
6067
6084
|
try {
|
|
@@ -6071,8 +6088,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6071
6088
|
|
|
6072
6089
|
if (prevHovered !== hoveredItem) {
|
|
6073
6090
|
setHovered(hoveredItem);
|
|
6074
|
-
if (prevHovered &&
|
|
6075
|
-
if (hoveredItem &&
|
|
6091
|
+
if (prevHovered && onMouseOut) onMouseOut(prevHovered);
|
|
6092
|
+
if (hoveredItem && onMouseOver) onMouseOver(hoveredItem);
|
|
6076
6093
|
}
|
|
6077
6094
|
} catch (error) {
|
|
6078
6095
|
console.error('[WoongKonvaMarker] handleMouseMove error:', error);
|
|
@@ -6102,7 +6119,7 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6102
6119
|
|
|
6103
6120
|
|
|
6104
6121
|
var handleMouseLeave = function () {
|
|
6105
|
-
if (!
|
|
6122
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6106
6123
|
var prevHovered = hoveredItemRef.current;
|
|
6107
6124
|
|
|
6108
6125
|
if (prevHovered) {
|
|
@@ -6110,8 +6127,8 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6110
6127
|
controller.setMapCursor('grab');
|
|
6111
6128
|
doRenderEvent();
|
|
6112
6129
|
|
|
6113
|
-
if (
|
|
6114
|
-
|
|
6130
|
+
if (onMouseOut) {
|
|
6131
|
+
onMouseOut(prevHovered);
|
|
6115
6132
|
}
|
|
6116
6133
|
}
|
|
6117
6134
|
}; // --------------------------------------------------------------------------
|
|
@@ -6212,20 +6229,13 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6212
6229
|
controller.addEventListener('IDLE', handleIdle);
|
|
6213
6230
|
controller.addEventListener('ZOOMSTART', handleZoomStart);
|
|
6214
6231
|
controller.addEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6215
|
-
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6216
|
-
|
|
6217
|
-
|
|
6218
|
-
controller.addEventListener('CLICK', handleClick);
|
|
6219
|
-
} // onMouseOver/onMouseOut이 있을 때만 MOUSEMOVE 이벤트 등록
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
if (onMouseOver || onMouseOut) {
|
|
6223
|
-
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
6224
|
-
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
6225
|
-
}
|
|
6226
|
-
|
|
6232
|
+
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6233
|
+
controller.addEventListener('CLICK', handleClick);
|
|
6234
|
+
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
6227
6235
|
controller.addEventListener('DRAGSTART', handleDragStart);
|
|
6228
|
-
controller.addEventListener('DRAGEND', handleDragEnd);
|
|
6236
|
+
controller.addEventListener('DRAGEND', handleDragEnd); // 맵 컨테이너에 mouseleave 이벤트 추가
|
|
6237
|
+
|
|
6238
|
+
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
6229
6239
|
renderAllImmediate(); // Context 사용 시 컴포넌트 등록 (다중 인스턴스 관리)
|
|
6230
6240
|
|
|
6231
6241
|
var componentInstance = null;
|
|
@@ -6263,18 +6273,11 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6263
6273
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
6264
6274
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6265
6275
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6266
|
-
|
|
6267
|
-
|
|
6268
|
-
controller.removeEventListener('CLICK', handleClick);
|
|
6269
|
-
}
|
|
6270
|
-
|
|
6271
|
-
if (onMouseOver || onMouseOut) {
|
|
6272
|
-
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6273
|
-
mapDiv.removeEventListener('mouseleave', handleMouseLeave);
|
|
6274
|
-
}
|
|
6275
|
-
|
|
6276
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
6277
|
+
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6276
6278
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
6277
|
-
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
6279
|
+
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
6280
|
+
mapDiv.removeEventListener('mouseleave', handleMouseLeave); // Context 정리
|
|
6278
6281
|
|
|
6279
6282
|
if (context && componentInstance) {
|
|
6280
6283
|
context.unregisterComponent(componentInstance);
|
|
@@ -6291,18 +6294,6 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6291
6294
|
spatialIndexRef.current.clear();
|
|
6292
6295
|
};
|
|
6293
6296
|
}, []); // --------------------------------------------------------------------------
|
|
6294
|
-
// Lifecycle: 이벤트 핸들러 ref 동기화
|
|
6295
|
-
// --------------------------------------------------------------------------
|
|
6296
|
-
|
|
6297
|
-
useEffect(function () {
|
|
6298
|
-
onClickRef.current = onClick;
|
|
6299
|
-
onMouseOverRef.current = onMouseOver;
|
|
6300
|
-
onMouseOutRef.current = onMouseOut; // Event Layer 다시 렌더링 (이벤트 핸들러 변경 반영)
|
|
6301
|
-
|
|
6302
|
-
if (stageRef.current) {
|
|
6303
|
-
doRenderEvent();
|
|
6304
|
-
}
|
|
6305
|
-
}, [onClick, onMouseOver, onMouseOut]); // --------------------------------------------------------------------------
|
|
6306
6297
|
// Lifecycle: 외부 selectedItems 동기화
|
|
6307
6298
|
// --------------------------------------------------------------------------
|
|
6308
6299
|
|
|
@@ -6393,23 +6384,15 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6393
6384
|
|
|
6394
6385
|
renderAllImmediate();
|
|
6395
6386
|
}, [markers]);
|
|
6396
|
-
var hasAnyHandler = onClick || onMouseOver || onMouseOut;
|
|
6397
6387
|
return createPortal(React.createElement("div", {
|
|
6398
|
-
style: {
|
|
6399
|
-
zIndex: options.zIndex !== undefined ? options.zIndex + 1 : 9999,
|
|
6400
|
-
position: 'absolute',
|
|
6401
|
-
width: '100%',
|
|
6402
|
-
height: '100%',
|
|
6403
|
-
pointerEvents: hasAnyHandler ? 'none' : 'auto'
|
|
6404
|
-
}
|
|
6405
|
-
}, React.createElement("div", {
|
|
6406
6388
|
ref: containerRef,
|
|
6407
6389
|
style: {
|
|
6408
6390
|
position: 'absolute',
|
|
6409
6391
|
width: '100%',
|
|
6410
|
-
height: '100%'
|
|
6392
|
+
height: '100%',
|
|
6393
|
+
pointerEvents: disablePointerEvents ? 'none' : 'auto'
|
|
6411
6394
|
}
|
|
6412
|
-
})
|
|
6395
|
+
}), divElement);
|
|
6413
6396
|
};
|
|
6414
6397
|
/**
|
|
6415
6398
|
* 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
|
|
@@ -6417,29 +6400,53 @@ var WoongKonvaMarkerComponent = function (_a) {
|
|
|
6417
6400
|
* 비교 전략:
|
|
6418
6401
|
* 1. markers 배열 비교
|
|
6419
6402
|
* 2. selectedItems 배열 비교 (외부 제어)
|
|
6420
|
-
* 3. 이벤트 핸들러 비교 (onClick, onMouseOver, onMouseOut)
|
|
6421
6403
|
*
|
|
6422
6404
|
* 주의: JSON.stringify() 사용 금지! (매우 느림)
|
|
6423
6405
|
*/
|
|
6424
6406
|
|
|
6425
6407
|
|
|
6426
6408
|
var WoongKonvaMarker = React.memo(WoongKonvaMarkerComponent, function (prevProps, nextProps) {
|
|
6427
|
-
// markers
|
|
6428
|
-
|
|
6409
|
+
// 1. markers 비교
|
|
6410
|
+
var prevMarkers = prevProps.markers;
|
|
6411
|
+
var nextMarkers = nextProps.markers; // 참조가 같으면 스킵
|
|
6429
6412
|
|
|
6430
|
-
if (
|
|
6413
|
+
if (prevMarkers !== nextMarkers) {
|
|
6414
|
+
// 길이가 다르면 변경됨
|
|
6415
|
+
if (prevMarkers.length !== nextMarkers.length) return false; // 각 마커의 ID 비교
|
|
6416
|
+
|
|
6417
|
+
for (var i = 0; i < prevMarkers.length; i++) {
|
|
6418
|
+
if (prevMarkers[i].id !== nextMarkers[i].id) {
|
|
6419
|
+
return false; // 변경됨 → 리렌더링
|
|
6420
|
+
}
|
|
6421
|
+
}
|
|
6422
|
+
} // 2. selectedItems 비교 (참조만 비교)
|
|
6431
6423
|
|
|
6432
|
-
if (prevProps.selectedItem !== nextProps.selectedItem) return false; // 이벤트 핸들러 비교 (참조 비교)
|
|
6433
6424
|
|
|
6434
|
-
if (prevProps.
|
|
6435
|
-
|
|
6436
|
-
|
|
6425
|
+
if (prevProps.selectedItems !== nextProps.selectedItems) {
|
|
6426
|
+
return false; // 변경됨 → 리렌더링
|
|
6427
|
+
}
|
|
6437
6428
|
|
|
6438
|
-
if (prevProps.
|
|
6439
|
-
|
|
6440
|
-
|
|
6429
|
+
if (prevProps.selectedItem !== nextProps.selectedItem) {
|
|
6430
|
+
return false; // 변경됨 → 리렌더링
|
|
6431
|
+
}
|
|
6441
6432
|
|
|
6442
|
-
|
|
6433
|
+
if (prevProps.onClick !== nextProps.onClick) {
|
|
6434
|
+
return false; // 변경됨 → 리렌더링
|
|
6435
|
+
}
|
|
6436
|
+
|
|
6437
|
+
if (prevProps.onMouseOver !== nextProps.onMouseOver) {
|
|
6438
|
+
return false; // 변경됨 → 리렌더링
|
|
6439
|
+
}
|
|
6440
|
+
|
|
6441
|
+
if (prevProps.onMouseOut !== nextProps.onMouseOut) {
|
|
6442
|
+
return false; // 변경됨 → 리렌더링
|
|
6443
|
+
}
|
|
6444
|
+
|
|
6445
|
+
if (prevProps.disablePointerEvents !== nextProps.disablePointerEvents) {
|
|
6446
|
+
return false; // 변경됨 → 리렌더링
|
|
6447
|
+
}
|
|
6448
|
+
|
|
6449
|
+
return true; // 같음 → 리렌더링 스킵
|
|
6443
6450
|
});
|
|
6444
6451
|
|
|
6445
6452
|
var css_248z = ".MintMapWrapper-module_mint-map-control-wrapper-container__DONh7 {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n pointer-events: none;\n z-index: 101;\n}\n\n.MintMapWrapper-module_mint-map-overlay-wrapper__Jn4wV {\n position: absolute;\n z-index: 1;\n}";
|
|
@@ -7182,20 +7189,54 @@ function (_super) {
|
|
|
7182
7189
|
}
|
|
7183
7190
|
};
|
|
7184
7191
|
|
|
7185
|
-
NaverMintMapController.prototype.
|
|
7192
|
+
NaverMintMapController.prototype.getCurrentZIndex = function (marker) {
|
|
7186
7193
|
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
7187
7194
|
var parent_1 = marker.element.parentElement;
|
|
7188
7195
|
|
|
7189
|
-
if (parent_1) {
|
|
7190
|
-
|
|
7196
|
+
if (parent_1 && parent_1.style.zIndex) {
|
|
7197
|
+
var zIndex = Number(parent_1.style.zIndex);
|
|
7198
|
+
return isNaN(zIndex) ? undefined : zIndex;
|
|
7199
|
+
}
|
|
7200
|
+
}
|
|
7201
|
+
|
|
7202
|
+
return undefined;
|
|
7203
|
+
};
|
|
7204
|
+
|
|
7205
|
+
NaverMintMapController.prototype.setMarkerZIndex = function (marker, zIndex) {
|
|
7206
|
+
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
7207
|
+
var parent_2 = marker.element.parentElement;
|
|
7208
|
+
|
|
7209
|
+
if (parent_2) {
|
|
7210
|
+
parent_2.style.zIndex = String(zIndex);
|
|
7191
7211
|
}
|
|
7192
7212
|
}
|
|
7193
7213
|
};
|
|
7194
7214
|
|
|
7195
7215
|
NaverMintMapController.prototype.markerToTheTop = function (marker) {
|
|
7216
|
+
// 이미 최상위로 올라간 상태면 (원래 zIndex가 이미 저장됨) 중복 실행 방지
|
|
7217
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
7218
|
+
return;
|
|
7219
|
+
}
|
|
7220
|
+
|
|
7221
|
+
var currentZIndex = this.getCurrentZIndex(marker); // undefined면 null로 저장 (원래 zIndex가 없었음을 표시)
|
|
7222
|
+
|
|
7223
|
+
this.markerOriginalZIndex = currentZIndex !== undefined ? currentZIndex : null;
|
|
7196
7224
|
this.setMarkerZIndex(marker, this.getMaxZIndex(1));
|
|
7197
7225
|
};
|
|
7198
7226
|
|
|
7227
|
+
NaverMintMapController.prototype.restoreMarkerZIndex = function (marker) {
|
|
7228
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
7229
|
+
if (this.markerOriginalZIndex === null) {
|
|
7230
|
+
// 원래 zIndex가 없었으면 제거 (또는 초기값 0으로)
|
|
7231
|
+
this.setMarkerZIndex(marker, 0);
|
|
7232
|
+
} else {
|
|
7233
|
+
this.setMarkerZIndex(marker, this.markerOriginalZIndex);
|
|
7234
|
+
}
|
|
7235
|
+
|
|
7236
|
+
this.markerOriginalZIndex = undefined;
|
|
7237
|
+
}
|
|
7238
|
+
};
|
|
7239
|
+
|
|
7199
7240
|
NaverMintMapController.prototype.clearDrawable = function (drawable) {
|
|
7200
7241
|
var _a;
|
|
7201
7242
|
|
|
@@ -7950,6 +7991,10 @@ function (_super) {
|
|
|
7950
7991
|
}
|
|
7951
7992
|
};
|
|
7952
7993
|
|
|
7994
|
+
GoogleMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Google Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
7995
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
7996
|
+
};
|
|
7997
|
+
|
|
7953
7998
|
GoogleMintMapController.prototype.clearDrawable = function (drawable) {
|
|
7954
7999
|
if (drawable && drawable.native) {
|
|
7955
8000
|
if (drawable.native instanceof google.maps.Marker || drawable.native instanceof google.maps.Polygon || drawable.native instanceof google.maps.Polyline) {
|
|
@@ -8672,6 +8717,10 @@ function (_super) {
|
|
|
8672
8717
|
}
|
|
8673
8718
|
};
|
|
8674
8719
|
|
|
8720
|
+
KakaoMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Kakao Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
8721
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
8722
|
+
};
|
|
8723
|
+
|
|
8675
8724
|
KakaoMintMapController.prototype.clearDrawable = function (drawable) {
|
|
8676
8725
|
var _this = this;
|
|
8677
8726
|
|
package/dist/index.umd.js
CHANGED
|
@@ -2754,7 +2754,7 @@
|
|
|
2754
2754
|
var onMouseOverHandler = function (e) {
|
|
2755
2755
|
var _a;
|
|
2756
2756
|
|
|
2757
|
-
var marker = markerRef.current;
|
|
2757
|
+
var marker = markerRef.current;
|
|
2758
2758
|
|
|
2759
2759
|
if (marker) {
|
|
2760
2760
|
var mouseOverHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseover');
|
|
@@ -2767,6 +2767,25 @@
|
|
|
2767
2767
|
|
|
2768
2768
|
next && topOnHover && controller.markerToTheTop(marker);
|
|
2769
2769
|
}
|
|
2770
|
+
}; // 20251014 | 장한별 | mouseleave 이벤트 추가, 마우스가 마커 위에서 떠날 때 원래 zindex 를 복구하기 위함
|
|
2771
|
+
|
|
2772
|
+
|
|
2773
|
+
var onMouseLeaveHandler = function (e) {
|
|
2774
|
+
var _a;
|
|
2775
|
+
|
|
2776
|
+
var marker = markerRef.current;
|
|
2777
|
+
|
|
2778
|
+
if (marker) {
|
|
2779
|
+
var mouseOutHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseout');
|
|
2780
|
+
var next = true;
|
|
2781
|
+
|
|
2782
|
+
if (mouseOutHandler) {
|
|
2783
|
+
var hasNext = mouseOutHandler(e);
|
|
2784
|
+
hasNext !== undefined && (next = hasNext);
|
|
2785
|
+
}
|
|
2786
|
+
|
|
2787
|
+
next && topOnHover && controller.restoreMarkerZIndex(marker);
|
|
2788
|
+
}
|
|
2770
2789
|
}; //create object
|
|
2771
2790
|
|
|
2772
2791
|
|
|
@@ -2784,10 +2803,12 @@
|
|
|
2784
2803
|
}); //드래그 여부 초기화를 먼저 수행하기 위해 capture : true 처리
|
|
2785
2804
|
|
|
2786
2805
|
divElement.addEventListener('mouseover', onMouseOverHandler);
|
|
2806
|
+
divElement.addEventListener('mouseleave', onMouseLeaveHandler);
|
|
2787
2807
|
return function () {
|
|
2788
2808
|
divElement.removeEventListener('click', onClickHandler);
|
|
2789
2809
|
divElement.removeEventListener('mousedown', onMousedownHandler);
|
|
2790
2810
|
divElement.removeEventListener('mouseover', onMouseOverHandler);
|
|
2811
|
+
divElement.removeEventListener('mouseleave', onMouseLeaveHandler);
|
|
2791
2812
|
|
|
2792
2813
|
if (markerRef.current) {
|
|
2793
2814
|
controller.clearDrawable(markerRef.current);
|
|
@@ -5389,7 +5410,9 @@
|
|
|
5389
5410
|
maxCacheSize = _f === void 0 ? DEFAULT_MAX_CACHE_SIZE : _f,
|
|
5390
5411
|
externalSelectedItems = _a.selectedItems,
|
|
5391
5412
|
externalSelectedItem = _a.selectedItem,
|
|
5392
|
-
|
|
5413
|
+
_g = _a.disablePointerEvents,
|
|
5414
|
+
disablePointerEvents = _g === void 0 ? false : _g,
|
|
5415
|
+
options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disablePointerEvents"]); // --------------------------------------------------------------------------
|
|
5393
5416
|
// Hooks & Context
|
|
5394
5417
|
// --------------------------------------------------------------------------
|
|
5395
5418
|
|
|
@@ -5464,12 +5487,6 @@
|
|
|
5464
5487
|
x: 0,
|
|
5465
5488
|
y: 0
|
|
5466
5489
|
}); // --------------------------------------------------------------------------
|
|
5467
|
-
// Event Handler Refs (클로저 문제 방지)
|
|
5468
|
-
// --------------------------------------------------------------------------
|
|
5469
|
-
|
|
5470
|
-
var onClickRef = React.useRef(onClick);
|
|
5471
|
-
var onMouseOverRef = React.useRef(onMouseOver);
|
|
5472
|
-
var onMouseOutRef = React.useRef(onMouseOut); // --------------------------------------------------------------------------
|
|
5473
5490
|
// Performance Refs (캐싱 & 최적화)
|
|
5474
5491
|
// --------------------------------------------------------------------------
|
|
5475
5492
|
|
|
@@ -5760,9 +5777,9 @@
|
|
|
5760
5777
|
|
|
5761
5778
|
var doRenderEvent = function () {
|
|
5762
5779
|
var layer = eventLayerRef.current;
|
|
5763
|
-
if (!layer) return;
|
|
5780
|
+
if (!layer) return;
|
|
5764
5781
|
|
|
5765
|
-
if (!
|
|
5782
|
+
if (!onClick && !onMouseOver && !onMouseOut) {
|
|
5766
5783
|
layer.destroyChildren();
|
|
5767
5784
|
layer.batchDraw();
|
|
5768
5785
|
return;
|
|
@@ -5966,7 +5983,7 @@
|
|
|
5966
5983
|
|
|
5967
5984
|
|
|
5968
5985
|
var setHovered = function (data) {
|
|
5969
|
-
if (!
|
|
5986
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
5970
5987
|
hoveredItemRef.current = data;
|
|
5971
5988
|
|
|
5972
5989
|
if (draggingRef.current) {
|
|
@@ -5991,7 +6008,7 @@
|
|
|
5991
6008
|
|
|
5992
6009
|
|
|
5993
6010
|
var handleLocalClick = function (data) {
|
|
5994
|
-
if (!
|
|
6011
|
+
if (!onClick) return; // 1. 선택 상태 업데이트
|
|
5995
6012
|
|
|
5996
6013
|
if (enableMultiSelect) {
|
|
5997
6014
|
// 다중 선택: Set과 Map 동시 업데이트
|
|
@@ -6042,7 +6059,7 @@
|
|
|
6042
6059
|
var handleClick = function (event) {
|
|
6043
6060
|
var _a;
|
|
6044
6061
|
|
|
6045
|
-
if (!
|
|
6062
|
+
if (!onClick) return;
|
|
6046
6063
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6047
6064
|
|
|
6048
6065
|
try {
|
|
@@ -6051,7 +6068,7 @@
|
|
|
6051
6068
|
|
|
6052
6069
|
if (data) {
|
|
6053
6070
|
handleLocalClick(data);
|
|
6054
|
-
|
|
6071
|
+
onClick(data, selectedIdsRef.current);
|
|
6055
6072
|
}
|
|
6056
6073
|
} catch (error) {
|
|
6057
6074
|
console.error('[WoongKonvaMarker] handleClick error:', error);
|
|
@@ -6065,7 +6082,7 @@
|
|
|
6065
6082
|
var handleMouseMove = function (event) {
|
|
6066
6083
|
var _a;
|
|
6067
6084
|
|
|
6068
|
-
if (!
|
|
6085
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6069
6086
|
if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
|
|
6070
6087
|
|
|
6071
6088
|
try {
|
|
@@ -6075,8 +6092,8 @@
|
|
|
6075
6092
|
|
|
6076
6093
|
if (prevHovered !== hoveredItem) {
|
|
6077
6094
|
setHovered(hoveredItem);
|
|
6078
|
-
if (prevHovered &&
|
|
6079
|
-
if (hoveredItem &&
|
|
6095
|
+
if (prevHovered && onMouseOut) onMouseOut(prevHovered);
|
|
6096
|
+
if (hoveredItem && onMouseOver) onMouseOver(hoveredItem);
|
|
6080
6097
|
}
|
|
6081
6098
|
} catch (error) {
|
|
6082
6099
|
console.error('[WoongKonvaMarker] handleMouseMove error:', error);
|
|
@@ -6106,7 +6123,7 @@
|
|
|
6106
6123
|
|
|
6107
6124
|
|
|
6108
6125
|
var handleMouseLeave = function () {
|
|
6109
|
-
if (!
|
|
6126
|
+
if (!onMouseOver && !onMouseOut) return;
|
|
6110
6127
|
var prevHovered = hoveredItemRef.current;
|
|
6111
6128
|
|
|
6112
6129
|
if (prevHovered) {
|
|
@@ -6114,8 +6131,8 @@
|
|
|
6114
6131
|
controller.setMapCursor('grab');
|
|
6115
6132
|
doRenderEvent();
|
|
6116
6133
|
|
|
6117
|
-
if (
|
|
6118
|
-
|
|
6134
|
+
if (onMouseOut) {
|
|
6135
|
+
onMouseOut(prevHovered);
|
|
6119
6136
|
}
|
|
6120
6137
|
}
|
|
6121
6138
|
}; // --------------------------------------------------------------------------
|
|
@@ -6216,20 +6233,13 @@
|
|
|
6216
6233
|
controller.addEventListener('IDLE', handleIdle);
|
|
6217
6234
|
controller.addEventListener('ZOOMSTART', handleZoomStart);
|
|
6218
6235
|
controller.addEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6219
|
-
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
controller.addEventListener('CLICK', handleClick);
|
|
6223
|
-
} // onMouseOver/onMouseOut이 있을 때만 MOUSEMOVE 이벤트 등록
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
if (onMouseOver || onMouseOut) {
|
|
6227
|
-
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
6228
|
-
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
6229
|
-
}
|
|
6230
|
-
|
|
6236
|
+
controller.addEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6237
|
+
controller.addEventListener('CLICK', handleClick);
|
|
6238
|
+
controller.addEventListener('MOUSEMOVE', handleMouseMove);
|
|
6231
6239
|
controller.addEventListener('DRAGSTART', handleDragStart);
|
|
6232
|
-
controller.addEventListener('DRAGEND', handleDragEnd);
|
|
6240
|
+
controller.addEventListener('DRAGEND', handleDragEnd); // 맵 컨테이너에 mouseleave 이벤트 추가
|
|
6241
|
+
|
|
6242
|
+
mapDiv.addEventListener('mouseleave', handleMouseLeave);
|
|
6233
6243
|
renderAllImmediate(); // Context 사용 시 컴포넌트 등록 (다중 인스턴스 관리)
|
|
6234
6244
|
|
|
6235
6245
|
var componentInstance = null;
|
|
@@ -6267,18 +6277,11 @@
|
|
|
6267
6277
|
controller.removeEventListener('ZOOMSTART', handleZoomStart);
|
|
6268
6278
|
controller.removeEventListener('ZOOM_CHANGED', handleZoomEnd);
|
|
6269
6279
|
controller.removeEventListener('CENTER_CHANGED', handleCenterChanged);
|
|
6270
|
-
|
|
6271
|
-
|
|
6272
|
-
controller.removeEventListener('CLICK', handleClick);
|
|
6273
|
-
}
|
|
6274
|
-
|
|
6275
|
-
if (onMouseOver || onMouseOut) {
|
|
6276
|
-
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6277
|
-
mapDiv.removeEventListener('mouseleave', handleMouseLeave);
|
|
6278
|
-
}
|
|
6279
|
-
|
|
6280
|
+
controller.removeEventListener('CLICK', handleClick);
|
|
6281
|
+
controller.removeEventListener('MOUSEMOVE', handleMouseMove);
|
|
6280
6282
|
controller.removeEventListener('DRAGSTART', handleDragStart);
|
|
6281
|
-
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
6283
|
+
controller.removeEventListener('DRAGEND', handleDragEnd);
|
|
6284
|
+
mapDiv.removeEventListener('mouseleave', handleMouseLeave); // Context 정리
|
|
6282
6285
|
|
|
6283
6286
|
if (context && componentInstance) {
|
|
6284
6287
|
context.unregisterComponent(componentInstance);
|
|
@@ -6295,18 +6298,6 @@
|
|
|
6295
6298
|
spatialIndexRef.current.clear();
|
|
6296
6299
|
};
|
|
6297
6300
|
}, []); // --------------------------------------------------------------------------
|
|
6298
|
-
// Lifecycle: 이벤트 핸들러 ref 동기화
|
|
6299
|
-
// --------------------------------------------------------------------------
|
|
6300
|
-
|
|
6301
|
-
React.useEffect(function () {
|
|
6302
|
-
onClickRef.current = onClick;
|
|
6303
|
-
onMouseOverRef.current = onMouseOver;
|
|
6304
|
-
onMouseOutRef.current = onMouseOut; // Event Layer 다시 렌더링 (이벤트 핸들러 변경 반영)
|
|
6305
|
-
|
|
6306
|
-
if (stageRef.current) {
|
|
6307
|
-
doRenderEvent();
|
|
6308
|
-
}
|
|
6309
|
-
}, [onClick, onMouseOver, onMouseOut]); // --------------------------------------------------------------------------
|
|
6310
6301
|
// Lifecycle: 외부 selectedItems 동기화
|
|
6311
6302
|
// --------------------------------------------------------------------------
|
|
6312
6303
|
|
|
@@ -6397,23 +6388,15 @@
|
|
|
6397
6388
|
|
|
6398
6389
|
renderAllImmediate();
|
|
6399
6390
|
}, [markers]);
|
|
6400
|
-
var hasAnyHandler = onClick || onMouseOver || onMouseOut;
|
|
6401
6391
|
return reactDom.createPortal(React__default["default"].createElement("div", {
|
|
6402
|
-
style: {
|
|
6403
|
-
zIndex: options.zIndex !== undefined ? options.zIndex + 1 : 9999,
|
|
6404
|
-
position: 'absolute',
|
|
6405
|
-
width: '100%',
|
|
6406
|
-
height: '100%',
|
|
6407
|
-
pointerEvents: hasAnyHandler ? 'none' : 'auto'
|
|
6408
|
-
}
|
|
6409
|
-
}, React__default["default"].createElement("div", {
|
|
6410
6392
|
ref: containerRef,
|
|
6411
6393
|
style: {
|
|
6412
6394
|
position: 'absolute',
|
|
6413
6395
|
width: '100%',
|
|
6414
|
-
height: '100%'
|
|
6396
|
+
height: '100%',
|
|
6397
|
+
pointerEvents: disablePointerEvents ? 'none' : 'auto'
|
|
6415
6398
|
}
|
|
6416
|
-
})
|
|
6399
|
+
}), divElement);
|
|
6417
6400
|
};
|
|
6418
6401
|
/**
|
|
6419
6402
|
* 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
|
|
@@ -6421,29 +6404,53 @@
|
|
|
6421
6404
|
* 비교 전략:
|
|
6422
6405
|
* 1. markers 배열 비교
|
|
6423
6406
|
* 2. selectedItems 배열 비교 (외부 제어)
|
|
6424
|
-
* 3. 이벤트 핸들러 비교 (onClick, onMouseOver, onMouseOut)
|
|
6425
6407
|
*
|
|
6426
6408
|
* 주의: JSON.stringify() 사용 금지! (매우 느림)
|
|
6427
6409
|
*/
|
|
6428
6410
|
|
|
6429
6411
|
|
|
6430
6412
|
var WoongKonvaMarker = React__default["default"].memo(WoongKonvaMarkerComponent, function (prevProps, nextProps) {
|
|
6431
|
-
// markers
|
|
6432
|
-
|
|
6413
|
+
// 1. markers 비교
|
|
6414
|
+
var prevMarkers = prevProps.markers;
|
|
6415
|
+
var nextMarkers = nextProps.markers; // 참조가 같으면 스킵
|
|
6433
6416
|
|
|
6434
|
-
if (
|
|
6417
|
+
if (prevMarkers !== nextMarkers) {
|
|
6418
|
+
// 길이가 다르면 변경됨
|
|
6419
|
+
if (prevMarkers.length !== nextMarkers.length) return false; // 각 마커의 ID 비교
|
|
6420
|
+
|
|
6421
|
+
for (var i = 0; i < prevMarkers.length; i++) {
|
|
6422
|
+
if (prevMarkers[i].id !== nextMarkers[i].id) {
|
|
6423
|
+
return false; // 변경됨 → 리렌더링
|
|
6424
|
+
}
|
|
6425
|
+
}
|
|
6426
|
+
} // 2. selectedItems 비교 (참조만 비교)
|
|
6435
6427
|
|
|
6436
|
-
if (prevProps.selectedItem !== nextProps.selectedItem) return false; // 이벤트 핸들러 비교 (참조 비교)
|
|
6437
6428
|
|
|
6438
|
-
if (prevProps.
|
|
6439
|
-
|
|
6440
|
-
|
|
6429
|
+
if (prevProps.selectedItems !== nextProps.selectedItems) {
|
|
6430
|
+
return false; // 변경됨 → 리렌더링
|
|
6431
|
+
}
|
|
6441
6432
|
|
|
6442
|
-
if (prevProps.
|
|
6443
|
-
|
|
6444
|
-
|
|
6433
|
+
if (prevProps.selectedItem !== nextProps.selectedItem) {
|
|
6434
|
+
return false; // 변경됨 → 리렌더링
|
|
6435
|
+
}
|
|
6445
6436
|
|
|
6446
|
-
|
|
6437
|
+
if (prevProps.onClick !== nextProps.onClick) {
|
|
6438
|
+
return false; // 변경됨 → 리렌더링
|
|
6439
|
+
}
|
|
6440
|
+
|
|
6441
|
+
if (prevProps.onMouseOver !== nextProps.onMouseOver) {
|
|
6442
|
+
return false; // 변경됨 → 리렌더링
|
|
6443
|
+
}
|
|
6444
|
+
|
|
6445
|
+
if (prevProps.onMouseOut !== nextProps.onMouseOut) {
|
|
6446
|
+
return false; // 변경됨 → 리렌더링
|
|
6447
|
+
}
|
|
6448
|
+
|
|
6449
|
+
if (prevProps.disablePointerEvents !== nextProps.disablePointerEvents) {
|
|
6450
|
+
return false; // 변경됨 → 리렌더링
|
|
6451
|
+
}
|
|
6452
|
+
|
|
6453
|
+
return true; // 같음 → 리렌더링 스킵
|
|
6447
6454
|
});
|
|
6448
6455
|
|
|
6449
6456
|
var css_248z = ".MintMapWrapper-module_mint-map-control-wrapper-container__DONh7 {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n pointer-events: none;\n z-index: 101;\n}\n\n.MintMapWrapper-module_mint-map-overlay-wrapper__Jn4wV {\n position: absolute;\n z-index: 1;\n}";
|
|
@@ -7186,20 +7193,54 @@
|
|
|
7186
7193
|
}
|
|
7187
7194
|
};
|
|
7188
7195
|
|
|
7189
|
-
NaverMintMapController.prototype.
|
|
7196
|
+
NaverMintMapController.prototype.getCurrentZIndex = function (marker) {
|
|
7190
7197
|
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
7191
7198
|
var parent_1 = marker.element.parentElement;
|
|
7192
7199
|
|
|
7193
|
-
if (parent_1) {
|
|
7194
|
-
|
|
7200
|
+
if (parent_1 && parent_1.style.zIndex) {
|
|
7201
|
+
var zIndex = Number(parent_1.style.zIndex);
|
|
7202
|
+
return isNaN(zIndex) ? undefined : zIndex;
|
|
7203
|
+
}
|
|
7204
|
+
}
|
|
7205
|
+
|
|
7206
|
+
return undefined;
|
|
7207
|
+
};
|
|
7208
|
+
|
|
7209
|
+
NaverMintMapController.prototype.setMarkerZIndex = function (marker, zIndex) {
|
|
7210
|
+
if (this.map && marker.element && marker.element instanceof HTMLElement) {
|
|
7211
|
+
var parent_2 = marker.element.parentElement;
|
|
7212
|
+
|
|
7213
|
+
if (parent_2) {
|
|
7214
|
+
parent_2.style.zIndex = String(zIndex);
|
|
7195
7215
|
}
|
|
7196
7216
|
}
|
|
7197
7217
|
};
|
|
7198
7218
|
|
|
7199
7219
|
NaverMintMapController.prototype.markerToTheTop = function (marker) {
|
|
7220
|
+
// 이미 최상위로 올라간 상태면 (원래 zIndex가 이미 저장됨) 중복 실행 방지
|
|
7221
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
7222
|
+
return;
|
|
7223
|
+
}
|
|
7224
|
+
|
|
7225
|
+
var currentZIndex = this.getCurrentZIndex(marker); // undefined면 null로 저장 (원래 zIndex가 없었음을 표시)
|
|
7226
|
+
|
|
7227
|
+
this.markerOriginalZIndex = currentZIndex !== undefined ? currentZIndex : null;
|
|
7200
7228
|
this.setMarkerZIndex(marker, this.getMaxZIndex(1));
|
|
7201
7229
|
};
|
|
7202
7230
|
|
|
7231
|
+
NaverMintMapController.prototype.restoreMarkerZIndex = function (marker) {
|
|
7232
|
+
if (this.markerOriginalZIndex !== undefined) {
|
|
7233
|
+
if (this.markerOriginalZIndex === null) {
|
|
7234
|
+
// 원래 zIndex가 없었으면 제거 (또는 초기값 0으로)
|
|
7235
|
+
this.setMarkerZIndex(marker, 0);
|
|
7236
|
+
} else {
|
|
7237
|
+
this.setMarkerZIndex(marker, this.markerOriginalZIndex);
|
|
7238
|
+
}
|
|
7239
|
+
|
|
7240
|
+
this.markerOriginalZIndex = undefined;
|
|
7241
|
+
}
|
|
7242
|
+
};
|
|
7243
|
+
|
|
7203
7244
|
NaverMintMapController.prototype.clearDrawable = function (drawable) {
|
|
7204
7245
|
var _a;
|
|
7205
7246
|
|
|
@@ -7954,6 +7995,10 @@
|
|
|
7954
7995
|
}
|
|
7955
7996
|
};
|
|
7956
7997
|
|
|
7998
|
+
GoogleMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Google Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
7999
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
8000
|
+
};
|
|
8001
|
+
|
|
7957
8002
|
GoogleMintMapController.prototype.clearDrawable = function (drawable) {
|
|
7958
8003
|
if (drawable && drawable.native) {
|
|
7959
8004
|
if (drawable.native instanceof google.maps.Marker || drawable.native instanceof google.maps.Polygon || drawable.native instanceof google.maps.Polyline) {
|
|
@@ -8676,6 +8721,10 @@
|
|
|
8676
8721
|
}
|
|
8677
8722
|
};
|
|
8678
8723
|
|
|
8724
|
+
KakaoMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Kakao Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
|
|
8725
|
+
// 이 기능은 Naver Maps에서만 사용 가능합니다.
|
|
8726
|
+
};
|
|
8727
|
+
|
|
8679
8728
|
KakaoMintMapController.prototype.clearDrawable = function (drawable) {
|
|
8680
8729
|
var _this = this;
|
|
8681
8730
|
|