@mint-ui/map 1.2.0-test.17 → 1.2.0-test.18
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.
|
@@ -332,6 +332,10 @@ var WoongCanvasLayer = function (props) {
|
|
|
332
332
|
* 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
|
|
333
333
|
* 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
|
|
334
334
|
* 3. 클로저로 최신 데이터 참조
|
|
335
|
+
*
|
|
336
|
+
* 🎯 topOnHover 지원:
|
|
337
|
+
* - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
|
|
338
|
+
* - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
|
|
335
339
|
*/
|
|
336
340
|
|
|
337
341
|
var doRenderBase = function () {
|
|
@@ -346,17 +350,40 @@ var WoongCanvasLayer = function (props) {
|
|
|
346
350
|
shape = new Konva__default["default"].Shape({
|
|
347
351
|
name: 'base-render-shape',
|
|
348
352
|
sceneFunc: function (context, shape) {
|
|
349
|
-
var ctx = context;
|
|
353
|
+
var ctx = context;
|
|
354
|
+
var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
|
|
350
355
|
|
|
351
356
|
var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
|
|
352
357
|
return isInViewport(item);
|
|
353
|
-
}) : markersRef.current;
|
|
358
|
+
}) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
|
|
359
|
+
|
|
360
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
361
|
+
// hover된 항목 제외하고 렌더링
|
|
362
|
+
visibleMarkers = visibleMarkers.filter(function (item) {
|
|
363
|
+
return item.id !== hovered.id;
|
|
364
|
+
});
|
|
365
|
+
} // 일반 항목 렌더링
|
|
366
|
+
|
|
367
|
+
|
|
354
368
|
renderBase({
|
|
355
369
|
ctx: ctx,
|
|
356
370
|
items: visibleMarkers,
|
|
357
371
|
selectedIds: selectedIdsRef.current,
|
|
358
372
|
utils: renderUtils
|
|
359
|
-
});
|
|
373
|
+
}); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
|
|
374
|
+
|
|
375
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
376
|
+
var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
|
|
377
|
+
|
|
378
|
+
if (isHoveredInViewport) {
|
|
379
|
+
renderBase({
|
|
380
|
+
ctx: ctx,
|
|
381
|
+
items: [hovered],
|
|
382
|
+
selectedIds: selectedIdsRef.current,
|
|
383
|
+
utils: renderUtils
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
360
387
|
},
|
|
361
388
|
perfectDrawEnabled: false,
|
|
362
389
|
listening: false,
|
|
@@ -589,12 +616,15 @@ var WoongCanvasLayer = function (props) {
|
|
|
589
616
|
return null;
|
|
590
617
|
};
|
|
591
618
|
/**
|
|
592
|
-
* Hover 상태 설정 및
|
|
619
|
+
* Hover 상태 설정 및 레이어 렌더링
|
|
593
620
|
*
|
|
594
621
|
* @param data hover된 마커/폴리곤 데이터 또는 null
|
|
595
622
|
*
|
|
596
623
|
* 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
|
|
597
|
-
*
|
|
624
|
+
*
|
|
625
|
+
* 🎯 topOnHover 지원:
|
|
626
|
+
* - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
|
|
627
|
+
* - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
|
|
598
628
|
*/
|
|
599
629
|
|
|
600
630
|
|
|
@@ -606,10 +636,15 @@ var WoongCanvasLayer = function (props) {
|
|
|
606
636
|
} else {
|
|
607
637
|
controller.setMapCursor(data ? 'pointer' : 'grab');
|
|
608
638
|
} // 즉시 렌더링 (RAF 없이)
|
|
609
|
-
// topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
|
|
610
639
|
|
|
611
640
|
|
|
612
|
-
|
|
641
|
+
if (renderEvent) {
|
|
642
|
+
// renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
|
|
643
|
+
doRenderEvent();
|
|
644
|
+
} else if (topOnHover) {
|
|
645
|
+
// renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
|
|
646
|
+
doRenderBase();
|
|
647
|
+
}
|
|
613
648
|
};
|
|
614
649
|
/**
|
|
615
650
|
* 클릭 처리 (단일/다중 선택)
|
package/dist/index.es.js
CHANGED
|
@@ -5952,6 +5952,10 @@ var WoongCanvasLayer = function (props) {
|
|
|
5952
5952
|
* 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
|
|
5953
5953
|
* 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
|
|
5954
5954
|
* 3. 클로저로 최신 데이터 참조
|
|
5955
|
+
*
|
|
5956
|
+
* 🎯 topOnHover 지원:
|
|
5957
|
+
* - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
|
|
5958
|
+
* - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
|
|
5955
5959
|
*/
|
|
5956
5960
|
|
|
5957
5961
|
var doRenderBase = function () {
|
|
@@ -5966,17 +5970,40 @@ var WoongCanvasLayer = function (props) {
|
|
|
5966
5970
|
shape = new Konva.Shape({
|
|
5967
5971
|
name: 'base-render-shape',
|
|
5968
5972
|
sceneFunc: function (context, shape) {
|
|
5969
|
-
var ctx = context;
|
|
5973
|
+
var ctx = context;
|
|
5974
|
+
var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
|
|
5970
5975
|
|
|
5971
5976
|
var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
|
|
5972
5977
|
return isInViewport(item);
|
|
5973
|
-
}) : markersRef.current;
|
|
5978
|
+
}) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
|
|
5979
|
+
|
|
5980
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
5981
|
+
// hover된 항목 제외하고 렌더링
|
|
5982
|
+
visibleMarkers = visibleMarkers.filter(function (item) {
|
|
5983
|
+
return item.id !== hovered.id;
|
|
5984
|
+
});
|
|
5985
|
+
} // 일반 항목 렌더링
|
|
5986
|
+
|
|
5987
|
+
|
|
5974
5988
|
renderBase({
|
|
5975
5989
|
ctx: ctx,
|
|
5976
5990
|
items: visibleMarkers,
|
|
5977
5991
|
selectedIds: selectedIdsRef.current,
|
|
5978
5992
|
utils: renderUtils
|
|
5979
|
-
});
|
|
5993
|
+
}); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
|
|
5994
|
+
|
|
5995
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
5996
|
+
var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
|
|
5997
|
+
|
|
5998
|
+
if (isHoveredInViewport) {
|
|
5999
|
+
renderBase({
|
|
6000
|
+
ctx: ctx,
|
|
6001
|
+
items: [hovered],
|
|
6002
|
+
selectedIds: selectedIdsRef.current,
|
|
6003
|
+
utils: renderUtils
|
|
6004
|
+
});
|
|
6005
|
+
}
|
|
6006
|
+
}
|
|
5980
6007
|
},
|
|
5981
6008
|
perfectDrawEnabled: false,
|
|
5982
6009
|
listening: false,
|
|
@@ -6209,12 +6236,15 @@ var WoongCanvasLayer = function (props) {
|
|
|
6209
6236
|
return null;
|
|
6210
6237
|
};
|
|
6211
6238
|
/**
|
|
6212
|
-
* Hover 상태 설정 및
|
|
6239
|
+
* Hover 상태 설정 및 레이어 렌더링
|
|
6213
6240
|
*
|
|
6214
6241
|
* @param data hover된 마커/폴리곤 데이터 또는 null
|
|
6215
6242
|
*
|
|
6216
6243
|
* 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
|
|
6217
|
-
*
|
|
6244
|
+
*
|
|
6245
|
+
* 🎯 topOnHover 지원:
|
|
6246
|
+
* - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
|
|
6247
|
+
* - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
|
|
6218
6248
|
*/
|
|
6219
6249
|
|
|
6220
6250
|
|
|
@@ -6226,10 +6256,15 @@ var WoongCanvasLayer = function (props) {
|
|
|
6226
6256
|
} else {
|
|
6227
6257
|
controller.setMapCursor(data ? 'pointer' : 'grab');
|
|
6228
6258
|
} // 즉시 렌더링 (RAF 없이)
|
|
6229
|
-
// topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
|
|
6230
6259
|
|
|
6231
6260
|
|
|
6232
|
-
|
|
6261
|
+
if (renderEvent) {
|
|
6262
|
+
// renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
|
|
6263
|
+
doRenderEvent();
|
|
6264
|
+
} else if (topOnHover) {
|
|
6265
|
+
// renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
|
|
6266
|
+
doRenderBase();
|
|
6267
|
+
}
|
|
6233
6268
|
};
|
|
6234
6269
|
/**
|
|
6235
6270
|
* 클릭 처리 (단일/다중 선택)
|
package/dist/index.umd.js
CHANGED
|
@@ -5956,6 +5956,10 @@
|
|
|
5956
5956
|
* 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
|
|
5957
5957
|
* 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
|
|
5958
5958
|
* 3. 클로저로 최신 데이터 참조
|
|
5959
|
+
*
|
|
5960
|
+
* 🎯 topOnHover 지원:
|
|
5961
|
+
* - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
|
|
5962
|
+
* - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
|
|
5959
5963
|
*/
|
|
5960
5964
|
|
|
5961
5965
|
var doRenderBase = function () {
|
|
@@ -5970,17 +5974,40 @@
|
|
|
5970
5974
|
shape = new Konva__default["default"].Shape({
|
|
5971
5975
|
name: 'base-render-shape',
|
|
5972
5976
|
sceneFunc: function (context, shape) {
|
|
5973
|
-
var ctx = context;
|
|
5977
|
+
var ctx = context;
|
|
5978
|
+
var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
|
|
5974
5979
|
|
|
5975
5980
|
var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
|
|
5976
5981
|
return isInViewport(item);
|
|
5977
|
-
}) : markersRef.current;
|
|
5982
|
+
}) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
|
|
5983
|
+
|
|
5984
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
5985
|
+
// hover된 항목 제외하고 렌더링
|
|
5986
|
+
visibleMarkers = visibleMarkers.filter(function (item) {
|
|
5987
|
+
return item.id !== hovered.id;
|
|
5988
|
+
});
|
|
5989
|
+
} // 일반 항목 렌더링
|
|
5990
|
+
|
|
5991
|
+
|
|
5978
5992
|
renderBase({
|
|
5979
5993
|
ctx: ctx,
|
|
5980
5994
|
items: visibleMarkers,
|
|
5981
5995
|
selectedIds: selectedIdsRef.current,
|
|
5982
5996
|
utils: renderUtils
|
|
5983
|
-
});
|
|
5997
|
+
}); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
|
|
5998
|
+
|
|
5999
|
+
if (topOnHover && !renderEvent && hovered) {
|
|
6000
|
+
var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
|
|
6001
|
+
|
|
6002
|
+
if (isHoveredInViewport) {
|
|
6003
|
+
renderBase({
|
|
6004
|
+
ctx: ctx,
|
|
6005
|
+
items: [hovered],
|
|
6006
|
+
selectedIds: selectedIdsRef.current,
|
|
6007
|
+
utils: renderUtils
|
|
6008
|
+
});
|
|
6009
|
+
}
|
|
6010
|
+
}
|
|
5984
6011
|
},
|
|
5985
6012
|
perfectDrawEnabled: false,
|
|
5986
6013
|
listening: false,
|
|
@@ -6213,12 +6240,15 @@
|
|
|
6213
6240
|
return null;
|
|
6214
6241
|
};
|
|
6215
6242
|
/**
|
|
6216
|
-
* Hover 상태 설정 및
|
|
6243
|
+
* Hover 상태 설정 및 레이어 렌더링
|
|
6217
6244
|
*
|
|
6218
6245
|
* @param data hover된 마커/폴리곤 데이터 또는 null
|
|
6219
6246
|
*
|
|
6220
6247
|
* 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
|
|
6221
|
-
*
|
|
6248
|
+
*
|
|
6249
|
+
* 🎯 topOnHover 지원:
|
|
6250
|
+
* - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
|
|
6251
|
+
* - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
|
|
6222
6252
|
*/
|
|
6223
6253
|
|
|
6224
6254
|
|
|
@@ -6230,10 +6260,15 @@
|
|
|
6230
6260
|
} else {
|
|
6231
6261
|
controller.setMapCursor(data ? 'pointer' : 'grab');
|
|
6232
6262
|
} // 즉시 렌더링 (RAF 없이)
|
|
6233
|
-
// topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
|
|
6234
6263
|
|
|
6235
6264
|
|
|
6236
|
-
|
|
6265
|
+
if (renderEvent) {
|
|
6266
|
+
// renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
|
|
6267
|
+
doRenderEvent();
|
|
6268
|
+
} else if (topOnHover) {
|
|
6269
|
+
// renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
|
|
6270
|
+
doRenderBase();
|
|
6271
|
+
}
|
|
6237
6272
|
};
|
|
6238
6273
|
/**
|
|
6239
6274
|
* 클릭 처리 (단일/다중 선택)
|