@metastringfoundation/map-list 0.1.0

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.
Files changed (158) hide show
  1. package/dist/card.d.ts +7 -0
  2. package/dist/card.d.ts.map +1 -0
  3. package/dist/card.js +7 -0
  4. package/dist/components/core/button.d.ts +7 -0
  5. package/dist/components/core/button.d.ts.map +1 -0
  6. package/dist/components/core/button.js +21 -0
  7. package/dist/components/core/highlighter.d.ts +5 -0
  8. package/dist/components/core/highlighter.d.ts.map +1 -0
  9. package/dist/components/core/highlighter.js +15 -0
  10. package/dist/components/core/icons.d.ts +17 -0
  11. package/dist/components/core/icons.d.ts.map +1 -0
  12. package/dist/components/core/icons.js +60 -0
  13. package/dist/components/core/iconts.d.ts +2 -0
  14. package/dist/components/core/iconts.d.ts.map +1 -0
  15. package/dist/components/core/iconts.js +2 -0
  16. package/dist/components/core/index.d.ts +5 -0
  17. package/dist/components/core/index.d.ts.map +1 -0
  18. package/dist/components/core/index.js +20 -0
  19. package/dist/components/core/input.d.ts +14 -0
  20. package/dist/components/core/input.d.ts.map +1 -0
  21. package/dist/components/core/input.js +18 -0
  22. package/dist/components/core/popup.d.ts +5 -0
  23. package/dist/components/core/popup.d.ts.map +1 -0
  24. package/dist/components/core/popup.js +11 -0
  25. package/dist/components/core/tabs.d.ts +46 -0
  26. package/dist/components/core/tabs.d.ts.map +1 -0
  27. package/dist/components/core/tabs.js +147 -0
  28. package/dist/components/infobar/content.d.ts +4 -0
  29. package/dist/components/infobar/content.d.ts.map +1 -0
  30. package/dist/components/infobar/content.js +22 -0
  31. package/dist/components/infobar/index.d.ts +2 -0
  32. package/dist/components/infobar/index.d.ts.map +1 -0
  33. package/dist/components/infobar/index.js +17 -0
  34. package/dist/components/infobar/infobar-panel.d.ts +4 -0
  35. package/dist/components/infobar/infobar-panel.d.ts.map +1 -0
  36. package/dist/components/infobar/infobar-panel.js +52 -0
  37. package/dist/components/map/index.d.ts +2 -0
  38. package/dist/components/map/index.d.ts.map +1 -0
  39. package/dist/components/map/index.js +66 -0
  40. package/dist/components/map/layers/grid/index.d.ts +6 -0
  41. package/dist/components/map/layers/grid/index.d.ts.map +1 -0
  42. package/dist/components/map/layers/grid/index.js +31 -0
  43. package/dist/components/map/layers/highlight/index.d.ts +2 -0
  44. package/dist/components/map/layers/highlight/index.d.ts.map +1 -0
  45. package/dist/components/map/layers/highlight/index.js +7 -0
  46. package/dist/components/map/layers/index.d.ts +6 -0
  47. package/dist/components/map/layers/index.d.ts.map +1 -0
  48. package/dist/components/map/layers/index.js +27 -0
  49. package/dist/components/map/layers/raster/index.d.ts +6 -0
  50. package/dist/components/map/layers/raster/index.d.ts.map +1 -0
  51. package/dist/components/map/layers/raster/index.js +19 -0
  52. package/dist/components/map/layers/vector/index.d.ts +5 -0
  53. package/dist/components/map/layers/vector/index.d.ts.map +1 -0
  54. package/dist/components/map/layers/vector/index.js +29 -0
  55. package/dist/components/map/marker-list/index.d.ts +3 -0
  56. package/dist/components/map/marker-list/index.d.ts.map +1 -0
  57. package/dist/components/map/marker-list/index.js +16 -0
  58. package/dist/components/map/markers-list/index.d.ts +3 -0
  59. package/dist/components/map/markers-list/index.d.ts.map +1 -0
  60. package/dist/components/map/markers-list/index.js +16 -0
  61. package/dist/components/map/popup/index.d.ts +4 -0
  62. package/dist/components/map/popup/index.d.ts.map +1 -0
  63. package/dist/components/map/popup/index.js +17 -0
  64. package/dist/components/sidebar/common/grid-legend.d.ts +4 -0
  65. package/dist/components/sidebar/common/grid-legend.d.ts.map +1 -0
  66. package/dist/components/sidebar/common/grid-legend.js +22 -0
  67. package/dist/components/sidebar/common/info-popover.d.ts +10 -0
  68. package/dist/components/sidebar/common/info-popover.d.ts.map +1 -0
  69. package/dist/components/sidebar/common/info-popover.js +32 -0
  70. package/dist/components/sidebar/common/layer-item-style.d.ts +4 -0
  71. package/dist/components/sidebar/common/layer-item-style.d.ts.map +1 -0
  72. package/dist/components/sidebar/common/layer-item-style.js +21 -0
  73. package/dist/components/sidebar/common/layer-item.d.ts +11 -0
  74. package/dist/components/sidebar/common/layer-item.d.ts.map +1 -0
  75. package/dist/components/sidebar/common/layer-item.js +59 -0
  76. package/dist/components/sidebar/common/moreless.d.ts +4 -0
  77. package/dist/components/sidebar/common/moreless.d.ts.map +1 -0
  78. package/dist/components/sidebar/common/moreless.js +10 -0
  79. package/dist/components/sidebar/common/opacity-handler-addon.d.ts +3 -0
  80. package/dist/components/sidebar/common/opacity-handler-addon.d.ts.map +1 -0
  81. package/dist/components/sidebar/common/opacity-handler-addon.js +9 -0
  82. package/dist/components/sidebar/common/style-legend.d.ts +4 -0
  83. package/dist/components/sidebar/common/style-legend.d.ts.map +1 -0
  84. package/dist/components/sidebar/common/style-legend.js +23 -0
  85. package/dist/components/sidebar/common.d.ts +2 -0
  86. package/dist/components/sidebar/common.d.ts.map +1 -0
  87. package/dist/components/sidebar/common.js +2 -0
  88. package/dist/components/sidebar/index.d.ts +2 -0
  89. package/dist/components/sidebar/index.d.ts.map +1 -0
  90. package/dist/components/sidebar/index.js +38 -0
  91. package/dist/components/sidebar/layers/index.d.ts +2 -0
  92. package/dist/components/sidebar/layers/index.d.ts.map +1 -0
  93. package/dist/components/sidebar/layers/index.js +12 -0
  94. package/dist/components/sidebar/layers/layer-list.d.ts +2 -0
  95. package/dist/components/sidebar/layers/layer-list.d.ts.map +1 -0
  96. package/dist/components/sidebar/layers/layer-list.js +64 -0
  97. package/dist/components/sidebar/layers/search.d.ts +2 -0
  98. package/dist/components/sidebar/layers/search.d.ts.map +1 -0
  99. package/dist/components/sidebar/layers/search.js +16 -0
  100. package/dist/components/sidebar/layers.d.ts +2 -0
  101. package/dist/components/sidebar/layers.d.ts.map +1 -0
  102. package/dist/components/sidebar/layers.js +2 -0
  103. package/dist/components/sidebar/selected/extended.d.ts +3 -0
  104. package/dist/components/sidebar/selected/extended.d.ts.map +1 -0
  105. package/dist/components/sidebar/selected/extended.js +7 -0
  106. package/dist/components/sidebar/selected/index.d.ts +2 -0
  107. package/dist/components/sidebar/selected/index.d.ts.map +1 -0
  108. package/dist/components/sidebar/selected/index.js +20 -0
  109. package/dist/components/sidebar/selected/selected-item-list.d.ts +10 -0
  110. package/dist/components/sidebar/selected/selected-item-list.d.ts.map +1 -0
  111. package/dist/components/sidebar/selected/selected-item-list.js +36 -0
  112. package/dist/components/sidebar/settings/index.d.ts +2 -0
  113. package/dist/components/sidebar/settings/index.d.ts.map +1 -0
  114. package/dist/components/sidebar/settings/index.js +16 -0
  115. package/dist/components/sidebar/settings/layer-selection.d.ts +6 -0
  116. package/dist/components/sidebar/settings/layer-selection.d.ts.map +1 -0
  117. package/dist/components/sidebar/settings/layer-selection.js +17 -0
  118. package/dist/components/sidebar/tabs.d.ts +4 -0
  119. package/dist/components/sidebar/tabs.d.ts.map +1 -0
  120. package/dist/components/sidebar/tabs.js +15 -0
  121. package/dist/gradient.d.ts +6 -0
  122. package/dist/gradient.d.ts.map +1 -0
  123. package/dist/gradient.js +9 -0
  124. package/dist/hooks/use-layers.d.ts +55 -0
  125. package/dist/hooks/use-layers.d.ts.map +1 -0
  126. package/dist/hooks/use-layers.js +298 -0
  127. package/dist/index.css +1129 -0
  128. package/dist/index.d.ts +4 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +18 -0
  131. package/dist/interfaces/index.d.ts +103 -0
  132. package/dist/interfaces/index.d.ts.map +1 -0
  133. package/dist/interfaces/index.js +2 -0
  134. package/dist/services/naksha.d.ts +62 -0
  135. package/dist/services/naksha.d.ts.map +1 -0
  136. package/dist/services/naksha.js +420 -0
  137. package/dist/static/constant.d.ts +16 -0
  138. package/dist/static/constant.d.ts.map +1 -0
  139. package/dist/static/constant.js +34 -0
  140. package/dist/static/constants.d.ts +16 -0
  141. package/dist/static/constants.d.ts.map +1 -0
  142. package/dist/static/constants.js +34 -0
  143. package/dist/test.d.ts +2 -0
  144. package/dist/test.d.ts.map +1 -0
  145. package/dist/test.js +9 -0
  146. package/dist/turborepo-logo.d.ts +2 -0
  147. package/dist/turborepo-logo.d.ts.map +1 -0
  148. package/dist/turborepo-logo.js +8 -0
  149. package/dist/utils/array-move.d.ts +3 -0
  150. package/dist/utils/array-move.d.ts.map +1 -0
  151. package/dist/utils/array-move.js +19 -0
  152. package/dist/utils/grid.d.ts +22 -0
  153. package/dist/utils/grid.d.ts.map +1 -0
  154. package/dist/utils/grid.js +116 -0
  155. package/dist/utils/naksha.d.ts +32 -0
  156. package/dist/utils/naksha.d.ts.map +1 -0
  157. package/dist/utils/naksha.js +141 -0
  158. package/package.json +57 -0
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.LayersProvider = void 0;
37
+ exports.default = useLayers;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ const map_common_1 = require("@metastringfoundation/map-common");
40
+ const react_1 = __importStar(require("react"));
41
+ const maplibre_1 = require("react-map-gl/maplibre");
42
+ const naksha_1 = require("../services/naksha");
43
+ const constants_1 = require("../static/constants");
44
+ const naksha_2 = require("../utils/naksha");
45
+ const LayersContext = (0, react_1.createContext)({});
46
+ const LayersProvider = ({ mp: _mp, children }) => {
47
+ const [mp, setMP] = (0, react_1.useState)(_mp);
48
+ // robust extraction for map object returned by various react-map-gl versions / adapters
49
+ const _mapHook = (0, maplibre_1.useMap)();
50
+ const mapl = _mapHook?.mapl ??
51
+ _mapHook?.map ??
52
+ _mapHook?.current ??
53
+ _mapHook ??
54
+ undefined;
55
+ const [queryTerm, setQueryTerm] = (0, react_1.useState)("");
56
+ const queryTermDebounced = (0, map_common_1.useDebounce)(queryTerm, 500);
57
+ const [mapStyle, setMapStyle] = (0, react_1.useState)(map_common_1.defaultMapStyles[mp?.mapStyle || 0]?.style);
58
+ const [selectionStyle, setSelectionStyle] = (0, react_1.useState)(constants_1.SELECTION_STYLE.TOP);
59
+ const [gridLegends, setGridLegends] = (0, react_1.useState)({});
60
+ const [isInfoBarOpen, setIsInfoBarOpen] = (0, react_1.useState)(true);
61
+ const [clickedLngLat, setClickedLngLat] = (0, react_1.useState)();
62
+ const [layers, setLayers] = (0, react_1.useState)(_mp.layers || []);
63
+ const [selectedLayerIds, setSelectedLayerIds] = (0, react_1.useState)(mp.selectedLayers || []);
64
+ const [hoverFeatures, setHoverFeatures] = (0, react_1.useState)();
65
+ const [selectedFeatures, setSelectedFeatures] = (0, react_1.useState)();
66
+ const selectedFeaturesId = (0, react_1.useMemo)(() => {
67
+ const meta = {};
68
+ for (const qr of selectedFeatures || []) {
69
+ meta[qr.sourceLayer] = [
70
+ ...(meta[qr.sourceLayer] || []),
71
+ qr?.properties?.[constants_1.PROPERTY_ID],
72
+ ];
73
+ }
74
+ return Object.keys(meta).length ? meta : undefined;
75
+ }, [selectedFeatures]);
76
+ const selectedLayers = react_1.default.useMemo(() => {
77
+ const unsortedLayers = layers.filter((_layer) => selectedLayerIds.includes(_layer.id));
78
+ const sortedLayers = new Array(selectedLayerIds.length);
79
+ // retrives full layer objects and re-orders according to `selectedLayerIds` order
80
+ for (const layerToSort of unsortedLayers) {
81
+ const idx = selectedLayerIds.findIndex((l) => layerToSort.id === l);
82
+ if (idx > -1) {
83
+ sortedLayers[idx] = layerToSort;
84
+ }
85
+ }
86
+ return sortedLayers;
87
+ }, [layers, selectedLayerIds]);
88
+ const getLayerIndexById = (layerId) => {
89
+ const index = layers.findIndex((layer) => {
90
+ return layer.id === layerId;
91
+ });
92
+ return index;
93
+ };
94
+ const updateLayerById = (layerId, updatedLayer) => {
95
+ setLayers((_layers) => _layers.map((l) => (l.id === layerId ? { ...l, ...updatedLayer } : l)));
96
+ };
97
+ const toggleVectorLayer = async (layerIndex, styleIndex, focus) => {
98
+ const layer = layers[layerIndex];
99
+ // Add null check here
100
+ if (!layer)
101
+ return;
102
+ const layerData = await (0, naksha_2.getLayerStyle)(
103
+ // @ts-ignore
104
+ layer, styleIndex, mp.nakshaApiEndpoint, mp.geoserver);
105
+ updateLayerById(layer.id, { data: layerData });
106
+ focus &&
107
+ mapl?.fitBounds(layer.bbox, { padding: 40, duration: 1000 });
108
+ };
109
+ const updateLayerStyle = async (layerId, styleIndex) => {
110
+ const layerIndex = getLayerIndexById(layerId);
111
+ toggleVectorLayer(layerIndex, styleIndex, false);
112
+ };
113
+ const onMapHover = async (e) => {
114
+ if (!selectedLayerIds.length || !mapl)
115
+ return;
116
+ try {
117
+ const lastLayerId = selectedLayerIds[0];
118
+ const feats = mapl.queryRenderedFeatures(e.point, {
119
+ layers: [lastLayerId],
120
+ });
121
+ if (feats.length) {
122
+ const fId = feats[0]?.id || feats[0]?.properties?.[constants_1.PROPERTY_ID];
123
+ if (fId === hoverFeatures?.id)
124
+ return;
125
+ // @ts-ignore
126
+ const layer = layers[getLayerIndexById(lastLayerId)];
127
+ // Add null check here
128
+ if (!layer)
129
+ return;
130
+ const hoverProperties = layer?.data?.summaryColumn.map((sc) => [
131
+ layer.data?.propertyMap?.[sc] || sc,
132
+ feats[0].properties?.[sc],
133
+ ]);
134
+ setHoverFeatures({
135
+ id: fId,
136
+ title: layer.title,
137
+ data: hoverProperties,
138
+ });
139
+ }
140
+ else {
141
+ setHoverFeatures(undefined);
142
+ }
143
+ }
144
+ catch (e) { }
145
+ };
146
+ const toggleLayer = async ({ layerId, add, styleIndex = 0, focus = true, }) => {
147
+ if (!add) {
148
+ setSelectedLayerIds(selectedLayerIds.filter((_lyrId) => layerId !== _lyrId));
149
+ return;
150
+ }
151
+ // const layerIndex = getLayerIndexById(layerId);
152
+ // const sourceType = layers[layerIndex]?.source.type;
153
+ // await toggleVectorLayer(layerIndex, styleIndex, focus);
154
+ setSelectedLayerIds((prev) => {
155
+ const updated = [layerId, ...prev.filter((id) => id !== layerId)];
156
+ return updated;
157
+ });
158
+ };
159
+ const clearAllLayers = async () => setSelectedLayerIds([]);
160
+ const updateMP = (key, value) => {
161
+ setMP({ ...mp, [key]: value });
162
+ };
163
+ const toggleLayerPublishing = (layerId, layerStatus) => {
164
+ const isActive = layerStatus === constants_1.LAYER_STATUS.PENDING;
165
+ (0, naksha_1.axToggleLayerPublishing)(mp.nakshaEndpointToken,
166
+ // @ts-ignore
167
+ mp.nakshaApiEndpoint, layerId, isActive);
168
+ updateLayerById(layerId, {
169
+ layerStatus: isActive ? constants_1.LAYER_STATUS.ACTIVE : constants_1.LAYER_STATUS.PENDING,
170
+ });
171
+ };
172
+ const deleteLayer = async (layerId, message) => {
173
+ if (window.confirm(message || "Are you sure?")) {
174
+ // @ts-ignore
175
+ (0, naksha_1.axDeleteLayer)(mp.nakshaEndpointToken, mp.nakshaApiEndpoint, layerId);
176
+ setLayers(layers.filter((l) => l.id !== layerId));
177
+ }
178
+ };
179
+ const zoomToExtent = (layerId) => {
180
+ const layerIndex = getLayerIndexById(layerId);
181
+ const layer = layers[layerIndex];
182
+ // Add null check here
183
+ if (!layer)
184
+ return;
185
+ mapl?.fitBounds(layer.bbox, { padding: 40, duration: 1000 });
186
+ };
187
+ const getBBoxFromLngLat = () => {
188
+ return [
189
+ clickedLngLat.lng,
190
+ clickedLngLat.lat,
191
+ clickedLngLat.lng + 0.1,
192
+ clickedLngLat.lat + 0.1,
193
+ ];
194
+ };
195
+ const handleSelectStyle = (value) => {
196
+ setSelectionStyle(value);
197
+ if (value === constants_1.SELECTION_STYLE.TOP) {
198
+ featuresAtLatLng(value);
199
+ }
200
+ };
201
+ const featuresAtLatLng = (value) => {
202
+ if (!clickedLngLat)
203
+ return;
204
+ try {
205
+ const finalXY = mapl?.project([clickedLngLat.lng, clickedLngLat.lat]);
206
+ let queryFeat = mapl?.queryRenderedFeatures(finalXY, {
207
+ layers: selectionStyle === constants_1.SELECTION_STYLE.TOP
208
+ ? [selectedLayerIds[0]]
209
+ : selectedLayerIds,
210
+ });
211
+ // Add all the raster layer feature to queryFeat when all info must be shown
212
+ // in the info box
213
+ if ((value || selectionStyle) === constants_1.SELECTION_STYLE.ALL) {
214
+ const rasterLayerFeat = selectedLayers
215
+ .filter((item) => item.layerType == "RASTER")
216
+ .map((item) => ({
217
+ sourceLayer: item.id,
218
+ layerType: "raster",
219
+ bbox: getBBoxFromLngLat(),
220
+ }));
221
+ queryFeat = [...queryFeat, ...rasterLayerFeat];
222
+ }
223
+ setSelectedFeatures(
224
+ // if fist layer is raster and select all in not set
225
+ // send a raster based feature object
226
+ selectedLayers?.[0]?.layerType === "RASTER" &&
227
+ selectionStyle !== constants_1.SELECTION_STYLE.ALL
228
+ ? selectedLayerIds.length && queryFeat?.length
229
+ ? queryFeat
230
+ : [
231
+ {
232
+ sourceLayer: selectedLayerIds[0],
233
+ layerType: "raster",
234
+ bbox: getBBoxFromLngLat(),
235
+ },
236
+ ]
237
+ : queryFeat);
238
+ }
239
+ catch (e) {
240
+ console.error(e);
241
+ }
242
+ };
243
+ (0, react_1.useEffect)(() => {
244
+ if (mp.onSelectedLayersChange) {
245
+ mp.onSelectedLayersChange(selectedLayerIds);
246
+ }
247
+ }, [selectedLayerIds]);
248
+ (0, react_1.useEffect)(() => {
249
+ // we have no sureway to know that all layers are loaded
250
+ // this will wait for 300ms for layer to be loaded
251
+ // if it takes more then 300 selection will be discarded
252
+ setTimeout(featuresAtLatLng, 300);
253
+ }, [clickedLngLat, selectionStyle, selectedLayerIds]);
254
+ return ((0, jsx_runtime_1.jsx)(LayersContext.Provider, { value: {
255
+ mp,
256
+ updateMP,
257
+ layer: {
258
+ mapStyle,
259
+ featuresAtLatLng,
260
+ setMapStyle,
261
+ all: layers,
262
+ setAll: setLayers,
263
+ selectedIds: selectedLayerIds,
264
+ handleSelectStyle,
265
+ setSelectedIds: setSelectedLayerIds,
266
+ selectedLayers: selectedLayers,
267
+ clearAll: clearAllLayers,
268
+ toggle: toggleLayer,
269
+ updateStyle: updateLayerStyle,
270
+ selectedFeatures,
271
+ selectedFeaturesId,
272
+ setSelectedFeatures,
273
+ togglePublish: toggleLayerPublishing,
274
+ delete: deleteLayer,
275
+ selectionStyle: selectionStyle,
276
+ setSelectionStyle: setSelectionStyle,
277
+ zoomToExtent,
278
+ gridLegends,
279
+ setGridLegends,
280
+ },
281
+ query: {
282
+ term: queryTermDebounced,
283
+ setTerm: setQueryTerm,
284
+ clickedLngLat,
285
+ setClickedLngLat,
286
+ },
287
+ isInfoBarOpen,
288
+ setIsInfoBarOpen,
289
+ hover: {
290
+ onHover: onMapHover,
291
+ features: hoverFeatures,
292
+ },
293
+ }, children: children }));
294
+ };
295
+ exports.LayersProvider = LayersProvider;
296
+ function useLayers() {
297
+ return (0, react_1.useContext)(LayersContext);
298
+ }