@mint-ui/map 1.2.0-test.65 → 1.2.0-test.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.d.ts +2 -122
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +129 -153
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/index.d.ts +1 -0
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/types.d.ts +252 -0
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.d.ts +2 -279
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/index.d.ts +1 -0
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/types.d.ts +280 -0
- package/dist/index.es.js +129 -153
- package/dist/index.umd.js +129 -153
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -3951,32 +3951,26 @@ var CanvasMarkerLayer = function (props) {
|
|
|
3951
3951
|
|
|
3952
3952
|
var _d = hasRenderEvent && 'renderEvent' in props ? props : {
|
|
3953
3953
|
disableInteraction: false,
|
|
3954
|
-
enableMultiSelect: false,
|
|
3955
3954
|
onClick: undefined,
|
|
3956
3955
|
onMouseOut: undefined,
|
|
3957
3956
|
onMouseOver: undefined,
|
|
3958
3957
|
renderEvent: undefined,
|
|
3959
3958
|
selectedItem: undefined,
|
|
3960
3959
|
selectedItems: undefined,
|
|
3961
|
-
topOnHover: false,
|
|
3962
3960
|
topStageZIndex: undefined
|
|
3963
3961
|
},
|
|
3964
3962
|
_e = _d.disableInteraction,
|
|
3965
3963
|
disableInteraction = _e === void 0 ? false : _e,
|
|
3966
|
-
_f = _d.enableMultiSelect,
|
|
3967
|
-
enableMultiSelect = _f === void 0 ? false : _f,
|
|
3968
3964
|
onClick = _d.onClick,
|
|
3969
3965
|
onMouseOut = _d.onMouseOut,
|
|
3970
3966
|
onMouseOver = _d.onMouseOver,
|
|
3971
3967
|
renderEvent = _d.renderEvent,
|
|
3972
3968
|
externalSelectedItem = _d.selectedItem,
|
|
3973
3969
|
externalSelectedItems = _d.selectedItems,
|
|
3974
|
-
rawTopStageZIndex = _d.topStageZIndex
|
|
3975
|
-
_g = _d.topOnHover,
|
|
3976
|
-
topOnHover = _g === void 0 ? false : _g; // topOnHover가 false이거나 없으면 topStageZIndex를 사용하지 못하도록 제한
|
|
3970
|
+
rawTopStageZIndex = _d.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
|
|
3977
3971
|
|
|
3978
3972
|
|
|
3979
|
-
var topStageZIndex =
|
|
3973
|
+
var topStageZIndex = rawTopStageZIndex;
|
|
3980
3974
|
var controller = useMintMapController();
|
|
3981
3975
|
var context = useCanvasContext();
|
|
3982
3976
|
var currentZIndex = options.zIndex !== undefined ? options.zIndex : 0; // DOM Refs
|
|
@@ -4086,44 +4080,24 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4086
4080
|
|
|
4087
4081
|
var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
|
|
4088
4082
|
return isInViewport$1(item);
|
|
4089
|
-
}) : dataRef.current; // topStageZIndex가
|
|
4090
|
-
// topOnHover 옵션: hover된 항목을 나중에 그려서 최상위에 표시
|
|
4083
|
+
}) : dataRef.current; // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리
|
|
4091
4084
|
|
|
4092
|
-
if (topStageZIndex !== undefined &&
|
|
4085
|
+
if (topStageZIndex !== undefined && hovered) {
|
|
4093
4086
|
visibleItems = visibleItems.filter(function (item) {
|
|
4094
4087
|
return item.id !== hovered.id;
|
|
4095
4088
|
});
|
|
4096
|
-
}
|
|
4097
|
-
|
|
4098
|
-
return item.id !== hovered.id;
|
|
4099
|
-
});
|
|
4100
|
-
} // 일반 항목들 먼저 렌더링
|
|
4101
|
-
// topOnHover가 false이고 renderEvent가 있으면 선택된 항목도 Base Layer에서 렌더링
|
|
4102
|
-
// (Event Layer에서 선택된 항목을 렌더링하지 않으므로)
|
|
4103
|
-
// topOnHover가 true이거나 renderEvent가 없으면 선택된 항목은 Base Layer에서 스킵됨
|
|
4089
|
+
} // Base Layer는 기본 마커만 렌더링 (성능 최적화)
|
|
4090
|
+
// hover/selected는 Event Layer에서 덧그리므로 Base Layer에서는 제외
|
|
4104
4091
|
|
|
4105
4092
|
|
|
4106
|
-
var baseSelectedIds = !topOnHover && renderEvent ? selectedIdsRef.current : new Set();
|
|
4107
4093
|
renderBase({
|
|
4108
4094
|
ctx: ctx,
|
|
4109
|
-
hoveredItem:
|
|
4095
|
+
hoveredItem: null,
|
|
4110
4096
|
items: visibleItems,
|
|
4111
|
-
selectedIds:
|
|
4097
|
+
selectedIds: new Set(),
|
|
4112
4098
|
utils: renderUtils
|
|
4113
4099
|
}); // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리하므로 여기서는 스킵
|
|
4114
|
-
// hover된
|
|
4115
|
-
|
|
4116
|
-
if (topStageZIndex === undefined && topOnHover && !renderEvent && hovered) {
|
|
4117
|
-
if (!enableViewportCullingRef.current || isInViewport$1(hovered)) {
|
|
4118
|
-
renderBase({
|
|
4119
|
-
ctx: ctx,
|
|
4120
|
-
hoveredItem: hovered,
|
|
4121
|
-
items: [hovered],
|
|
4122
|
-
selectedIds: selectedIdsRef.current,
|
|
4123
|
-
utils: renderUtils
|
|
4124
|
-
});
|
|
4125
|
-
}
|
|
4126
|
-
}
|
|
4100
|
+
// topStageZIndex가 없으면 성능 우선으로 Base Layer 재렌더링 안 함 (hover된 항목이 뒤편 마커 위로 올라갈 수 있음)
|
|
4127
4101
|
}
|
|
4128
4102
|
});
|
|
4129
4103
|
layer.add(shape);
|
|
@@ -4147,64 +4121,45 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4147
4121
|
sceneFunc: function (konvaContext) {
|
|
4148
4122
|
var ctx = konvaContext;
|
|
4149
4123
|
var selectedItems = mapValuesToArray(selectedItemsMapRef.current);
|
|
4150
|
-
var hovered = hoveredItemRef.current; //
|
|
4124
|
+
var hovered = hoveredItemRef.current; // selectedItem이 있으면 selectedItems 배열에 포함 (renderMarkerEvent가 selectedItems만 사용하므로)
|
|
4125
|
+
|
|
4126
|
+
if (selectedItemRef.current) {
|
|
4127
|
+
// selectedItem이 이미 selectedItems에 포함되어 있지 않으면 추가
|
|
4128
|
+
var selectedItemId_1 = selectedItemRef.current.id;
|
|
4129
|
+
|
|
4130
|
+
if (!selectedItems.some(function (item) {
|
|
4131
|
+
return item.id === selectedItemId_1;
|
|
4132
|
+
})) {
|
|
4133
|
+
selectedItems = __spreadArray(__spreadArray([], selectedItems, true), [selectedItemRef.current], false);
|
|
4134
|
+
}
|
|
4135
|
+
} // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리
|
|
4151
4136
|
// event 레이어에서는 hover된 항목을 완전히 제외하고 선택된 항목만 렌더링
|
|
4152
4137
|
|
|
4153
|
-
|
|
4154
|
-
|
|
4155
|
-
|
|
4138
|
+
|
|
4139
|
+
if (topStageZIndex !== undefined && hovered) {
|
|
4140
|
+
// hover된 항목을 제외한 선택된 항목들 (성능 최적화: 필요할 때만 필터링)
|
|
4141
|
+
var selectedItemsWithoutHovered = selectedItems.length > 0 ? selectedItems.filter(function (item) {
|
|
4156
4142
|
return item.id !== hovered.id;
|
|
4157
|
-
}); // 선택된 항목만 그리기 (hover된 항목은 Top Layer에서 처리)
|
|
4143
|
+
}) : selectedItems; // 선택된 항목만 그리기 (hover된 항목은 Top Layer에서 처리)
|
|
4158
4144
|
|
|
4159
4145
|
renderEvent({
|
|
4160
4146
|
ctx: ctx,
|
|
4161
4147
|
hoveredItem: null,
|
|
4162
4148
|
selectedItem: selectedItemRef.current,
|
|
4163
4149
|
selectedItems: selectedItemsWithoutHovered,
|
|
4164
|
-
topOnHover:
|
|
4150
|
+
topOnHover: true,
|
|
4165
4151
|
utils: renderUtils
|
|
4166
4152
|
});
|
|
4167
|
-
} else if (topOnHover && hovered) {
|
|
4168
|
-
renderEvent({
|
|
4169
|
-
ctx: ctx,
|
|
4170
|
-
hoveredItem: null,
|
|
4171
|
-
selectedItem: selectedItemRef.current,
|
|
4172
|
-
selectedItems: selectedItems.filter(function (item) {
|
|
4173
|
-
return item.id !== hovered.id;
|
|
4174
|
-
}),
|
|
4175
|
-
topOnHover: topOnHover,
|
|
4176
|
-
utils: renderUtils
|
|
4177
|
-
});
|
|
4178
|
-
|
|
4179
|
-
if (!enableViewportCullingRef.current || isInViewport$1(hovered)) {
|
|
4180
|
-
var hoveredIsSelected = selectedItems.some(function (item) {
|
|
4181
|
-
return item.id === hovered.id;
|
|
4182
|
-
});
|
|
4183
|
-
var hoverSelectedItems = hoveredIsSelected ? [hovered] : [];
|
|
4184
|
-
renderEvent({
|
|
4185
|
-
ctx: ctx,
|
|
4186
|
-
hoveredItem: hovered,
|
|
4187
|
-
selectedItem: selectedItemRef.current,
|
|
4188
|
-
selectedItems: hoverSelectedItems,
|
|
4189
|
-
topOnHover: topOnHover,
|
|
4190
|
-
utils: renderUtils
|
|
4191
|
-
});
|
|
4192
|
-
}
|
|
4193
4153
|
} else {
|
|
4194
|
-
//
|
|
4195
|
-
//
|
|
4196
|
-
//
|
|
4197
|
-
// renderEvent 함수 내부에서 topOnHover가 false일 때는 hover된 항목을 마지막에 그리지 않도록 함
|
|
4198
|
-
var hoveredIsSelected = hovered ? selectedItems.some(function (item) {
|
|
4199
|
-
return item.id === hovered.id;
|
|
4200
|
-
}) : false;
|
|
4201
|
-
var finalSelectedItems = hovered && !hoveredIsSelected && !topOnHover ? __spreadArray(__spreadArray([], selectedItems, true), [hovered], false) : selectedItems;
|
|
4154
|
+
// topStageZIndex가 없으면 hover된 항목을 selectedItems에 추가하지 않음 (성능 우선)
|
|
4155
|
+
// renderEvent 함수가 hoveredItem을 별도로 처리하므로, selectedItems는 그대로 전달
|
|
4156
|
+
// 이렇게 하면 hover 변경 시 선택된 항목들을 다시 그리지 않고 hover된 항목만 업데이트됨
|
|
4202
4157
|
renderEvent({
|
|
4203
4158
|
ctx: ctx,
|
|
4204
4159
|
hoveredItem: hovered,
|
|
4205
4160
|
selectedItem: selectedItemRef.current,
|
|
4206
|
-
selectedItems:
|
|
4207
|
-
topOnHover:
|
|
4161
|
+
selectedItems: selectedItems,
|
|
4162
|
+
topOnHover: false,
|
|
4208
4163
|
utils: renderUtils
|
|
4209
4164
|
});
|
|
4210
4165
|
}
|
|
@@ -4220,7 +4175,7 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4220
4175
|
var doRenderTop = function () {
|
|
4221
4176
|
var stage = topStageRef.current;
|
|
4222
4177
|
var layer = topLayerRef.current;
|
|
4223
|
-
if (!stage || !layer || topStageZIndex === undefined
|
|
4178
|
+
if (!stage || !layer || topStageZIndex === undefined) return;
|
|
4224
4179
|
var hovered = hoveredItemRef.current;
|
|
4225
4180
|
var shape = layer.findOne('.top-render-shape'); // hover된 항목이 없으면 shape 제거
|
|
4226
4181
|
|
|
@@ -4248,6 +4203,8 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4248
4203
|
|
|
4249
4204
|
|
|
4250
4205
|
shape.sceneFunc(function (konvaContext) {
|
|
4206
|
+
var _a;
|
|
4207
|
+
|
|
4251
4208
|
var ctx = konvaContext;
|
|
4252
4209
|
var currentHovered = hoveredItemRef.current; // hover된 항목이 없으면 아무것도 그리지 않음
|
|
4253
4210
|
|
|
@@ -4257,10 +4214,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4257
4214
|
return;
|
|
4258
4215
|
}
|
|
4259
4216
|
|
|
4260
|
-
var selectedItems = mapValuesToArray(selectedItemsMapRef.current);
|
|
4217
|
+
var selectedItems = mapValuesToArray(selectedItemsMapRef.current); // selectedItem이 있으면 hover된 항목이 선택되었는지 확인
|
|
4218
|
+
|
|
4261
4219
|
var hoveredIsSelected = selectedItems.some(function (item) {
|
|
4262
4220
|
return item.id === currentHovered.id;
|
|
4263
|
-
}); // Top Layer에서는 hover된 마커만 hover 스타일로 그리기
|
|
4221
|
+
}) || ((_a = selectedItemRef.current) === null || _a === void 0 ? void 0 : _a.id) === currentHovered.id; // Top Layer에서는 hover된 마커만 hover 스타일로 그리기
|
|
4264
4222
|
// renderEvent가 있으면: base는 그리지 않고 event만 그리기 (hover 스타일 적용)
|
|
4265
4223
|
// renderEvent가 없으면: base를 hover 스타일로 그리기
|
|
4266
4224
|
|
|
@@ -4272,7 +4230,7 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4272
4230
|
hoveredItem: currentHovered,
|
|
4273
4231
|
selectedItem: selectedItemRef.current,
|
|
4274
4232
|
selectedItems: hoverSelectedItems,
|
|
4275
|
-
topOnHover:
|
|
4233
|
+
topOnHover: true,
|
|
4276
4234
|
utils: renderUtils
|
|
4277
4235
|
});
|
|
4278
4236
|
} else {
|
|
@@ -4303,13 +4261,13 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4303
4261
|
topContainerRef.current.style.transform = containerRef.current.style.transform || '';
|
|
4304
4262
|
}
|
|
4305
4263
|
|
|
4306
|
-
if (topStageZIndex !== undefined
|
|
4264
|
+
if (topStageZIndex !== undefined) {
|
|
4307
4265
|
doRenderTop();
|
|
4308
4266
|
}
|
|
4309
4267
|
}; // 지도 이벤트 핸들러 생성
|
|
4310
4268
|
|
|
4311
4269
|
|
|
4312
|
-
var
|
|
4270
|
+
var _f = createMapEventHandlers({
|
|
4313
4271
|
accumTranslateRef: accumTranslateRef,
|
|
4314
4272
|
boundingBoxCacheRef: boundingBoxCacheRef,
|
|
4315
4273
|
containerRef: containerRef,
|
|
@@ -4320,12 +4278,30 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4320
4278
|
prevCenterOffsetRef: prevCenterOffsetRef,
|
|
4321
4279
|
renderAllImmediate: renderAllImmediate
|
|
4322
4280
|
}),
|
|
4323
|
-
|
|
4324
|
-
handleZoomStart =
|
|
4325
|
-
handleZoomEnd =
|
|
4326
|
-
|
|
4327
|
-
handleDragStartShared =
|
|
4328
|
-
handleDragEndShared =
|
|
4281
|
+
handleIdleShared = _f.handleIdle,
|
|
4282
|
+
handleZoomStart = _f.handleZoomStart,
|
|
4283
|
+
handleZoomEnd = _f.handleZoomEnd,
|
|
4284
|
+
handleCenterChangedShared = _f.handleCenterChanged,
|
|
4285
|
+
handleDragStartShared = _f.handleDragStart,
|
|
4286
|
+
handleDragEndShared = _f.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
|
|
4287
|
+
|
|
4288
|
+
|
|
4289
|
+
var handleIdle = function () {
|
|
4290
|
+
handleIdleShared(); // 드래그 완료 시 topStage의 transform도 제거 (메인 stage와 동기화)
|
|
4291
|
+
|
|
4292
|
+
if (topStageZIndex !== undefined && topContainerRef.current) {
|
|
4293
|
+
topContainerRef.current.style.transform = '';
|
|
4294
|
+
}
|
|
4295
|
+
}; // handleCenterChanged 래핑: topStage transform 동기화 추가
|
|
4296
|
+
|
|
4297
|
+
|
|
4298
|
+
var handleCenterChanged = function () {
|
|
4299
|
+
handleCenterChangedShared(); // 드래그 중 메인 stage의 transform을 topStage에도 동기화 (반대 방향 이동 방지)
|
|
4300
|
+
|
|
4301
|
+
if (topStageZIndex !== undefined && topContainerRef.current && containerRef.current) {
|
|
4302
|
+
topContainerRef.current.style.transform = containerRef.current.style.transform || '';
|
|
4303
|
+
}
|
|
4304
|
+
};
|
|
4329
4305
|
|
|
4330
4306
|
var handleDragStart = function () {
|
|
4331
4307
|
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
@@ -4353,8 +4329,8 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4353
4329
|
|
|
4354
4330
|
|
|
4355
4331
|
var findData = function (offset) {
|
|
4356
|
-
//
|
|
4357
|
-
if (
|
|
4332
|
+
// topStageZIndex가 설정되어 있으면 hover된 항목을 최우선으로 확인
|
|
4333
|
+
if (topStageZIndex !== undefined && hoveredItemRef.current) {
|
|
4358
4334
|
var hovered = hoveredItemRef.current;
|
|
4359
4335
|
|
|
4360
4336
|
if (isPointInMarkerData(offset, hovered, getOrComputeMarkerOffset)) {
|
|
@@ -4391,57 +4367,40 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4391
4367
|
controller.setMapCursor(hoveredData ? 'pointer' : 'grab');
|
|
4392
4368
|
}
|
|
4393
4369
|
|
|
4394
|
-
if (topStageZIndex !== undefined
|
|
4395
|
-
// topStageZIndex가
|
|
4396
|
-
//
|
|
4397
|
-
|
|
4370
|
+
if (topStageZIndex !== undefined) {
|
|
4371
|
+
// topStageZIndex가 설정된 경우 Top Layer에서 hover된 항목 렌더링
|
|
4372
|
+
// Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
|
|
4373
|
+
// Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
|
|
4398
4374
|
doRenderEvent();
|
|
4399
4375
|
doRenderTop();
|
|
4400
4376
|
} else if (renderEvent) {
|
|
4401
|
-
// renderEvent가 있을 때는 Event Layer 업데이트
|
|
4402
|
-
//
|
|
4403
|
-
|
|
4404
|
-
doRenderBase();
|
|
4405
|
-
}
|
|
4406
|
-
|
|
4377
|
+
// renderEvent가 있을 때는 Event Layer만 업데이트
|
|
4378
|
+
// topStageZIndex가 없으면 Base Layer는 정적이므로 재렌더링 불필요 (성능 우선)
|
|
4379
|
+
// hover 효과는 Event Layer에서만 처리하면 됨
|
|
4407
4380
|
doRenderEvent();
|
|
4408
|
-
} else if (topOnHover) {
|
|
4409
|
-
doRenderBase();
|
|
4410
4381
|
}
|
|
4411
|
-
}; // 클릭 처리: 선택 상태 업데이트
|
|
4382
|
+
}; // 클릭 처리: 선택 상태 업데이트 (단일 선택만 지원)
|
|
4412
4383
|
|
|
4413
4384
|
|
|
4414
4385
|
var handleLocalClick = function (clickedData) {
|
|
4415
|
-
|
|
4416
|
-
var newSelected = new Set(selectedIdsRef.current);
|
|
4386
|
+
var newSelected = new Set();
|
|
4417
4387
|
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
newSelected.add(clickedData.id);
|
|
4423
|
-
selectedItemsMapRef.current.set(clickedData.id, clickedData);
|
|
4424
|
-
}
|
|
4388
|
+
if (!selectedIdsRef.current.has(clickedData.id)) {
|
|
4389
|
+
newSelected.add(clickedData.id);
|
|
4390
|
+
selectedItemsMapRef.current.clear();
|
|
4391
|
+
selectedItemsMapRef.current.set(clickedData.id, clickedData); // externalSelectedItem이 있을 때를 대비해 selectedItemRef도 업데이트
|
|
4425
4392
|
|
|
4426
|
-
|
|
4393
|
+
selectedItemRef.current = clickedData;
|
|
4427
4394
|
} else {
|
|
4428
|
-
|
|
4429
|
-
|
|
4430
|
-
if (!selectedIdsRef.current.has(clickedData.id)) {
|
|
4431
|
-
newSelected.add(clickedData.id);
|
|
4432
|
-
selectedItemsMapRef.current.clear();
|
|
4433
|
-
selectedItemsMapRef.current.set(clickedData.id, clickedData);
|
|
4434
|
-
} else {
|
|
4435
|
-
selectedItemsMapRef.current.clear();
|
|
4436
|
-
}
|
|
4437
|
-
|
|
4438
|
-
selectedIdsRef.current = newSelected;
|
|
4395
|
+
selectedItemsMapRef.current.clear();
|
|
4396
|
+
selectedItemRef.current = null;
|
|
4439
4397
|
}
|
|
4440
4398
|
|
|
4441
|
-
|
|
4399
|
+
selectedIdsRef.current = newSelected; // 선택 상태 변경은 Event Layer에서만 처리 (Base Layer는 정적이므로 재렌더링 불필요)
|
|
4400
|
+
|
|
4442
4401
|
doRenderEvent();
|
|
4443
4402
|
|
|
4444
|
-
if (topStageZIndex !== undefined
|
|
4403
|
+
if (topStageZIndex !== undefined) {
|
|
4445
4404
|
doRenderTop();
|
|
4446
4405
|
}
|
|
4447
4406
|
}; // 클릭 이벤트 핸들러
|
|
@@ -4505,18 +4464,15 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4505
4464
|
hoveredItemRef.current = null;
|
|
4506
4465
|
controller.setMapCursor('grab');
|
|
4507
4466
|
|
|
4508
|
-
if (topStageZIndex !== undefined
|
|
4509
|
-
//
|
|
4510
|
-
|
|
4467
|
+
if (topStageZIndex !== undefined) {
|
|
4468
|
+
// Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
|
|
4469
|
+
// Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
|
|
4511
4470
|
doRenderEvent();
|
|
4512
4471
|
doRenderTop();
|
|
4513
4472
|
} else if (renderEvent) {
|
|
4514
|
-
// renderEvent가 있을 때는 Event Layer 업데이트
|
|
4515
|
-
//
|
|
4516
|
-
|
|
4517
|
-
doRenderBase();
|
|
4518
|
-
}
|
|
4519
|
-
|
|
4473
|
+
// renderEvent가 있을 때는 Event Layer만 업데이트
|
|
4474
|
+
// topStageZIndex가 없으면 Base Layer는 정적이므로 재렌더링 불필요 (성능 우선)
|
|
4475
|
+
// hover 효과 제거는 Event Layer에서만 처리하면 됨
|
|
4520
4476
|
doRenderEvent();
|
|
4521
4477
|
}
|
|
4522
4478
|
|
|
@@ -4525,9 +4481,9 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4525
4481
|
|
|
4526
4482
|
|
|
4527
4483
|
useEffect(function () {
|
|
4528
|
-
divElement.style.width = 'fit-content'; // Top Layer용 div도 초기화 (topStageZIndex가
|
|
4484
|
+
divElement.style.width = 'fit-content'; // Top Layer용 div도 초기화 (topStageZIndex가 설정된 경우)
|
|
4529
4485
|
|
|
4530
|
-
if (topStageZIndex !== undefined
|
|
4486
|
+
if (topStageZIndex !== undefined) {
|
|
4531
4487
|
topDivElement.style.width = 'fit-content';
|
|
4532
4488
|
}
|
|
4533
4489
|
|
|
@@ -4713,10 +4669,10 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4713
4669
|
|
|
4714
4670
|
renderAllImmediate();
|
|
4715
4671
|
}
|
|
4716
|
-
}, [enableViewportCulling]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가
|
|
4672
|
+
}, [enableViewportCulling]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
|
|
4717
4673
|
|
|
4718
4674
|
useEffect(function () {
|
|
4719
|
-
if (topStageZIndex === undefined
|
|
4675
|
+
if (topStageZIndex === undefined) return;
|
|
4720
4676
|
if (!topContainerRef.current) return;
|
|
4721
4677
|
var mapDiv = controller.mapDivElement; // Top Layer용 div 요소 설정
|
|
4722
4678
|
|
|
@@ -4785,13 +4741,14 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4785
4741
|
|
|
4786
4742
|
|
|
4787
4743
|
var handleTopIdle = function () {
|
|
4788
|
-
// topMarker의 position을 메인 marker와 동일하게 업데이트
|
|
4744
|
+
// 드래그 완료 후 topMarker의 position을 메인 marker와 동일하게 업데이트
|
|
4789
4745
|
updateTopMarkerPosition(); // topStage 크기 업데이트
|
|
4790
4746
|
|
|
4791
4747
|
if (topStageRef.current) {
|
|
4792
4748
|
topStageRef.current.width(mapDiv.offsetWidth);
|
|
4793
4749
|
topStageRef.current.height(mapDiv.offsetHeight);
|
|
4794
|
-
} //
|
|
4750
|
+
} // 드래그 완료 후 transform은 handleIdle에서 제거되므로 여기서는 동기화만
|
|
4751
|
+
// (handleIdle이 먼저 실행되어 transform을 제거한 후, 여기서 position 업데이트)
|
|
4795
4752
|
|
|
4796
4753
|
|
|
4797
4754
|
if (topContainerRef.current && containerRef.current) {
|
|
@@ -4820,13 +4777,18 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4820
4777
|
};
|
|
4821
4778
|
|
|
4822
4779
|
var handleTopCenterChanged = function () {
|
|
4823
|
-
//
|
|
4824
|
-
|
|
4780
|
+
// 드래그 중에는 transform만 동기화 (position 업데이트는 드래그 완료 후에만)
|
|
4781
|
+
// 드래그 중에 position을 업데이트하면 transform과 충돌하여 반대 방향으로 이동하는 버그 발생
|
|
4782
|
+
if (!draggingRef.current) {
|
|
4783
|
+
// 드래그가 아닐 때만 topMarker의 position을 업데이트
|
|
4784
|
+
updateTopMarkerPosition();
|
|
4785
|
+
} // topStage 크기 업데이트
|
|
4786
|
+
|
|
4825
4787
|
|
|
4826
4788
|
if (topStageRef.current) {
|
|
4827
4789
|
topStageRef.current.width(mapDiv.offsetWidth);
|
|
4828
4790
|
topStageRef.current.height(mapDiv.offsetHeight);
|
|
4829
|
-
} // 메인 stage의 transform을 topStage에도 동기화
|
|
4791
|
+
} // 메인 stage의 transform을 topStage에도 동기화 (드래그 중 필수)
|
|
4830
4792
|
|
|
4831
4793
|
|
|
4832
4794
|
if (topContainerRef.current && containerRef.current) {
|
|
@@ -4868,25 +4830,39 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4868
4830
|
}, [topStageZIndex, renderEvent, options]); // 외부 selectedItems 동기화
|
|
4869
4831
|
|
|
4870
4832
|
useEffect(function () {
|
|
4871
|
-
if (!stageRef.current) return;
|
|
4872
|
-
|
|
4873
|
-
|
|
4833
|
+
if (!stageRef.current) return; // externalSelectedItems가 있으면 selectedItem은 무시 (공존 불가)
|
|
4834
|
+
|
|
4835
|
+
if (externalSelectedItems !== undefined) {
|
|
4836
|
+
selectedItemRef.current = undefined;
|
|
4837
|
+
syncExternalSelectedItems(externalSelectedItems, selectedIdsRef, selectedItemsMapRef);
|
|
4838
|
+
} // 선택 상태 변경은 Event Layer에서만 처리 (Base Layer는 정적이므로 재렌더링 불필요)
|
|
4839
|
+
|
|
4840
|
+
|
|
4874
4841
|
doRenderEvent();
|
|
4875
4842
|
|
|
4876
|
-
if (topStageZIndex !== undefined
|
|
4843
|
+
if (topStageZIndex !== undefined) {
|
|
4877
4844
|
doRenderTop();
|
|
4878
4845
|
}
|
|
4879
4846
|
}, [externalSelectedItems]); // 외부 selectedItem 변경 시 Event Layer 리렌더링
|
|
4880
4847
|
|
|
4881
4848
|
useEffect(function () {
|
|
4882
|
-
if (!stageRef.current) return;
|
|
4883
|
-
|
|
4849
|
+
if (!stageRef.current) return; // externalSelectedItem이 있으면 selectedItems는 무시 (공존 불가)
|
|
4850
|
+
|
|
4851
|
+
if (externalSelectedItem !== undefined) {
|
|
4852
|
+
selectedIdsRef.current.clear();
|
|
4853
|
+
selectedItemsMapRef.current.clear();
|
|
4854
|
+
selectedItemRef.current = externalSelectedItem;
|
|
4855
|
+
} else if (externalSelectedItems === undefined) {
|
|
4856
|
+
// 둘 다 없으면 selectedItemRef만 업데이트 (내부 클릭으로 선택한 항목은 유지)
|
|
4857
|
+
selectedItemRef.current = externalSelectedItem;
|
|
4858
|
+
}
|
|
4859
|
+
|
|
4884
4860
|
doRenderEvent();
|
|
4885
4861
|
|
|
4886
|
-
if (topStageZIndex !== undefined
|
|
4862
|
+
if (topStageZIndex !== undefined) {
|
|
4887
4863
|
doRenderTop();
|
|
4888
4864
|
}
|
|
4889
|
-
}, [externalSelectedItem]); // 데이터 변경 시 렌더링 (캐시 정리 및 선택 상태 동기화)
|
|
4865
|
+
}, [externalSelectedItem, externalSelectedItems]); // 데이터 변경 시 렌더링 (캐시 정리 및 선택 상태 동기화)
|
|
4890
4866
|
|
|
4891
4867
|
useEffect(function () {
|
|
4892
4868
|
if (!stageRef.current) return;
|