@xyo-network/react-map 2.64.0 → 2.64.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/browser/AnimatedHeatMapSettings.js +56 -3
- package/dist/browser/AnimatedHeatMapSettings.js.map +1 -1
- package/dist/browser/Colors/index.js +0 -1
- package/dist/browser/Colors/index.js.map +1 -1
- package/dist/browser/Components/AnimatedHeatMap.js +623 -10
- package/dist/browser/Components/AnimatedHeatMap.js.map +1 -1
- package/dist/browser/Components/AnimatedHeatMapLoaded.js +864 -13
- package/dist/browser/Components/AnimatedHeatMapLoaded.js.map +1 -1
- package/dist/browser/Components/HeatMapSettings.js +56 -3
- package/dist/browser/Components/HeatMapSettings.js.map +1 -1
- package/dist/browser/Components/LayerAnimator.js +5 -4
- package/dist/browser/Components/LayerAnimator.js.map +1 -1
- package/dist/browser/Components/Legend.js +32 -7
- package/dist/browser/Components/Legend.js.map +1 -1
- package/dist/browser/Components/Legends/ColorGradient.js +3 -2
- package/dist/browser/Components/Legends/ColorGradient.js.map +1 -1
- package/dist/browser/Components/Legends/index.js +25 -1
- package/dist/browser/Components/Legends/index.js.map +1 -1
- package/dist/browser/Components/MapBox.js +66 -12
- package/dist/browser/Components/MapBox.js.map +1 -1
- package/dist/browser/Components/MapBoxHeat.js +151 -6
- package/dist/browser/Components/MapBoxHeat.js.map +1 -1
- package/dist/browser/Components/MapBoxPoints.js +207 -14
- package/dist/browser/Components/MapBoxPoints.js.map +1 -1
- package/dist/browser/Components/MapSettingsComponents/Setting.js +16 -3
- package/dist/browser/Components/MapSettingsComponents/Setting.js.map +1 -1
- package/dist/browser/Components/MapSettingsComponents/SettingsBox.js +38 -6
- package/dist/browser/Components/MapSettingsComponents/SettingsBox.js.map +1 -1
- package/dist/browser/Components/MapSettingsComponents/index.js +50 -2
- package/dist/browser/Components/MapSettingsComponents/index.js.map +1 -1
- package/dist/browser/Components/index.js +1084 -11
- package/dist/browser/Components/index.js.map +1 -1
- package/dist/browser/Contexts/HeatMapInitializer/Context.js +2 -1
- package/dist/browser/Contexts/HeatMapInitializer/Context.js.map +1 -1
- package/dist/browser/Contexts/HeatMapInitializer/Provider.js +235 -14
- package/dist/browser/Contexts/HeatMapInitializer/Provider.js.map +1 -1
- package/dist/browser/Contexts/HeatMapInitializer/index.js +294 -3
- package/dist/browser/Contexts/HeatMapInitializer/index.js.map +1 -1
- package/dist/browser/Contexts/HeatMapInitializer/useHeatMapInitializer.js +8 -2
- package/dist/browser/Contexts/HeatMapInitializer/useHeatMapInitializer.js.map +1 -1
- package/dist/browser/Contexts/MapBoxInstance/Context.js +2 -1
- package/dist/browser/Contexts/MapBoxInstance/Context.js.map +1 -1
- package/dist/browser/Contexts/MapBoxInstance/Provider.js +9 -3
- package/dist/browser/Contexts/MapBoxInstance/Provider.js.map +1 -1
- package/dist/browser/Contexts/MapBoxInstance/index.js +35 -3
- package/dist/browser/Contexts/MapBoxInstance/index.js.map +1 -1
- package/dist/browser/Contexts/MapBoxInstance/useMapBoxInstance.js +8 -2
- package/dist/browser/Contexts/MapBoxInstance/useMapBoxInstance.js.map +1 -1
- package/dist/browser/Contexts/MapSettings/Context.js +2 -1
- package/dist/browser/Contexts/MapSettings/Context.js.map +1 -1
- package/dist/browser/Contexts/MapSettings/Provider.js +117 -5
- package/dist/browser/Contexts/MapSettings/Provider.js.map +1 -1
- package/dist/browser/Contexts/MapSettings/index.js +148 -3
- package/dist/browser/Contexts/MapSettings/index.js.map +1 -1
- package/dist/browser/Contexts/MapSettings/useMapSettings.js +8 -2
- package/dist/browser/Contexts/MapSettings/useMapSettings.js.map +1 -1
- package/dist/browser/Contexts/MapboxAccessToken/Context.js +2 -1
- package/dist/browser/Contexts/MapboxAccessToken/Context.js.map +1 -1
- package/dist/browser/Contexts/MapboxAccessToken/Provider.js +9 -3
- package/dist/browser/Contexts/MapboxAccessToken/Provider.js.map +1 -1
- package/dist/browser/Contexts/MapboxAccessToken/index.js +22 -4
- package/dist/browser/Contexts/MapboxAccessToken/index.js.map +1 -1
- package/dist/browser/Contexts/MapboxAccessToken/use.js +8 -2
- package/dist/browser/Contexts/MapboxAccessToken/use.js.map +1 -1
- package/dist/browser/Contexts/index.js +459 -4
- package/dist/browser/Contexts/index.js.map +1 -1
- package/dist/browser/Layers/Builders/LocationHeatMapLayerBuilder.js +110 -6
- package/dist/browser/Layers/Builders/LocationHeatMapLayerBuilder.js.map +1 -1
- package/dist/browser/Layers/Builders/LocationHeatMapLayerBuilderAnimated.js +36 -4
- package/dist/browser/Layers/Builders/LocationHeatMapLayerBuilderAnimated.js.map +1 -1
- package/dist/browser/Layers/Builders/LocationPointsMapLayerBuilder.js +40 -4
- package/dist/browser/Layers/Builders/LocationPointsMapLayerBuilder.js.map +1 -1
- package/dist/browser/Layers/Builders/index.js +205 -3
- package/dist/browser/Layers/Builders/index.js.map +1 -1
- package/dist/browser/Layers/CircleLayer.js +3 -2
- package/dist/browser/Layers/CircleLayer.js.map +1 -1
- package/dist/browser/Layers/Configs/HeatMapFillLayerConfig.js +2 -1
- package/dist/browser/Layers/Configs/HeatMapFillLayerConfig.js.map +1 -1
- package/dist/browser/Layers/Configs/HeatMapLineLayerConfig.js +2 -1
- package/dist/browser/Layers/Configs/HeatMapLineLayerConfig.js.map +1 -1
- package/dist/browser/Layers/Configs/HeatMapSymbolLayerConfig.js +2 -1
- package/dist/browser/Layers/Configs/HeatMapSymbolLayerConfig.js.map +1 -1
- package/dist/browser/Layers/Configs/LocationPointLayerConfig.js +2 -1
- package/dist/browser/Layers/Configs/LocationPointLayerConfig.js.map +1 -1
- package/dist/browser/Layers/Configs/index.js +62 -4
- package/dist/browser/Layers/Configs/index.js.map +1 -1
- package/dist/browser/Layers/FillLayer.js +3 -2
- package/dist/browser/Layers/FillLayer.js.map +1 -1
- package/dist/browser/Layers/LineLayer.js +3 -2
- package/dist/browser/Layers/LineLayer.js.map +1 -1
- package/dist/browser/Layers/SymbolLayer.js +3 -2
- package/dist/browser/Layers/SymbolLayer.js.map +1 -1
- package/dist/browser/Layers/index.js +213 -7
- package/dist/browser/Layers/index.js.map +1 -1
- package/dist/browser/MapBoxClasses/MapBase.js +3 -2
- package/dist/browser/MapBoxClasses/MapBase.js.map +1 -1
- package/dist/browser/MapBoxClasses/MapHeat.js +41 -11
- package/dist/browser/MapBoxClasses/MapHeat.js.map +1 -1
- package/dist/browser/MapBoxClasses/MapPoints.js +33 -3
- package/dist/browser/MapBoxClasses/MapPoints.js.map +1 -1
- package/dist/browser/MapBoxClasses/MapSettings.js +6 -5
- package/dist/browser/MapBoxClasses/MapSettings.js.map +1 -1
- package/dist/browser/MapBoxClasses/index.js +288 -4
- package/dist/browser/MapBoxClasses/index.js.map +1 -1
- package/dist/browser/Settings/DefaultMapSettings.js +2 -1
- package/dist/browser/Settings/DefaultMapSettings.js.map +1 -1
- package/dist/browser/Settings/index.js +55 -2
- package/dist/browser/Settings/index.js.map +1 -1
- package/dist/browser/hooks/index.js +156 -5
- package/dist/browser/hooks/index.js.map +1 -1
- package/dist/browser/hooks/useDynamicMapResize.js +2 -1
- package/dist/browser/hooks/useDynamicMapResize.js.map +1 -1
- package/dist/browser/hooks/useDynamicPositioning.js +7 -6
- package/dist/browser/hooks/useDynamicPositioning.js.map +1 -1
- package/dist/browser/hooks/useFindHashes.js +4 -3
- package/dist/browser/hooks/useFindHashes.js.map +1 -1
- package/dist/browser/hooks/useHeatMapColors.js +2 -1
- package/dist/browser/hooks/useHeatMapColors.js.map +1 -1
- package/dist/browser/hooks/useQuadKeyPayloadsToFeatures.js +4 -3
- package/dist/browser/hooks/useQuadKeyPayloadsToFeatures.js.map +1 -1
- package/dist/browser/index.js +1298 -10
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/MapStyle.js +1 -0
- package/dist/browser/lib/MapStyle.js.map +1 -1
- package/dist/browser/lib/index.js +13 -2
- package/dist/browser/lib/index.js.map +1 -1
- package/dist/browser/types/index.js +0 -1
- package/dist/browser/types/index.js.map +1 -1
- package/dist/docs.json +296 -296
- package/package.json +14 -14
|
@@ -1,11 +1,156 @@
|
|
|
1
|
-
|
|
1
|
+
// src/Components/MapBoxHeat.tsx
|
|
2
2
|
import { FlexCol } from "@xylabs/react-flexbox";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
|
|
4
|
+
// src/Components/MapBox.tsx
|
|
5
|
+
import "mapbox-gl/dist/mapbox-gl.css";
|
|
6
|
+
import { Map } from "mapbox-gl";
|
|
7
|
+
import { useEffect as useEffect2, useRef, useState as useState2 } from "react";
|
|
8
|
+
|
|
9
|
+
// src/hooks/useDynamicMapResize.tsx
|
|
10
|
+
import { useEffect, useMemo, useState } from "react";
|
|
11
|
+
var useDynamicMapResize = (mapContainerRef, mapCanvasRef, mapInstance, active = true) => {
|
|
12
|
+
const [dependenciesReady, setDependenciesReady] = useState(false);
|
|
13
|
+
const resizer = useMemo(
|
|
14
|
+
() => new ResizeObserver(() => {
|
|
15
|
+
const width = mapContainerRef.current?.getBoundingClientRect().width;
|
|
16
|
+
if (width && mapCanvasRef.current) {
|
|
17
|
+
mapCanvasRef.current.style.width = `${width}px`;
|
|
18
|
+
setTimeout(() => mapInstance?.resize());
|
|
19
|
+
}
|
|
20
|
+
}),
|
|
21
|
+
[mapCanvasRef, mapContainerRef, mapInstance]
|
|
22
|
+
);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const dependenciesReady2 = !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current);
|
|
25
|
+
setDependenciesReady(dependenciesReady2);
|
|
26
|
+
}, [active, mapCanvasRef, mapContainerRef, mapInstance]);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (dependenciesReady) {
|
|
29
|
+
if (mapContainerRef.current) {
|
|
30
|
+
resizer.observe(mapContainerRef.current);
|
|
31
|
+
}
|
|
32
|
+
return () => {
|
|
33
|
+
resizer.disconnect();
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer]);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// src/Contexts/MapBoxInstance/Context.ts
|
|
40
|
+
import { createContext } from "react";
|
|
41
|
+
var MapBoxInstanceContext = createContext({});
|
|
42
|
+
|
|
43
|
+
// src/Contexts/MapBoxInstance/useMapBoxInstance.tsx
|
|
44
|
+
import { assertEx } from "@xylabs/assert";
|
|
45
|
+
import { useContext } from "react";
|
|
46
|
+
var useMapBoxInstance = () => {
|
|
47
|
+
const context = useContext(MapBoxInstanceContext);
|
|
48
|
+
assertEx("map" in context, "useMapBoxInstance must be used within a MapBoxInstanceContext");
|
|
49
|
+
return context;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// src/Contexts/MapSettings/Context.ts
|
|
53
|
+
import { createContext as createContext2 } from "react";
|
|
54
|
+
var MapSettingsContext = createContext2({});
|
|
55
|
+
|
|
56
|
+
// src/Contexts/MapSettings/useMapSettings.tsx
|
|
57
|
+
import { useContext as useContext2 } from "react";
|
|
58
|
+
var useMapSettings = () => {
|
|
59
|
+
const context = useContext2(MapSettingsContext);
|
|
60
|
+
return context;
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/Components/MapBox.tsx
|
|
64
|
+
import { jsx } from "react/jsx-runtime";
|
|
65
|
+
var MapBox = ({ accessToken, darkMode = false, options, zoom = 2, ...props }) => {
|
|
66
|
+
const [map, setMap] = useState2();
|
|
67
|
+
const mapContainerRef = useRef(null);
|
|
68
|
+
const mapCanvasRef = useRef(null);
|
|
69
|
+
const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance();
|
|
70
|
+
const { mapSettings } = useMapSettings();
|
|
71
|
+
const activeResize = mapSettings?.dynamicMapResize.value;
|
|
72
|
+
useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize);
|
|
73
|
+
useEffect2(() => {
|
|
74
|
+
if (mapSettings?.preferDark?.value === true) {
|
|
75
|
+
map?.setStyle(`mapbox://styles/${"mapbox/dark-v10" /* Dark */}`);
|
|
76
|
+
} else {
|
|
77
|
+
map?.setStyle(`mapbox://styles/${darkMode ? "mapbox/dark-v10" /* Dark */ : "mapbox/light-v10" /* Light */}`);
|
|
78
|
+
}
|
|
79
|
+
}, [map, darkMode, mapSettings]);
|
|
80
|
+
useEffect2(() => {
|
|
81
|
+
const map2 = new Map({
|
|
82
|
+
accessToken,
|
|
83
|
+
center: [0, 0],
|
|
84
|
+
container: mapContainerRef.current ?? "",
|
|
85
|
+
style: `mapbox://styles/${"mapbox/light-v10" /* Light */}`,
|
|
86
|
+
zoom,
|
|
87
|
+
...options
|
|
88
|
+
});
|
|
89
|
+
setMapBoxInstance?.(map2);
|
|
90
|
+
setMap(map2);
|
|
91
|
+
mapCanvasRef.current = document.querySelector(".mapboxgl-canvas");
|
|
92
|
+
console.log("Created Map");
|
|
93
|
+
return () => {
|
|
94
|
+
console.log("Removing Map");
|
|
95
|
+
map2.remove();
|
|
96
|
+
};
|
|
97
|
+
}, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken]);
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
"div",
|
|
100
|
+
{
|
|
101
|
+
ref: (el) => mapContainerRef.current = el,
|
|
102
|
+
style: {
|
|
103
|
+
bottom: 0,
|
|
104
|
+
left: 0,
|
|
105
|
+
position: "absolute",
|
|
106
|
+
right: 0,
|
|
107
|
+
top: 0,
|
|
108
|
+
...props
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// src/Components/MapSettingsComponents/Setting.tsx
|
|
115
|
+
import { FormControlLabel, Switch } from "@mui/material";
|
|
116
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
117
|
+
var MapSettingSwitch = ({ developerMode, field, ...props }) => {
|
|
118
|
+
const { mapSettings, setMapSettings } = useMapSettings();
|
|
119
|
+
const setting = mapSettings?.[field];
|
|
120
|
+
const onLocalChange = (event) => {
|
|
121
|
+
if (setting) {
|
|
122
|
+
setMapSettings?.((previous) => {
|
|
123
|
+
previous[setting.field].value = event.target.checked;
|
|
124
|
+
return { ...previous };
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
if (setting?.devMode && developerMode === false) {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
return setting?.hidden ? null : /* @__PURE__ */ jsx2(FormControlLabel, { label: setting?.label, control: /* @__PURE__ */ jsx2(Switch, { checked: setting?.value, onChange: onLocalChange, ...props }) });
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
// src/Components/MapSettingsComponents/SettingsBox.tsx
|
|
135
|
+
import { Paper, Stack } from "@mui/material";
|
|
136
|
+
import { FlexGrowRow, FlexRow } from "@xylabs/react-flexbox";
|
|
137
|
+
import { useAppSettings } from "@xyo-network/react-app-settings";
|
|
138
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
139
|
+
var MapSettingsBox = ({ developerMode, ...props }) => {
|
|
140
|
+
const { mapSettings } = useMapSettings();
|
|
141
|
+
const { developerMode: devModeFromContext } = useAppSettings();
|
|
142
|
+
const resolveDeveloperMode = developerMode ?? devModeFromContext;
|
|
143
|
+
return mapSettings && resolveDeveloperMode ? /* @__PURE__ */ jsx3(FlexGrowRow, { bottom: 36, left: 10, position: "absolute", ...props, children: /* @__PURE__ */ jsx3(FlexRow, { paddingX: 2, children: /* @__PURE__ */ jsx3(Paper, { children: /* @__PURE__ */ jsx3(Stack, { direction: "row", spacing: 1, marginX: 1, children: Object.keys(mapSettings).map((key, index) => {
|
|
144
|
+
return /* @__PURE__ */ jsx3(MapSettingSwitch, { field: mapSettings[key].field, developerMode }, index);
|
|
145
|
+
}) }) }) }) }) : null;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// src/Components/MapBoxHeat.tsx
|
|
149
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
150
|
+
var MapboxHeatFlexBox = ({ accessToken, children, mapBoxOptions, zoom, legend, developerMode, ...props }) => {
|
|
6
151
|
return /* @__PURE__ */ jsxs(FlexCol, { ...props, children: [
|
|
7
|
-
/* @__PURE__ */
|
|
8
|
-
/* @__PURE__ */
|
|
152
|
+
/* @__PURE__ */ jsx4(MapBox, { accessToken, options: mapBoxOptions, zoom }),
|
|
153
|
+
/* @__PURE__ */ jsx4(MapSettingsBox, { developerMode }),
|
|
9
154
|
legend,
|
|
10
155
|
children
|
|
11
156
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Components/MapBoxHeat.tsx"],"sourcesContent":["import { FlexCol } from '@xylabs/react-flexbox'\n\nimport { MapboxFlexBoxProps } from '../lib'\nimport { MapBox } from './MapBox'\nimport { MapSettingsBox } from './MapSettingsComponents'\n\nexport const MapboxHeatFlexBox: React.FC<MapboxFlexBoxProps> = ({ accessToken, children, mapBoxOptions, zoom, legend, developerMode, ...props }) => {\n return (\n <FlexCol {...props}>\n <MapBox accessToken={accessToken} options={mapBoxOptions} zoom={zoom} />\n <MapSettingsBox developerMode={developerMode} />\n {legend}\n {children}\n </FlexCol>\n )\n}\n"],"mappings":"AAQI,SACE,KADF;AARJ,SAAS,eAAe;AAGxB,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAExB,MAAM,oBAAkD,CAAC,EAAE,aAAa,UAAU,eAAe,MAAM,QAAQ,eAAe,GAAG,MAAM,MAAM;AAClJ,SACE,qBAAC,WAAS,GAAG,OACX;AAAA,wBAAC,UAAO,aAA0B,SAAS,eAAe,MAAY;AAAA,IACtE,oBAAC,kBAAe,eAA8B;AAAA,IAC7C;AAAA,IACA;AAAA,KACH;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/Components/MapBoxHeat.tsx","../../../src/Components/MapBox.tsx","../../../src/hooks/useDynamicMapResize.tsx","../../../src/Contexts/MapBoxInstance/Context.ts","../../../src/Contexts/MapBoxInstance/useMapBoxInstance.tsx","../../../src/Contexts/MapSettings/Context.ts","../../../src/Contexts/MapSettings/useMapSettings.tsx","../../../src/Components/MapSettingsComponents/Setting.tsx","../../../src/Components/MapSettingsComponents/SettingsBox.tsx"],"sourcesContent":["import { FlexCol } from '@xylabs/react-flexbox'\n\nimport { MapboxFlexBoxProps } from '../lib'\nimport { MapBox } from './MapBox'\nimport { MapSettingsBox } from './MapSettingsComponents'\n\nexport const MapboxHeatFlexBox: React.FC<MapboxFlexBoxProps> = ({ accessToken, children, mapBoxOptions, zoom, legend, developerMode, ...props }) => {\n return (\n <FlexCol {...props}>\n <MapBox accessToken={accessToken} options={mapBoxOptions} zoom={zoom} />\n <MapSettingsBox developerMode={developerMode} />\n {legend}\n {children}\n </FlexCol>\n )\n}\n","// eslint-disable-next-line import/no-internal-modules\nimport 'mapbox-gl/dist/mapbox-gl.css'\n\nimport { Map, MapboxOptions } from 'mapbox-gl'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts'\nimport { useDynamicMapResize } from '../hooks'\nimport { MapStyle } from '../lib'\n\nexport interface MapBoxProps {\n accessToken: string\n darkMode?: boolean\n options?: Partial<MapboxOptions>\n zoom?: number\n}\n\nexport const MapBox: React.FC<MapBoxProps> = ({ accessToken, darkMode = false, options, zoom = 2, ...props }) => {\n const [map, setMap] = useState<Map>()\n const mapContainerRef = useRef<HTMLDivElement | null>(null)\n const mapCanvasRef = useRef<HTMLCanvasElement | null>(null)\n const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance()\n const { mapSettings } = useMapSettings()\n\n const activeResize = mapSettings?.dynamicMapResize.value\n useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize)\n\n useEffect(() => {\n if (mapSettings?.preferDark?.value === true) {\n map?.setStyle(`mapbox://styles/${MapStyle.Dark}`)\n } else {\n map?.setStyle(`mapbox://styles/${darkMode ? MapStyle.Dark : MapStyle.Light}`)\n }\n }, [map, darkMode, mapSettings])\n\n useEffect(() => {\n const map = new Map({\n accessToken,\n center: [0, 0],\n container: mapContainerRef.current ?? '',\n style: `mapbox://styles/${MapStyle.Light}`,\n zoom,\n ...options,\n })\n\n // Allow external components to control the map\n setMapBoxInstance?.(map)\n setMap(map)\n\n // save the map canvas ref to help with resizing\n mapCanvasRef.current = document.querySelector('.mapboxgl-canvas')\n\n console.log('Created Map')\n\n return () => {\n console.log('Removing Map')\n map.remove()\n }\n }, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken])\n\n return (\n <div\n ref={(el) => (mapContainerRef.current = el)}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n ...props,\n }}\n />\n )\n}\n","import { Map } from 'mapbox-gl'\nimport { MutableRefObject, useEffect, useMemo, useState } from 'react'\n\n/**\n * Inspired by - https://bl.ocks.org/danswick/fc56f37c10d40be62e4feac5984250d2\n */\nexport const useDynamicMapResize = (\n mapContainerRef: MutableRefObject<HTMLDivElement | null>,\n mapCanvasRef: MutableRefObject<HTMLCanvasElement | null>,\n mapInstance?: Map,\n active = true,\n) => {\n const [dependenciesReady, setDependenciesReady] = useState(false)\n\n const resizer = useMemo(\n () =>\n new ResizeObserver(() => {\n const width = mapContainerRef.current?.getBoundingClientRect().width\n if (width && mapCanvasRef.current) {\n mapCanvasRef.current.style.width = `${width}px`\n // setTimeout allows for the smoothest animation (vs requestAnimationFrame, debouce, etc)\n // likely because it lets mapbox resize once when the event loop is ready?\n setTimeout(() => mapInstance?.resize())\n }\n }),\n [mapCanvasRef, mapContainerRef, mapInstance],\n )\n\n useEffect(() => {\n const dependenciesReady = !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current)\n setDependenciesReady(dependenciesReady)\n }, [active, mapCanvasRef, mapContainerRef, mapInstance])\n\n useEffect(() => {\n if (dependenciesReady) {\n if (mapContainerRef.current) {\n resizer.observe(mapContainerRef.current)\n }\n\n return () => {\n resizer.disconnect()\n }\n }\n }, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer])\n}\n","import { createContext } from 'react'\n\nimport { MapBoxInstanceState } from './State'\n\nconst MapBoxInstanceContext = createContext<MapBoxInstanceState>({})\n\nexport { MapBoxInstanceContext }\n","import { assertEx } from '@xylabs/assert'\nimport { useContext } from 'react'\n\nimport { MapBoxInstanceContext } from './Context'\n\nconst useMapBoxInstance = () => {\n const context = useContext(MapBoxInstanceContext)\n assertEx('map' in context, 'useMapBoxInstance must be used within a MapBoxInstanceContext')\n\n return context\n}\n\nexport { useMapBoxInstance }\n","import { createContext } from 'react'\n\nimport { MapSettingsState } from './State'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { useContext } from 'react'\n\nimport { MapSettingsContext } from './Context'\n\nconst useMapSettings = () => {\n const context = useContext(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n","import { FormControlLabel, Switch, SwitchProps } from '@mui/material'\n\nimport { useMapSettings } from '../../Contexts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({ developerMode, field, ...props }) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden ? null : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n","import { Paper, Stack } from '@mui/material'\nimport { FlexBoxProps, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { useAppSettings } from '@xyo-network/react-app-settings'\n\nimport { useMapSettings } from '../../Contexts'\nimport { MapSettingSwitch } from './Setting'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n ) : null\n}\n"],"mappings":"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","names":["useEffect","useState","dependenciesReady","createContext","useContext","useContext","useState","useEffect","map","jsx","jsx","jsx"]}
|
|
@@ -1,12 +1,205 @@
|
|
|
1
|
-
|
|
1
|
+
// src/Components/MapBoxPoints.tsx
|
|
2
2
|
import { Alert } from "@mui/material";
|
|
3
3
|
import { FlexCol } from "@xylabs/react-flexbox";
|
|
4
|
-
import { useCallback, useEffect, useState } from "react";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const
|
|
4
|
+
import { useCallback, useEffect as useEffect3, useState as useState3 } from "react";
|
|
5
|
+
|
|
6
|
+
// src/hooks/useDynamicMapResize.tsx
|
|
7
|
+
import { useEffect, useMemo, useState } from "react";
|
|
8
|
+
var useDynamicMapResize = (mapContainerRef, mapCanvasRef, mapInstance, active = true) => {
|
|
9
|
+
const [dependenciesReady, setDependenciesReady] = useState(false);
|
|
10
|
+
const resizer = useMemo(
|
|
11
|
+
() => new ResizeObserver(() => {
|
|
12
|
+
const width = mapContainerRef.current?.getBoundingClientRect().width;
|
|
13
|
+
if (width && mapCanvasRef.current) {
|
|
14
|
+
mapCanvasRef.current.style.width = `${width}px`;
|
|
15
|
+
setTimeout(() => mapInstance?.resize());
|
|
16
|
+
}
|
|
17
|
+
}),
|
|
18
|
+
[mapCanvasRef, mapContainerRef, mapInstance]
|
|
19
|
+
);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const dependenciesReady2 = !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current);
|
|
22
|
+
setDependenciesReady(dependenciesReady2);
|
|
23
|
+
}, [active, mapCanvasRef, mapContainerRef, mapInstance]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (dependenciesReady) {
|
|
26
|
+
if (mapContainerRef.current) {
|
|
27
|
+
resizer.observe(mapContainerRef.current);
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
resizer.disconnect();
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer]);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// src/MapBoxClasses/MapBase.ts
|
|
37
|
+
import { assertEx } from "@xylabs/assert";
|
|
38
|
+
import { GeoJson } from "@xyo-network/sdk-geo";
|
|
39
|
+
var MapBase = class {
|
|
40
|
+
_config;
|
|
41
|
+
constructor(config) {
|
|
42
|
+
this._config = { requestLocation: true, zoom: 2, ...config };
|
|
43
|
+
}
|
|
44
|
+
get isMapReady() {
|
|
45
|
+
return !!this._config.map;
|
|
46
|
+
}
|
|
47
|
+
initializeMapSource(layer) {
|
|
48
|
+
const getSource = () => {
|
|
49
|
+
const featuresCollection = GeoJson.featureCollection(this._config.features);
|
|
50
|
+
return GeoJson.featuresSource(featuresCollection);
|
|
51
|
+
};
|
|
52
|
+
const existingSource = this._config.map.getSource(layer.source);
|
|
53
|
+
const source = getSource();
|
|
54
|
+
if (existingSource) {
|
|
55
|
+
existingSource.setData(assertEx(source.data));
|
|
56
|
+
} else {
|
|
57
|
+
this._config.map.addSource(layer.source, source);
|
|
58
|
+
}
|
|
59
|
+
layer.update(this._config.map, true);
|
|
60
|
+
return this;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// src/MapBoxClasses/MapPoints.ts
|
|
65
|
+
import { LngLatBounds } from "mapbox-gl";
|
|
66
|
+
var MapPoints = class extends MapBase {
|
|
67
|
+
config;
|
|
68
|
+
constructor(config) {
|
|
69
|
+
super(config);
|
|
70
|
+
this.config = config;
|
|
71
|
+
}
|
|
72
|
+
initialMapPositioning(options, initialBounds) {
|
|
73
|
+
let bounds;
|
|
74
|
+
if (initialBounds) {
|
|
75
|
+
bounds = initialBounds;
|
|
76
|
+
} else {
|
|
77
|
+
bounds = new LngLatBounds();
|
|
78
|
+
this.config.features.forEach((feature) => {
|
|
79
|
+
bounds.extend(feature.geometry.coordinates);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
this.config.map.setCenter(bounds.getCenter());
|
|
83
|
+
this.config.map.fitBounds(bounds, options);
|
|
84
|
+
return this.config.map;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
// src/Contexts/MapBoxInstance/Context.ts
|
|
89
|
+
import { createContext } from "react";
|
|
90
|
+
var MapBoxInstanceContext = createContext({});
|
|
91
|
+
|
|
92
|
+
// src/Contexts/MapBoxInstance/useMapBoxInstance.tsx
|
|
93
|
+
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
94
|
+
import { useContext } from "react";
|
|
95
|
+
var useMapBoxInstance = () => {
|
|
96
|
+
const context = useContext(MapBoxInstanceContext);
|
|
97
|
+
assertEx2("map" in context, "useMapBoxInstance must be used within a MapBoxInstanceContext");
|
|
98
|
+
return context;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// src/Contexts/MapSettings/Context.ts
|
|
102
|
+
import { createContext as createContext2 } from "react";
|
|
103
|
+
var MapSettingsContext = createContext2({});
|
|
104
|
+
|
|
105
|
+
// src/Contexts/MapSettings/useMapSettings.tsx
|
|
106
|
+
import { useContext as useContext2 } from "react";
|
|
107
|
+
var useMapSettings = () => {
|
|
108
|
+
const context = useContext2(MapSettingsContext);
|
|
109
|
+
return context;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// src/Components/MapBox.tsx
|
|
113
|
+
import "mapbox-gl/dist/mapbox-gl.css";
|
|
114
|
+
import { Map } from "mapbox-gl";
|
|
115
|
+
import { useEffect as useEffect2, useRef, useState as useState2 } from "react";
|
|
116
|
+
import { jsx } from "react/jsx-runtime";
|
|
117
|
+
var MapBox = ({ accessToken, darkMode = false, options, zoom = 2, ...props }) => {
|
|
118
|
+
const [map, setMap] = useState2();
|
|
119
|
+
const mapContainerRef = useRef(null);
|
|
120
|
+
const mapCanvasRef = useRef(null);
|
|
121
|
+
const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance();
|
|
122
|
+
const { mapSettings } = useMapSettings();
|
|
123
|
+
const activeResize = mapSettings?.dynamicMapResize.value;
|
|
124
|
+
useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize);
|
|
125
|
+
useEffect2(() => {
|
|
126
|
+
if (mapSettings?.preferDark?.value === true) {
|
|
127
|
+
map?.setStyle(`mapbox://styles/${"mapbox/dark-v10" /* Dark */}`);
|
|
128
|
+
} else {
|
|
129
|
+
map?.setStyle(`mapbox://styles/${darkMode ? "mapbox/dark-v10" /* Dark */ : "mapbox/light-v10" /* Light */}`);
|
|
130
|
+
}
|
|
131
|
+
}, [map, darkMode, mapSettings]);
|
|
132
|
+
useEffect2(() => {
|
|
133
|
+
const map2 = new Map({
|
|
134
|
+
accessToken,
|
|
135
|
+
center: [0, 0],
|
|
136
|
+
container: mapContainerRef.current ?? "",
|
|
137
|
+
style: `mapbox://styles/${"mapbox/light-v10" /* Light */}`,
|
|
138
|
+
zoom,
|
|
139
|
+
...options
|
|
140
|
+
});
|
|
141
|
+
setMapBoxInstance?.(map2);
|
|
142
|
+
setMap(map2);
|
|
143
|
+
mapCanvasRef.current = document.querySelector(".mapboxgl-canvas");
|
|
144
|
+
console.log("Created Map");
|
|
145
|
+
return () => {
|
|
146
|
+
console.log("Removing Map");
|
|
147
|
+
map2.remove();
|
|
148
|
+
};
|
|
149
|
+
}, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken]);
|
|
150
|
+
return /* @__PURE__ */ jsx(
|
|
151
|
+
"div",
|
|
152
|
+
{
|
|
153
|
+
ref: (el) => mapContainerRef.current = el,
|
|
154
|
+
style: {
|
|
155
|
+
bottom: 0,
|
|
156
|
+
left: 0,
|
|
157
|
+
position: "absolute",
|
|
158
|
+
right: 0,
|
|
159
|
+
top: 0,
|
|
160
|
+
...props
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
);
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// src/Components/MapSettingsComponents/Setting.tsx
|
|
167
|
+
import { FormControlLabel, Switch } from "@mui/material";
|
|
168
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
169
|
+
var MapSettingSwitch = ({ developerMode, field, ...props }) => {
|
|
170
|
+
const { mapSettings, setMapSettings } = useMapSettings();
|
|
171
|
+
const setting = mapSettings?.[field];
|
|
172
|
+
const onLocalChange = (event) => {
|
|
173
|
+
if (setting) {
|
|
174
|
+
setMapSettings?.((previous) => {
|
|
175
|
+
previous[setting.field].value = event.target.checked;
|
|
176
|
+
return { ...previous };
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
if (setting?.devMode && developerMode === false) {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
return setting?.hidden ? null : /* @__PURE__ */ jsx2(FormControlLabel, { label: setting?.label, control: /* @__PURE__ */ jsx2(Switch, { checked: setting?.value, onChange: onLocalChange, ...props }) });
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
// src/Components/MapSettingsComponents/SettingsBox.tsx
|
|
187
|
+
import { Paper, Stack } from "@mui/material";
|
|
188
|
+
import { FlexGrowRow, FlexRow } from "@xylabs/react-flexbox";
|
|
189
|
+
import { useAppSettings } from "@xyo-network/react-app-settings";
|
|
190
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
191
|
+
var MapSettingsBox = ({ developerMode, ...props }) => {
|
|
192
|
+
const { mapSettings } = useMapSettings();
|
|
193
|
+
const { developerMode: devModeFromContext } = useAppSettings();
|
|
194
|
+
const resolveDeveloperMode = developerMode ?? devModeFromContext;
|
|
195
|
+
return mapSettings && resolveDeveloperMode ? /* @__PURE__ */ jsx3(FlexGrowRow, { bottom: 36, left: 10, position: "absolute", ...props, children: /* @__PURE__ */ jsx3(FlexRow, { paddingX: 2, children: /* @__PURE__ */ jsx3(Paper, { children: /* @__PURE__ */ jsx3(Stack, { direction: "row", spacing: 1, marginX: 1, children: Object.keys(mapSettings).map((key, index) => {
|
|
196
|
+
return /* @__PURE__ */ jsx3(MapSettingSwitch, { field: mapSettings[key].field, developerMode }, index);
|
|
197
|
+
}) }) }) }) }) : null;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
// src/Components/MapBoxPoints.tsx
|
|
201
|
+
import { Fragment, jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
202
|
+
var MapboxPointsFlexBox = ({
|
|
10
203
|
accessToken,
|
|
11
204
|
features,
|
|
12
205
|
fitToPointsPadding = 20,
|
|
@@ -14,7 +207,7 @@ const MapboxPointsFlexBox = ({
|
|
|
14
207
|
zoom,
|
|
15
208
|
...props
|
|
16
209
|
}) => {
|
|
17
|
-
const [mapPoints, setMapPoints] =
|
|
210
|
+
const [mapPoints, setMapPoints] = useState3();
|
|
18
211
|
const { mapSettings } = useMapSettings();
|
|
19
212
|
const { map, mapInitialized } = useMapBoxInstance();
|
|
20
213
|
const customFitToBoundsOptions = (zoom2) => {
|
|
@@ -44,21 +237,21 @@ const MapboxPointsFlexBox = ({
|
|
|
44
237
|
mapPoints?.initialMapPositioning({ padding: fitToPointsPadding, ...customFitToBoundsOptions(zoom) });
|
|
45
238
|
updateFeatures();
|
|
46
239
|
}, [mapPoints, fitToPointsPadding, updateFeatures, zoom]);
|
|
47
|
-
|
|
240
|
+
useEffect3(() => {
|
|
48
241
|
if (map && features?.length) {
|
|
49
242
|
setMapPoints(new MapPoints({ features, map, zoom }));
|
|
50
243
|
}
|
|
51
244
|
}, [map, features, zoom]);
|
|
52
|
-
|
|
245
|
+
useEffect3(() => {
|
|
53
246
|
if (mapInitialized) {
|
|
54
247
|
updateMapSetup();
|
|
55
248
|
reInitializeMap();
|
|
56
249
|
}
|
|
57
250
|
}, [mapInitialized, reInitializeMap, updateMapSetup]);
|
|
58
|
-
return /* @__PURE__ */
|
|
59
|
-
/* @__PURE__ */
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
-
] }) : /* @__PURE__ */
|
|
251
|
+
return /* @__PURE__ */ jsx4(FlexCol, { alignItems: "stretch", id: "xyo-mapbox-wrap", ...props, children: features ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
252
|
+
/* @__PURE__ */ jsx4(MapBox, { accessToken, zoom }),
|
|
253
|
+
/* @__PURE__ */ jsx4(MapSettingsBox, {})
|
|
254
|
+
] }) : /* @__PURE__ */ jsx4(Alert, { severity: "error", children: "No data to show" }) });
|
|
62
255
|
};
|
|
63
256
|
export {
|
|
64
257
|
MapboxPointsFlexBox
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/Components/MapBoxPoints.tsx"],"sourcesContent":["import { Alert } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { Feature, Point } from 'geojson'\nimport { FitBoundsOptions } from 'mapbox-gl'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts'\nimport { MapboxFlexBoxProps } from '../lib'\nimport { MapPoints } from '../MapBoxClasses'\nimport { MapBox } from './MapBox'\nimport { MapSettingsBox } from './MapSettingsComponents'\n\nexport interface MapboxPointsFlexBoxProps extends MapboxFlexBoxProps {\n accessToken: string\n features?: Feature<Point>[]\n}\n\nexport const MapboxPointsFlexBox: React.FC<MapboxPointsFlexBoxProps> = ({\n accessToken,\n features,\n fitToPointsPadding = 20,\n layers,\n zoom,\n ...props\n}) => {\n const [mapPoints, setMapPoints] = useState<MapPoints>()\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n /**\n * Needed because of a bug in mapbox taking undefined values for the config options of fitToBounds\n * see - https://github.com/mapbox/mapbox-gl-js/issues/10013\n */\n const customFitToBoundsOptions = (zoom?: number): FitBoundsOptions => {\n if (zoom !== undefined) {\n return {\n maxZoom: zoom,\n }\n }\n return {}\n }\n\n const updateFeatures = useCallback(() => {\n if (mapPoints?.isMapReady && features?.length) {\n layers?.forEach((layer) => {\n mapPoints.initializeMapSource(layer)\n })\n }\n }, [mapPoints, features, layers])\n\n const updateMapSetup = useCallback(() => {\n const { fitToPoints } = mapSettings || {}\n\n if (mapPoints && map) {\n if (fitToPoints?.value === true) {\n mapPoints.initialMapPositioning({ padding: fitToPointsPadding, ...customFitToBoundsOptions(zoom) })\n }\n }\n }, [mapSettings, mapPoints, map, fitToPointsPadding, zoom])\n\n const reInitializeMap = useCallback(() => {\n mapPoints?.initialMapPositioning({ padding: fitToPointsPadding, ...customFitToBoundsOptions(zoom) })\n updateFeatures()\n }, [mapPoints, fitToPointsPadding, updateFeatures, zoom])\n\n useEffect(() => {\n if (map && features?.length) {\n setMapPoints(new MapPoints({ features, map, zoom }))\n }\n }, [map, features, zoom])\n\n useEffect(() => {\n if (mapInitialized) {\n updateMapSetup()\n reInitializeMap()\n }\n }, [mapInitialized, reInitializeMap, updateMapSetup])\n\n return (\n <FlexCol alignItems=\"stretch\" id=\"xyo-mapbox-wrap\" {...props}>\n {features ? (\n <>\n <MapBox accessToken={accessToken} zoom={zoom} />\n <MapSettingsBox />\n </>\n ) : (\n <Alert severity=\"error\">No data to show</Alert>\n )}\n </FlexCol>\n )\n}\n"],"mappings":"AAiFQ,mBACE,KADF;AAjFR,SAAS,aAAa;AACtB,SAAS,eAAe;AAGxB,SAAS,aAAa,WAAW,gBAAgB;AAEjD,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,iBAAiB;AAC1B,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAOxB,MAAM,sBAA0D,CAAC;AAAA,EACtE;AAAA,EACA;AAAA,EACA,qBAAqB;AAAA,EACrB;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAI,SAAoB;AACtD,QAAM,EAAE,YAAY,IAAI,eAAe;AACvC,QAAM,EAAE,KAAK,eAAe,IAAI,kBAAkB;AAMlD,QAAM,2BAA2B,CAACA,UAAoC;AACpE,QAAIA,UAAS,QAAW;AACtB,aAAO;AAAA,QACL,SAASA;AAAA,MACX;AAAA,IACF;AACA,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,iBAAiB,YAAY,MAAM;AACvC,QAAI,WAAW,cAAc,UAAU,QAAQ;AAC7C,cAAQ,QAAQ,CAAC,UAAU;AACzB,kBAAU,oBAAoB,KAAK;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,WAAW,UAAU,MAAM,CAAC;AAEhC,QAAM,iBAAiB,YAAY,MAAM;AACvC,UAAM,EAAE,YAAY,IAAI,eAAe,CAAC;AAExC,QAAI,aAAa,KAAK;AACpB,UAAI,aAAa,UAAU,MAAM;AAC/B,kBAAU,sBAAsB,EAAE,SAAS,oBAAoB,GAAG,yBAAyB,IAAI,EAAE,CAAC;AAAA,MACpG;AAAA,IACF;AAAA,EACF,GAAG,CAAC,aAAa,WAAW,KAAK,oBAAoB,IAAI,CAAC;AAE1D,QAAM,kBAAkB,YAAY,MAAM;AACxC,eAAW,sBAAsB,EAAE,SAAS,oBAAoB,GAAG,yBAAyB,IAAI,EAAE,CAAC;AACnG,mBAAe;AAAA,EACjB,GAAG,CAAC,WAAW,oBAAoB,gBAAgB,IAAI,CAAC;AAExD,YAAU,MAAM;AACd,QAAI,OAAO,UAAU,QAAQ;AAC3B,mBAAa,IAAI,UAAU,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC;AAExB,YAAU,MAAM;AACd,QAAI,gBAAgB;AAClB,qBAAe;AACf,sBAAgB;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,gBAAgB,iBAAiB,cAAc,CAAC;AAEpD,SACE,oBAAC,WAAQ,YAAW,WAAU,IAAG,mBAAmB,GAAG,OACpD,qBACC,iCACE;AAAA,wBAAC,UAAO,aAA0B,MAAY;AAAA,IAC9C,oBAAC,kBAAe;AAAA,KAClB,IAEA,oBAAC,SAAM,UAAS,SAAQ,6BAAe,GAE3C;AAEJ;","names":["zoom"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/Components/MapBoxPoints.tsx","../../../src/hooks/useDynamicMapResize.tsx","../../../src/MapBoxClasses/MapBase.ts","../../../src/MapBoxClasses/MapPoints.ts","../../../src/Contexts/MapBoxInstance/Context.ts","../../../src/Contexts/MapBoxInstance/useMapBoxInstance.tsx","../../../src/Contexts/MapSettings/Context.ts","../../../src/Contexts/MapSettings/useMapSettings.tsx","../../../src/Components/MapBox.tsx","../../../src/Components/MapSettingsComponents/Setting.tsx","../../../src/Components/MapSettingsComponents/SettingsBox.tsx"],"sourcesContent":["import { Alert } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { Feature, Point } from 'geojson'\nimport { FitBoundsOptions } from 'mapbox-gl'\nimport { useCallback, useEffect, useState } from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts'\nimport { MapboxFlexBoxProps } from '../lib'\nimport { MapPoints } from '../MapBoxClasses'\nimport { MapBox } from './MapBox'\nimport { MapSettingsBox } from './MapSettingsComponents'\n\nexport interface MapboxPointsFlexBoxProps extends MapboxFlexBoxProps {\n accessToken: string\n features?: Feature<Point>[]\n}\n\nexport const MapboxPointsFlexBox: React.FC<MapboxPointsFlexBoxProps> = ({\n accessToken,\n features,\n fitToPointsPadding = 20,\n layers,\n zoom,\n ...props\n}) => {\n const [mapPoints, setMapPoints] = useState<MapPoints>()\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n /**\n * Needed because of a bug in mapbox taking undefined values for the config options of fitToBounds\n * see - https://github.com/mapbox/mapbox-gl-js/issues/10013\n */\n const customFitToBoundsOptions = (zoom?: number): FitBoundsOptions => {\n if (zoom !== undefined) {\n return {\n maxZoom: zoom,\n }\n }\n return {}\n }\n\n const updateFeatures = useCallback(() => {\n if (mapPoints?.isMapReady && features?.length) {\n layers?.forEach((layer) => {\n mapPoints.initializeMapSource(layer)\n })\n }\n }, [mapPoints, features, layers])\n\n const updateMapSetup = useCallback(() => {\n const { fitToPoints } = mapSettings || {}\n\n if (mapPoints && map) {\n if (fitToPoints?.value === true) {\n mapPoints.initialMapPositioning({ padding: fitToPointsPadding, ...customFitToBoundsOptions(zoom) })\n }\n }\n }, [mapSettings, mapPoints, map, fitToPointsPadding, zoom])\n\n const reInitializeMap = useCallback(() => {\n mapPoints?.initialMapPositioning({ padding: fitToPointsPadding, ...customFitToBoundsOptions(zoom) })\n updateFeatures()\n }, [mapPoints, fitToPointsPadding, updateFeatures, zoom])\n\n useEffect(() => {\n if (map && features?.length) {\n setMapPoints(new MapPoints({ features, map, zoom }))\n }\n }, [map, features, zoom])\n\n useEffect(() => {\n if (mapInitialized) {\n updateMapSetup()\n reInitializeMap()\n }\n }, [mapInitialized, reInitializeMap, updateMapSetup])\n\n return (\n <FlexCol alignItems=\"stretch\" id=\"xyo-mapbox-wrap\" {...props}>\n {features ? (\n <>\n <MapBox accessToken={accessToken} zoom={zoom} />\n <MapSettingsBox />\n </>\n ) : (\n <Alert severity=\"error\">No data to show</Alert>\n )}\n </FlexCol>\n )\n}\n","import { Map } from 'mapbox-gl'\nimport { MutableRefObject, useEffect, useMemo, useState } from 'react'\n\n/**\n * Inspired by - https://bl.ocks.org/danswick/fc56f37c10d40be62e4feac5984250d2\n */\nexport const useDynamicMapResize = (\n mapContainerRef: MutableRefObject<HTMLDivElement | null>,\n mapCanvasRef: MutableRefObject<HTMLCanvasElement | null>,\n mapInstance?: Map,\n active = true,\n) => {\n const [dependenciesReady, setDependenciesReady] = useState(false)\n\n const resizer = useMemo(\n () =>\n new ResizeObserver(() => {\n const width = mapContainerRef.current?.getBoundingClientRect().width\n if (width && mapCanvasRef.current) {\n mapCanvasRef.current.style.width = `${width}px`\n // setTimeout allows for the smoothest animation (vs requestAnimationFrame, debouce, etc)\n // likely because it lets mapbox resize once when the event loop is ready?\n setTimeout(() => mapInstance?.resize())\n }\n }),\n [mapCanvasRef, mapContainerRef, mapInstance],\n )\n\n useEffect(() => {\n const dependenciesReady = !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current)\n setDependenciesReady(dependenciesReady)\n }, [active, mapCanvasRef, mapContainerRef, mapInstance])\n\n useEffect(() => {\n if (dependenciesReady) {\n if (mapContainerRef.current) {\n resizer.observe(mapContainerRef.current)\n }\n\n return () => {\n resizer.disconnect()\n }\n }\n }, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer])\n}\n","import { assertEx } from '@xylabs/assert'\nimport { GeoJson } from '@xyo-network/sdk-geo'\nimport { Feature, Geometry } from 'geojson'\n// eslint-disable-next-line no-restricted-imports\nimport { GeoJSONSource, Map } from 'mapbox-gl'\n\nimport { MapLayer } from '../Layers'\n\nexport interface MapBaseConfig<T extends Geometry> {\n features: Feature<T>[]\n map: Map\n requestLocation?: boolean\n zoom?: number\n}\n\nexport abstract class MapBase<T extends Geometry> {\n private _config: MapBaseConfig<T>\n\n constructor(config: MapBaseConfig<T>) {\n this._config = { requestLocation: true, zoom: 2, ...config }\n }\n\n get isMapReady() {\n return !!this._config.map\n }\n\n initializeMapSource(layer: MapLayer) {\n const getSource = () => {\n const featuresCollection = GeoJson.featureCollection(this._config.features)\n return GeoJson.featuresSource(featuresCollection)\n }\n\n const existingSource = this._config.map.getSource(layer.source as string) as GeoJSONSource\n const source = getSource()\n if (existingSource) {\n existingSource.setData(assertEx(source.data as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>))\n } else {\n this._config.map.addSource(layer.source as string, source)\n }\n layer.update(this._config.map, true)\n\n return this\n }\n}\n","import { Feature, Point } from 'geojson'\n// eslint-disable-next-line no-restricted-imports\nimport { FitBoundsOptions, LngLatBounds } from 'mapbox-gl'\n\nimport { MapBase, MapBaseConfig } from './MapBase'\n\nexport interface MapPointsConfig extends MapBaseConfig<Point> {\n features: Feature<Point>[]\n}\n\nexport class MapPoints extends MapBase<Point> {\n private config: MapPointsConfig\n\n constructor(config: MapPointsConfig) {\n super(config)\n this.config = config\n }\n\n initialMapPositioning(options: FitBoundsOptions, initialBounds?: LngLatBounds) {\n let bounds: LngLatBounds\n\n if (initialBounds) {\n bounds = initialBounds\n } else {\n bounds = new LngLatBounds()\n\n this.config.features.forEach((feature: Feature<Point>) => {\n bounds.extend(feature.geometry.coordinates as [number, number])\n })\n }\n\n this.config.map.setCenter(bounds.getCenter())\n this.config.map.fitBounds(bounds, options)\n\n return this.config.map\n }\n}\n","import { createContext } from 'react'\n\nimport { MapBoxInstanceState } from './State'\n\nconst MapBoxInstanceContext = createContext<MapBoxInstanceState>({})\n\nexport { MapBoxInstanceContext }\n","import { assertEx } from '@xylabs/assert'\nimport { useContext } from 'react'\n\nimport { MapBoxInstanceContext } from './Context'\n\nconst useMapBoxInstance = () => {\n const context = useContext(MapBoxInstanceContext)\n assertEx('map' in context, 'useMapBoxInstance must be used within a MapBoxInstanceContext')\n\n return context\n}\n\nexport { useMapBoxInstance }\n","import { createContext } from 'react'\n\nimport { MapSettingsState } from './State'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { useContext } from 'react'\n\nimport { MapSettingsContext } from './Context'\n\nconst useMapSettings = () => {\n const context = useContext(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n","// eslint-disable-next-line import/no-internal-modules\nimport 'mapbox-gl/dist/mapbox-gl.css'\n\nimport { Map, MapboxOptions } from 'mapbox-gl'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts'\nimport { useDynamicMapResize } from '../hooks'\nimport { MapStyle } from '../lib'\n\nexport interface MapBoxProps {\n accessToken: string\n darkMode?: boolean\n options?: Partial<MapboxOptions>\n zoom?: number\n}\n\nexport const MapBox: React.FC<MapBoxProps> = ({ accessToken, darkMode = false, options, zoom = 2, ...props }) => {\n const [map, setMap] = useState<Map>()\n const mapContainerRef = useRef<HTMLDivElement | null>(null)\n const mapCanvasRef = useRef<HTMLCanvasElement | null>(null)\n const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance()\n const { mapSettings } = useMapSettings()\n\n const activeResize = mapSettings?.dynamicMapResize.value\n useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize)\n\n useEffect(() => {\n if (mapSettings?.preferDark?.value === true) {\n map?.setStyle(`mapbox://styles/${MapStyle.Dark}`)\n } else {\n map?.setStyle(`mapbox://styles/${darkMode ? MapStyle.Dark : MapStyle.Light}`)\n }\n }, [map, darkMode, mapSettings])\n\n useEffect(() => {\n const map = new Map({\n accessToken,\n center: [0, 0],\n container: mapContainerRef.current ?? '',\n style: `mapbox://styles/${MapStyle.Light}`,\n zoom,\n ...options,\n })\n\n // Allow external components to control the map\n setMapBoxInstance?.(map)\n setMap(map)\n\n // save the map canvas ref to help with resizing\n mapCanvasRef.current = document.querySelector('.mapboxgl-canvas')\n\n console.log('Created Map')\n\n return () => {\n console.log('Removing Map')\n map.remove()\n }\n }, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken])\n\n return (\n <div\n ref={(el) => (mapContainerRef.current = el)}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n ...props,\n }}\n />\n )\n}\n","import { FormControlLabel, Switch, SwitchProps } from '@mui/material'\n\nimport { useMapSettings } from '../../Contexts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({ developerMode, field, ...props }) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden ? null : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n","import { Paper, Stack } from '@mui/material'\nimport { FlexBoxProps, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { useAppSettings } from '@xyo-network/react-app-settings'\n\nimport { useMapSettings } from '../../Contexts'\nimport { MapSettingSwitch } from './Setting'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n ) : null\n}\n"],"mappings":"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","names":["useEffect","useState","dependenciesReady","assertEx","assertEx","createContext","useContext","useContext","useEffect","useState","useState","useEffect","map","jsx","jsx","jsx","useState","zoom","useEffect"]}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
// src/Components/MapSettingsComponents/Setting.tsx
|
|
2
2
|
import { FormControlLabel, Switch } from "@mui/material";
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
// src/Contexts/MapSettings/Context.ts
|
|
5
|
+
import { createContext } from "react";
|
|
6
|
+
var MapSettingsContext = createContext({});
|
|
7
|
+
|
|
8
|
+
// src/Contexts/MapSettings/useMapSettings.tsx
|
|
9
|
+
import { useContext } from "react";
|
|
10
|
+
var useMapSettings = () => {
|
|
11
|
+
const context = useContext(MapSettingsContext);
|
|
12
|
+
return context;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// src/Components/MapSettingsComponents/Setting.tsx
|
|
16
|
+
import { jsx } from "react/jsx-runtime";
|
|
17
|
+
var MapSettingSwitch = ({ developerMode, field, ...props }) => {
|
|
5
18
|
const { mapSettings, setMapSettings } = useMapSettings();
|
|
6
19
|
const setting = mapSettings?.[field];
|
|
7
20
|
const onLocalChange = (event) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/Components/MapSettingsComponents/Setting.tsx"],"sourcesContent":["import { FormControlLabel, Switch, SwitchProps } from '@mui/material'\n\nimport { useMapSettings } from '../../Contexts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({ developerMode, field, ...props }) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden ? null : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/Components/MapSettingsComponents/Setting.tsx","../../../../src/Contexts/MapSettings/Context.ts","../../../../src/Contexts/MapSettings/useMapSettings.tsx"],"sourcesContent":["import { FormControlLabel, Switch, SwitchProps } from '@mui/material'\n\nimport { useMapSettings } from '../../Contexts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({ developerMode, field, ...props }) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden ? null : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n","import { createContext } from 'react'\n\nimport { MapSettingsState } from './State'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { useContext } from 'react'\n\nimport { MapSettingsContext } from './Context'\n\nconst useMapSettings = () => {\n const context = useContext(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n"],"mappings":";AAAA,SAAS,kBAAkB,cAA2B;;;ACAtD,SAAS,qBAAqB;AAI9B,IAAM,qBAAqB,cAAgC,CAAC,CAAC;;;ACJ7D,SAAS,kBAAkB;AAI3B,IAAM,iBAAiB,MAAM;AAC3B,QAAM,UAAU,WAAW,kBAAkB;AAE7C,SAAO;AACT;;;AFmBsD;AAlB/C,IAAM,mBAAoD,CAAC,EAAE,eAAe,OAAO,GAAG,MAAM,MAAM;AACvG,QAAM,EAAE,aAAa,eAAe,IAAI,eAAe;AACvD,QAAM,UAAU,cAAc,KAAK;AAEnC,QAAM,gBAAgB,CAAC,UAA+C;AACpE,QAAI,SAAS;AACX,uBAAiB,CAAC,aAAa;AAC7B,iBAAS,QAAQ,KAAK,EAAE,QAAQ,MAAM,OAAO;AAC7C,eAAO,EAAE,GAAG,SAAS;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,kBAAkB,OAAO;AAC/C,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,SAAS,OACvB,oBAAC,oBAAiB,OAAO,SAAS,OAAO,SAAS,oBAAC,UAAO,SAAS,SAAS,OAAO,UAAU,eAAgB,GAAG,OAAO,GAAI;AAE/H;","names":[]}
|
|
@@ -1,15 +1,47 @@
|
|
|
1
|
-
|
|
1
|
+
// src/Components/MapSettingsComponents/SettingsBox.tsx
|
|
2
2
|
import { Paper, Stack } from "@mui/material";
|
|
3
3
|
import { FlexGrowRow, FlexRow } from "@xylabs/react-flexbox";
|
|
4
4
|
import { useAppSettings } from "@xyo-network/react-app-settings";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
|
|
6
|
+
// src/Contexts/MapSettings/Context.ts
|
|
7
|
+
import { createContext } from "react";
|
|
8
|
+
var MapSettingsContext = createContext({});
|
|
9
|
+
|
|
10
|
+
// src/Contexts/MapSettings/useMapSettings.tsx
|
|
11
|
+
import { useContext } from "react";
|
|
12
|
+
var useMapSettings = () => {
|
|
13
|
+
const context = useContext(MapSettingsContext);
|
|
14
|
+
return context;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// src/Components/MapSettingsComponents/Setting.tsx
|
|
18
|
+
import { FormControlLabel, Switch } from "@mui/material";
|
|
19
|
+
import { jsx } from "react/jsx-runtime";
|
|
20
|
+
var MapSettingSwitch = ({ developerMode, field, ...props }) => {
|
|
21
|
+
const { mapSettings, setMapSettings } = useMapSettings();
|
|
22
|
+
const setting = mapSettings?.[field];
|
|
23
|
+
const onLocalChange = (event) => {
|
|
24
|
+
if (setting) {
|
|
25
|
+
setMapSettings?.((previous) => {
|
|
26
|
+
previous[setting.field].value = event.target.checked;
|
|
27
|
+
return { ...previous };
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
if (setting?.devMode && developerMode === false) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return setting?.hidden ? null : /* @__PURE__ */ jsx(FormControlLabel, { label: setting?.label, control: /* @__PURE__ */ jsx(Switch, { checked: setting?.value, onChange: onLocalChange, ...props }) });
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// src/Components/MapSettingsComponents/SettingsBox.tsx
|
|
38
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
39
|
+
var MapSettingsBox = ({ developerMode, ...props }) => {
|
|
8
40
|
const { mapSettings } = useMapSettings();
|
|
9
41
|
const { developerMode: devModeFromContext } = useAppSettings();
|
|
10
42
|
const resolveDeveloperMode = developerMode ?? devModeFromContext;
|
|
11
|
-
return mapSettings && resolveDeveloperMode ? /* @__PURE__ */
|
|
12
|
-
return /* @__PURE__ */
|
|
43
|
+
return mapSettings && resolveDeveloperMode ? /* @__PURE__ */ jsx2(FlexGrowRow, { bottom: 36, left: 10, position: "absolute", ...props, children: /* @__PURE__ */ jsx2(FlexRow, { paddingX: 2, children: /* @__PURE__ */ jsx2(Paper, { children: /* @__PURE__ */ jsx2(Stack, { direction: "row", spacing: 1, marginX: 1, children: Object.keys(mapSettings).map((key, index) => {
|
|
44
|
+
return /* @__PURE__ */ jsx2(MapSettingSwitch, { field: mapSettings[key].field, developerMode }, index);
|
|
13
45
|
}) }) }) }) }) : null;
|
|
14
46
|
};
|
|
15
47
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/Components/MapSettingsComponents/SettingsBox.tsx"],"sourcesContent":["import { Paper, Stack } from '@mui/material'\nimport { FlexBoxProps, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { useAppSettings } from '@xyo-network/react-app-settings'\n\nimport { useMapSettings } from '../../Contexts'\nimport { MapSettingSwitch } from './Setting'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n ) : null\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../../src/Components/MapSettingsComponents/SettingsBox.tsx","../../../../src/Contexts/MapSettings/Context.ts","../../../../src/Contexts/MapSettings/useMapSettings.tsx","../../../../src/Components/MapSettingsComponents/Setting.tsx"],"sourcesContent":["import { Paper, Stack } from '@mui/material'\nimport { FlexBoxProps, FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport { useAppSettings } from '@xyo-network/react-app-settings'\n\nimport { useMapSettings } from '../../Contexts'\nimport { MapSettingSwitch } from './Setting'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n ) : null\n}\n","import { createContext } from 'react'\n\nimport { MapSettingsState } from './State'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { useContext } from 'react'\n\nimport { MapSettingsContext } from './Context'\n\nconst useMapSettings = () => {\n const context = useContext(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n","import { FormControlLabel, Switch, SwitchProps } from '@mui/material'\n\nimport { useMapSettings } from '../../Contexts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({ developerMode, field, ...props }) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden ? null : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n"],"mappings":";AAAA,SAAS,OAAO,aAAa;AAC7B,SAAuB,aAAa,eAAe;AACnD,SAAS,sBAAsB;;;ACF/B,SAAS,qBAAqB;AAI9B,IAAM,qBAAqB,cAAgC,CAAC,CAAC;;;ACJ7D,SAAS,kBAAkB;AAI3B,IAAM,iBAAiB,MAAM;AAC3B,QAAM,UAAU,WAAW,kBAAkB;AAE7C,SAAO;AACT;;;ACRA,SAAS,kBAAkB,cAA2B;AA2BA;AAlB/C,IAAM,mBAAoD,CAAC,EAAE,eAAe,OAAO,GAAG,MAAM,MAAM;AACvG,QAAM,EAAE,aAAa,eAAe,IAAI,eAAe;AACvD,QAAM,UAAU,cAAc,KAAK;AAEnC,QAAM,gBAAgB,CAAC,UAA+C;AACpE,QAAI,SAAS;AACX,uBAAiB,CAAC,aAAa;AAC7B,iBAAS,QAAQ,KAAK,EAAE,QAAQ,MAAM,OAAO;AAC7C,eAAO,EAAE,GAAG,SAAS;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,SAAS,WAAW,kBAAkB,OAAO;AAC/C,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,SAAS,OACvB,oBAAC,oBAAiB,OAAO,SAAS,OAAO,SAAS,oBAAC,UAAO,SAAS,SAAS,OAAO,UAAU,eAAgB,GAAG,OAAO,GAAI;AAE/H;;;AHPqB,gBAAAA,YAAA;AAXd,IAAM,iBAAgD,CAAC,EAAE,eAAe,GAAG,MAAM,MAAM;AAC5F,QAAM,EAAE,YAAY,IAAI,eAAe;AACvC,QAAM,EAAE,eAAe,mBAAmB,IAAI,eAAe;AAC7D,QAAM,uBAAuB,iBAAiB;AAE9C,SAAO,eAAe,uBACpB,gBAAAA,KAAC,eAAY,QAAQ,IAAI,MAAM,IAAI,UAAS,YAAY,GAAG,OACzD,0BAAAA,KAAC,WAAQ,UAAU,GACjB,0BAAAA,KAAC,SACC,0BAAAA,KAAC,SAAM,WAAU,OAAM,SAAS,GAAG,SAAS,GACzC,iBAAO,KAAK,WAAW,EAAE,IAAI,CAAC,KAAK,UAAU;AAC5C,WAAO,gBAAAA,KAAC,oBAA6B,OAAO,YAAY,GAAG,EAAE,OAAO,iBAAtC,KAAoE;AAAA,EACpG,CAAC,GACH,GACF,GACF,GACF,IACE;AACN;","names":["jsx"]}
|