@open-pioneer/legend 0.7.0 → 0.8.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.
- package/CHANGELOG.md +26 -0
- package/Legend.d.ts +1 -1
- package/Legend.js +20 -91
- package/Legend.js.map +1 -1
- package/package.json +7 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# @open-pioneer/legend
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2fa8020: Update trails core package dependencies.
|
|
8
|
+
|
|
9
|
+
- Also updates Chakra UI to the latest 2.x version and Chakra React Select to version 5.
|
|
10
|
+
- Removes any obsolete references to `@chakra-ui/system`.
|
|
11
|
+
This dependency seems to be no longer required and may lead to duplicate packages in your dependency tree.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 49f0207: Update trails core packages to version 2.4.0
|
|
16
|
+
- e7978a8: Use reactive map model APIs to access the current layers and their attributes.
|
|
17
|
+
- Updated dependencies [b717121]
|
|
18
|
+
- Updated dependencies [e7978a8]
|
|
19
|
+
- Updated dependencies [7a5f1e1]
|
|
20
|
+
- Updated dependencies [7ae9f90]
|
|
21
|
+
- Updated dependencies [d8337a6]
|
|
22
|
+
- Updated dependencies [49f0207]
|
|
23
|
+
- Updated dependencies [b2127df]
|
|
24
|
+
- Updated dependencies [2fa8020]
|
|
25
|
+
- Updated dependencies [7ae9f90]
|
|
26
|
+
- Updated dependencies [d8337a6]
|
|
27
|
+
- @open-pioneer/map@0.8.0
|
|
28
|
+
|
|
3
29
|
## 0.7.0
|
|
4
30
|
|
|
5
31
|
### Minor Changes
|
package/Legend.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AnyLayer, MapModelProps } from "@open-pioneer/map";
|
|
2
|
-
import { ComponentType, FC } from "react";
|
|
3
2
|
import { CommonComponentProps } from "@open-pioneer/react-utils";
|
|
3
|
+
import { ComponentType, FC } from "react";
|
|
4
4
|
/**
|
|
5
5
|
* Properties of a legend item React component.
|
|
6
6
|
*/
|
package/Legend.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { WarningTwoIcon } from '@chakra-ui/icons';
|
|
2
3
|
import { Box, List, Text, Image } from '@open-pioneer/chakra-integration';
|
|
3
4
|
import { useMapModel, isLayer } from '@open-pioneer/map';
|
|
4
|
-
import { useCallback, useSyncExternalStore, useRef, useState, useEffect } from 'react';
|
|
5
5
|
import { useCommonComponentProps } from '@open-pioneer/react-utils';
|
|
6
|
-
import {
|
|
7
|
-
import { WarningTwoIcon } from '@chakra-ui/icons';
|
|
6
|
+
import { useReactiveSnapshot } from '@open-pioneer/reactivity';
|
|
8
7
|
import classNames from 'classnames';
|
|
8
|
+
import { useIntl } from './_virtual/_virtual-pioneer-module_react-hooks.js';
|
|
9
9
|
|
|
10
10
|
const Legend = (props) => {
|
|
11
11
|
const { showBaseLayers = false } = props;
|
|
@@ -32,12 +32,12 @@ function LegendList(props) {
|
|
|
32
32
|
}
|
|
33
33
|
function LegendItem(props) {
|
|
34
34
|
const { layer, showBaseLayers } = props;
|
|
35
|
-
const
|
|
35
|
+
const isVisible = useReactiveSnapshot(() => layer.visible, [layer]);
|
|
36
36
|
const sublayers = useSublayers(layer);
|
|
37
37
|
if (!isVisible) {
|
|
38
38
|
return void 0;
|
|
39
39
|
}
|
|
40
|
-
if (!showBaseLayers && isLayer(layer) && layer
|
|
40
|
+
if (!showBaseLayers && isLayer(layer) && isBaseLayer(layer)) {
|
|
41
41
|
return void 0;
|
|
42
42
|
}
|
|
43
43
|
const childItems = [];
|
|
@@ -56,8 +56,9 @@ function LegendItem(props) {
|
|
|
56
56
|
function LegendContent(props) {
|
|
57
57
|
const intl = useIntl();
|
|
58
58
|
const { layer, showBaseLayers } = props;
|
|
59
|
+
const baseLayer = isBaseLayer(layer);
|
|
59
60
|
const legendAttributes = useLegendAttributes(layer);
|
|
60
|
-
const legendUrl =
|
|
61
|
+
const legendUrl = useReactiveSnapshot(() => layer.legend, [layer]);
|
|
61
62
|
let renderedComponent;
|
|
62
63
|
if (legendAttributes?.Component) {
|
|
63
64
|
renderedComponent = /* @__PURE__ */ jsx(legendAttributes.Component, { layer });
|
|
@@ -68,9 +69,8 @@ function LegendContent(props) {
|
|
|
68
69
|
renderedComponent = /* @__PURE__ */ jsx(LegendImage, { layer, imageUrl: legendUrl });
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
const isBaseLayer = isLayer(layer) && layer.isBaseLayer;
|
|
72
72
|
return renderedComponent ? /* @__PURE__ */ jsxs(Box, { as: "li", className: classNames("legend-item", `layer-${slug(layer.id)}`), children: [
|
|
73
|
-
showBaseLayers &&
|
|
73
|
+
showBaseLayers && baseLayer ? (
|
|
74
74
|
/* Render additional text, if layer is a configured basemap */
|
|
75
75
|
/* @__PURE__ */ jsx(Text, { as: "b", children: intl.formatMessage({ id: "basemapLabel" }) })
|
|
76
76
|
) : null,
|
|
@@ -99,102 +99,31 @@ function LegendImage(props) {
|
|
|
99
99
|
)
|
|
100
100
|
] });
|
|
101
101
|
}
|
|
102
|
-
function useLegend(layer) {
|
|
103
|
-
const getSnapshot = useCallback(() => layer.legend, [layer]);
|
|
104
|
-
const subscribe = useCallback(
|
|
105
|
-
(cb) => {
|
|
106
|
-
const resource = layer.on("changed:legend", cb);
|
|
107
|
-
return () => resource.destroy();
|
|
108
|
-
},
|
|
109
|
-
[layer]
|
|
110
|
-
);
|
|
111
|
-
return useSyncExternalStore(subscribe, getSnapshot);
|
|
112
|
-
}
|
|
113
102
|
function useLayers(map) {
|
|
114
|
-
|
|
115
|
-
(
|
|
116
|
-
|
|
117
|
-
return () => resource.destroy();
|
|
118
|
-
},
|
|
119
|
-
[map]
|
|
120
|
-
);
|
|
121
|
-
const getValue = useCallback(() => {
|
|
122
|
-
let layers = map.layers.getAllLayers({ sortByDisplayOrder: true }) ?? [];
|
|
123
|
-
layers = layers.reverse();
|
|
103
|
+
return useReactiveSnapshot(() => {
|
|
104
|
+
const layers = map.layers.getAllLayers({ sortByDisplayOrder: true }) ?? [];
|
|
105
|
+
layers.reverse();
|
|
124
106
|
return layers;
|
|
125
107
|
}, [map]);
|
|
126
|
-
return useCachedExternalStore(subscribe, getValue);
|
|
127
108
|
}
|
|
128
109
|
function useSublayers(layer) {
|
|
129
|
-
|
|
130
|
-
(
|
|
131
|
-
const resource = layer.sublayers?.on("changed", cb);
|
|
132
|
-
return () => resource?.destroy();
|
|
133
|
-
},
|
|
134
|
-
[layer]
|
|
135
|
-
);
|
|
136
|
-
const getValue = useCallback(() => {
|
|
137
|
-
const sublayers = layer.sublayers;
|
|
110
|
+
return useReactiveSnapshot(() => {
|
|
111
|
+
const sublayers = layer.sublayers?.getSublayers({ sortByDisplayOrder: true });
|
|
138
112
|
if (!sublayers) {
|
|
139
113
|
return void 0;
|
|
140
114
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
return layers;
|
|
115
|
+
sublayers.reverse();
|
|
116
|
+
return sublayers;
|
|
144
117
|
}, [layer]);
|
|
145
|
-
return useCachedExternalStore(subscribe, getValue);
|
|
146
118
|
}
|
|
147
|
-
function
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
(cb) => {
|
|
151
|
-
const cleanup = subscribe(() => {
|
|
152
|
-
cachedValue.current = void 0;
|
|
153
|
-
cb();
|
|
154
|
-
});
|
|
155
|
-
return () => {
|
|
156
|
-
cachedValue.current = void 0;
|
|
157
|
-
cleanup();
|
|
158
|
-
};
|
|
159
|
-
},
|
|
160
|
-
[subscribe]
|
|
161
|
-
);
|
|
162
|
-
const cachedGetSnapshot = useCallback(() => {
|
|
163
|
-
if (cachedValue.current) {
|
|
164
|
-
return cachedValue.current.value;
|
|
165
|
-
}
|
|
166
|
-
const value = getValue();
|
|
167
|
-
cachedValue.current = { value };
|
|
168
|
-
return value;
|
|
169
|
-
}, [getValue]);
|
|
170
|
-
return useSyncExternalStore(cachedSubscribe, cachedGetSnapshot);
|
|
171
|
-
}
|
|
172
|
-
function useVisibility(layer) {
|
|
173
|
-
const getSnapshot = useCallback(() => layer.visible, [layer]);
|
|
174
|
-
const subscribe = useCallback(
|
|
175
|
-
(cb) => {
|
|
176
|
-
const resource = layer.on("changed:visible", cb);
|
|
177
|
-
return () => resource.destroy();
|
|
178
|
-
},
|
|
119
|
+
function useLegendAttributes(layer) {
|
|
120
|
+
return useReactiveSnapshot(
|
|
121
|
+
() => layer.attributes.legend,
|
|
179
122
|
[layer]
|
|
180
123
|
);
|
|
181
|
-
const isVisible = useSyncExternalStore(subscribe, getSnapshot);
|
|
182
|
-
return {
|
|
183
|
-
isVisible
|
|
184
|
-
};
|
|
185
124
|
}
|
|
186
|
-
function
|
|
187
|
-
|
|
188
|
-
void 0
|
|
189
|
-
);
|
|
190
|
-
useEffect(() => {
|
|
191
|
-
setLegendAttributes(layer.attributes.legend);
|
|
192
|
-
const resource = layer.on("changed:attributes", () => {
|
|
193
|
-
setLegendAttributes(layer.attributes.legend);
|
|
194
|
-
});
|
|
195
|
-
return () => resource.destroy();
|
|
196
|
-
}, [layer]);
|
|
197
|
-
return legendAttributes;
|
|
125
|
+
function isBaseLayer(layer) {
|
|
126
|
+
return !("parentLayer" in layer) && layer.isBaseLayer;
|
|
198
127
|
}
|
|
199
128
|
function slug(id) {
|
|
200
129
|
return id.toLowerCase().replace(/[^a-z0-9 -]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-");
|
package/Legend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Legend.js","sources":["Legend.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Box, Image, List, Text } from \"@open-pioneer/chakra-integration\";\nimport {\n Layer,\n MapModel,\n useMapModel,\n AnyLayer,\n Sublayer,\n isLayer,\n MapModelProps\n} from \"@open-pioneer/map\";\nimport {\n ComponentType,\n FC,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore\n} from \"react\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { WarningTwoIcon } from \"@chakra-ui/icons\";\nimport classNames from \"classnames\";\n\n/**\n * Properties of a legend item React component.\n */\nexport interface LegendItemComponentProps {\n /**\n * Related layer of the legend.\n */\n layer: AnyLayer;\n}\n\n/**\n * Attributes of the legend attribute that can be specified on a layer.\n *\n * To show a legend for the layer, provide an imageUrl to an image to show\n * or provide a React component that will be rendered as a legend.\n */\nexport interface LegendItemAttributes {\n /**\n * (Optional) URL to an image that will be shown as a legend for the layer.\n */\n imageUrl?: string;\n\n /**\n * (Optional) React component that will be shown as customized legend for the layer.\n */\n Component?: ComponentType<LegendItemComponentProps>;\n}\n\n/**\n * These are special properties for the Legend.\n */\nexport interface LegendProps extends CommonComponentProps, MapModelProps {\n /**\n * Specifies whether legend for active base layer is shown in the legend UI.\n * Defaults to `false`.\n */\n showBaseLayers?: boolean;\n}\n\n/**\n * The `Legend` component can be used to display the legend of layers that are visible in the map.\n */\nexport const Legend: FC<LegendProps> = (props) => {\n const { showBaseLayers = false } = props;\n const { containerProps } = useCommonComponentProps(\"legend\", props);\n const { map } = useMapModel(props);\n\n return (\n <Box {...containerProps}>\n {map ? <LegendList map={map} showBaseLayers={showBaseLayers} /> : null}\n </Box>\n );\n};\n\nfunction LegendList(props: { map: MapModel; showBaseLayers: boolean }): JSX.Element {\n const { map, showBaseLayers } = props;\n\n const layers = useLayers(map);\n const legendListItems: ReactNode[] = layers.map((layer) => {\n return (\n <LegendItem key={layer.id} layer={layer} showBaseLayers={showBaseLayers}></LegendItem>\n );\n });\n\n return (\n <List\n // Note: not using UnorderedList because it adds default margins\n as=\"ul\"\n className=\"legend-layer-list\"\n listStyleType=\"none\"\n spacing={2}\n >\n {legendListItems}\n </List>\n );\n}\n\nfunction LegendItem(props: { layer: AnyLayer; showBaseLayers: boolean }): ReactNode {\n const { layer, showBaseLayers } = props;\n const { isVisible } = useVisibility(layer);\n const sublayers = useSublayers(layer);\n\n if (!isVisible) {\n return undefined;\n }\n\n if (!showBaseLayers && isLayer(layer) && layer.isBaseLayer) {\n return undefined;\n }\n\n // legend items for all sublayers\n const childItems: ReactNode[] = [];\n if (sublayers?.length) {\n sublayers.forEach((sublayer) => {\n childItems.push(\n <LegendItem key={sublayer.id} layer={sublayer} showBaseLayers={showBaseLayers} />\n );\n });\n }\n\n return (\n <>\n <LegendContent layer={layer} showBaseLayers={showBaseLayers} />\n {childItems}\n </>\n );\n}\n\nfunction LegendContent(props: { layer: AnyLayer; showBaseLayers: boolean }) {\n const intl = useIntl();\n\n const { layer, showBaseLayers } = props;\n const legendAttributes = useLegendAttributes(layer);\n const legendUrl = useLegend(layer);\n let renderedComponent: ReactNode | undefined;\n\n if (legendAttributes?.Component) {\n renderedComponent = <legendAttributes.Component layer={layer} />;\n } else if (legendAttributes?.imageUrl) {\n renderedComponent = <LegendImage layer={layer} imageUrl={legendAttributes.imageUrl} />;\n } else {\n if (legendUrl) {\n renderedComponent = <LegendImage layer={layer} imageUrl={legendUrl} />;\n }\n }\n\n const isBaseLayer = isLayer(layer) && layer.isBaseLayer;\n\n return renderedComponent ? (\n <Box as=\"li\" className={classNames(\"legend-item\", `layer-${slug(layer.id)}`)}>\n {showBaseLayers && isBaseLayer ? (\n /* Render additional text, if layer is a configured basemap */\n <Text as=\"b\">{intl.formatMessage({ id: \"basemapLabel\" })}</Text>\n ) : null}\n {renderedComponent}\n </Box>\n ) : undefined;\n}\n\nfunction LegendImage(props: { imageUrl: string; layer: AnyLayer }) {\n const intl = useIntl();\n\n const { layer, imageUrl } = props;\n\n return (\n <Box>\n <Text>{layer.title}</Text>\n <Image\n maxW=\"none\"\n maxH=\"none\"\n src={imageUrl}\n alt={intl.formatMessage({ id: \"altLabel\" }, { layerName: layer.title })}\n className={\"legend-item__image\"}\n fallbackStrategy={\"onError\"}\n fallback={\n <Box>\n <Text>\n <WarningTwoIcon me={2} />\n {intl.formatMessage({ id: \"fallbackLabel\" })}\n </Text>\n </Box>\n }\n />\n </Box>\n );\n}\n\nfunction useLegend(layer: AnyLayer): string | undefined {\n const getSnapshot = useCallback(() => layer.legend, [layer]);\n const subscribe = useCallback(\n (cb: () => void) => {\n const resource = layer.on(\"changed:legend\", cb);\n return () => resource.destroy();\n },\n [layer]\n );\n\n return useSyncExternalStore(subscribe, getSnapshot);\n}\n\n/** Returns the top level operation layers (without LayerGroups). */\nfunction useLayers(map: MapModel): Layer[] {\n const subscribe = useCallback(\n (cb: () => void) => {\n const resource = map.layers.on(\"changed\", cb);\n return () => resource.destroy();\n },\n [map]\n );\n const getValue = useCallback(() => {\n let layers = map.layers.getAllLayers({ sortByDisplayOrder: true }) ?? [];\n layers = layers.reverse();\n return layers;\n }, [map]);\n return useCachedExternalStore(subscribe, getValue);\n}\n\n/** Returns the sublayers of the given layer (or undefined, if the sublayer cannot have any). */\nfunction useSublayers(layer: AnyLayer): Sublayer[] | undefined {\n const subscribe = useCallback(\n (cb: () => void) => {\n const resource = layer.sublayers?.on(\"changed\", cb);\n return () => resource?.destroy();\n },\n [layer]\n );\n const getValue = useCallback((): Sublayer[] | undefined => {\n const sublayers = layer.sublayers;\n if (!sublayers) {\n return undefined;\n }\n\n let layers = layer.sublayers?.getSublayers({ sortByDisplayOrder: true });\n layers = layers.reverse();\n return layers;\n }, [layer]);\n return useCachedExternalStore(subscribe, getValue);\n}\n\n/**\n * This hooks wraps an external store that does not cache its own values, i.e.\n * it may return a different value each time from `getValue()`.\n *\n * The results returned from `getValue()` are cached locally; the cache\n * is only invalidated on re-subscription or if a change event has been observed.\n */\nfunction useCachedExternalStore<T>(\n subscribe: (onStoreChanged: () => void) => () => void,\n getValue: () => T\n): T {\n const cachedValue = useRef<{ value: T } | undefined>();\n\n const cachedSubscribe = useCallback(\n (cb: () => void) => {\n const cleanup = subscribe(() => {\n // Reset cache on change\n cachedValue.current = undefined;\n cb();\n });\n return () => {\n // Reset cache when (re-) subscribing\n cachedValue.current = undefined;\n cleanup();\n };\n },\n [subscribe]\n );\n const cachedGetSnapshot = useCallback(() => {\n // Return cached values if still up to date (see resets above).\n if (cachedValue.current) {\n return cachedValue.current.value;\n }\n\n // Compute values and cache the result.\n const value = getValue();\n cachedValue.current = { value };\n return value;\n }, [getValue]);\n return useSyncExternalStore(cachedSubscribe, cachedGetSnapshot);\n}\n\n/** Returns the layer's current visibility. */\nfunction useVisibility(layer: AnyLayer): {\n isVisible: boolean;\n} {\n const getSnapshot = useCallback(() => layer.visible, [layer]);\n const subscribe = useCallback(\n (cb: () => void) => {\n const resource = layer.on(\"changed:visible\", cb);\n return () => resource.destroy();\n },\n [layer]\n );\n const isVisible = useSyncExternalStore(subscribe, getSnapshot);\n\n return {\n isVisible\n };\n}\n\nfunction useLegendAttributes(layer: AnyLayer) {\n const [legendAttributes, setLegendAttributes] = useState<LegendItemAttributes | undefined>(\n undefined\n );\n\n useEffect(() => {\n setLegendAttributes(layer.attributes.legend as LegendItemAttributes | undefined);\n\n const resource = layer.on(\"changed:attributes\", () => {\n setLegendAttributes(layer.attributes.legend as LegendItemAttributes | undefined);\n });\n return () => resource.destroy();\n }, [layer]);\n\n return legendAttributes;\n}\n\nfunction slug(id: string) {\n return id\n .toLowerCase()\n .replace(/[^a-z0-9 -]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\");\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Legend.js","sources":["Legend.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { WarningTwoIcon } from \"@chakra-ui/icons\";\nimport { Box, Image, List, Text } from \"@open-pioneer/chakra-integration\";\nimport {\n Layer,\n AnyLayer,\n MapModel,\n Sublayer,\n useMapModel,\n MapModelProps,\n isLayer\n} from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport classNames from \"classnames\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { ComponentType, FC, ReactNode } from \"react\";\n\n/**\n * Properties of a legend item React component.\n */\nexport interface LegendItemComponentProps {\n /**\n * Related layer of the legend.\n */\n layer: AnyLayer;\n}\n\n/**\n * Attributes of the legend attribute that can be specified on a layer.\n *\n * To show a legend for the layer, provide an imageUrl to an image to show\n * or provide a React component that will be rendered as a legend.\n */\nexport interface LegendItemAttributes {\n /**\n * (Optional) URL to an image that will be shown as a legend for the layer.\n */\n imageUrl?: string;\n\n /**\n * (Optional) React component that will be shown as customized legend for the layer.\n */\n Component?: ComponentType<LegendItemComponentProps>;\n}\n\n/**\n * These are special properties for the Legend.\n */\nexport interface LegendProps extends CommonComponentProps, MapModelProps {\n /**\n * Specifies whether legend for active base layer is shown in the legend UI.\n * Defaults to `false`.\n */\n showBaseLayers?: boolean;\n}\n\n/**\n * The `Legend` component can be used to display the legend of layers that are visible in the map.\n */\nexport const Legend: FC<LegendProps> = (props) => {\n const { showBaseLayers = false } = props;\n const { containerProps } = useCommonComponentProps(\"legend\", props);\n const { map } = useMapModel(props);\n\n return (\n <Box {...containerProps}>\n {map ? <LegendList map={map} showBaseLayers={showBaseLayers} /> : null}\n </Box>\n );\n};\n\nfunction LegendList(props: { map: MapModel; showBaseLayers: boolean }): JSX.Element {\n const { map, showBaseLayers } = props;\n\n const layers = useLayers(map);\n const legendListItems: ReactNode[] = layers.map((layer) => {\n return (\n <LegendItem key={layer.id} layer={layer} showBaseLayers={showBaseLayers}></LegendItem>\n );\n });\n\n return (\n <List\n // Note: not using UnorderedList because it adds default margins\n as=\"ul\"\n className=\"legend-layer-list\"\n listStyleType=\"none\"\n spacing={2}\n >\n {legendListItems}\n </List>\n );\n}\n\nfunction LegendItem(props: { layer: AnyLayer; showBaseLayers: boolean }): ReactNode {\n const { layer, showBaseLayers } = props;\n const isVisible = useReactiveSnapshot(() => layer.visible, [layer]);\n const sublayers = useSublayers(layer);\n\n if (!isVisible) {\n return undefined;\n }\n\n if (!showBaseLayers && isLayer(layer) && isBaseLayer(layer)) {\n return undefined;\n }\n\n // legend items for all sublayers\n const childItems: ReactNode[] = [];\n if (sublayers?.length) {\n sublayers.forEach((sublayer) => {\n childItems.push(\n <LegendItem key={sublayer.id} layer={sublayer} showBaseLayers={showBaseLayers} />\n );\n });\n }\n\n return (\n <>\n <LegendContent layer={layer} showBaseLayers={showBaseLayers} />\n {childItems}\n </>\n );\n}\n\nfunction LegendContent(props: { layer: AnyLayer; showBaseLayers: boolean }) {\n const intl = useIntl();\n\n const { layer, showBaseLayers } = props;\n const baseLayer = isBaseLayer(layer);\n const legendAttributes = useLegendAttributes(layer);\n const legendUrl = useReactiveSnapshot(() => layer.legend, [layer]);\n\n let renderedComponent: ReactNode | undefined;\n if (legendAttributes?.Component) {\n renderedComponent = <legendAttributes.Component layer={layer} />;\n } else if (legendAttributes?.imageUrl) {\n renderedComponent = <LegendImage layer={layer} imageUrl={legendAttributes.imageUrl} />;\n } else {\n if (legendUrl) {\n renderedComponent = <LegendImage layer={layer} imageUrl={legendUrl} />;\n }\n }\n\n return renderedComponent ? (\n <Box as=\"li\" className={classNames(\"legend-item\", `layer-${slug(layer.id)}`)}>\n {showBaseLayers && baseLayer ? (\n /* Render additional text, if layer is a configured basemap */\n <Text as=\"b\">{intl.formatMessage({ id: \"basemapLabel\" })}</Text>\n ) : null}\n {renderedComponent}\n </Box>\n ) : undefined;\n}\n\nfunction LegendImage(props: { imageUrl: string; layer: AnyLayer }) {\n const intl = useIntl();\n\n const { layer, imageUrl } = props;\n\n return (\n <Box>\n <Text>{layer.title}</Text>\n <Image\n maxW=\"none\"\n maxH=\"none\"\n src={imageUrl}\n alt={intl.formatMessage({ id: \"altLabel\" }, { layerName: layer.title })}\n className={\"legend-item__image\"}\n fallbackStrategy={\"onError\"}\n fallback={\n <Box>\n <Text>\n <WarningTwoIcon me={2} />\n {intl.formatMessage({ id: \"fallbackLabel\" })}\n </Text>\n </Box>\n }\n />\n </Box>\n );\n}\n\n/** Returns the top level operational layers in render order (topmost layer first). */\nfunction useLayers(map: MapModel): Layer[] {\n return useReactiveSnapshot(() => {\n const layers = map.layers.getAllLayers({ sortByDisplayOrder: true }) ?? [];\n layers.reverse(); // render topmost layer first\n return layers;\n }, [map]);\n}\n\n/**\n * Returns the sublayers of the given layer (or undefined, if the sublayer cannot have any).\n * Sublayers are returned in render order (topmost sublayer first).\n */\nfunction useSublayers(layer: AnyLayer): Sublayer[] | undefined {\n return useReactiveSnapshot(() => {\n const sublayers = layer.sublayers?.getSublayers({ sortByDisplayOrder: true });\n if (!sublayers) {\n return undefined;\n }\n\n sublayers.reverse(); // render topmost layer first\n return sublayers;\n }, [layer]);\n}\n\nfunction useLegendAttributes(layer: AnyLayer): LegendItemAttributes | undefined {\n return useReactiveSnapshot(\n () => layer.attributes.legend as LegendItemAttributes | undefined,\n [layer]\n );\n}\n\nfunction isBaseLayer(layer: AnyLayer) {\n return !(\"parentLayer\" in layer) && layer.isBaseLayer;\n}\n\nfunction slug(id: string) {\n return id\n .toLowerCase()\n .replace(/[^a-z0-9 -]/g, \"\")\n .replace(/\\s+/g, \"-\")\n .replace(/-+/g, \"-\");\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/legend",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"description": "This package provides a legend UI component that allows a user to see legend information for layers in the map.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -15,13 +15,14 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@chakra-ui/icons": "^2.2.4",
|
|
18
|
-
"@open-pioneer/chakra-integration": "^2.
|
|
19
|
-
"@open-pioneer/react-utils": "^2.
|
|
20
|
-
"@open-pioneer/runtime": "^2.
|
|
18
|
+
"@open-pioneer/chakra-integration": "^2.4.0",
|
|
19
|
+
"@open-pioneer/react-utils": "^2.4.0",
|
|
20
|
+
"@open-pioneer/runtime": "^2.4.0",
|
|
21
21
|
"classnames": "^2.3.2",
|
|
22
|
-
"ol": "^
|
|
22
|
+
"ol": "^10.2.1",
|
|
23
23
|
"react": "^18.3.1",
|
|
24
|
-
"@open-pioneer/
|
|
24
|
+
"@open-pioneer/reactivity": "^2.4.0",
|
|
25
|
+
"@open-pioneer/map": "^0.8.0"
|
|
25
26
|
},
|
|
26
27
|
"exports": {
|
|
27
28
|
"./package.json": "./package.json",
|