@open-pioneer/basemap-switcher 0.4.4 → 0.8.0-dev.20241120115147
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/BasemapSwitcher.d.ts +3 -7
- package/BasemapSwitcher.js +20 -70
- package/BasemapSwitcher.js.map +1 -1
- package/CHANGELOG.md +53 -0
- package/i18n/de.yaml +0 -1
- package/i18n/en.yaml +0 -1
- package/package.json +11 -9
package/BasemapSwitcher.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Layer } from "@open-pioneer/map";
|
|
2
|
-
import { FC } from "react";
|
|
1
|
+
import { Layer, MapModelProps } from "@open-pioneer/map";
|
|
3
2
|
import { CommonComponentProps } from "@open-pioneer/react-utils";
|
|
3
|
+
import { FC } from "react";
|
|
4
4
|
export declare const NO_BASEMAP_ID = "___NO_BASEMAP___";
|
|
5
5
|
/**
|
|
6
6
|
* Properties for single select options.
|
|
@@ -18,11 +18,7 @@ export interface SelectOption {
|
|
|
18
18
|
/**
|
|
19
19
|
* These are special properties for the BasemapSwitcher.
|
|
20
20
|
*/
|
|
21
|
-
export interface BasemapSwitcherProps extends CommonComponentProps {
|
|
22
|
-
/**
|
|
23
|
-
* The id of the map.
|
|
24
|
-
*/
|
|
25
|
-
mapId: string;
|
|
21
|
+
export interface BasemapSwitcherProps extends CommonComponentProps, MapModelProps {
|
|
26
22
|
/**
|
|
27
23
|
* Additional css class name(s) that will be added to the BasemapSwitcher component.
|
|
28
24
|
*/
|
package/BasemapSwitcher.js
CHANGED
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { Box, Flex, Tooltip, useToken } from '@open-pioneer/chakra-integration';
|
|
3
3
|
import { useMapModel } from '@open-pioneer/map';
|
|
4
|
-
import { useIntl } from './_virtual/_virtual-pioneer-module_react-hooks.js';
|
|
5
|
-
import { useState, useMemo, useRef, useCallback, useSyncExternalStore } from 'react';
|
|
6
|
-
import { Select, chakraComponents } from 'chakra-react-select';
|
|
7
4
|
import { useCommonComponentProps, useEvent } from '@open-pioneer/react-utils';
|
|
5
|
+
import { useReactiveSnapshot } from '@open-pioneer/reactivity';
|
|
6
|
+
import { Select, chakraComponents } from 'chakra-react-select';
|
|
7
|
+
import { useIntl } from './_virtual/_virtual-pioneer-module_react-hooks.js';
|
|
8
|
+
import { useMemo, useState } from 'react';
|
|
8
9
|
import { FiAlertTriangle } from 'react-icons/fi';
|
|
9
10
|
|
|
10
11
|
const NO_BASEMAP_ID = "___NO_BASEMAP___";
|
|
11
12
|
const BasemapSwitcher = (props) => {
|
|
12
13
|
const intl = useIntl();
|
|
13
14
|
const {
|
|
14
|
-
mapId,
|
|
15
15
|
allowSelectingEmptyBasemap = false,
|
|
16
16
|
"aria-label": ariaLabel,
|
|
17
17
|
"aria-labelledby": ariaLabelledBy
|
|
18
18
|
} = props;
|
|
19
19
|
const { containerProps } = useCommonComponentProps("basemap-switcher", props);
|
|
20
20
|
const emptyBasemapLabel = intl.formatMessage({ id: "emptyBasemapLabel" });
|
|
21
|
-
const { map } = useMapModel(
|
|
21
|
+
const { map } = useMapModel(props);
|
|
22
22
|
const baseLayers = useBaseLayers(map);
|
|
23
|
-
const
|
|
24
|
-
const [isOpenSelect, setIsOpenSelect] = useState(false);
|
|
23
|
+
const activeBaseLayer = useReactiveSnapshot(() => map?.layers.getActiveBaseLayer(), [map]);
|
|
25
24
|
const activateLayer = (layerId) => {
|
|
26
25
|
map?.layers.activateBaseLayer(layerId === NO_BASEMAP_ID ? void 0 : layerId);
|
|
27
26
|
};
|
|
@@ -29,14 +28,15 @@ const BasemapSwitcher = (props) => {
|
|
|
29
28
|
const options2 = baseLayers.map((layer) => {
|
|
30
29
|
return { value: layer.id, layer };
|
|
31
30
|
});
|
|
32
|
-
|
|
33
|
-
if (allowSelectingEmptyBasemap || activeBaseLayer == void 0) {
|
|
31
|
+
if (allowSelectingEmptyBasemap || activeBaseLayer == null) {
|
|
34
32
|
const emptyOption = { value: NO_BASEMAP_ID, layer: void 0 };
|
|
35
33
|
options2.push(emptyOption);
|
|
36
34
|
}
|
|
37
35
|
const selectedLayer2 = options2.find((l) => l.layer === activeBaseLayer);
|
|
38
36
|
return { options: options2, selectedLayer: selectedLayer2 };
|
|
39
|
-
}, [allowSelectingEmptyBasemap, baseLayers,
|
|
37
|
+
}, [allowSelectingEmptyBasemap, baseLayers, activeBaseLayer]);
|
|
38
|
+
const chakraStyles = useChakraStyles();
|
|
39
|
+
const [isOpenSelect, setIsOpenSelect] = useState(false);
|
|
40
40
|
const components = useMemo(() => {
|
|
41
41
|
return {
|
|
42
42
|
Option: BasemapSelectOption,
|
|
@@ -83,28 +83,7 @@ const BasemapSwitcher = (props) => {
|
|
|
83
83
|
) : null });
|
|
84
84
|
};
|
|
85
85
|
function useBaseLayers(mapModel) {
|
|
86
|
-
|
|
87
|
-
const subscribe = useCallback(
|
|
88
|
-
(cb) => {
|
|
89
|
-
baseLayers.current = void 0;
|
|
90
|
-
if (!mapModel) {
|
|
91
|
-
return () => void 0;
|
|
92
|
-
}
|
|
93
|
-
const resource = mapModel.layers.on("changed", () => {
|
|
94
|
-
baseLayers.current = void 0;
|
|
95
|
-
cb();
|
|
96
|
-
});
|
|
97
|
-
return () => resource.destroy();
|
|
98
|
-
},
|
|
99
|
-
[mapModel]
|
|
100
|
-
);
|
|
101
|
-
const getSnapshot = useCallback(() => {
|
|
102
|
-
if (baseLayers.current) {
|
|
103
|
-
return baseLayers.current;
|
|
104
|
-
}
|
|
105
|
-
return baseLayers.current = mapModel?.layers.getBaseLayers() ?? [];
|
|
106
|
-
}, [mapModel]);
|
|
107
|
-
return useSyncExternalStore(subscribe, getSnapshot);
|
|
86
|
+
return useReactiveSnapshot(() => mapModel?.layers.getBaseLayers() ?? [], [mapModel]);
|
|
108
87
|
}
|
|
109
88
|
function BasemapSelectOption(props) {
|
|
110
89
|
const { layer } = props.data;
|
|
@@ -135,8 +114,15 @@ function BasemapSelectValue(props) {
|
|
|
135
114
|
function useBasemapItem(layer) {
|
|
136
115
|
const intl = useIntl();
|
|
137
116
|
const notAvailableLabel = intl.formatMessage({ id: "layerNotAvailable" });
|
|
138
|
-
const label =
|
|
139
|
-
|
|
117
|
+
const { label, isAvailable } = useReactiveSnapshot(() => {
|
|
118
|
+
if (!layer) {
|
|
119
|
+
return { label: intl.formatMessage({ id: "emptyBasemapLabel" }), isAvailable: true };
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
label: layer.title,
|
|
123
|
+
isAvailable: layer.loadState !== "error"
|
|
124
|
+
};
|
|
125
|
+
}, [layer, intl]);
|
|
140
126
|
return {
|
|
141
127
|
isAvailable,
|
|
142
128
|
content: /* @__PURE__ */ jsxs(Flex, { direction: "row", alignItems: "center", children: [
|
|
@@ -145,42 +131,6 @@ function useBasemapItem(layer) {
|
|
|
145
131
|
] })
|
|
146
132
|
};
|
|
147
133
|
}
|
|
148
|
-
function useTitle(layer) {
|
|
149
|
-
const intl = useIntl();
|
|
150
|
-
const emptyBasemapLabel = intl.formatMessage({ id: "emptyBasemapLabel" });
|
|
151
|
-
const getSnapshot = useCallback(() => {
|
|
152
|
-
return layer === void 0 ? emptyBasemapLabel : layer.title;
|
|
153
|
-
}, [layer, emptyBasemapLabel]);
|
|
154
|
-
const subscribe = useCallback(
|
|
155
|
-
(cb) => {
|
|
156
|
-
if (layer !== void 0) {
|
|
157
|
-
const resource = layer.on("changed:title", cb);
|
|
158
|
-
return () => resource.destroy();
|
|
159
|
-
}
|
|
160
|
-
return () => {
|
|
161
|
-
};
|
|
162
|
-
},
|
|
163
|
-
[layer]
|
|
164
|
-
);
|
|
165
|
-
return useSyncExternalStore(subscribe, getSnapshot);
|
|
166
|
-
}
|
|
167
|
-
function useLoadState(layer) {
|
|
168
|
-
const getSnapshot = useCallback(() => {
|
|
169
|
-
return layer === void 0 ? "loaded" : layer.loadState;
|
|
170
|
-
}, [layer]);
|
|
171
|
-
const subscribe = useCallback(
|
|
172
|
-
(cb) => {
|
|
173
|
-
if (layer !== void 0) {
|
|
174
|
-
const resource = layer.on("changed:loadState", cb);
|
|
175
|
-
return () => resource.destroy();
|
|
176
|
-
}
|
|
177
|
-
return () => {
|
|
178
|
-
};
|
|
179
|
-
},
|
|
180
|
-
[layer]
|
|
181
|
-
);
|
|
182
|
-
return useSyncExternalStore(subscribe, getSnapshot);
|
|
183
|
-
}
|
|
184
134
|
function useChakraStyles() {
|
|
185
135
|
const [dropDownBackground, borderColor] = useToken(
|
|
186
136
|
"colors",
|
package/BasemapSwitcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasemapSwitcher.js","sources":["BasemapSwitcher.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Box, Flex, Tooltip, useToken } from \"@open-pioneer/chakra-integration\";\nimport { Layer, MapModel, useMapModel } from \"@open-pioneer/map\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC, useCallback, useMemo, useRef, useState, useSyncExternalStore } from \"react\";\nimport {\n chakraComponents,\n ChakraStylesConfig,\n GroupBase,\n OptionProps,\n Select,\n SingleValueProps\n} from \"chakra-react-select\";\nimport { CommonComponentProps, useCommonComponentProps, useEvent } from \"@open-pioneer/react-utils\";\nimport { FiAlertTriangle } from \"react-icons/fi\";\nimport { KeyboardEvent } from \"react\";\n\n/*\n Exported for tests. Feels a bit hacky but should be fine for now.\n Originally was using the empty string, but that doesn't work well with happy-dom.\n*/\nexport const NO_BASEMAP_ID = \"___NO_BASEMAP___\";\n\n/**\n * Properties for single select options.\n */\nexport interface SelectOption {\n /**\n * The id of the basemap for the select option.\n */\n value: string;\n\n /**\n * The layer object for the select option.\n */\n layer: Layer | undefined;\n}\n\n/**\n * These are special properties for the BasemapSwitcher.\n */\nexport interface BasemapSwitcherProps extends CommonComponentProps {\n /**\n * The id of the map.\n */\n mapId: string;\n\n /**\n * Additional css class name(s) that will be added to the BasemapSwitcher component.\n */\n className?: string;\n\n /**\n * Specifies whether an option to deactivate all basemap layers is available in the BasemapSwitcher.\n * Defaults to `false`.\n */\n allowSelectingEmptyBasemap?: boolean | undefined;\n\n /**\n * Optional aria-labelledby property.\n * Do not use together with aria-label.\n */\n \"aria-labelledby\"?: string;\n\n /**\n * Optional aria-label property.\n * Do not use together with aria-label.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * The `BasemapSwitcher` component can be used in an app to switch between the different basemaps.\n */\nexport const BasemapSwitcher: FC<BasemapSwitcherProps> = (props) => {\n const intl = useIntl();\n const {\n mapId,\n allowSelectingEmptyBasemap = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy\n } = props;\n const { containerProps } = useCommonComponentProps(\"basemap-switcher\", props);\n const emptyBasemapLabel = intl.formatMessage({ id: \"emptyBasemapLabel\" });\n\n const { map } = useMapModel(mapId);\n const baseLayers = useBaseLayers(map);\n const chakraStyles = useChakraStyles();\n const [isOpenSelect, setIsOpenSelect] = useState(false);\n\n const activateLayer = (layerId: string) => {\n map?.layers.activateBaseLayer(layerId === NO_BASEMAP_ID ? undefined : layerId);\n };\n\n const { options, selectedLayer } = useMemo(() => {\n const options: SelectOption[] = baseLayers.map<SelectOption>((layer) => {\n return { value: layer.id, layer: layer };\n });\n\n const activeBaseLayer = map?.layers.getActiveBaseLayer();\n if (allowSelectingEmptyBasemap || activeBaseLayer == undefined) {\n const emptyOption: SelectOption = { value: NO_BASEMAP_ID, layer: undefined };\n options.push(emptyOption);\n }\n\n const selectedLayer = options.find((l) => l.layer === activeBaseLayer);\n return { options, selectedLayer };\n }, [allowSelectingEmptyBasemap, baseLayers, map?.layers]);\n\n const components = useMemo(() => {\n return {\n Option: BasemapSelectOption,\n SingleValue: BasemapSelectValue\n };\n }, []);\n const keyDown = useEvent((event: KeyboardEvent<HTMLDivElement>) => {\n //if the menu is already open, do noting\n if (!isOpenSelect && event.key === \"Enter\") {\n setIsOpenSelect(true);\n }\n });\n\n return (\n <Box {...containerProps}>\n {map ? (\n <Select<SelectOption>\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className=\"basemap-switcher-select\"\n classNamePrefix=\"react-select\"\n options={options}\n value={selectedLayer}\n onChange={(option) => option && activateLayer(option.value)}\n isClearable={false}\n isSearchable={false}\n menuPosition=\"fixed\"\n // optionLabel is used by screenreaders\n getOptionLabel={(option) =>\n option.layer !== undefined\n ? option.layer.title +\n (option.layer.loadState === \"error\"\n ? \" \" + intl.formatMessage({ id: \"layerNotAvailable\" })\n : \"\")\n : emptyBasemapLabel\n }\n isOptionDisabled={(option) => option?.layer?.loadState === \"error\"}\n components={components}\n ariaLiveMessages={{\n guidance: () => \"\",\n onChange: (props) => {\n if (\n props.action == \"select-option\" ||\n props.action == \"initial-input-focus\"\n )\n return props.label + \" \" + intl.formatMessage({ id: \"selected\" });\n else return \"\";\n },\n onFilter: () => \"\",\n onFocus: () => \"\"\n }}\n chakraStyles={chakraStyles}\n onKeyDown={keyDown}\n menuIsOpen={isOpenSelect}\n onMenuOpen={() => setIsOpenSelect(true)}\n onMenuClose={() => setIsOpenSelect(false)}\n />\n ) : null}\n </Box>\n );\n};\n\nfunction useBaseLayers(mapModel: MapModel | undefined): Layer[] {\n // Caches potentially expensive layers arrays.\n // Not sure if this is a good idea, but getSnapshot() should always be fast.\n // If this is a no-go, make getAllLayers() fast instead.\n const baseLayers = useRef<Layer[] | undefined>();\n const subscribe = useCallback(\n (cb: () => void) => {\n // Reset cache when (re-) subscribing\n baseLayers.current = undefined;\n\n if (!mapModel) {\n return () => undefined;\n }\n const resource = mapModel.layers.on(\"changed\", () => {\n // Reset cache content so getSnapshot() fetches basemaps again.\n baseLayers.current = undefined;\n cb();\n });\n return () => resource.destroy();\n },\n [mapModel]\n );\n const getSnapshot = useCallback(() => {\n if (baseLayers.current) {\n return baseLayers.current;\n }\n return (baseLayers.current = mapModel?.layers.getBaseLayers() ?? []);\n }, [mapModel]);\n return useSyncExternalStore(subscribe, getSnapshot);\n}\n\nfunction BasemapSelectOption(props: OptionProps<SelectOption>): JSX.Element {\n const { layer } = props.data;\n const { isAvailable, content } = useBasemapItem(layer);\n\n return (\n <chakraComponents.Option\n {...props}\n isDisabled={!isAvailable}\n className=\"basemap-switcher-option\"\n >\n {content}\n </chakraComponents.Option>\n );\n}\n\nfunction BasemapSelectValue(props: SingleValueProps<SelectOption>): JSX.Element {\n const { layer } = props.data;\n const { isAvailable, content } = useBasemapItem(layer);\n\n return (\n <chakraComponents.SingleValue\n {...props}\n isDisabled={!isAvailable}\n className=\"basemap-switcher-value\"\n >\n {content}\n </chakraComponents.SingleValue>\n );\n}\n\nfunction useBasemapItem(layer: Layer | undefined) {\n const intl = useIntl();\n const notAvailableLabel = intl.formatMessage({ id: \"layerNotAvailable\" });\n const label = useTitle(layer);\n const isAvailable = useLoadState(layer) !== \"error\";\n\n return {\n isAvailable,\n content: (\n <Flex direction=\"row\" alignItems=\"center\">\n {label}\n {!isAvailable && (\n <Box ml={2}>\n <Tooltip label={notAvailableLabel} placement=\"right\" openDelay={500}>\n <span>\n <FiAlertTriangle color={\"red\"} aria-label={notAvailableLabel} />\n </span>\n </Tooltip>\n </Box>\n )}\n </Flex>\n )\n };\n}\n\nfunction useTitle(layer: Layer | undefined): string {\n const intl = useIntl();\n const emptyBasemapLabel = intl.formatMessage({ id: \"emptyBasemapLabel\" });\n\n const getSnapshot = useCallback(() => {\n return layer === undefined ? emptyBasemapLabel : layer.title; // undefined == empty basemap\n }, [layer, emptyBasemapLabel]);\n const subscribe = useCallback(\n (cb: () => void) => {\n if (layer !== undefined) {\n const resource = layer.on(\"changed:title\", cb);\n return () => resource.destroy();\n }\n return () => {};\n },\n [layer]\n );\n\n return useSyncExternalStore(subscribe, getSnapshot);\n}\n\nfunction useLoadState(layer: Layer | undefined): string {\n const getSnapshot = useCallback(() => {\n return layer === undefined ? \"loaded\" : layer.loadState; // undefined == empty basemap\n }, [layer]);\n const subscribe = useCallback(\n (cb: () => void) => {\n if (layer !== undefined) {\n const resource = layer.on(\"changed:loadState\", cb);\n return () => resource.destroy();\n }\n return () => {};\n },\n [layer]\n );\n\n return useSyncExternalStore(subscribe, getSnapshot);\n}\n\n/**\n * Customizes components styles within the select component.\n */\nfunction useChakraStyles() {\n const [dropDownBackground, borderColor] = useToken(\n \"colors\",\n [\"background_body\", \"border\"],\n [\"#ffffff\", \"#ffffff\"]\n );\n return useMemo(() => {\n const chakraStyles: ChakraStylesConfig<SelectOption, false, GroupBase<SelectOption>> = {\n control: (styles) => ({ ...styles, cursor: \"pointer\" }),\n indicatorSeparator: (styles) => ({\n ...styles,\n borderColor: borderColor\n }),\n dropdownIndicator: (provided) => ({\n ...provided,\n backgroundColor: dropDownBackground\n })\n };\n return chakraStyles;\n }, [dropDownBackground, borderColor]);\n}\n"],"names":["options","selectedLayer","props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BasemapSwitcher.js","sources":["BasemapSwitcher.tsx"],"sourcesContent":["// SPDX-FileCopyrightText: 2023 Open Pioneer project (https://github.com/open-pioneer)\n// SPDX-License-Identifier: Apache-2.0\nimport { Box, Flex, Tooltip, useToken } from \"@open-pioneer/chakra-integration\";\nimport { Layer, MapModel, useMapModel, MapModelProps } from \"@open-pioneer/map\";\nimport { CommonComponentProps, useCommonComponentProps, useEvent } from \"@open-pioneer/react-utils\";\nimport { useReactiveSnapshot } from \"@open-pioneer/reactivity\";\nimport {\n chakraComponents,\n ChakraStylesConfig,\n GroupBase,\n OptionProps,\n Select,\n SingleValueProps\n} from \"chakra-react-select\";\nimport { useIntl } from \"open-pioneer:react-hooks\";\nimport { FC, KeyboardEvent, useMemo, useState } from \"react\";\nimport { FiAlertTriangle } from \"react-icons/fi\";\n\n/*\n Exported for tests. Feels a bit hacky but should be fine for now.\n Originally was using the empty string, but that doesn't work well with happy-dom.\n*/\nexport const NO_BASEMAP_ID = \"___NO_BASEMAP___\";\n\n/**\n * Properties for single select options.\n */\nexport interface SelectOption {\n /**\n * The id of the basemap for the select option.\n */\n value: string;\n\n /**\n * The layer object for the select option.\n */\n layer: Layer | undefined;\n}\n\n/**\n * These are special properties for the BasemapSwitcher.\n */\nexport interface BasemapSwitcherProps extends CommonComponentProps, MapModelProps {\n /**\n * Additional css class name(s) that will be added to the BasemapSwitcher component.\n */\n className?: string;\n\n /**\n * Specifies whether an option to deactivate all basemap layers is available in the BasemapSwitcher.\n * Defaults to `false`.\n */\n allowSelectingEmptyBasemap?: boolean | undefined;\n\n /**\n * Optional aria-labelledby property.\n * Do not use together with aria-label.\n */\n \"aria-labelledby\"?: string;\n\n /**\n * Optional aria-label property.\n * Do not use together with aria-label.\n */\n \"aria-label\"?: string;\n}\n\n/**\n * The `BasemapSwitcher` component can be used in an app to switch between the different basemaps.\n */\nexport const BasemapSwitcher: FC<BasemapSwitcherProps> = (props) => {\n const intl = useIntl();\n const {\n allowSelectingEmptyBasemap = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy\n } = props;\n const { containerProps } = useCommonComponentProps(\"basemap-switcher\", props);\n const emptyBasemapLabel = intl.formatMessage({ id: \"emptyBasemapLabel\" });\n\n const { map } = useMapModel(props);\n const baseLayers = useBaseLayers(map);\n const activeBaseLayer = useReactiveSnapshot(() => map?.layers.getActiveBaseLayer(), [map]);\n\n const activateLayer = (layerId: string) => {\n map?.layers.activateBaseLayer(layerId === NO_BASEMAP_ID ? undefined : layerId);\n };\n\n const { options, selectedLayer } = useMemo(() => {\n const options: SelectOption[] = baseLayers.map<SelectOption>((layer) => {\n return { value: layer.id, layer: layer };\n });\n\n if (allowSelectingEmptyBasemap || activeBaseLayer == null) {\n const emptyOption: SelectOption = { value: NO_BASEMAP_ID, layer: undefined };\n options.push(emptyOption);\n }\n\n const selectedLayer = options.find((l) => l.layer === activeBaseLayer);\n return { options, selectedLayer };\n }, [allowSelectingEmptyBasemap, baseLayers, activeBaseLayer]);\n\n const chakraStyles = useChakraStyles();\n const [isOpenSelect, setIsOpenSelect] = useState(false);\n const components = useMemo(() => {\n return {\n Option: BasemapSelectOption,\n SingleValue: BasemapSelectValue\n };\n }, []);\n const keyDown = useEvent((event: KeyboardEvent<HTMLDivElement>) => {\n //if the menu is already open, do noting\n if (!isOpenSelect && event.key === \"Enter\") {\n setIsOpenSelect(true);\n }\n });\n\n return (\n <Box {...containerProps}>\n {map ? (\n <Select<SelectOption>\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className=\"basemap-switcher-select\"\n classNamePrefix=\"react-select\"\n options={options}\n value={selectedLayer}\n onChange={(option) => option && activateLayer(option.value)}\n isClearable={false}\n isSearchable={false}\n menuPosition=\"fixed\"\n // optionLabel is used by screenreaders\n getOptionLabel={(option) =>\n option.layer !== undefined\n ? option.layer.title +\n (option.layer.loadState === \"error\"\n ? \" \" + intl.formatMessage({ id: \"layerNotAvailable\" })\n : \"\")\n : emptyBasemapLabel\n }\n isOptionDisabled={(option) => option?.layer?.loadState === \"error\"}\n components={components}\n ariaLiveMessages={{\n guidance: () => \"\",\n onChange: (props) => {\n if (\n props.action == \"select-option\" ||\n props.action == \"initial-input-focus\"\n )\n return props.label + \" \" + intl.formatMessage({ id: \"selected\" });\n else return \"\";\n },\n onFilter: () => \"\",\n onFocus: () => \"\"\n }}\n chakraStyles={chakraStyles}\n onKeyDown={keyDown}\n menuIsOpen={isOpenSelect}\n onMenuOpen={() => setIsOpenSelect(true)}\n onMenuClose={() => setIsOpenSelect(false)}\n />\n ) : null}\n </Box>\n );\n};\n\nfunction useBaseLayers(mapModel: MapModel | undefined): Layer[] {\n return useReactiveSnapshot(() => mapModel?.layers.getBaseLayers() ?? [], [mapModel]);\n}\n\nfunction BasemapSelectOption(props: OptionProps<SelectOption>): JSX.Element {\n const { layer } = props.data;\n const { isAvailable, content } = useBasemapItem(layer);\n\n return (\n <chakraComponents.Option\n {...props}\n isDisabled={!isAvailable}\n className=\"basemap-switcher-option\"\n >\n {content}\n </chakraComponents.Option>\n );\n}\n\nfunction BasemapSelectValue(props: SingleValueProps<SelectOption>): JSX.Element {\n const { layer } = props.data;\n const { isAvailable, content } = useBasemapItem(layer);\n\n return (\n <chakraComponents.SingleValue\n {...props}\n isDisabled={!isAvailable}\n className=\"basemap-switcher-value\"\n >\n {content}\n </chakraComponents.SingleValue>\n );\n}\n\nfunction useBasemapItem(layer: Layer | undefined) {\n const intl = useIntl();\n const notAvailableLabel = intl.formatMessage({ id: \"layerNotAvailable\" });\n const { label, isAvailable } = useReactiveSnapshot(() => {\n if (!layer) {\n // undefined layer -> empty basemap entry\n return { label: intl.formatMessage({ id: \"emptyBasemapLabel\" }), isAvailable: true };\n }\n\n return {\n label: layer.title,\n isAvailable: layer.loadState !== \"error\"\n };\n }, [layer, intl]);\n\n return {\n isAvailable,\n content: (\n <Flex direction=\"row\" alignItems=\"center\">\n {label}\n {!isAvailable && (\n <Box ml={2}>\n <Tooltip label={notAvailableLabel} placement=\"right\" openDelay={500}>\n <span>\n <FiAlertTriangle color={\"red\"} aria-label={notAvailableLabel} />\n </span>\n </Tooltip>\n </Box>\n )}\n </Flex>\n )\n };\n}\n\n/**\n * Customizes components styles within the select component.\n */\nfunction useChakraStyles() {\n const [dropDownBackground, borderColor] = useToken(\n \"colors\",\n [\"background_body\", \"border\"],\n [\"#ffffff\", \"#ffffff\"]\n );\n return useMemo(() => {\n const chakraStyles: ChakraStylesConfig<SelectOption, false, GroupBase<SelectOption>> = {\n control: (styles) => ({ ...styles, cursor: \"pointer\" }),\n indicatorSeparator: (styles) => ({\n ...styles,\n borderColor: borderColor\n }),\n dropdownIndicator: (provided) => ({\n ...provided,\n backgroundColor: dropDownBackground\n })\n };\n return chakraStyles;\n }, [dropDownBackground, borderColor]);\n}\n"],"names":["options","selectedLayer","props"],"mappings":"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"}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
# @open-pioneer/basemap-switcher
|
|
2
2
|
|
|
3
|
+
## 0.8.0-dev.20241120115147
|
|
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
|
+
- e7978a8: Use reactive map model APIs to access the current set of basemaps.
|
|
16
|
+
- Updated dependencies [b717121]
|
|
17
|
+
- Updated dependencies [e7978a8]
|
|
18
|
+
- Updated dependencies [7ae9f90]
|
|
19
|
+
- Updated dependencies [d8337a6]
|
|
20
|
+
- Updated dependencies [b2127df]
|
|
21
|
+
- Updated dependencies [2fa8020]
|
|
22
|
+
- Updated dependencies [7ae9f90]
|
|
23
|
+
- Updated dependencies [d8337a6]
|
|
24
|
+
- @open-pioneer/map@0.8.0-dev.20241120115147
|
|
25
|
+
|
|
26
|
+
## 0.7.0
|
|
27
|
+
|
|
28
|
+
### Minor Changes
|
|
29
|
+
|
|
30
|
+
- 310800c: Switch from `peerDependencies` to normal `dependencies`. Peer dependencies have some usability problems when used at scale.
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- 310800c: Update core packages version.
|
|
35
|
+
- 583f1d6: The `mapId` or `map` properties are now optional on individual components.
|
|
36
|
+
You can use the `DefaultMapProvider` to configure an implicit default value.
|
|
37
|
+
|
|
38
|
+
Note that configuring _neither_ a default _nor_ an explicit `map` or `mapId` will trigger a runtime error.
|
|
39
|
+
|
|
40
|
+
- 583f1d6: All UI components in this project now accept the `mapId` (a `string`) _or_ the `map` (a `MapModel`) directly.
|
|
41
|
+
- a8b3449: Switch to a new versioning strategy.
|
|
42
|
+
From now on, packages released by this repository share a common version number.
|
|
43
|
+
- 900eb11: Update dependencies.
|
|
44
|
+
- Updated dependencies [310800c]
|
|
45
|
+
- Updated dependencies [2502050]
|
|
46
|
+
- Updated dependencies [583f1d6]
|
|
47
|
+
- Updated dependencies [583f1d6]
|
|
48
|
+
- Updated dependencies [397d617]
|
|
49
|
+
- Updated dependencies [a8b3449]
|
|
50
|
+
- Updated dependencies [310800c]
|
|
51
|
+
- Updated dependencies [900eb11]
|
|
52
|
+
- Updated dependencies [583f1d6]
|
|
53
|
+
- Updated dependencies [397d617]
|
|
54
|
+
- @open-pioneer/map@0.7.0
|
|
55
|
+
|
|
3
56
|
## 0.4.4
|
|
4
57
|
|
|
5
58
|
### Patch Changes
|
package/i18n/de.yaml
CHANGED
package/i18n/en.yaml
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@open-pioneer/basemap-switcher",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0-dev.20241120115147",
|
|
5
5
|
"description": "This package provides a UI component that allows a user to switch between different base maps.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"open-pioneer-trails"
|
|
@@ -13,15 +13,17 @@
|
|
|
13
13
|
"url": "https://github.com/open-pioneer/trails-openlayers-base-packages",
|
|
14
14
|
"directory": "src/packages/basemap-switcher"
|
|
15
15
|
},
|
|
16
|
-
"
|
|
17
|
-
"@open-pioneer/chakra-integration": "^
|
|
18
|
-
"@open-pioneer/react-utils": "^
|
|
19
|
-
"@open-pioneer/runtime": "^2.
|
|
20
|
-
"chakra-react-select": "^
|
|
21
|
-
"ol": "^
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@open-pioneer/chakra-integration": "^2.4.0-dev.20241120092632",
|
|
18
|
+
"@open-pioneer/react-utils": "^2.4.0-dev.20241120092632",
|
|
19
|
+
"@open-pioneer/runtime": "^2.4.0-dev.20241120092632",
|
|
20
|
+
"chakra-react-select": "^5.0.2",
|
|
21
|
+
"ol": "^10.2.1",
|
|
22
22
|
"react": "^18.3.1",
|
|
23
|
-
"react-icons": "^5.
|
|
24
|
-
"@open-pioneer/
|
|
23
|
+
"react-icons": "^5.3.0",
|
|
24
|
+
"@open-pioneer/reactivity": "^2.4.0-dev.20241120092632",
|
|
25
|
+
"@conterra/reactivity-core": "^0.4.3",
|
|
26
|
+
"@open-pioneer/map": "^0.8.0-dev.20241120115147"
|
|
25
27
|
},
|
|
26
28
|
"exports": {
|
|
27
29
|
"./package.json": "./package.json",
|