Skip to content

Commit 3ca2c94

Browse files
committed
fix: migrate to new layer selector
1 parent d2bfd93 commit 3ca2c94

File tree

3 files changed

+45
-138
lines changed

3 files changed

+45
-138
lines changed

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@
3030
"dependencies": {
3131
"@arcgis/core": "^4.31.1",
3232
"@heroicons/react": "^2.1.5",
33-
"@ugrc/layer-selector": "^6.2.12",
34-
"@ugrc/utah-design-system": "^1.19.0",
35-
"@ugrc/utilities": "^2.4.3",
33+
"@ugrc/utah-design-system": "^1.20.2",
34+
"@ugrc/utilities": "^3.0.2",
3635
"firebase": "^11.0.1",
3736
"ky": "^1.7.4",
3837
"lodash.startcase": "^4.4.0",

pnpm-lock.yaml

Lines changed: 17 additions & 86 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/components/MapContainer.tsx

Lines changed: 26 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ import Polygon from '@arcgis/core/geometry/Polygon';
22
import VectorTileLayer from '@arcgis/core/layers/VectorTileLayer';
33
import EsriMap from '@arcgis/core/Map';
44
import MapView from '@arcgis/core/views/MapView';
5-
import LayerSelector from '@ugrc/layer-selector';
5+
import { LayerSelector, type LayerSelectorProps } from '@ugrc/utah-design-system';
66
import { useEffect, useRef, useState } from 'react';
77
import cityExtents from './data/cityExtents';
88
import { useMap } from './hooks';
99
import { randomize } from './utils';
1010

11-
import '@ugrc/layer-selector/src/LayerSelector.css';
12-
1311
const { item: randomExtent } = randomize<__esri.GraphicProperties>(cityExtents);
1412
const urls = {
1513
landownership:
@@ -18,26 +16,12 @@ const urls = {
1816
'https://www.arcgis.com/sharing/rest/content/items/77202507796a4d5796b7d8e6871e352e/resources/styles/root.json',
1917
};
2018

21-
type LayerFactory = {
22-
Factory: new () => __esri.Layer;
23-
url: string;
24-
id: string;
25-
opacity: number;
26-
};
27-
type SelectorOptions = {
28-
view: MapView;
29-
quadWord: string;
30-
baseLayers: Array<string | { token: string; selected: boolean } | LayerFactory>;
31-
overlays?: Array<string | LayerFactory>;
32-
position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
33-
};
34-
3519
export const MapContainer = ({ onClick }: { onClick?: __esri.ViewImmediateClickEventHandler }) => {
3620
const mapNode = useRef<HTMLDivElement | null>(null);
3721
const mapComponent = useRef<EsriMap | null>(null);
3822
const mapView = useRef<MapView>();
3923
const clickHandler = useRef<IHandle>();
40-
const [selectorOptions, setSelectorOptions] = useState<SelectorOptions | null>(null);
24+
const [selectorOptions, setSelectorOptions] = useState<LayerSelectorProps | null>(null);
4125
const { setMapView } = useMap();
4226

4327
// setup the Map
@@ -59,39 +43,32 @@ export const MapContainer = ({ onClick }: { onClick?: __esri.ViewImmediateClickE
5943

6044
setMapView(mapView.current);
6145

62-
const selectorOptions: SelectorOptions = {
63-
view: mapView.current,
64-
quadWord: import.meta.env.VITE_DISCOVER,
65-
baseLayers: [
66-
'Hybrid',
67-
{
68-
Factory: VectorTileLayer,
69-
url: urls.liteVector,
70-
id: 'Lite',
71-
opacity: 1,
72-
},
73-
'Terrain',
74-
'Topo',
75-
'Color IR',
76-
],
77-
overlays: [
78-
'Address Points',
79-
{
80-
Factory: VectorTileLayer,
81-
url: urls.landownership,
82-
id: 'Land Ownership',
83-
opacity: 0.3,
84-
},
85-
],
86-
position: 'top-right',
46+
const selectorOptions: LayerSelectorProps = {
47+
options: {
48+
view: mapView.current,
49+
quadWord: import.meta.env.VITE_DISCOVER,
50+
baseLayers: [
51+
'Hybrid',
52+
{
53+
label: 'Lite',
54+
function: () =>
55+
new VectorTileLayer({
56+
url: urls.liteVector,
57+
opacity: 1,
58+
}),
59+
},
60+
'Terrain',
61+
'Topo',
62+
'Color IR',
63+
],
64+
referenceLayers: ['Address Points', 'Land Ownership'],
65+
},
8766
};
8867

89-
const { index: randomBaseMapIndex } = randomize(selectorOptions.baseLayers);
68+
const { index: randomBaseMapIndex } = randomize(selectorOptions.options.baseLayers);
9069

91-
selectorOptions.baseLayers[randomBaseMapIndex] = {
92-
token: selectorOptions.baseLayers[randomBaseMapIndex] as string,
93-
selected: true,
94-
};
70+
const removed = selectorOptions.options.baseLayers.splice(randomBaseMapIndex, 1);
71+
selectorOptions.options.baseLayers.unshift(removed[0]!);
9572

9673
setSelectorOptions(selectorOptions);
9774

@@ -114,7 +91,7 @@ export const MapContainer = ({ onClick }: { onClick?: __esri.ViewImmediateClickE
11491

11592
return (
11693
<div ref={mapNode} className="size-full">
117-
{selectorOptions?.view && <LayerSelector {...selectorOptions}></LayerSelector>}
94+
{selectorOptions && <LayerSelector {...selectorOptions}></LayerSelector>}
11895
</div>
11996
);
12097
};

0 commit comments

Comments
 (0)