@mint-ui/map 1.2.0-test.50 → 1.2.0-test.52
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/CanvasPolygonLayer/CanvasPolygonLayer.d.ts +104 -27
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.js +11 -8
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.d.ts +80 -21
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.js +207 -37
- package/dist/index.es.js +214 -43
- package/dist/index.umd.js +214 -43
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -5756,6 +5756,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
5756
5756
|
*
|
|
5757
5757
|
* 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
|
|
5758
5758
|
* GeoJSON MultiPolygon 형식을 지원하며, 도넛 폴리곤(구멍이 있는 폴리곤)도 처리할 수 있습니다.
|
|
5759
|
+
*
|
|
5760
|
+
* 세 가지 스타일 지정 방식을 지원하는 렌더링 함수를 제공합니다:
|
|
5761
|
+
* 1. 개별 props 방식: renderPolygonBase, renderPolygonEvent
|
|
5762
|
+
* 2. 객체 방식: renderPolygonBaseWithObject, renderPolygonEventWithObject
|
|
5763
|
+
* 3. 함수 방식: renderPolygonBaseWithCustomStyle, renderPolygonEventWithCustomStyle
|
|
5759
5764
|
*/
|
|
5760
5765
|
|
|
5761
5766
|
/**
|
|
@@ -6039,13 +6044,13 @@ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth
|
|
|
6039
6044
|
};
|
|
6040
6045
|
};
|
|
6041
6046
|
/**
|
|
6042
|
-
* 폴리곤 Base 렌더링 함수 팩토리 (
|
|
6047
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (객체 방식)
|
|
6043
6048
|
*
|
|
6044
6049
|
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
6045
|
-
* renderStyle
|
|
6050
|
+
* renderStyle 객체를 사용하여 기본 스타일을 적용합니다.
|
|
6046
6051
|
*
|
|
6047
6052
|
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
6048
|
-
* @param renderStyle 폴리곤 스타일
|
|
6053
|
+
* @param renderStyle 폴리곤 스타일 객체
|
|
6049
6054
|
* @returns Base Layer 렌더링 함수
|
|
6050
6055
|
*
|
|
6051
6056
|
* @remarks
|
|
@@ -6055,17 +6060,13 @@ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth
|
|
|
6055
6060
|
*
|
|
6056
6061
|
* @example
|
|
6057
6062
|
* ```typescript
|
|
6058
|
-
* const renderBase =
|
|
6059
|
-
* (
|
|
6060
|
-
*
|
|
6061
|
-
* strokeColor: 'rgba(200, 50, 50, 0.8)',
|
|
6062
|
-
* lineWidth: 2
|
|
6063
|
-
* })
|
|
6064
|
-
* );
|
|
6063
|
+
* const renderBase = renderPolygonBaseWithObject<MyDataType>({
|
|
6064
|
+
* base: { fillColor: 'rgba(255, 100, 100, 0.5)', strokeColor: 'rgba(200, 50, 50, 0.8)', lineWidth: 2 }
|
|
6065
|
+
* });
|
|
6065
6066
|
* ```
|
|
6066
6067
|
*/
|
|
6067
6068
|
|
|
6068
|
-
var
|
|
6069
|
+
var renderPolygonBaseWithObject = function (renderStyle) {
|
|
6069
6070
|
return function (_a) {
|
|
6070
6071
|
var ctx = _a.ctx,
|
|
6071
6072
|
items = _a.items,
|
|
@@ -6080,14 +6081,179 @@ var renderPolygonBaseWithFunction = function (renderStyle) {
|
|
|
6080
6081
|
if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
|
|
6081
6082
|
|
|
6082
6083
|
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
6083
|
-
if (!polygonOffsets) continue; //
|
|
6084
|
+
if (!polygonOffsets) continue; // Base Layer는 선택되지 않은 항목만 그리므로 base 스타일 사용
|
|
6085
|
+
|
|
6086
|
+
var style = renderStyle.base; // 폴리곤 그리기
|
|
6087
|
+
|
|
6088
|
+
drawPolygon({
|
|
6089
|
+
ctx: ctx,
|
|
6090
|
+
polygonOffsets: polygonOffsets,
|
|
6091
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
6092
|
+
fillColor: style.fillColor,
|
|
6093
|
+
strokeColor: style.strokeColor,
|
|
6094
|
+
lineWidth: style.lineWidth
|
|
6095
|
+
});
|
|
6096
|
+
}
|
|
6097
|
+
};
|
|
6098
|
+
};
|
|
6099
|
+
/**
|
|
6100
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (객체 방식)
|
|
6101
|
+
*
|
|
6102
|
+
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
6103
|
+
* renderStyle 객체를 사용하여 개별 props 방식과 동일한 알고리즘으로 스타일을 적용합니다.
|
|
6104
|
+
*
|
|
6105
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
6106
|
+
* @param renderStyle 폴리곤 스타일 객체
|
|
6107
|
+
* @returns Event Layer 렌더링 함수
|
|
6108
|
+
*
|
|
6109
|
+
* @remarks
|
|
6110
|
+
* - **렌더링 순서**: 선택된 항목 → 마지막 선택된 항목 → hover된 항목 (최상단)
|
|
6111
|
+
* - **성능**: O(m), m은 선택된 항목 수 + hover된 항목 수
|
|
6112
|
+
* - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
|
|
6113
|
+
* - **알고리즘**: 개별 props 방식과 동일
|
|
6114
|
+
* - 기본값 설정: selected/active/hovered가 없으면 base 또는 상위 값 사용
|
|
6115
|
+
* - 선택된 항목: selected 스타일
|
|
6116
|
+
* - 마지막 선택된 항목 (호버 안 됨): active 스타일
|
|
6117
|
+
* - 호버된 항목: 선택되어 있으면 active, 아니면 hovered 스타일
|
|
6118
|
+
*
|
|
6119
|
+
* @example
|
|
6120
|
+
* ```typescript
|
|
6121
|
+
* const renderEvent = renderPolygonEventWithObject<MyDataType>({
|
|
6122
|
+
* base: { fillColor: 'rgba(255, 100, 100, 0.5)', strokeColor: 'rgba(200, 50, 50, 0.8)', lineWidth: 2 },
|
|
6123
|
+
* selected: { fillColor: 'rgba(255, 193, 7, 0.7)', strokeColor: 'rgba(255, 152, 0, 1)', lineWidth: 4 },
|
|
6124
|
+
* active: { fillColor: 'rgba(255, 152, 0, 0.8)', strokeColor: 'rgba(255, 87, 34, 1)', lineWidth: 5 },
|
|
6125
|
+
* hovered: { fillColor: 'rgba(100, 150, 255, 0.8)', strokeColor: 'rgba(0, 100, 200, 1)', lineWidth: 3 }
|
|
6126
|
+
* });
|
|
6127
|
+
* ```
|
|
6128
|
+
*/
|
|
6129
|
+
|
|
6130
|
+
var renderPolygonEventWithObject = function (renderStyle) {
|
|
6131
|
+
// 기본값 설정 (개별 props 방식과 동일한 로직)
|
|
6132
|
+
var _selectedStyle = renderStyle.selected || renderStyle.base;
|
|
6133
|
+
|
|
6134
|
+
var _activeStyle = renderStyle.active || _selectedStyle;
|
|
6135
|
+
|
|
6136
|
+
var _hoveredStyle = renderStyle.hovered || _selectedStyle;
|
|
6137
|
+
|
|
6138
|
+
return function (_a) {
|
|
6139
|
+
var ctx = _a.ctx,
|
|
6140
|
+
hoveredItem = _a.hoveredItem,
|
|
6141
|
+
utils = _a.utils,
|
|
6142
|
+
selectedItems = _a.selectedItems,
|
|
6143
|
+
selectedItem = _a.selectedItem; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
|
|
6144
|
+
|
|
6145
|
+
var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
|
|
6146
|
+
return item.id;
|
|
6147
|
+
})) : new Set();
|
|
6148
|
+
var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
|
|
6149
|
+
var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
|
|
6150
|
+
|
|
6151
|
+
if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
|
|
6152
|
+
for (var _i = 0, selectedItems_2 = selectedItems; _i < selectedItems_2.length; _i++) {
|
|
6153
|
+
var item = selectedItems_2[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
|
|
6154
|
+
|
|
6155
|
+
if (item.id === selectedItemId || item.id === hoveredItemId) continue;
|
|
6156
|
+
if (!item.paths) continue;
|
|
6157
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
6158
|
+
if (!polygonOffsets) continue;
|
|
6159
|
+
drawPolygon({
|
|
6160
|
+
ctx: ctx,
|
|
6161
|
+
polygonOffsets: polygonOffsets,
|
|
6162
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
6163
|
+
fillColor: _selectedStyle.fillColor,
|
|
6164
|
+
strokeColor: _selectedStyle.strokeColor,
|
|
6165
|
+
lineWidth: _selectedStyle.lineWidth
|
|
6166
|
+
});
|
|
6167
|
+
}
|
|
6168
|
+
} // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
|
|
6169
|
+
|
|
6170
|
+
|
|
6171
|
+
if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
|
|
6172
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
|
|
6173
|
+
|
|
6174
|
+
if (polygonOffsets) {
|
|
6175
|
+
drawPolygon({
|
|
6176
|
+
ctx: ctx,
|
|
6177
|
+
polygonOffsets: polygonOffsets,
|
|
6178
|
+
isDonutPolygon: selectedItem.isDonutPolygon || false,
|
|
6179
|
+
fillColor: _activeStyle.fillColor,
|
|
6180
|
+
strokeColor: _activeStyle.strokeColor,
|
|
6181
|
+
lineWidth: _activeStyle.lineWidth
|
|
6182
|
+
});
|
|
6183
|
+
}
|
|
6184
|
+
} // 3. 호버된 항목 그리기 (가장 위에 표시)
|
|
6185
|
+
|
|
6186
|
+
|
|
6187
|
+
if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
|
|
6188
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem);
|
|
6189
|
+
if (!polygonOffsets) return; // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
|
|
6190
|
+
// 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
|
|
6191
|
+
|
|
6192
|
+
var isSelected = selectedIdsSet.has(hoveredItem.id);
|
|
6193
|
+
drawPolygon({
|
|
6194
|
+
ctx: ctx,
|
|
6195
|
+
polygonOffsets: polygonOffsets,
|
|
6196
|
+
isDonutPolygon: hoveredItem.isDonutPolygon || false,
|
|
6197
|
+
fillColor: isSelected ? _activeStyle.fillColor : _hoveredStyle.fillColor,
|
|
6198
|
+
strokeColor: isSelected ? _activeStyle.strokeColor : _hoveredStyle.strokeColor,
|
|
6199
|
+
lineWidth: isSelected ? _activeStyle.lineWidth : _hoveredStyle.lineWidth
|
|
6200
|
+
});
|
|
6201
|
+
}
|
|
6202
|
+
};
|
|
6203
|
+
};
|
|
6204
|
+
/**
|
|
6205
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (커스터마이징 방식)
|
|
6206
|
+
*
|
|
6207
|
+
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
6208
|
+
* customStyle 함수를 사용하여 각 폴리곤의 스타일을 자유롭게 커스터마이징합니다.
|
|
6209
|
+
*
|
|
6210
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
6211
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수
|
|
6212
|
+
* @returns Base Layer 렌더링 함수
|
|
6213
|
+
*
|
|
6214
|
+
* @remarks
|
|
6215
|
+
* - 선택된 항목은 Event Layer에서 그려지므로 Base Layer에서는 스킵
|
|
6216
|
+
* - 성능: O(n), n은 렌더링할 폴리곤 개수
|
|
6217
|
+
* - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
|
|
6218
|
+
*
|
|
6219
|
+
* @example
|
|
6220
|
+
* ```typescript
|
|
6221
|
+
* const renderBase = renderPolygonBaseWithCustomStyle<MyDataType>(
|
|
6222
|
+
* (item, context) => {
|
|
6223
|
+
* if (item.someProperty > 100) {
|
|
6224
|
+
* return { fillColor: 'red', strokeColor: 'darkred', lineWidth: 3 };
|
|
6225
|
+
* }
|
|
6226
|
+
* // 아무것도 반환하지 않으면 그리지 않음
|
|
6227
|
+
* }
|
|
6228
|
+
* );
|
|
6229
|
+
* ```
|
|
6230
|
+
*/
|
|
6231
|
+
|
|
6232
|
+
var renderPolygonBaseWithCustomStyle = function (customStyle) {
|
|
6233
|
+
return function (_a) {
|
|
6234
|
+
var ctx = _a.ctx,
|
|
6235
|
+
items = _a.items,
|
|
6236
|
+
selectedIds = _a.selectedIds,
|
|
6237
|
+
utils = _a.utils;
|
|
6238
|
+
|
|
6239
|
+
for (var _i = 0, items_3 = items; _i < items_3.length; _i++) {
|
|
6240
|
+
var item = items_3[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
|
|
6241
|
+
|
|
6242
|
+
if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
|
|
6243
|
+
|
|
6244
|
+
if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
|
|
6245
|
+
|
|
6246
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
6247
|
+
if (!polygonOffsets) continue; // Base Layer는 선택되지 않은 항목만 그리므로
|
|
6084
6248
|
|
|
6085
6249
|
var context = {
|
|
6086
6250
|
isSelected: false,
|
|
6087
6251
|
isHovered: false,
|
|
6088
6252
|
isActive: false
|
|
6089
6253
|
};
|
|
6090
|
-
var style =
|
|
6254
|
+
var style = customStyle(item, context); // null 또는 undefined를 반환하면 그리지 않음
|
|
6255
|
+
|
|
6256
|
+
if (!style) continue; // 폴리곤 그리기
|
|
6091
6257
|
|
|
6092
6258
|
drawPolygon({
|
|
6093
6259
|
ctx: ctx,
|
|
@@ -6101,47 +6267,47 @@ var renderPolygonBaseWithFunction = function (renderStyle) {
|
|
|
6101
6267
|
};
|
|
6102
6268
|
};
|
|
6103
6269
|
/**
|
|
6104
|
-
* 폴리곤 Event 렌더링 함수 팩토리 (
|
|
6270
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (커스터마이징 방식)
|
|
6105
6271
|
*
|
|
6106
6272
|
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
6107
|
-
*
|
|
6273
|
+
* customStyle 함수를 사용하여 각 폴리곤의 스타일을 자유롭게 커스터마이징합니다.
|
|
6108
6274
|
*
|
|
6109
6275
|
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
6110
|
-
* @param
|
|
6276
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수
|
|
6111
6277
|
* @returns Event Layer 렌더링 함수
|
|
6112
6278
|
*
|
|
6113
6279
|
* @remarks
|
|
6114
6280
|
* - **렌더링 순서**: 선택된 항목 → 마지막 선택된 항목 → hover된 항목 (최상단)
|
|
6115
6281
|
* - **성능**: O(m), m은 선택된 항목 수 + hover된 항목 수
|
|
6116
6282
|
* - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
|
|
6117
|
-
* - hover된 항목이 선택되어 있으면 active 스타일 적용
|
|
6118
6283
|
*
|
|
6119
6284
|
* @example
|
|
6120
6285
|
* ```typescript
|
|
6121
|
-
* const renderEvent =
|
|
6286
|
+
* const renderEvent = renderPolygonEventWithCustomStyle<MyDataType>(
|
|
6122
6287
|
* (item, context) => {
|
|
6123
6288
|
* if (context.isActive) {
|
|
6124
|
-
* return { fillColor: '
|
|
6289
|
+
* return { fillColor: 'yellow', strokeColor: 'orange', lineWidth: 5 };
|
|
6125
6290
|
* }
|
|
6126
6291
|
* if (context.isHovered) {
|
|
6127
|
-
* return { fillColor: '
|
|
6292
|
+
* return { fillColor: 'blue', strokeColor: 'darkblue', lineWidth: 3 };
|
|
6128
6293
|
* }
|
|
6129
6294
|
* if (context.isSelected) {
|
|
6130
|
-
* return { fillColor: '
|
|
6295
|
+
* return { fillColor: 'green', strokeColor: 'darkgreen', lineWidth: 4 };
|
|
6131
6296
|
* }
|
|
6132
|
-
*
|
|
6297
|
+
* // 아무것도 반환하지 않으면 그리지 않음
|
|
6133
6298
|
* }
|
|
6134
6299
|
* );
|
|
6135
6300
|
* ```
|
|
6136
6301
|
*/
|
|
6137
6302
|
|
|
6138
|
-
var
|
|
6303
|
+
var renderPolygonEventWithCustomStyle = function (customStyle) {
|
|
6139
6304
|
return function (_a) {
|
|
6140
6305
|
var ctx = _a.ctx,
|
|
6141
6306
|
hoveredItem = _a.hoveredItem,
|
|
6142
6307
|
utils = _a.utils,
|
|
6143
6308
|
selectedItems = _a.selectedItems,
|
|
6144
|
-
selectedItem = _a.selectedItem;
|
|
6309
|
+
selectedItem = _a.selectedItem; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
|
|
6310
|
+
|
|
6145
6311
|
var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
|
|
6146
6312
|
return item.id;
|
|
6147
6313
|
})) : new Set();
|
|
@@ -6149,8 +6315,8 @@ var renderPolygonEventWithFunction = function (renderStyle) {
|
|
|
6149
6315
|
var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
|
|
6150
6316
|
|
|
6151
6317
|
if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
|
|
6152
|
-
for (var _i = 0,
|
|
6153
|
-
var item =
|
|
6318
|
+
for (var _i = 0, selectedItems_3 = selectedItems; _i < selectedItems_3.length; _i++) {
|
|
6319
|
+
var item = selectedItems_3[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
|
|
6154
6320
|
|
|
6155
6321
|
if (item.id === selectedItemId || item.id === hoveredItemId) continue;
|
|
6156
6322
|
if (!item.paths) continue;
|
|
@@ -6161,7 +6327,9 @@ var renderPolygonEventWithFunction = function (renderStyle) {
|
|
|
6161
6327
|
isHovered: false,
|
|
6162
6328
|
isActive: false
|
|
6163
6329
|
};
|
|
6164
|
-
var style =
|
|
6330
|
+
var style = customStyle(item, context); // null 또는 undefined를 반환하면 그리지 않음
|
|
6331
|
+
|
|
6332
|
+
if (!style) continue;
|
|
6165
6333
|
drawPolygon({
|
|
6166
6334
|
ctx: ctx,
|
|
6167
6335
|
polygonOffsets: polygonOffsets,
|
|
@@ -6183,7 +6351,9 @@ var renderPolygonEventWithFunction = function (renderStyle) {
|
|
|
6183
6351
|
isHovered: false,
|
|
6184
6352
|
isActive: true
|
|
6185
6353
|
};
|
|
6186
|
-
var style =
|
|
6354
|
+
var style = customStyle(selectedItem, context); // null 또는 undefined를 반환하면 그리지 않음
|
|
6355
|
+
|
|
6356
|
+
if (!style) return;
|
|
6187
6357
|
drawPolygon({
|
|
6188
6358
|
ctx: ctx,
|
|
6189
6359
|
polygonOffsets: polygonOffsets,
|
|
@@ -6199,19 +6369,17 @@ var renderPolygonEventWithFunction = function (renderStyle) {
|
|
|
6199
6369
|
if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
|
|
6200
6370
|
var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem);
|
|
6201
6371
|
if (!polygonOffsets) return; // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
|
|
6202
|
-
//
|
|
6372
|
+
// 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
|
|
6203
6373
|
|
|
6204
6374
|
var isSelected = selectedIdsSet.has(hoveredItem.id);
|
|
6205
|
-
var isActive = isSelected && hoveredItem.id === selectedItemId; // 개별 props 방식과 동일한 로직: 선택된 항목이 hover되면 active 스타일을 사용
|
|
6206
|
-
// 따라서 선택된 항목이 hover될 때는 isHovered를 false로 설정하여
|
|
6207
|
-
// renderStyle 함수에서 isActive를 우선적으로 체크할 수 있도록 함
|
|
6208
|
-
|
|
6209
6375
|
var context = {
|
|
6210
6376
|
isSelected: isSelected,
|
|
6211
6377
|
isHovered: !isSelected,
|
|
6212
|
-
isActive:
|
|
6378
|
+
isActive: isSelected && hoveredItem.id === selectedItemId
|
|
6213
6379
|
};
|
|
6214
|
-
var style =
|
|
6380
|
+
var style = customStyle(hoveredItem, context); // null 또는 undefined를 반환하면 그리지 않음
|
|
6381
|
+
|
|
6382
|
+
if (!style) return;
|
|
6215
6383
|
drawPolygon({
|
|
6216
6384
|
ctx: ctx,
|
|
6217
6385
|
polygonOffsets: polygonOffsets,
|
|
@@ -6239,13 +6407,16 @@ var CanvasPolygonLayer = function (props) {
|
|
|
6239
6407
|
externalSelectedItem = props.selectedItem,
|
|
6240
6408
|
_e = props.disableInteraction,
|
|
6241
6409
|
disableInteraction = _e === void 0 ? false : _e,
|
|
6242
|
-
options = __rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); //
|
|
6410
|
+
options = __rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // 세 가지 방식 중 하나만 선택: customStyle > renderStyle > 개별 props
|
|
6243
6411
|
|
|
6244
6412
|
|
|
6245
|
-
var
|
|
6413
|
+
var isCustomStyleMode = 'customStyle' in props && props.customStyle !== undefined;
|
|
6414
|
+
var isObjectMode = !isCustomStyleMode && 'renderStyle' in props && props.renderStyle !== undefined;
|
|
6415
|
+
var isIndividualMode = !isCustomStyleMode && !isObjectMode; // 각 방식별 props 추출
|
|
6246
6416
|
|
|
6247
|
-
var
|
|
6248
|
-
var
|
|
6417
|
+
var customStyleProps = isCustomStyleMode ? props : undefined;
|
|
6418
|
+
var objectProps = isObjectMode ? props : undefined;
|
|
6419
|
+
var individualProps = isIndividualMode ? props : undefined; // --------------------------------------------------------------------------
|
|
6249
6420
|
// Hooks & Context
|
|
6250
6421
|
// --------------------------------------------------------------------------
|
|
6251
6422
|
|
|
@@ -6352,11 +6523,11 @@ var CanvasPolygonLayer = function (props) {
|
|
|
6352
6523
|
}
|
|
6353
6524
|
}; // 렌더링 함수 생성 (스타일 지정 방식에 따라 분기)
|
|
6354
6525
|
|
|
6355
|
-
var renderBase =
|
|
6356
|
-
throw new Error('Invalid props:
|
|
6526
|
+
var renderBase = isCustomStyleMode && customStyleProps ? renderPolygonBaseWithCustomStyle(customStyleProps.customStyle) : isObjectMode && objectProps ? renderPolygonBaseWithObject(objectProps.renderStyle) : isIndividualMode && individualProps ? renderPolygonBase(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth) : function () {
|
|
6527
|
+
throw new Error('Invalid props: one of customStyle, renderStyle, or individual style props must be provided');
|
|
6357
6528
|
}();
|
|
6358
|
-
var renderEvent =
|
|
6359
|
-
throw new Error('Invalid props:
|
|
6529
|
+
var renderEvent = isCustomStyleMode && customStyleProps ? renderPolygonEventWithCustomStyle(customStyleProps.customStyle) : isObjectMode && objectProps ? renderPolygonEventWithObject(objectProps.renderStyle) : isIndividualMode && individualProps ? renderPolygonEvent(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth, individualProps.selectedFillColor, individualProps.selectedStrokeColor, individualProps.selectedLineWidth, individualProps.activeFillColor, individualProps.activeStrokeColor, individualProps.activeLineWidth, individualProps.hoveredFillColor, individualProps.hoveredStrokeColor, individualProps.hoveredLineWidth) : function () {
|
|
6530
|
+
throw new Error('Invalid props: one of customStyle, renderStyle, or individual style props must be provided');
|
|
6360
6531
|
}(); // Base Layer 렌더링 (뷰포트 컬링 적용)
|
|
6361
6532
|
|
|
6362
6533
|
var doRenderBase = function () {
|