zenit-sdk 0.2.1 → 0.2.2
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/README.md +1 -0
- package/dist/{chunk-GBLFE6EQ.mjs → chunk-EF7HF6U6.mjs} +114 -33
- package/dist/chunk-EF7HF6U6.mjs.map +1 -0
- package/dist/{index-Cp6tg4tg.d.mts → index-BitY8iwn.d.mts} +1 -0
- package/dist/{index-Cp6tg4tg.d.ts → index-BitY8iwn.d.ts} +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +113 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +113 -32
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunk-GBLFE6EQ.mjs.map +0 -1
|
@@ -713,6 +713,7 @@ interface ZenitLayerManagerProps {
|
|
|
713
713
|
}) => Promise<void> | void;
|
|
714
714
|
availableFilterLayers?: Array<number | string>;
|
|
715
715
|
filterFieldWhitelist?: string[];
|
|
716
|
+
showFiltersTab?: boolean;
|
|
716
717
|
}
|
|
717
718
|
declare const ZenitLayerManager: React.FC<ZenitLayerManagerProps>;
|
|
718
719
|
|
|
@@ -713,6 +713,7 @@ interface ZenitLayerManagerProps {
|
|
|
713
713
|
}) => Promise<void> | void;
|
|
714
714
|
availableFilterLayers?: Array<number | string>;
|
|
715
715
|
filterFieldWhitelist?: string[];
|
|
716
|
+
showFiltersTab?: boolean;
|
|
716
717
|
}
|
|
717
718
|
declare const ZenitLayerManager: React.FC<ZenitLayerManagerProps>;
|
|
718
719
|
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as MapDto, N as NormalizedMapLayer, G as GeoJsonFeature, B as Bbox, a as GeoJsonFeatureCollection, F as FilterMultipleMetadata, L as LayerFilters, b as GeoJsonRequestOptions, c as GeoJsonPolygon, Z as ZenitClient } from './index-
|
|
2
|
-
export { O as ApiEnvelope, P as ApiResponseData, ai as ChatRequestDto, ad as ChatRequestOptions, ak as ChatResponseDto, ac as ChatServiceConfig, ae as ChatStreamCallbacks, D as DEFAULT_MAX_FEATURES_FULL_GEOJSON, a8 as EffectiveLayerState, a4 as FilterMultipleLayerMeta, a5 as FilterMultipleWithFallbackResult, a3 as FilterValue, ar as FloatingChatBox, as as FloatingChatBoxProps, T as GeoJsonBBoxRequest, J as GeoJsonGeometryCollection, W as GeoJsonIntersectRequest, I as GeoJsonPoint, o as HttpClient, H as HttpClientOptions, X as LayerAoi, a6 as LayerBaseState, K as LayerDataStrategy, C as LayerDto, a1 as LayerFeatureCatalogItem, a2 as LayerFeaturesCatalogDto, Q as LayerMetadata, a7 as LayerOverrideState, an as LayerSnapshot, ay as LayerStyle, E as LayerSummary, $ as LoadLayerDataParams, a0 as LoadLayerDataResult, f as LoginRequest, g as LoginResponse, s as MapLayerConfig, q as MapSettings, h as MeResponse, R as RefreshResponse, Y as ResolveLayerStrategyParams, _ as ResolveLayerStrategyResult, j as SdkTokenExchangeResponse, S as SdkTokenValidateResponse, aj as SuggestedAction, U as UserSummary, V as ValidateResponse, i as ZenitAuthClient, aq as ZenitFeatureFilterPanel, ap as ZenitLayerManager, A as ZenitLayersClient, al as ZenitMap, ao as ZenitMapProps, am as ZenitMapRef, p as ZenitMapsClient, e as ZenitRuntimeConfig, k as ZenitSdkAuthClient, d as ZenitSdkConfig, l as ZenitSdkError, at as ZenitSelect, av as ZenitSelectOption, au as ZenitSelectProps, aD as ZoomOpacityOptions, aa as applyLayerOverrides, x as buildAoiFromFeatureCollection, u as buildFilterMultipleParams, t as buildLayerFilters, z as buildLimitedMessage, aE as clampNumber, aF as clampOpacity, ah as createChatService, aC as getAccentByLayerId, aJ as getEffectiveLayerOpacity, aA as getLayerColor, aI as getLayerZoomOpacityFactor, aB as getStyleByLayerId, aH as getZoomOpacityFactor, a9 as initLayerStates, aG as isPolygonLayer, m as mergeFilters, n as normalizeFilters, ab as resetOverrides, az as resolveLayerAccent, y as resolveLayerStrategy, r as resolveRuntimeConfig, af as sendMessage, ag as sendMessageStream, w as shouldSkipGeojsonDownload, v as shouldUseFilterMultiple, aw as useSendMessage, ax as useSendMessageStream } from './index-
|
|
1
|
+
import { M as MapDto, N as NormalizedMapLayer, G as GeoJsonFeature, B as Bbox, a as GeoJsonFeatureCollection, F as FilterMultipleMetadata, L as LayerFilters, b as GeoJsonRequestOptions, c as GeoJsonPolygon, Z as ZenitClient } from './index-BitY8iwn.mjs';
|
|
2
|
+
export { O as ApiEnvelope, P as ApiResponseData, ai as ChatRequestDto, ad as ChatRequestOptions, ak as ChatResponseDto, ac as ChatServiceConfig, ae as ChatStreamCallbacks, D as DEFAULT_MAX_FEATURES_FULL_GEOJSON, a8 as EffectiveLayerState, a4 as FilterMultipleLayerMeta, a5 as FilterMultipleWithFallbackResult, a3 as FilterValue, ar as FloatingChatBox, as as FloatingChatBoxProps, T as GeoJsonBBoxRequest, J as GeoJsonGeometryCollection, W as GeoJsonIntersectRequest, I as GeoJsonPoint, o as HttpClient, H as HttpClientOptions, X as LayerAoi, a6 as LayerBaseState, K as LayerDataStrategy, C as LayerDto, a1 as LayerFeatureCatalogItem, a2 as LayerFeaturesCatalogDto, Q as LayerMetadata, a7 as LayerOverrideState, an as LayerSnapshot, ay as LayerStyle, E as LayerSummary, $ as LoadLayerDataParams, a0 as LoadLayerDataResult, f as LoginRequest, g as LoginResponse, s as MapLayerConfig, q as MapSettings, h as MeResponse, R as RefreshResponse, Y as ResolveLayerStrategyParams, _ as ResolveLayerStrategyResult, j as SdkTokenExchangeResponse, S as SdkTokenValidateResponse, aj as SuggestedAction, U as UserSummary, V as ValidateResponse, i as ZenitAuthClient, aq as ZenitFeatureFilterPanel, ap as ZenitLayerManager, A as ZenitLayersClient, al as ZenitMap, ao as ZenitMapProps, am as ZenitMapRef, p as ZenitMapsClient, e as ZenitRuntimeConfig, k as ZenitSdkAuthClient, d as ZenitSdkConfig, l as ZenitSdkError, at as ZenitSelect, av as ZenitSelectOption, au as ZenitSelectProps, aD as ZoomOpacityOptions, aa as applyLayerOverrides, x as buildAoiFromFeatureCollection, u as buildFilterMultipleParams, t as buildLayerFilters, z as buildLimitedMessage, aE as clampNumber, aF as clampOpacity, ah as createChatService, aC as getAccentByLayerId, aJ as getEffectiveLayerOpacity, aA as getLayerColor, aI as getLayerZoomOpacityFactor, aB as getStyleByLayerId, aH as getZoomOpacityFactor, a9 as initLayerStates, aG as isPolygonLayer, m as mergeFilters, n as normalizeFilters, ab as resetOverrides, az as resolveLayerAccent, y as resolveLayerStrategy, r as resolveRuntimeConfig, af as sendMessage, ag as sendMessageStream, w as shouldSkipGeojsonDownload, v as shouldUseFilterMultiple, aw as useSendMessage, ax as useSendMessageStream } from './index-BitY8iwn.mjs';
|
|
3
3
|
export { ChevronDown, ChevronLeft, ChevronRight, Eye, EyeOff, Layers, Upload, X, ZoomIn } from 'lucide-react';
|
|
4
4
|
import 'react';
|
|
5
5
|
import 'leaflet';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as MapDto, N as NormalizedMapLayer, G as GeoJsonFeature, B as Bbox, a as GeoJsonFeatureCollection, F as FilterMultipleMetadata, L as LayerFilters, b as GeoJsonRequestOptions, c as GeoJsonPolygon, Z as ZenitClient } from './index-
|
|
2
|
-
export { O as ApiEnvelope, P as ApiResponseData, ai as ChatRequestDto, ad as ChatRequestOptions, ak as ChatResponseDto, ac as ChatServiceConfig, ae as ChatStreamCallbacks, D as DEFAULT_MAX_FEATURES_FULL_GEOJSON, a8 as EffectiveLayerState, a4 as FilterMultipleLayerMeta, a5 as FilterMultipleWithFallbackResult, a3 as FilterValue, ar as FloatingChatBox, as as FloatingChatBoxProps, T as GeoJsonBBoxRequest, J as GeoJsonGeometryCollection, W as GeoJsonIntersectRequest, I as GeoJsonPoint, o as HttpClient, H as HttpClientOptions, X as LayerAoi, a6 as LayerBaseState, K as LayerDataStrategy, C as LayerDto, a1 as LayerFeatureCatalogItem, a2 as LayerFeaturesCatalogDto, Q as LayerMetadata, a7 as LayerOverrideState, an as LayerSnapshot, ay as LayerStyle, E as LayerSummary, $ as LoadLayerDataParams, a0 as LoadLayerDataResult, f as LoginRequest, g as LoginResponse, s as MapLayerConfig, q as MapSettings, h as MeResponse, R as RefreshResponse, Y as ResolveLayerStrategyParams, _ as ResolveLayerStrategyResult, j as SdkTokenExchangeResponse, S as SdkTokenValidateResponse, aj as SuggestedAction, U as UserSummary, V as ValidateResponse, i as ZenitAuthClient, aq as ZenitFeatureFilterPanel, ap as ZenitLayerManager, A as ZenitLayersClient, al as ZenitMap, ao as ZenitMapProps, am as ZenitMapRef, p as ZenitMapsClient, e as ZenitRuntimeConfig, k as ZenitSdkAuthClient, d as ZenitSdkConfig, l as ZenitSdkError, at as ZenitSelect, av as ZenitSelectOption, au as ZenitSelectProps, aD as ZoomOpacityOptions, aa as applyLayerOverrides, x as buildAoiFromFeatureCollection, u as buildFilterMultipleParams, t as buildLayerFilters, z as buildLimitedMessage, aE as clampNumber, aF as clampOpacity, ah as createChatService, aC as getAccentByLayerId, aJ as getEffectiveLayerOpacity, aA as getLayerColor, aI as getLayerZoomOpacityFactor, aB as getStyleByLayerId, aH as getZoomOpacityFactor, a9 as initLayerStates, aG as isPolygonLayer, m as mergeFilters, n as normalizeFilters, ab as resetOverrides, az as resolveLayerAccent, y as resolveLayerStrategy, r as resolveRuntimeConfig, af as sendMessage, ag as sendMessageStream, w as shouldSkipGeojsonDownload, v as shouldUseFilterMultiple, aw as useSendMessage, ax as useSendMessageStream } from './index-
|
|
1
|
+
import { M as MapDto, N as NormalizedMapLayer, G as GeoJsonFeature, B as Bbox, a as GeoJsonFeatureCollection, F as FilterMultipleMetadata, L as LayerFilters, b as GeoJsonRequestOptions, c as GeoJsonPolygon, Z as ZenitClient } from './index-BitY8iwn.js';
|
|
2
|
+
export { O as ApiEnvelope, P as ApiResponseData, ai as ChatRequestDto, ad as ChatRequestOptions, ak as ChatResponseDto, ac as ChatServiceConfig, ae as ChatStreamCallbacks, D as DEFAULT_MAX_FEATURES_FULL_GEOJSON, a8 as EffectiveLayerState, a4 as FilterMultipleLayerMeta, a5 as FilterMultipleWithFallbackResult, a3 as FilterValue, ar as FloatingChatBox, as as FloatingChatBoxProps, T as GeoJsonBBoxRequest, J as GeoJsonGeometryCollection, W as GeoJsonIntersectRequest, I as GeoJsonPoint, o as HttpClient, H as HttpClientOptions, X as LayerAoi, a6 as LayerBaseState, K as LayerDataStrategy, C as LayerDto, a1 as LayerFeatureCatalogItem, a2 as LayerFeaturesCatalogDto, Q as LayerMetadata, a7 as LayerOverrideState, an as LayerSnapshot, ay as LayerStyle, E as LayerSummary, $ as LoadLayerDataParams, a0 as LoadLayerDataResult, f as LoginRequest, g as LoginResponse, s as MapLayerConfig, q as MapSettings, h as MeResponse, R as RefreshResponse, Y as ResolveLayerStrategyParams, _ as ResolveLayerStrategyResult, j as SdkTokenExchangeResponse, S as SdkTokenValidateResponse, aj as SuggestedAction, U as UserSummary, V as ValidateResponse, i as ZenitAuthClient, aq as ZenitFeatureFilterPanel, ap as ZenitLayerManager, A as ZenitLayersClient, al as ZenitMap, ao as ZenitMapProps, am as ZenitMapRef, p as ZenitMapsClient, e as ZenitRuntimeConfig, k as ZenitSdkAuthClient, d as ZenitSdkConfig, l as ZenitSdkError, at as ZenitSelect, av as ZenitSelectOption, au as ZenitSelectProps, aD as ZoomOpacityOptions, aa as applyLayerOverrides, x as buildAoiFromFeatureCollection, u as buildFilterMultipleParams, t as buildLayerFilters, z as buildLimitedMessage, aE as clampNumber, aF as clampOpacity, ah as createChatService, aC as getAccentByLayerId, aJ as getEffectiveLayerOpacity, aA as getLayerColor, aI as getLayerZoomOpacityFactor, aB as getStyleByLayerId, aH as getZoomOpacityFactor, a9 as initLayerStates, aG as isPolygonLayer, m as mergeFilters, n as normalizeFilters, ab as resetOverrides, az as resolveLayerAccent, y as resolveLayerStrategy, r as resolveRuntimeConfig, af as sendMessage, ag as sendMessageStream, w as shouldSkipGeojsonDownload, v as shouldUseFilterMultiple, aw as useSendMessage, ax as useSendMessageStream } from './index-BitY8iwn.js';
|
|
3
3
|
export { ChevronDown, ChevronLeft, ChevronRight, Eye, EyeOff, Layers, Upload, X, ZoomIn } from 'lucide-react';
|
|
4
4
|
import 'react';
|
|
5
5
|
import 'leaflet';
|
package/dist/index.js
CHANGED
|
@@ -1733,6 +1733,28 @@ function sanitizeGeoJson(input, debugKey) {
|
|
|
1733
1733
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
1734
1734
|
var POINT_GEOMETRY_TYPES = /* @__PURE__ */ new Set(["Point", "MultiPoint"]);
|
|
1735
1735
|
var DEV_MODE = typeof process !== "undefined" && process.env.NODE_ENV !== "production";
|
|
1736
|
+
function getPolygonArea(coords) {
|
|
1737
|
+
let area = 0;
|
|
1738
|
+
for (let i = 0; i < coords.length - 1; i++) {
|
|
1739
|
+
area += coords[i][0] * coords[i + 1][1] - coords[i + 1][0] * coords[i][1];
|
|
1740
|
+
}
|
|
1741
|
+
return Math.abs(area / 2);
|
|
1742
|
+
}
|
|
1743
|
+
function getFeatureArea(feature) {
|
|
1744
|
+
const geom = feature?.geometry;
|
|
1745
|
+
if (!geom?.coordinates) return 0;
|
|
1746
|
+
try {
|
|
1747
|
+
if (geom.type === "Polygon") return getPolygonArea(geom.coordinates[0]);
|
|
1748
|
+
if (geom.type === "MultiPolygon") {
|
|
1749
|
+
return geom.coordinates.reduce(
|
|
1750
|
+
(sum, poly) => sum + getPolygonArea(poly[0]),
|
|
1751
|
+
0
|
|
1752
|
+
);
|
|
1753
|
+
}
|
|
1754
|
+
} catch {
|
|
1755
|
+
}
|
|
1756
|
+
return 0;
|
|
1757
|
+
}
|
|
1736
1758
|
function normalizeBboxFromData(data) {
|
|
1737
1759
|
const bboxCandidate = data.bbox;
|
|
1738
1760
|
if (!Array.isArray(bboxCandidate) || bboxCandidate.length < 4) return null;
|
|
@@ -1834,7 +1856,10 @@ var LayerGeoJson = ({
|
|
|
1834
1856
|
}, [onEachFeature]);
|
|
1835
1857
|
const safeData = (0, import_react.useMemo)(() => sanitizeGeoJson(data, String(layerId)), [data, layerId]);
|
|
1836
1858
|
const features = (0, import_react.useMemo)(() => safeData.features ?? [], [safeData]);
|
|
1837
|
-
const fillFeatures = (0, import_react.useMemo)(
|
|
1859
|
+
const fillFeatures = (0, import_react.useMemo)(
|
|
1860
|
+
() => [...features.filter(isNonPointGeometry)].sort((a, b) => getFeatureArea(b) - getFeatureArea(a)),
|
|
1861
|
+
[features]
|
|
1862
|
+
);
|
|
1838
1863
|
const pointFeatures = (0, import_react.useMemo)(() => features.filter(isPointGeometry), [features]);
|
|
1839
1864
|
const dataVersionRef = (0, import_react.useRef)(0);
|
|
1840
1865
|
const prevSignatureRef = (0, import_react.useRef)("");
|
|
@@ -1879,7 +1904,8 @@ var LayerGeoJson = ({
|
|
|
1879
1904
|
return import_leaflet.default.marker(latlng, {
|
|
1880
1905
|
icon: createPointDivIcon(style, isMobile),
|
|
1881
1906
|
pane: clusterPaneName,
|
|
1882
|
-
interactive: true
|
|
1907
|
+
interactive: true,
|
|
1908
|
+
bubblingMouseEvents: false
|
|
1883
1909
|
});
|
|
1884
1910
|
},
|
|
1885
1911
|
onEachFeature: (feature, layer) => onEachFeatureRef.current(feature, layer)
|
|
@@ -1907,7 +1933,7 @@ var LayerGeoJson = ({
|
|
|
1907
1933
|
{
|
|
1908
1934
|
data: fillData,
|
|
1909
1935
|
pane: resolvedFillPane,
|
|
1910
|
-
style: (feature) => styleFn(feature, layerType, baseOpacity),
|
|
1936
|
+
style: (feature) => ({ ...styleFn(feature, layerType, baseOpacity), bubblingMouseEvents: false }),
|
|
1911
1937
|
onEachFeature: (feature, layer) => {
|
|
1912
1938
|
onEachFeature(feature, layer);
|
|
1913
1939
|
onPolygonLabel?.(feature, layer);
|
|
@@ -1926,7 +1952,9 @@ var LayerGeoJson = ({
|
|
|
1926
1952
|
}
|
|
1927
1953
|
return import_leaflet.default.circleMarker(latlng, {
|
|
1928
1954
|
radius: isMobile ? 8 : 6,
|
|
1929
|
-
...styleFn(feature, layerType, baseOpacity)
|
|
1955
|
+
...styleFn(feature, layerType, baseOpacity),
|
|
1956
|
+
bubblingMouseEvents: false,
|
|
1957
|
+
interactive: true
|
|
1930
1958
|
});
|
|
1931
1959
|
},
|
|
1932
1960
|
onEachFeature
|
|
@@ -2159,6 +2187,7 @@ var POPUP_EXCLUDED_KEYS = /* @__PURE__ */ new Set(["geom", "geometry", "_private
|
|
|
2159
2187
|
var POPUP_TITLE_KEYS = ["id", "nombre", "name", "title", "titulo", "cluster"];
|
|
2160
2188
|
var POPUP_BADGE_KEYS = ["tipo", "type", "category", "categoria", "estado", "status"];
|
|
2161
2189
|
var POPUP_DESCRIPTION_KEYS = ["descripcion", "description", "desc"];
|
|
2190
|
+
var POPUP_PRIORITY_KEYS = ["insights", "recomendaciones"];
|
|
2162
2191
|
var CURRENCY_KEYWORDS = [
|
|
2163
2192
|
"capital",
|
|
2164
2193
|
"monto",
|
|
@@ -2389,6 +2418,14 @@ function shouldIncludePopupEntry(key, value) {
|
|
|
2389
2418
|
if (typeof value === "string" && !value.trim()) return false;
|
|
2390
2419
|
return true;
|
|
2391
2420
|
}
|
|
2421
|
+
function getPopupPriorityIndex(key) {
|
|
2422
|
+
const normalized = key.trim().toLowerCase();
|
|
2423
|
+
const idx = POPUP_PRIORITY_KEYS.indexOf(normalized);
|
|
2424
|
+
return idx === -1 ? POPUP_PRIORITY_KEYS.length : idx;
|
|
2425
|
+
}
|
|
2426
|
+
function sortEntriesByPriority(entries) {
|
|
2427
|
+
return [...entries].sort((a, b) => getPopupPriorityIndex(a[0]) - getPopupPriorityIndex(b[0]));
|
|
2428
|
+
}
|
|
2392
2429
|
function createPopupContent(properties) {
|
|
2393
2430
|
const header = findHeaderProperties(properties);
|
|
2394
2431
|
const headerText = header.title?.value ?? extractPopupHeader(properties);
|
|
@@ -2396,11 +2433,13 @@ function createPopupContent(properties) {
|
|
|
2396
2433
|
const badge = header.badge ? getBadgeForProperty(header.badge.key, header.badge.value) : null;
|
|
2397
2434
|
const colorValue = properties.color;
|
|
2398
2435
|
const colorBar = typeof colorValue === "string" && isHexColor(colorValue) ? `<div style="height:6px; border-radius:8px; margin:-2px -2px 10px; background:linear-gradient(90deg, ${colorValue}, rgba(255,255,255,0.95));"></div>` : "";
|
|
2399
|
-
const entries =
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2436
|
+
const entries = sortEntriesByPriority(
|
|
2437
|
+
Object.entries(properties).filter(([key, value]) => {
|
|
2438
|
+
if (!shouldIncludePopupEntry(key, value)) return false;
|
|
2439
|
+
if (usedKeys.has(key)) return false;
|
|
2440
|
+
return true;
|
|
2441
|
+
})
|
|
2442
|
+
);
|
|
2404
2443
|
if (entries.length === 0) {
|
|
2405
2444
|
return '<div style="padding:8px 0; color:#64748b; text-align:center;">Sin datos disponibles</div>';
|
|
2406
2445
|
}
|
|
@@ -2446,7 +2485,10 @@ function buildWhitelistedRows(properties, headerSections) {
|
|
|
2446
2485
|
return null;
|
|
2447
2486
|
}
|
|
2448
2487
|
const { whitelist, modalType } = selection;
|
|
2449
|
-
const
|
|
2488
|
+
const rawEntries = applyModalWhitelist(properties, whitelist);
|
|
2489
|
+
const entries = [...rawEntries].sort(
|
|
2490
|
+
(a, b) => getPopupPriorityIndex(a.matchedKey) - getPopupPriorityIndex(b.matchedKey)
|
|
2491
|
+
);
|
|
2450
2492
|
if (entries.length === 0) {
|
|
2451
2493
|
logModalWhitelistDebug({
|
|
2452
2494
|
modalType,
|
|
@@ -2997,6 +3039,39 @@ function isCandidateGeometryType(candidate, allowedTypes) {
|
|
|
2997
3039
|
const geometryType = candidate?.geometry?.type;
|
|
2998
3040
|
return Boolean(geometryType && allowedTypes.has(geometryType));
|
|
2999
3041
|
}
|
|
3042
|
+
function calculatePolygonArea(coords) {
|
|
3043
|
+
let area = 0;
|
|
3044
|
+
for (let i = 0; i < coords.length - 1; i++) {
|
|
3045
|
+
area += coords[i][0] * coords[i + 1][1] - coords[i + 1][0] * coords[i][1];
|
|
3046
|
+
}
|
|
3047
|
+
return Math.abs(area / 2);
|
|
3048
|
+
}
|
|
3049
|
+
function calculateGeometryArea(geometry) {
|
|
3050
|
+
if (!geometry?.coordinates) return 0;
|
|
3051
|
+
try {
|
|
3052
|
+
if (geometry.type === "Polygon") return calculatePolygonArea(geometry.coordinates[0]);
|
|
3053
|
+
if (geometry.type === "MultiPolygon") {
|
|
3054
|
+
return geometry.coordinates.reduce(
|
|
3055
|
+
(sum, poly) => sum + calculatePolygonArea(poly[0]),
|
|
3056
|
+
0
|
|
3057
|
+
);
|
|
3058
|
+
}
|
|
3059
|
+
} catch {
|
|
3060
|
+
}
|
|
3061
|
+
return 0;
|
|
3062
|
+
}
|
|
3063
|
+
function calculateLayerAverageArea(features) {
|
|
3064
|
+
if (!features?.length) return 0;
|
|
3065
|
+
try {
|
|
3066
|
+
const total = features.reduce(
|
|
3067
|
+
(sum, f) => sum + (f?.geometry ? calculateGeometryArea(f.geometry) : 0),
|
|
3068
|
+
0
|
|
3069
|
+
);
|
|
3070
|
+
return total / features.length;
|
|
3071
|
+
} catch {
|
|
3072
|
+
return 0;
|
|
3073
|
+
}
|
|
3074
|
+
}
|
|
3000
3075
|
function getFeatureStyleOverrides(feature) {
|
|
3001
3076
|
const candidate = feature?.properties?._style;
|
|
3002
3077
|
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) return null;
|
|
@@ -3421,7 +3496,12 @@ var ZenitMap = (0, import_react5.forwardRef)(({
|
|
|
3421
3496
|
});
|
|
3422
3497
|
}, [effectiveStates, layerGeojson, layerGeojsonOverrides, layers]);
|
|
3423
3498
|
const orderedLayers = (0, import_react5.useMemo)(() => {
|
|
3424
|
-
return [...decoratedLayers].filter((layer) => layer.effective?.visible && layer.data).sort((a, b) =>
|
|
3499
|
+
return [...decoratedLayers].filter((layer) => layer.effective?.visible && layer.data).sort((a, b) => {
|
|
3500
|
+
const aArea = calculateLayerAverageArea(a.data?.features ?? []);
|
|
3501
|
+
const bArea = calculateLayerAverageArea(b.data?.features ?? []);
|
|
3502
|
+
if (aArea !== bArea) return bArea - aArea;
|
|
3503
|
+
return a.displayOrder - b.displayOrder;
|
|
3504
|
+
});
|
|
3425
3505
|
}, [decoratedLayers]);
|
|
3426
3506
|
const autoZoomGeojson = (0, import_react5.useMemo)(
|
|
3427
3507
|
() => orderedLayers.map((layer) => layer.data).filter((collection) => !!collection),
|
|
@@ -3474,15 +3554,14 @@ var ZenitMap = (0, import_react5.forwardRef)(({
|
|
|
3474
3554
|
(targetMap, targetLayers) => {
|
|
3475
3555
|
const fillBaseZIndex = 400;
|
|
3476
3556
|
const pointsBaseZIndex = 750;
|
|
3477
|
-
targetLayers.
|
|
3478
|
-
|
|
3479
|
-
const orderOffset = Math.max(0, Math.min(order, 150));
|
|
3557
|
+
const sortedByArea = [...targetLayers].sort((a, b) => (b.averageArea ?? 0) - (a.averageArea ?? 0));
|
|
3558
|
+
sortedByArea.forEach((layer, areaIndex) => {
|
|
3480
3559
|
const fillPaneName = `zenit-layer-${layer.layerId}-fill`;
|
|
3481
3560
|
const pointPaneName = `zenit-layer-${layer.layerId}-points`;
|
|
3482
3561
|
const fillPane = targetMap.getPane(fillPaneName) ?? targetMap.createPane(fillPaneName);
|
|
3483
3562
|
const pointPane = targetMap.getPane(pointPaneName) ?? targetMap.createPane(pointPaneName);
|
|
3484
|
-
fillPane.style.zIndex = String(fillBaseZIndex +
|
|
3485
|
-
pointPane.style.zIndex = String(pointsBaseZIndex +
|
|
3563
|
+
fillPane.style.zIndex = String(fillBaseZIndex + areaIndex);
|
|
3564
|
+
pointPane.style.zIndex = String(pointsBaseZIndex + areaIndex);
|
|
3486
3565
|
});
|
|
3487
3566
|
},
|
|
3488
3567
|
[]
|
|
@@ -3505,10 +3584,11 @@ var ZenitMap = (0, import_react5.forwardRef)(({
|
|
|
3505
3584
|
}
|
|
3506
3585
|
const layerTargets = orderedLayers.map((layer) => ({
|
|
3507
3586
|
layerId: layer.mapLayer.layerId,
|
|
3508
|
-
displayOrder: layer.displayOrder
|
|
3587
|
+
displayOrder: layer.displayOrder,
|
|
3588
|
+
averageArea: calculateLayerAverageArea(layer.data?.features ?? [])
|
|
3509
3589
|
}));
|
|
3510
3590
|
if (overlayGeojson) {
|
|
3511
|
-
layerTargets.push({ layerId: "overlay-geojson", displayOrder: 999 });
|
|
3591
|
+
layerTargets.push({ layerId: "overlay-geojson", displayOrder: 999, averageArea: 0 });
|
|
3512
3592
|
}
|
|
3513
3593
|
ensureLayerPanes(mapInstance, layerTargets);
|
|
3514
3594
|
const first = layerTargets[0];
|
|
@@ -3558,9 +3638,7 @@ var ZenitMap = (0, import_react5.forwardRef)(({
|
|
|
3558
3638
|
});
|
|
3559
3639
|
}
|
|
3560
3640
|
layer.on("click", (e) => {
|
|
3561
|
-
|
|
3562
|
-
import_leaflet4.default.DomEvent.stopPropagation(e);
|
|
3563
|
-
}
|
|
3641
|
+
import_leaflet4.default.DomEvent.stopPropagation(e);
|
|
3564
3642
|
if (featureInfoMode === "popup" && client && layerId !== void 0 && !extractDescriptionValue(feature?.properties) && feature?.geometry) {
|
|
3565
3643
|
if (DEV_MODE2) {
|
|
3566
3644
|
console.debug("[ZenitMap] click/intersect:start", {
|
|
@@ -4500,8 +4578,6 @@ var CATALOG_FIELD_BLACKLIST = /* @__PURE__ */ new Set([
|
|
|
4500
4578
|
"objectid",
|
|
4501
4579
|
"OBJECTID",
|
|
4502
4580
|
"objectId",
|
|
4503
|
-
"gforms",
|
|
4504
|
-
"GFORMS",
|
|
4505
4581
|
"nomina",
|
|
4506
4582
|
"NOMINA",
|
|
4507
4583
|
"shape_area",
|
|
@@ -4563,7 +4639,8 @@ var ZenitLayerManager = ({
|
|
|
4563
4639
|
onApplyLayerFilter,
|
|
4564
4640
|
onClearLayerFilter,
|
|
4565
4641
|
availableFilterLayers = [],
|
|
4566
|
-
filterFieldWhitelist = []
|
|
4642
|
+
filterFieldWhitelist = [],
|
|
4643
|
+
showFiltersTab = true
|
|
4567
4644
|
}) => {
|
|
4568
4645
|
const [map, setMap] = (0, import_react8.useState)(null);
|
|
4569
4646
|
const [loadingMap, setLoadingMap] = (0, import_react8.useState)(false);
|
|
@@ -4949,20 +5026,21 @@ var ZenitLayerManager = ({
|
|
|
4949
5026
|
controller.abort();
|
|
4950
5027
|
};
|
|
4951
5028
|
}, [activeCatalogKey, activeTab, catalogByLayerField, catalogFieldsByLayer, client.layers, extractCatalogFieldMap, filterFieldWhitelist, selectedFilterField, selectedFilterLayer]);
|
|
4952
|
-
const handleApplyFilter = import_react8.default.useCallback(async () => {
|
|
4953
|
-
|
|
5029
|
+
const handleApplyFilter = import_react8.default.useCallback(async (valueOverride) => {
|
|
5030
|
+
const value = valueOverride ?? selectedFilterValue;
|
|
5031
|
+
if (!selectedFilterLayer || !selectedFilterField || !value || !onApplyLayerFilter) return;
|
|
4954
5032
|
setApplyingFilter(true);
|
|
4955
5033
|
setFilterError(null);
|
|
4956
5034
|
try {
|
|
4957
5035
|
await onApplyLayerFilter({
|
|
4958
5036
|
layerId: selectedFilterLayer.mapLayer.layerId,
|
|
4959
5037
|
field: selectedFilterField,
|
|
4960
|
-
value
|
|
5038
|
+
value
|
|
4961
5039
|
});
|
|
4962
5040
|
setAppliedFilter({
|
|
4963
5041
|
layerId: selectedFilterLayer.mapLayer.layerId,
|
|
4964
5042
|
field: selectedFilterField,
|
|
4965
|
-
value
|
|
5043
|
+
value
|
|
4966
5044
|
});
|
|
4967
5045
|
} catch (error) {
|
|
4968
5046
|
const message = error instanceof Error ? error.message : "No se pudo aplicar el filtro";
|
|
@@ -5341,7 +5419,7 @@ var ZenitLayerManager = ({
|
|
|
5341
5419
|
]
|
|
5342
5420
|
}
|
|
5343
5421
|
),
|
|
5344
|
-
!hasPrefilters && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
5422
|
+
!hasPrefilters && showFiltersTab && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
5345
5423
|
"button",
|
|
5346
5424
|
{
|
|
5347
5425
|
type: "button",
|
|
@@ -5376,7 +5454,7 @@ var ZenitLayerManager = ({
|
|
|
5376
5454
|
) }),
|
|
5377
5455
|
renderLayerCards()
|
|
5378
5456
|
] }),
|
|
5379
|
-
!hasPrefilters && activeTab === "filters" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "zlm-filter-panel", style: { display: "flex", flexDirection: "column", gap: 12, background: "#fff", border: "1px solid #e2e8f0", borderRadius: 12, padding: 12 }, children: !filterableLayers.length ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { color: "#64748b", fontSize: 13 }, children: "No hay filtros disponibles para las capas de este mapa." }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
5457
|
+
!hasPrefilters && showFiltersTab && activeTab === "filters" && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "zlm-filter-panel", style: { display: "flex", flexDirection: "column", gap: 12, background: "#fff", border: "1px solid #e2e8f0", borderRadius: 12, padding: 12 }, children: !filterableLayers.length ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { style: { color: "#64748b", fontSize: 13 }, children: "No hay filtros disponibles para las capas de este mapa." }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
5380
5458
|
filterableLayers.length > 1 && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("label", { style: { display: "flex", flexDirection: "column", gap: 6, fontSize: 12, color: "#475569" }, children: [
|
|
5381
5459
|
"Capa",
|
|
5382
5460
|
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
@@ -5415,7 +5493,10 @@ var ZenitLayerManager = ({
|
|
|
5415
5493
|
value: selectedFilterValue,
|
|
5416
5494
|
placeholder: "Seleccionar\u2026",
|
|
5417
5495
|
searchPlaceholder: "Buscar valor\u2026",
|
|
5418
|
-
onChange: (nextValue) =>
|
|
5496
|
+
onChange: (nextValue) => {
|
|
5497
|
+
setSelectedFilterValue(nextValue);
|
|
5498
|
+
if (nextValue) handleApplyFilter(nextValue);
|
|
5499
|
+
},
|
|
5419
5500
|
options: activeCatalogValues,
|
|
5420
5501
|
disabled: loadingCatalog || activeCatalogValues.length === 0
|
|
5421
5502
|
}
|
|
@@ -5437,7 +5518,7 @@ var ZenitLayerManager = ({
|
|
|
5437
5518
|
type: "button",
|
|
5438
5519
|
className: "zlm-panel-toggle",
|
|
5439
5520
|
disabled: !selectedFilterValue || applyingFilter || !onApplyLayerFilter,
|
|
5440
|
-
onClick: handleApplyFilter,
|
|
5521
|
+
onClick: () => handleApplyFilter(),
|
|
5441
5522
|
children: applyingFilter ? "Aplicando\u2026" : "Aplicar"
|
|
5442
5523
|
}
|
|
5443
5524
|
),
|