@metastringfoundation/map-list 0.1.0 → 0.1.1
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/Handler/LayerCompareControl.d.ts +7 -0
- package/dist/components/Handler/LayerCompareControl.d.ts.map +1 -0
- package/dist/components/Handler/LayerCompareControl.js +18 -0
- package/dist/components/dualMap/index.d.ts +2 -0
- package/dist/components/dualMap/index.d.ts.map +1 -0
- package/dist/components/dualMap/index.js +114 -0
- package/dist/components/map/layers/index.d.ts.map +1 -1
- package/dist/components/map/layers/index.js +17 -13
- package/dist/components/map/layers/raster/index.d.ts.map +1 -1
- package/dist/components/map/layers/raster/index.js +4 -6
- package/dist/components/map/layers/vector/index.d.ts.map +1 -1
- package/dist/components/map/layers/vector/index.js +1 -0
- package/dist/components/map/split-map/SplitMapComparision.d.ts +2 -0
- package/dist/components/map/split-map/SplitMapComparision.d.ts.map +1 -0
- package/dist/components/map/split-map/SplitMapComparision.js +78 -0
- package/dist/components/sidebar/common/layer-compare-addon.d.ts +4 -0
- package/dist/components/sidebar/common/layer-compare-addon.d.ts.map +1 -0
- package/dist/components/sidebar/common/layer-compare-addon.js +17 -0
- package/dist/components/sidebar/common/layer-item.d.ts.map +1 -1
- package/dist/components/sidebar/common/layer-item.js +2 -1
- package/dist/components/sidebar/common/opacity-handler-addon.js +1 -1
- package/dist/components/sidebar/index.d.ts.map +1 -1
- package/dist/components/sidebar/selected/index.d.ts.map +1 -1
- package/dist/components/sidebar/selected/index.js +4 -4
- package/dist/hooks/use-layers.d.ts +2 -0
- package/dist/hooks/use-layers.d.ts.map +1 -1
- package/dist/hooks/use-layers.js +14 -4
- package/dist/index.css +51 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -2
- package/dist/services/naksha.d.ts.map +1 -1
- package/dist/services/naksha.js +11 -5
- package/dist/utils/naksha.d.ts.map +1 -1
- package/dist/utils/naksha.js +13 -6
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface LayerCompareControlProps {
|
|
2
|
+
compare: boolean;
|
|
3
|
+
setCompare: (value: boolean) => void;
|
|
4
|
+
}
|
|
5
|
+
export default function LayerCompareControl({ compare, setCompare, }: LayerCompareControlProps): import("react/jsx-runtime").JSX.Element | null;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=LayerCompareControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerCompareControl.d.ts","sourceRoot":"","sources":["../../../src/components/Handler/LayerCompareControl.tsx"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAED,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,OAAO,EACP,UAAU,GACX,EAAE,wBAAwB,kDAoD1B"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.default = LayerCompareControl;
|
|
8
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
|
+
const use_layers_1 = __importDefault(require("../../hooks/use-layers"));
|
|
10
|
+
function LayerCompareControl({ compare, setCompare, }) {
|
|
11
|
+
const { layer } = (0, use_layers_1.default)();
|
|
12
|
+
// Defensive checks so it never crashes
|
|
13
|
+
const compareList = layer?.compareList || [];
|
|
14
|
+
// Hide component completely if fewer than 2 compare layers
|
|
15
|
+
if (compareList.length < 2)
|
|
16
|
+
return null;
|
|
17
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "absolute bottom-4 right-4 z-50 flex gap-2", children: [!compare && ((0, jsx_runtime_1.jsxs)("button", { onClick: () => setCompare(true), className: "px-4 py-2 bg-green-700 hover:bg-green-800 \n text-white rounded-lg shadow-md text-md flex items-center gap-1 font-semibold", children: ["Compare", " ", (0, jsx_runtime_1.jsx)("span", { className: "bg-white/5 px-2 py-1 rounded text-sm", children: compareList.length })] })), compare && ((0, jsx_runtime_1.jsxs)("button", { onClick: () => setCompare(false), className: "px-4 py-2 bg-green-700 hover:bg-green-800 \n text-white rounded-lg shadow-md text-md flex items-center gap-1 font-semibold", children: [(0, jsx_runtime_1.jsxs)("span", { className: "bg-white/5 px-1 py-1 rounded text-sm", children: [(0, jsx_runtime_1.jsxs)("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", className: "lucide lucide-x-icon lucide-x", children: [(0, jsx_runtime_1.jsx)("path", { d: "M18 6 6 18" }), (0, jsx_runtime_1.jsx)("path", { d: "m6 6 12 12" })] }), " "] }), "Compare"] }))] }));
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dualMap/index.tsx"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,UAAU,OAAO,4CA4H9B"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.default = DualMap;
|
|
41
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
42
|
+
const react_1 = require("react");
|
|
43
|
+
const maplibre_1 = __importStar(require("react-map-gl/maplibre"));
|
|
44
|
+
const map_common_1 = require("@metastringfoundation/map-common");
|
|
45
|
+
const use_layers_1 = __importDefault(require("../../hooks/use-layers"));
|
|
46
|
+
const infobar_1 = __importDefault(require("../infobar"));
|
|
47
|
+
const layers_1 = require("../map/layers");
|
|
48
|
+
const markers_list_1 = __importDefault(require("../map/markers-list"));
|
|
49
|
+
const popup_1 = __importDefault(require("../map/popup"));
|
|
50
|
+
const NavControl = maplibre_1.NavigationControl;
|
|
51
|
+
function DualMap() {
|
|
52
|
+
const { mp, layer, hover, query } = (0, use_layers_1.default)();
|
|
53
|
+
const viewState = (0, react_1.useMemo)(() => mp.defaultViewState || map_common_1.defaultViewState, [mp.defaultViewState]);
|
|
54
|
+
const [coordsLeft, setCoordsLeft] = (0, react_1.useState)();
|
|
55
|
+
const [coordsRight, setCoordsRight] = (0, react_1.useState)();
|
|
56
|
+
// handlers
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
const onLeftClick = (e) => query.setClickedLngLat(e.lngLat);
|
|
59
|
+
// @ts-ignore
|
|
60
|
+
const onRightClick = (e) => query.setClickedLngLat(e.lngLat);
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
const onLeftMouseMove = (e) => {
|
|
63
|
+
setCoordsLeft(e.lngLat);
|
|
64
|
+
hover.onHover(e);
|
|
65
|
+
};
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
const onRightMouseMove = (e) => {
|
|
68
|
+
setCoordsRight(e.lngLat);
|
|
69
|
+
hover.onHover(e);
|
|
70
|
+
};
|
|
71
|
+
const compareList = layer?.compareList || [];
|
|
72
|
+
const selectedLayers = layer?.selectedLayers || [];
|
|
73
|
+
const [leftCompareId, rightCompareId] = (0, react_1.useMemo)(() => {
|
|
74
|
+
if (compareList && compareList.length >= 2) {
|
|
75
|
+
// most recent two (assumes newest at index 0)
|
|
76
|
+
return [compareList[0], compareList[1]];
|
|
77
|
+
}
|
|
78
|
+
// fallback: take first two selectedLayers' ids (if any)
|
|
79
|
+
const ids = selectedLayers.map((l) => l.id || null).filter(Boolean);
|
|
80
|
+
return [ids[0] || null, ids[1] || null];
|
|
81
|
+
}, [compareList, selectedLayers]);
|
|
82
|
+
// Filter the full selectedLayers list to get the layer objects for each side.
|
|
83
|
+
const leftLayersToRender = (0, react_1.useMemo)(() => {
|
|
84
|
+
if (!leftCompareId)
|
|
85
|
+
return [];
|
|
86
|
+
return selectedLayers.filter((l) => l.id === leftCompareId);
|
|
87
|
+
}, [selectedLayers, leftCompareId]);
|
|
88
|
+
const rightLayersToRender = (0, react_1.useMemo)(() => {
|
|
89
|
+
if (!rightCompareId)
|
|
90
|
+
return [];
|
|
91
|
+
return selectedLayers.filter((l) => l.id === rightCompareId);
|
|
92
|
+
}, [selectedLayers, rightCompareId]);
|
|
93
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
94
|
+
display: "grid",
|
|
95
|
+
gridTemplateColumns: "1fr 1fr",
|
|
96
|
+
width: "100%",
|
|
97
|
+
height: "100vh", // fixed viewport height
|
|
98
|
+
overflow: "hidden",
|
|
99
|
+
}, children: [layer.selectedFeatures?.length > 0 && (0, jsx_runtime_1.jsx)(infobar_1.default, {}), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
100
|
+
width: "100%",
|
|
101
|
+
height: "100%",
|
|
102
|
+
position: "relative",
|
|
103
|
+
minHeight: 0, // <-- critical for grid/flex children
|
|
104
|
+
overflow: "hidden",
|
|
105
|
+
}, children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-left", cursor: "default", initialViewState: viewState,
|
|
106
|
+
// render the map absolutely so it doesn't affect layout size
|
|
107
|
+
style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 }, mapStyle: layer.mapStyle, onClick: onLeftClick, onMouseMove: onLeftMouseMove, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), leftLayersToRender?.[0] && ((0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: leftLayersToRender[0], beforeId: undefined })), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsLeft }, "popup-left")] }) }), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
108
|
+
width: "100%",
|
|
109
|
+
height: "100%",
|
|
110
|
+
position: "relative",
|
|
111
|
+
minHeight: 0, // <-- critical
|
|
112
|
+
overflow: "hidden",
|
|
113
|
+
}, children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-right", cursor: "default", initialViewState: viewState, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 }, mapStyle: layer.mapStyle, onClick: onRightClick, onMouseMove: onRightMouseMove, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), rightLayersToRender?.[0] && ((0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: rightLayersToRender[0], beforeId: undefined })), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsRight }, "popup-right")] }) })] }));
|
|
114
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/map/layers/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/map/layers/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAKrD,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,kDAsBA"}
|
|
@@ -6,22 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.MapLayer = MapLayer;
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const maplibre_1 = require("react-map-gl/maplibre");
|
|
9
|
+
const grid_1 = __importDefault(require("./grid"));
|
|
10
|
+
const vector_1 = __importDefault(require("./vector"));
|
|
9
11
|
const raster_1 = __importDefault(require("./raster"));
|
|
10
12
|
function MapLayer({ layer, beforeId, }) {
|
|
11
|
-
console.log(layer, "layer from MapLayer");
|
|
12
13
|
console.log("layer.source.type", layer?.source?.type);
|
|
13
|
-
const
|
|
14
|
-
if (!mapl) {
|
|
14
|
+
const maps = (0, maplibre_1.useMap)();
|
|
15
|
+
// if (!mapl) {
|
|
16
|
+
// return null;
|
|
17
|
+
// }
|
|
18
|
+
const mapInstance = Object.values(maps).pop();
|
|
19
|
+
if (!mapInstance)
|
|
15
20
|
return null;
|
|
21
|
+
switch (layer?.source?.type) {
|
|
22
|
+
case "vector":
|
|
23
|
+
return (0, jsx_runtime_1.jsx)(vector_1.default, { beforeId: beforeId, layer: layer });
|
|
24
|
+
case "grid":
|
|
25
|
+
return (0, jsx_runtime_1.jsx)(grid_1.default, { beforeId: beforeId, data: layer });
|
|
26
|
+
case "raster":
|
|
27
|
+
return (0, jsx_runtime_1.jsx)(raster_1.default, { beforeId: beforeId, data: layer });
|
|
28
|
+
default:
|
|
29
|
+
return (0, jsx_runtime_1.jsx)(vector_1.default, { beforeId: beforeId, layer: layer });
|
|
16
30
|
}
|
|
17
|
-
// switch (layer?.source?.type) {
|
|
18
|
-
// case "vector":
|
|
19
|
-
// return <VectorLayer beforeId={beforeId} layer={layer} />;
|
|
20
|
-
// case "grid":
|
|
21
|
-
// return <GridLayer beforeId={beforeId} data={layer} />;
|
|
22
|
-
// case "raster":
|
|
23
|
-
return (0, jsx_runtime_1.jsx)(raster_1.default, { beforeId: beforeId, data: layer });
|
|
24
|
-
// default:
|
|
25
|
-
// return <VectorLayer beforeId={beforeId} layer={layer} />;
|
|
26
|
-
// }
|
|
27
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/raster/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/raster/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,2CA8BA"}
|
|
@@ -9,11 +9,9 @@ const maplibre_1 = require("react-map-gl/maplibre");
|
|
|
9
9
|
const use_layers_1 = __importDefault(require("../../../../hooks/use-layers"));
|
|
10
10
|
function RasterLayer({ data, beforeId, }) {
|
|
11
11
|
const { mp } = (0, use_layers_1.default)();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
tiles: [
|
|
17
|
-
`${mp?.geoserver?.endpoint}/wms?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&transparent=true&layers=metastring:kew`,
|
|
12
|
+
console.log(data, "datataatata");
|
|
13
|
+
return ((0, jsx_runtime_1.jsx)(maplibre_1.Source, { id: data.id, type: "raster", tiles: [
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
`${mp?.geoserver?.endpoint}/wms?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&transparent=true&layers=metastring:${data.name}`,
|
|
18
16
|
], tileSize: 256, children: (0, jsx_runtime_1.jsx)(maplibre_1.Layer, { id: data.id, beforeId: beforeId, type: "raster", source: "biodiv", layout: { visibility: "visible" }, paint: {} }) }));
|
|
19
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/vector/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;;;CAAA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/map/layers/vector/index.tsx"],"names":[],"mappings":"AAmBA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;;;CAAA,2CAgC5D"}
|
|
@@ -25,5 +25,6 @@ function VectorLayer({ layer: data, beforeId }) {
|
|
|
25
25
|
const { layer } = (0, use_layers_1.default)();
|
|
26
26
|
const layerProps = (0, react_1.useMemo)(() => data.data?.styles?.[data.data?.styleIndex]?.colors, [data, layer.selectedFeatures]);
|
|
27
27
|
const highlightData = layer.selectedFeaturesId?.[data.id];
|
|
28
|
+
console.log(data.source, "data.source ....");
|
|
28
29
|
return ((0, jsx_runtime_1.jsxs)(maplibre_1.Source, { ...data.source, children: [layerProps && (0, jsx_runtime_1.jsx)(maplibre_1.Layer, { beforeId: beforeId, ...layerProps }), highlightData && layerProps && ((0, jsx_runtime_1.jsx)(maplibre_1.Layer, { ...layerProps, beforeId: beforeId, id: `hl_${data.id}`, filter: ["in", constants_1.PROPERTY_ID, ...highlightData], type: layerProps.type === "fill" ? "line" : layerProps.type, paint: paint[layerProps.type] }))] }));
|
|
29
30
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SplitMapComparision.d.ts","sourceRoot":"","sources":["../../../../src/components/map/split-map/SplitMapComparision.tsx"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,WAAW,4CA6ElC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// components/TwoMapsSame.tsx
|
|
2
|
+
"use client";
|
|
3
|
+
"use strict";
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
38
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.default = TwoMapsSame;
|
|
42
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
43
|
+
const map_common_1 = require("@metastringfoundation/map-common");
|
|
44
|
+
const react_1 = require("react");
|
|
45
|
+
const maplibre_1 = __importStar(require("react-map-gl/maplibre"));
|
|
46
|
+
const use_layers_1 = __importDefault(require("../../../hooks/use-layers"));
|
|
47
|
+
const infobar_1 = __importDefault(require("../../infobar"));
|
|
48
|
+
const sidebar_1 = __importDefault(require("../../sidebar"));
|
|
49
|
+
const layers_1 = require("../layers");
|
|
50
|
+
const markers_list_1 = __importDefault(require("../markers-list"));
|
|
51
|
+
const popup_1 = __importDefault(require("../popup"));
|
|
52
|
+
const NavControl = maplibre_1.NavigationControl;
|
|
53
|
+
function TwoMapsSame() {
|
|
54
|
+
// single source of truth hook (same as your original Map)
|
|
55
|
+
const { mp, layer, hover, query } = (0, use_layers_1.default)();
|
|
56
|
+
// coordinates for popups — kept separate per map instance for clarity
|
|
57
|
+
const [coordsLeft, setCoordsLeft] = (0, react_1.useState)();
|
|
58
|
+
const [coordsRight, setCoordsRight] = (0, react_1.useState)();
|
|
59
|
+
const viewState = (0, react_1.useMemo)(() => mp.defaultViewState || map_common_1.defaultViewState, [mp.defaultViewState]);
|
|
60
|
+
// click handlers (reuse your query logic)
|
|
61
|
+
const onMapClick = (e) => query.setClickedLngLat(e.lngLat);
|
|
62
|
+
// mouse move handlers (separate so each map can show its own popup coordinates if needed)
|
|
63
|
+
const handleOnMouseMoveLeft = (event) => {
|
|
64
|
+
setCoordsLeft(event.lngLat);
|
|
65
|
+
hover.onHover(event);
|
|
66
|
+
};
|
|
67
|
+
const handleOnMouseMoveRight = (event) => {
|
|
68
|
+
setCoordsRight(event.lngLat);
|
|
69
|
+
hover.onHover(event);
|
|
70
|
+
};
|
|
71
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "w-full h-screen overflow-hidden flex", children: [mp.loadToC && (0, jsx_runtime_1.jsx)(sidebar_1.default, {}), layer.selectedFeatures?.length > 0 && (0, jsx_runtime_1.jsx)(infobar_1.default, {}), (0, jsx_runtime_1.jsx)("div", { className: "w-1/2 h-full relative border-r border-gray-200", children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-left", cursor: "default", initialViewState: viewState, style: { width: "100%", height: "100%" }, mapStyle: layer.mapStyle, onClick: onMapClick, onMouseMove: handleOnMouseMoveLeft, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), layer.selectedLayers.map((_l, index) => {
|
|
72
|
+
const beforeId = index > 0 ? layer.selectedIds[index - 1] : undefined;
|
|
73
|
+
return (0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: _l, beforeId: beforeId }, _l.id + "-L");
|
|
74
|
+
}), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsLeft }, "popup-left")] }) }), (0, jsx_runtime_1.jsx)("div", { className: "w-1/2 h-full relative", children: (0, jsx_runtime_1.jsxs)(maplibre_1.default, { id: "map-right", cursor: "default", initialViewState: viewState, style: { width: "100%", height: "100%" }, mapStyle: layer.mapStyle, onClick: onMapClick, onMouseMove: handleOnMouseMoveRight, children: [(0, jsx_runtime_1.jsx)(NavControl, { position: "top-right", showZoom: true, showCompass: true }), (0, jsx_runtime_1.jsx)(markers_list_1.default, {}), layer.selectedLayers.map((_l, index) => {
|
|
75
|
+
const beforeId = index > 0 ? layer.selectedIds[index - 1] : undefined;
|
|
76
|
+
return (0, jsx_runtime_1.jsx)(layers_1.MapLayer, { layer: _l, beforeId: beforeId }, _l.id + "-R");
|
|
77
|
+
}), (0, jsx_runtime_1.jsx)(popup_1.default, { coordinates: coordsRight }, "popup-right")] }) })] }));
|
|
78
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer-compare-addon.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-compare-addon.tsx"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,2CAqB/D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = LayerCompareAddon;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const use_layers_1 = __importDefault(require("../../../hooks/use-layers"));
|
|
9
|
+
const core_1 = require("../../core");
|
|
10
|
+
function LayerCompareAddon({ id }) {
|
|
11
|
+
const { layer } = (0, use_layers_1.default)();
|
|
12
|
+
const checked = Boolean(layer?.compareList?.includes(id));
|
|
13
|
+
const onToggle = () => {
|
|
14
|
+
layer.setCompareLayer(id, !checked);
|
|
15
|
+
};
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)(core_1.Button, { children: (0, jsx_runtime_1.jsxs)("label", { className: "flex items-center gap-2 cursor-pointer select-none", children: [(0, jsx_runtime_1.jsx)("input", { type: "checkbox", className: "h-4 w-4 accent-green-700", checked: checked, onChange: onToggle }), (0, jsx_runtime_1.jsx)("span", { children: "Compare" })] }) }));
|
|
17
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-item.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-item.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"layer-item.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/common/layer-item.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAyBrD,UAAU,cAAc;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,oDAAoD;IACpD,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,aAAa,CAAC,EAAE,GAAG,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,IAAI,EACJ,QAAQ,EACR,eAAe,EACf,aAAa,GACd,EAAE,cAAc,2CAqIhB"}
|
|
@@ -15,6 +15,7 @@ const grid_legend_1 = __importDefault(require("./grid-legend"));
|
|
|
15
15
|
const info_popover_1 = require("./info-popover");
|
|
16
16
|
const layer_item_style_1 = __importDefault(require("./layer-item-style"));
|
|
17
17
|
const opacity_handler_addon_1 = __importDefault(require("./opacity-handler-addon"));
|
|
18
|
+
const layer_compare_addon_1 = __importDefault(require("./layer-compare-addon"));
|
|
18
19
|
function LayerItem({ item, extended, dragHandleProps, dragHandleRef, }) {
|
|
19
20
|
const { layer, query, mp, query: { setClickedLngLat }, setIsInfoBarOpen, } = (0, use_layers_1.default)();
|
|
20
21
|
const [isAdded, setIsAdded] = (0, react_1.useState)(layer.selectedIds.includes(item.id));
|
|
@@ -55,5 +56,5 @@ function LayerItem({ item, extended, dragHandleProps, dragHandleRef, }) {
|
|
|
55
56
|
mp?.onLayerDownload(item.id);
|
|
56
57
|
};
|
|
57
58
|
const handleOnZoom = () => layer?.zoomToExtent(item?.id);
|
|
58
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: "z-20 p-3 bg-white border-t border-gray-200", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-
|
|
59
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "z-20 p-3 bg-white border-t border-gray-200", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex gap-2", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center shrink-0", children: [(0, jsx_runtime_1.jsx)(core_1.CheckboxInput, { name: item.id, checked: isAdded, onChange: onToggleLayer, isLoading: isLoading }), extended && ((0, jsx_runtime_1.jsx)("div", { ref: dragHandleRef, ...dragHandleProps, className: "mt-1 w-6 text-center cursor-move", children: (0, jsx_runtime_1.jsx)(core_1.GrabberIcon, {}) }))] }), (0, jsx_runtime_1.jsx)("img", { className: "flex shrink-0 overflow-hidden h-16 w-16 p-1 mb-2 object-cover border border-gray-200 rounded", src: item.thumbnail || constants_1.FALLBACK_THUMB }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { title: item.title, className: "mb-1 leading-tight", style: constants_1.overflowStyle, children: (0, jsx_runtime_1.jsx)(highlighter_1.Highlighted, { text: item.title, highlight: query.term }) }), (0, jsx_runtime_1.jsx)("p", { title: item.description, className: "text-gray-600 text-sm", style: constants_1.overflowStyle2, children: item.description })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "pb-3", children: extended && (0, jsx_runtime_1.jsx)(opacity_handler_addon_1.default, {}) }), (0, jsx_runtime_1.jsxs)("div", { className: "flex justify-between", children: [extended && ((0, jsx_runtime_1.jsx)(layer_compare_addon_1.default, { id: item.id })), !extended && ((0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: onDownloadLayer, disabled: !item.isDownloadable, children: [(0, jsx_runtime_1.jsx)(core_1.DownloadIcon, {}), " Download"] })), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-3", children: [(0, jsx_runtime_1.jsx)(core_1.Button, { onClick: shareLayer, title: "Share", children: (0, jsx_runtime_1.jsx)(core_1.ShareIcon, {}) }), extended && ((0, jsx_runtime_1.jsx)(core_1.Button, { onClick: handleOnZoom, title: "Zoom To Extent", children: (0, jsx_runtime_1.jsx)(core_1.ZoomExtentIcon, {}) })), (0, jsx_runtime_1.jsx)(info_popover_1.PopoverWrapper, { item: item })] })] }), extended && (0, jsx_runtime_1.jsx)(layer_item_style_1.default, { item: item }), extended && item?.source?.type === "grid" && (0, jsx_runtime_1.jsx)(grid_legend_1.default, { item: item })] }));
|
|
59
60
|
}
|
|
@@ -4,6 +4,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
4
4
|
const react_1 = require("react");
|
|
5
5
|
const OpacitySlider = () => {
|
|
6
6
|
const [opacity, setOpacity] = (0, react_1.useState)(1);
|
|
7
|
-
return ((0, jsx_runtime_1.jsx)("div", { className: "max-w-sm space-y-4", children: (0, jsx_runtime_1.jsx)("input", { id: "opacity-slider", type: "range", min: "0", max: "1", step: "0.01", value: opacity, onChange: (e) => setOpacity(Number(e.target.value)), className: "\n w-full cursor-pointer text-2xl\n " }) }));
|
|
7
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "max-w-sm space-y-4", children: (0, jsx_runtime_1.jsx)("input", { id: "opacity-slider", type: "range", min: "0", max: "1", step: "0.01", value: opacity, onChange: (e) => setOpacity(Number(e.target.value)), className: "\n w-full cursor-pointer text-2xl h-1\n " }) }));
|
|
8
8
|
};
|
|
9
9
|
exports.default = OpacitySlider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/index.tsx"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,UAAU,OAAO,4CAuC9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/selected/index.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/sidebar/selected/index.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,gBAAgB,4CAgCvC"}
|
|
@@ -11,10 +11,10 @@ const selected_item_list_1 = require("./selected-item-list");
|
|
|
11
11
|
const core_1 = require("../../core");
|
|
12
12
|
function SelectedTabPanel() {
|
|
13
13
|
const { layer } = (0, use_layers_1.default)();
|
|
14
|
-
const onSortEnd = ({ oldIndex, newIndex }) => {
|
|
14
|
+
const onSortEnd = ({ oldIndex, newIndex, }) => {
|
|
15
15
|
layer.setSelectedIds((0, array_move_1.arrayMoveImmutable)(layer.selectedIds, oldIndex, newIndex));
|
|
16
16
|
};
|
|
17
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 w-full`, children: [layer.selectedIds.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: `p-3 pb-0`, children: (0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: () => layer.clearAll(), children: ["\u2715 ",
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "flex-1 min-h-0 overflow-y-auto", children: (0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col gap-3 w-full`, children: [layer.selectedIds.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: `p-3 pb-0`, children: (0, jsx_runtime_1.jsxs)(core_1.Button, { onClick: () => layer.clearAll(), children: ["\u2715 ", "clear"] }) })), (0, jsx_runtime_1.jsx)(selected_item_list_1.SelectedItemList, { layerList: layer.selectedLayers,
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
useDragHandle: true, onSortEnd: onSortEnd })] }) }));
|
|
20
20
|
}
|
|
@@ -33,6 +33,8 @@ interface LayersContextProps {
|
|
|
33
33
|
zoomToExtent: (layerId: string) => void;
|
|
34
34
|
gridLegends: Record<string, any>;
|
|
35
35
|
setGridLegends: (g: Record<string, any>) => void;
|
|
36
|
+
compareList: string[];
|
|
37
|
+
setCompareLayer: (layerId: string, checked: boolean) => void;
|
|
36
38
|
};
|
|
37
39
|
query: {
|
|
38
40
|
term: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-layers.d.ts","sourceRoot":"","sources":["../../src/hooks/use-layers.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-layers.d.ts","sourceRoot":"","sources":["../../src/hooks/use-layers.tsx"],"names":[],"mappings":"AAIA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAStE,UAAU,kBAAkB;IAC1B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,GAAG,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC9B,gBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACxC,GAAG,EAAE,cAAc,EAAE,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;QAC3C,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;QACxC,cAAc,EAAE,cAAc,EAAE,CAAC;QAEjC,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,GAAG,EAAE,OAAO,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,CAAC,EAAE,OAAO,CAAC;SACjB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC3E,gBAAgB,EAAE,GAAG,CAAC;QACtB,kBAAkB,EAAE,GAAG,CAAC;QACxB,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QACtC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QAC9D,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QACpD,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAEvC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;QAExC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;QACrD,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;KAE1D,CAAC;IACF,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7B,aAAa,EAAE,GAAG,CAAC;QACnB,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;QAC1B,QAAQ,EAAE,GAAG,CAAC;KACf,CAAC;CACH;AAED,UAAU,mBAAmB;IAC3B,EAAE,EAAE,qBAAqB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAMD,eAAO,MAAM,cAAc,GAAI,uBAAuB,mBAAmB,4CA4VxE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,SAAS,uBAEhC"}
|
package/dist/hooks/use-layers.js
CHANGED
|
@@ -63,6 +63,15 @@ const LayersProvider = ({ mp: _mp, children }) => {
|
|
|
63
63
|
const [selectedLayerIds, setSelectedLayerIds] = (0, react_1.useState)(mp.selectedLayers || []);
|
|
64
64
|
const [hoverFeatures, setHoverFeatures] = (0, react_1.useState)();
|
|
65
65
|
const [selectedFeatures, setSelectedFeatures] = (0, react_1.useState)();
|
|
66
|
+
const [compareList, setCompareList] = (0, react_1.useState)((_mp && _mp.compareList) || []);
|
|
67
|
+
const setCompareLayer = (layerId, checked) => {
|
|
68
|
+
setCompareList((prev) => {
|
|
69
|
+
if (checked)
|
|
70
|
+
return Array.from(new Set([layerId, ...prev]));
|
|
71
|
+
return prev.filter((id) => id !== layerId);
|
|
72
|
+
});
|
|
73
|
+
// optional: call mp.onCompareChange(layerId, checked) if you want callbacks
|
|
74
|
+
};
|
|
66
75
|
const selectedFeaturesId = (0, react_1.useMemo)(() => {
|
|
67
76
|
const meta = {};
|
|
68
77
|
for (const qr of selectedFeatures || []) {
|
|
@@ -103,8 +112,7 @@ const LayersProvider = ({ mp: _mp, children }) => {
|
|
|
103
112
|
// @ts-ignore
|
|
104
113
|
layer, styleIndex, mp.nakshaApiEndpoint, mp.geoserver);
|
|
105
114
|
updateLayerById(layer.id, { data: layerData });
|
|
106
|
-
focus &&
|
|
107
|
-
mapl?.fitBounds(layer.bbox, { padding: 40, duration: 1000 });
|
|
115
|
+
// focus && mapl?.fitBounds(layer.bbox as any, { padding: 40, duration: 1000 });
|
|
108
116
|
};
|
|
109
117
|
const updateLayerStyle = async (layerId, styleIndex) => {
|
|
110
118
|
const layerIndex = getLayerIndexById(layerId);
|
|
@@ -148,9 +156,9 @@ const LayersProvider = ({ mp: _mp, children }) => {
|
|
|
148
156
|
setSelectedLayerIds(selectedLayerIds.filter((_lyrId) => layerId !== _lyrId));
|
|
149
157
|
return;
|
|
150
158
|
}
|
|
151
|
-
|
|
159
|
+
const layerIndex = getLayerIndexById(layerId);
|
|
152
160
|
// const sourceType = layers[layerIndex]?.source.type;
|
|
153
|
-
|
|
161
|
+
await toggleVectorLayer(layerIndex, styleIndex, focus);
|
|
154
162
|
setSelectedLayerIds((prev) => {
|
|
155
163
|
const updated = [layerId, ...prev.filter((id) => id !== layerId)];
|
|
156
164
|
return updated;
|
|
@@ -277,6 +285,8 @@ const LayersProvider = ({ mp: _mp, children }) => {
|
|
|
277
285
|
zoomToExtent,
|
|
278
286
|
gridLegends,
|
|
279
287
|
setGridLegends,
|
|
288
|
+
compareList: compareList,
|
|
289
|
+
setCompareLayer: setCompareLayer,
|
|
280
290
|
},
|
|
281
291
|
query: {
|
|
282
292
|
term: queryTermDebounced,
|
package/dist/index.css
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
--color-red-200: oklch(88.5% 0.062 18.334);
|
|
12
12
|
--color-red-600: oklch(57.7% 0.245 27.325);
|
|
13
13
|
--color-red-800: oklch(44.4% 0.177 26.899);
|
|
14
|
+
--color-green-700: oklch(52.7% 0.154 150.069);
|
|
15
|
+
--color-green-800: oklch(44.8% 0.119 151.328);
|
|
14
16
|
--color-blue-300: oklch(80.9% 0.105 251.813);
|
|
15
17
|
--color-blue-500: oklch(62.3% 0.214 259.815);
|
|
16
18
|
--color-blue-600: oklch(54.6% 0.245 262.881);
|
|
@@ -34,6 +36,7 @@
|
|
|
34
36
|
--text-2xl: 1.5rem;
|
|
35
37
|
--text-2xl--line-height: calc(2 / 1.5);
|
|
36
38
|
--font-weight-medium: 500;
|
|
39
|
+
--font-weight-semibold: 600;
|
|
37
40
|
--tracking-wide: 0.025em;
|
|
38
41
|
--leading-tight: 1.25;
|
|
39
42
|
--radius-md: 0.375rem;
|
|
@@ -224,6 +227,9 @@
|
|
|
224
227
|
.bottom-0 {
|
|
225
228
|
bottom: calc(var(--spacing) * 0);
|
|
226
229
|
}
|
|
230
|
+
.bottom-4 {
|
|
231
|
+
bottom: calc(var(--spacing) * 4);
|
|
232
|
+
}
|
|
227
233
|
.left-0 {
|
|
228
234
|
left: calc(var(--spacing) * 0);
|
|
229
235
|
}
|
|
@@ -236,6 +242,9 @@
|
|
|
236
242
|
.z-20 {
|
|
237
243
|
z-index: 20;
|
|
238
244
|
}
|
|
245
|
+
.z-50 {
|
|
246
|
+
z-index: 50;
|
|
247
|
+
}
|
|
239
248
|
.container {
|
|
240
249
|
width: 100%;
|
|
241
250
|
@media (width >= 40rem) {
|
|
@@ -293,6 +302,12 @@
|
|
|
293
302
|
.inline-block {
|
|
294
303
|
display: inline-block;
|
|
295
304
|
}
|
|
305
|
+
.h-1 {
|
|
306
|
+
height: calc(var(--spacing) * 1);
|
|
307
|
+
}
|
|
308
|
+
.h-4 {
|
|
309
|
+
height: calc(var(--spacing) * 4);
|
|
310
|
+
}
|
|
296
311
|
.h-5 {
|
|
297
312
|
height: calc(var(--spacing) * 5);
|
|
298
313
|
}
|
|
@@ -317,6 +332,9 @@
|
|
|
317
332
|
.min-h-0 {
|
|
318
333
|
min-height: calc(var(--spacing) * 0);
|
|
319
334
|
}
|
|
335
|
+
.w-4 {
|
|
336
|
+
width: calc(var(--spacing) * 4);
|
|
337
|
+
}
|
|
320
338
|
.w-5 {
|
|
321
339
|
width: calc(var(--spacing) * 5);
|
|
322
340
|
}
|
|
@@ -482,6 +500,9 @@
|
|
|
482
500
|
.bg-gray-200 {
|
|
483
501
|
background-color: var(--color-gray-200);
|
|
484
502
|
}
|
|
503
|
+
.bg-green-700 {
|
|
504
|
+
background-color: var(--color-green-700);
|
|
505
|
+
}
|
|
485
506
|
.bg-red-100 {
|
|
486
507
|
background-color: var(--color-red-100);
|
|
487
508
|
}
|
|
@@ -491,6 +512,12 @@
|
|
|
491
512
|
.bg-white {
|
|
492
513
|
background-color: var(--color-white);
|
|
493
514
|
}
|
|
515
|
+
.bg-white\/5 {
|
|
516
|
+
background-color: color-mix(in srgb, #fff 5%, transparent);
|
|
517
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
518
|
+
background-color: color-mix(in oklab, var(--color-white) 5%, transparent);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
494
521
|
.object-cover {
|
|
495
522
|
object-fit: cover;
|
|
496
523
|
}
|
|
@@ -506,6 +533,9 @@
|
|
|
506
533
|
.p-4 {
|
|
507
534
|
padding: calc(var(--spacing) * 4);
|
|
508
535
|
}
|
|
536
|
+
.px-1 {
|
|
537
|
+
padding-inline: calc(var(--spacing) * 1);
|
|
538
|
+
}
|
|
509
539
|
.px-2 {
|
|
510
540
|
padding-inline: calc(var(--spacing) * 2);
|
|
511
541
|
}
|
|
@@ -578,6 +608,10 @@
|
|
|
578
608
|
--tw-font-weight: var(--font-weight-medium);
|
|
579
609
|
font-weight: var(--font-weight-medium);
|
|
580
610
|
}
|
|
611
|
+
.font-semibold {
|
|
612
|
+
--tw-font-weight: var(--font-weight-semibold);
|
|
613
|
+
font-weight: var(--font-weight-semibold);
|
|
614
|
+
}
|
|
581
615
|
.tracking-wide {
|
|
582
616
|
--tw-tracking: var(--tracking-wide);
|
|
583
617
|
letter-spacing: var(--tracking-wide);
|
|
@@ -615,9 +649,15 @@
|
|
|
615
649
|
.text-red-800 {
|
|
616
650
|
color: var(--color-red-800);
|
|
617
651
|
}
|
|
652
|
+
.text-white {
|
|
653
|
+
color: var(--color-white);
|
|
654
|
+
}
|
|
618
655
|
.capitalize {
|
|
619
656
|
text-transform: capitalize;
|
|
620
657
|
}
|
|
658
|
+
.accent-green-700 {
|
|
659
|
+
accent-color: var(--color-green-700);
|
|
660
|
+
}
|
|
621
661
|
.shadow-md {
|
|
622
662
|
--tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
|
623
663
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -638,6 +678,10 @@
|
|
|
638
678
|
--tw-duration: 200ms;
|
|
639
679
|
transition-duration: 200ms;
|
|
640
680
|
}
|
|
681
|
+
.select-none {
|
|
682
|
+
-webkit-user-select: none;
|
|
683
|
+
user-select: none;
|
|
684
|
+
}
|
|
641
685
|
.hover\:border-blue-500 {
|
|
642
686
|
&:hover {
|
|
643
687
|
@media (hover: hover) {
|
|
@@ -666,6 +710,13 @@
|
|
|
666
710
|
}
|
|
667
711
|
}
|
|
668
712
|
}
|
|
713
|
+
.hover\:bg-green-800 {
|
|
714
|
+
&:hover {
|
|
715
|
+
@media (hover: hover) {
|
|
716
|
+
background-color: var(--color-green-800);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
669
720
|
.hover\:bg-red-200 {
|
|
670
721
|
&:hover {
|
|
671
722
|
@media (hover: hover) {
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAOrD,QAAA,MAAM,YAAY,GAAI,OAAO,qBAAqB,4CAqBjD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,54 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
38
|
};
|
|
6
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
40
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
-
const react_1 =
|
|
41
|
+
const react_1 = __importStar(require("react"));
|
|
9
42
|
const maplibre_1 = require("react-map-gl/maplibre");
|
|
10
43
|
const map_1 = __importDefault(require("./components/map"));
|
|
11
44
|
const constants_1 = require("./static/constants");
|
|
12
45
|
const use_layers_1 = require("./hooks/use-layers");
|
|
46
|
+
const dualMap_1 = __importDefault(require("./components/dualMap"));
|
|
47
|
+
const LayerCompareControl_1 = __importDefault(require("./components/Handler/LayerCompareControl"));
|
|
13
48
|
// setup({ preflight: false });
|
|
14
49
|
const MapListIndex = (props) => {
|
|
50
|
+
const [compareLayer, setCompareLayer] = (0, react_1.useState)(false);
|
|
15
51
|
const mp = react_1.default.useMemo(() => ({ ...constants_1.defaultNakshaProps, ...props }), [props]);
|
|
16
|
-
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(maplibre_1.MapProvider, { children: (0, jsx_runtime_1.
|
|
52
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(maplibre_1.MapProvider, { children: (0, jsx_runtime_1.jsxs)(use_layers_1.LayersProvider, { mp: mp, children: [(0, jsx_runtime_1.jsx)(LayerCompareControl_1.default, { compare: compareLayer, setCompare: setCompareLayer }), compareLayer ? (0, jsx_runtime_1.jsx)(dualMap_1.default, {}) : (0, jsx_runtime_1.jsx)(map_1.default, {})] }) }) }));
|
|
17
53
|
};
|
|
18
54
|
exports.default = MapListIndex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/services/naksha.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/services/naksha.ts"],"names":[],"mappings":"AAoOA,eAAO,MAAM,oBAAoB,GAC/B,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,WAAW,GAAG,EACd,iBAAiB,MAAM,EAAE,GAAG,IAAI,KAC/B,OAAO,CAAC,GAAG,EAAE,CAwBf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,IAAI,MAAM,GAAG,MAAM,EACnB,UAAU,MAAM,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAY3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,QAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,CAuBxE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAClC,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,EACxB,UAAU,OAAO,KAChB,OAAO,CAAC,OAAO,CAoBjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GACxB,qBAAqB,MAAM,GAAG,IAAI,GAAG,SAAS,EAC9C,mBAAmB,MAAM,EACzB,SAAS,MAAM,GAAG,MAAM,KACvB,OAAO,CAAC,OAAO,CAejB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,UAAU,MAAM,KACf,OAAO,CAAC,GAAG,CAiBb,CAAC;AAEF;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EACtD,QAAQ;IAAE,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EAChF,MAAM,MAAM,EACZ,iBAAY,EACZ,oBAAsB,KACrB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CA0DA,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,MAAM,EAChB,OAAO,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,WAAW,MAAM,EACjB,YAAY,MAAM,KACjB,OAAO,CAAC,IAAI,CAed,CAAC"}
|
package/dist/services/naksha.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.axDownloadLayer = exports.getGridLayerData = exports.axGetGeoserverLayer
|
|
|
7
7
|
// api.ts
|
|
8
8
|
const colorbrewer_1 = __importDefault(require("colorbrewer"));
|
|
9
9
|
const grid_1 = require("../utils/grid");
|
|
10
|
+
const naksha_1 = require("../utils/naksha");
|
|
10
11
|
/**
|
|
11
12
|
* Inline-typed alias for colorbrewer palettes to avoid TS errors.
|
|
12
13
|
* colorbrewer exports an object of shape: Record<schemeName, Record<count, string[]>>
|
|
@@ -150,7 +151,7 @@ function createDummyLayers(layersResponse, geoserver, selectedLayers) {
|
|
|
150
151
|
// workspace and layerName parsing from rawName (workspace:layer)
|
|
151
152
|
const [workspace = (geoserver?.workspace || "default"), layerName] = String(rawName).includes(":") ? String(rawName).split(":") : [geoserver?.workspace || "default", String(rawName)];
|
|
152
153
|
// prefer API id if present, else create stable hash
|
|
153
|
-
const id = entry.id
|
|
154
|
+
const id = entry.id;
|
|
154
155
|
// Dummy bbox (keeps UI layout stable)
|
|
155
156
|
const bbox = [
|
|
156
157
|
[75 + idx * 0.01, 23 + idx * 0.01],
|
|
@@ -163,7 +164,8 @@ function createDummyLayers(layersResponse, geoserver, selectedLayers) {
|
|
|
163
164
|
: `${gsBase}/thumbnails/${workspace}/${layerName}?layers=${encodeURIComponent(layerName)}&bbox=${bbox
|
|
164
165
|
.flat()
|
|
165
166
|
.join(",")}&request=GetMap&service=WMS&version=1.1.0&format=image/gif`;
|
|
166
|
-
const layerType = (entry.dataType || entry.layerType || "Vector").toUpperCase();
|
|
167
|
+
// const layerType = (entry.dataType || entry.layerType || "Vector").toUpperCase();
|
|
168
|
+
const layerType = ("vector").toUpperCase();
|
|
167
169
|
const titleCandidate = entry.nameOfDataset || layerName || entry.title || entry.geoserverName;
|
|
168
170
|
const title = prettifyTitle(String(titleCandidate || rawName));
|
|
169
171
|
return {
|
|
@@ -212,7 +214,8 @@ const axGetGeoserverLayers = async (nakshaEndpointToken, nakshaApiEndpoint, geos
|
|
|
212
214
|
throw new Error(`HTTP ${res.status} ${res.statusText}`);
|
|
213
215
|
// parseResponse may be your existing helper — if not, use res.json()
|
|
214
216
|
const data = typeof parseResponse === "function" ? await parseResponse(res) : await res.json().catch(() => null);
|
|
215
|
-
const
|
|
217
|
+
const finalTransformedLayers = createDummyLayers(data, geoserver, selectedLayers);
|
|
218
|
+
const finalLayers = await (0, naksha_1.parseGeoserverLayersXml)(finalTransformedLayers, nakshaApiEndpoint, geoserver, selectedLayers);
|
|
216
219
|
return finalLayers;
|
|
217
220
|
}
|
|
218
221
|
catch (e) {
|
|
@@ -227,7 +230,8 @@ exports.axGetGeoserverLayers = axGetGeoserverLayers;
|
|
|
227
230
|
*/
|
|
228
231
|
const axGetGeoserverLayerStyleList = async (id, endpoint) => {
|
|
229
232
|
try {
|
|
230
|
-
const res = await fetch(`${endpoint}/layer
|
|
233
|
+
const res = await fetch(`${endpoint}/styles/by-layer/${id}`);
|
|
234
|
+
// const res = await fetch(`${endpoint}/layer/onClick/${id}`);
|
|
231
235
|
if (!res.ok)
|
|
232
236
|
throw new Error(`HTTP ${res.status}`);
|
|
233
237
|
const data = await parseResponse(res);
|
|
@@ -321,7 +325,9 @@ exports.axDeleteLayer = axDeleteLayer;
|
|
|
321
325
|
*/
|
|
322
326
|
const axGetGeoserverLayerStyle = async (layername, workspace, styleName, endpoint) => {
|
|
323
327
|
try {
|
|
324
|
-
const res = await fetch(
|
|
328
|
+
const res = await fetch(
|
|
329
|
+
// `${endpoint}/geoserver/workspaces/${workspace}/styles/${layername}_${styleName}.mbstyle`
|
|
330
|
+
`${endpoint}/styles/legend/${styleName}`);
|
|
325
331
|
if (!res.ok)
|
|
326
332
|
throw new Error(`HTTP ${res.status}`);
|
|
327
333
|
// .mbstyle may be JSON; attempt parse safely
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/utils/naksha.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,GAAG,EACX,mBAAmB,MAAM,EACzB,WAAW;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"naksha.d.ts","sourceRoot":"","sources":["../../src/utils/naksha.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,GAAG,EACX,mBAAmB,MAAM,EACzB,WAAW;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE,EAC7C,gBAAgB,GAAG,mBAoDpB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GACxB,OAAO;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAChC,YAAY,MAAM,EAClB,mBAAmB,MAAM,EACzB,WAAW;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAsGjC,CAAC"}
|
package/dist/utils/naksha.js
CHANGED
|
@@ -26,13 +26,13 @@ const parseGeoserverLayersXml = async (layers, nakshaApiEndpoint, geoserver, sel
|
|
|
26
26
|
: "vector";
|
|
27
27
|
const _l = {
|
|
28
28
|
...l,
|
|
29
|
-
id: l.
|
|
29
|
+
id: l.id,
|
|
30
30
|
thumbnail,
|
|
31
31
|
source: {
|
|
32
32
|
type: sourceType,
|
|
33
33
|
scheme: "tms",
|
|
34
34
|
tiles: [
|
|
35
|
-
`${geoserver.endpoint.replace(/\/$/, "")}/gwc/service/tms/1.0.0/${encodeURIComponent(`${geoserver.workspace}:${l.name}`)}@EPSG
|
|
35
|
+
`${geoserver.endpoint.replace(/\/$/, "")}/gwc/service/tms/1.0.0/${encodeURIComponent(`${geoserver.workspace}:${l.name}`)}@EPSG:3857@pbf/{z}/{x}/{y}.pbf`,
|
|
36
36
|
],
|
|
37
37
|
},
|
|
38
38
|
data: { styles: [] },
|
|
@@ -71,9 +71,11 @@ exports.parseGeoserverLayersXml = parseGeoserverLayersXml;
|
|
|
71
71
|
* @returns {Promise<any>} updated data object
|
|
72
72
|
*/
|
|
73
73
|
const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) => {
|
|
74
|
-
console.log("getLayerStyle", layer, styleIndex, nakshaApiEndpoint, geoserver)
|
|
74
|
+
// console.log("getLayerStyle", layer , styleIndex , nakshaApiEndpoint , geoserver)
|
|
75
75
|
// Start from existing data (defensive)
|
|
76
|
-
let data = layer.data && typeof layer.data === "object"
|
|
76
|
+
let data = layer.data && typeof layer.data === "object"
|
|
77
|
+
? { ...layer.data }
|
|
78
|
+
: { styles: [] };
|
|
77
79
|
// 1) If styles list is empty, fetch style list and metadata
|
|
78
80
|
if (!Array.isArray(data.styles) || data.styles.length === 0) {
|
|
79
81
|
try {
|
|
@@ -89,7 +91,10 @@ const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) =>
|
|
|
89
91
|
};
|
|
90
92
|
// build propertyMap safely
|
|
91
93
|
try {
|
|
92
|
-
data.propertyMap = Object.fromEntries((data.styles || []).map((o) => [
|
|
94
|
+
data.propertyMap = Object.fromEntries((data.styles || []).map((o) => [
|
|
95
|
+
o.styleName,
|
|
96
|
+
o.styleTitle,
|
|
97
|
+
]));
|
|
93
98
|
}
|
|
94
99
|
catch {
|
|
95
100
|
data.propertyMap = data.propertyMap ?? {};
|
|
@@ -117,7 +122,9 @@ const getLayerStyle = async (layer, styleIndex, nakshaApiEndpoint, geoserver) =>
|
|
|
117
122
|
}
|
|
118
123
|
if (needsColors || !styleExists) {
|
|
119
124
|
// determine styleName to fetch colors for; prefer newly-fetched styles metadata if present
|
|
120
|
-
const styleName = (data.styles &&
|
|
125
|
+
const styleName = (data.styles &&
|
|
126
|
+
data.styles[styleIndex] &&
|
|
127
|
+
data.styles[styleIndex].styleName) ||
|
|
121
128
|
null;
|
|
122
129
|
if (styleName) {
|
|
123
130
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metastringfoundation/map-list",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"**/*.css"
|
|
6
6
|
],
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"react-tiny-popover": "^8.1.6",
|
|
45
45
|
"react-virtualized-auto-sizer": "^1.0.26",
|
|
46
46
|
"react-web-share": "^2.0.2",
|
|
47
|
-
"@metastringfoundation/map-common": "0.1.
|
|
47
|
+
"@metastringfoundation/map-common": "0.1.1"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build:styles": "tailwindcss -i ./src/styles.css -o ./dist/index.css",
|