@itwin/map-layers 3.1.0-dev.28 → 3.1.0-dev.33
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/lib/cjs/ui/Interfaces.d.ts +2 -2
- package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
- package/lib/cjs/ui/Interfaces.js.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.js +8 -8
- package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerDroppable.js +5 -2
- package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.d.ts +2 -2
- package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.js +11 -9
- package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +2 -2
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts +3 -3
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.js +7 -7
- package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.js +13 -11
- package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/esm/ui/Interfaces.d.ts +2 -2
- package/lib/esm/ui/Interfaces.d.ts.map +1 -1
- package/lib/esm/ui/Interfaces.js.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.js +9 -9
- package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerDroppable.js +5 -2
- package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.d.ts +2 -2
- package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.js +11 -9
- package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsMenu.js +2 -2
- package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.d.ts +3 -3
- package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.js +7 -7
- package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.js +13 -11
- package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
- package/package.json +26 -26
|
@@ -3,8 +3,8 @@ import { MapLayerImageryProvider } from "@itwin/core-frontend";
|
|
|
3
3
|
export interface StyleMapLayerSettings {
|
|
4
4
|
/** Name */
|
|
5
5
|
name: string;
|
|
6
|
-
/** URL */
|
|
7
|
-
|
|
6
|
+
/** source (i.URL for ImageMapLayerSettings or modelId for ModelMapLayerSettings) */
|
|
7
|
+
source: string;
|
|
8
8
|
/** Controls visibility of layer */
|
|
9
9
|
visible: boolean;
|
|
10
10
|
/** A transparency value from 0.0 (fully opaque) to 1.0 (fully transparent) to apply to map graphics when drawing, or false to indicate the transparency should not be overridden. Default value: false. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interfaces.d.ts","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"Interfaces.d.ts","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,2MAA2M;IAC3M,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interfaces.js","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapLayerImageryProvider } from \"@itwin/core-frontend\";\r\n\r\nexport interface StyleMapLayerSettings {\r\n /** Name */\r\n name: string;\r\n /** URL */\r\n
|
|
1
|
+
{"version":3,"file":"Interfaces.js","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapLayerImageryProvider } from \"@itwin/core-frontend\";\r\n\r\nexport interface StyleMapLayerSettings {\r\n /** Name */\r\n name: string;\r\n /** source (i.URL for ImageMapLayerSettings or modelId for ModelMapLayerSettings) */\r\n source: string;\r\n /** Controls visibility of layer */\r\n visible: boolean;\r\n /** A transparency value from 0.0 (fully opaque) to 1.0 (fully transparent) to apply to map graphics when drawing, or false to indicate the transparency should not be overridden. Default value: false. */\r\n transparency: number;\r\n /** Transparent background */\r\n transparentBackground: boolean;\r\n /** set map as underlay or overlay */\r\n isOverlay: boolean;\r\n /** Available map sub-layer */\r\n subLayers?: MapSubLayerProps[];\r\n /** sub-layer panel displayed. */\r\n showSubLayers: boolean;\r\n /** Some format can publish only a single layer at a time (i.e WMTS) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\nexport interface MapTypesOptions {\r\n readonly supportTileUrl: boolean;\r\n readonly supportWmsAuthentication: boolean;\r\n}\r\n\r\nexport interface MapLayerOptions {\r\n hideExternalMapLayers?: boolean;\r\n fetchPublicMapLayerSources?: boolean;\r\n mapTypeOptions?: MapTypesOptions;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasemapPanel.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"BasemapPanel.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":";AAeA,OAAO,qBAAqB,CAAC;AAc7B,gBAAgB;AAEhB,wBAAgB,YAAY,gBAwI3B"}
|
|
@@ -7,20 +7,20 @@
|
|
|
7
7
|
// cSpell:ignore droppable Sublayer Basemap
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.BasemapPanel = void 0;
|
|
10
|
-
const
|
|
10
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
11
11
|
const core_common_1 = require("@itwin/core-common");
|
|
12
|
-
const imodel_components_react_1 = require("@itwin/imodel-components-react");
|
|
13
12
|
const core_react_1 = require("@itwin/core-react");
|
|
13
|
+
const imodel_components_react_1 = require("@itwin/imodel-components-react");
|
|
14
14
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
15
|
-
const
|
|
16
|
-
const TransparencyPopupButton_1 = require("./TransparencyPopupButton");
|
|
17
|
-
const MapLayerManager_1 = require("./MapLayerManager");
|
|
18
|
-
require("./BasemapPanel.scss");
|
|
15
|
+
const React = require("react");
|
|
19
16
|
const MapLayersUiItemsProvider_1 = require("../MapLayersUiItemsProvider");
|
|
17
|
+
require("./BasemapPanel.scss");
|
|
18
|
+
const MapLayerManager_1 = require("./MapLayerManager");
|
|
19
|
+
const TransparencyPopupButton_1 = require("./TransparencyPopupButton");
|
|
20
20
|
function getBaseMapFromStyle(displayStyle) {
|
|
21
21
|
if (!displayStyle)
|
|
22
22
|
return undefined;
|
|
23
|
-
if (displayStyle.settings.mapImagery.backgroundBase instanceof core_common_1.
|
|
23
|
+
if (displayStyle.settings.mapImagery.backgroundBase instanceof core_common_1.ImageMapLayerSettings || displayStyle.settings.mapImagery.backgroundBase instanceof core_common_1.ColorDef)
|
|
24
24
|
return displayStyle.settings.mapImagery.backgroundBase.toJSON();
|
|
25
25
|
return undefined;
|
|
26
26
|
}
|
|
@@ -113,7 +113,7 @@ function BasemapPanel() {
|
|
|
113
113
|
}
|
|
114
114
|
}, [bases, activeViewport, bgColor]);
|
|
115
115
|
const [baseMapVisible, setBaseMapVisible] = React.useState(() => {
|
|
116
|
-
if (activeViewport && activeViewport.displayStyle.backgroundMapBase instanceof core_common_1.
|
|
116
|
+
if (activeViewport && activeViewport.displayStyle.backgroundMapBase instanceof core_common_1.ImageMapLayerSettings) {
|
|
117
117
|
return activeViewport.displayStyle.backgroundMapBase.visible;
|
|
118
118
|
}
|
|
119
119
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasemapPanel.js","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\nimport * as React from \"react\";\r\nimport { BaseMapLayerSettings, ColorByName, ColorDef, MapLayerProps, MapLayerSettings } from \"@itwin/core-common\";\r\nimport { DisplayStyleState } from \"@itwin/core-frontend\";\r\nimport { ColorPickerDialog, ColorSwatch } from \"@itwin/imodel-components-react\";\r\nimport { WebFontIcon } from \"@itwin/core-react\";\r\nimport { Select, SelectOption } from \"@itwin/itwinui-react\";\r\nimport { ModalDialogManager } from \"@itwin/appui-react\";\r\nimport { TransparencyPopupButton } from \"./TransparencyPopupButton\";\r\nimport { useSourceMapContext } from \"./MapLayerManager\";\r\nimport \"./BasemapPanel.scss\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\n\r\nfunction getBaseMapFromStyle(displayStyle: DisplayStyleState | undefined) {\r\n if (!displayStyle)\r\n return undefined;\r\n\r\n if (displayStyle.settings.mapImagery.backgroundBase instanceof MapLayerSettings || displayStyle.settings.mapImagery.backgroundBase instanceof ColorDef)\r\n return displayStyle.settings.mapImagery.backgroundBase.toJSON();\r\n\r\n return undefined;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function BasemapPanel() {\r\n const [useColorLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.ColorFill\"));\r\n const { activeViewport, bases } = useSourceMapContext();\r\n\r\n const [baseMapTransparencyValue, setBaseMapTransparencyValue] = React.useState(() => {\r\n if (activeViewport)\r\n return activeViewport.displayStyle.baseMapTransparency;\r\n return 0;\r\n });\r\n\r\n const handleBasemapTransparencyChange = React.useCallback((transparency: number) => {\r\n if (activeViewport) {\r\n activeViewport.displayStyle.changeBaseMapTransparency(transparency);\r\n activeViewport.invalidateRenderPlan();\r\n setBaseMapTransparencyValue(transparency);\r\n }\r\n }, [activeViewport]);\r\n\r\n const baseMapOptions = React.useMemo<SelectOption<string>[]>(() => {\r\n const baseOptions: SelectOption<string>[] = [];\r\n\r\n baseOptions.push({ value: useColorLabel, label: useColorLabel });\r\n\r\n if (bases)\r\n baseOptions.push(...bases.map((value) => ({ value: value.name, label: value.name })));\r\n return baseOptions;\r\n }, [bases, useColorLabel]);\r\n\r\n const [presetColors] = React.useState([\r\n ColorDef.create(ColorByName.grey),\r\n ColorDef.create(ColorByName.lightGrey),\r\n ColorDef.create(ColorByName.darkGrey),\r\n ColorDef.create(ColorByName.lightBlue),\r\n ColorDef.create(ColorByName.lightGreen),\r\n ColorDef.create(ColorByName.darkGreen),\r\n ColorDef.create(ColorByName.tan),\r\n ColorDef.create(ColorByName.darkBrown),\r\n ]);\r\n\r\n const [selectedBaseMap, setSelectedBaseMap] = React.useState<MapLayerProps | number | undefined>(getBaseMapFromStyle(activeViewport?.displayStyle));\r\n const baseIsColor = React.useMemo(() => typeof selectedBaseMap === \"number\", [selectedBaseMap]);\r\n const baseIsMap = React.useMemo(() => !baseIsColor && (selectedBaseMap !== undefined), [baseIsColor, selectedBaseMap]);\r\n const bgColor = React.useMemo(() => baseIsColor ? selectedBaseMap as number : presetColors[0].toJSON(), [baseIsColor, selectedBaseMap, presetColors]);\r\n const [colorDialogTitle] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:ColorDialog.Title\"));\r\n const selectedBaseMapValue = React.useMemo(() => {\r\n if (baseIsMap) {\r\n const mapName = (selectedBaseMap! as MapLayerProps).name;\r\n const foundItem = baseMapOptions.find((value) => value.label === mapName);\r\n if (foundItem)\r\n return foundItem;\r\n }\r\n return baseMapOptions[0];\r\n }, [selectedBaseMap, baseMapOptions, baseIsMap]);\r\n\r\n const handleBackgroundColorDialogOk = React.useCallback((bgColorDef: ColorDef) => {\r\n ModalDialogManager.closeDialog();\r\n if (activeViewport) {\r\n // change color and make sure previously set transparency is not lost.\r\n const curTransparency = activeViewport.displayStyle.backgroundMapBase instanceof ColorDef ? activeViewport.displayStyle.backgroundMapBase.getTransparency() : 0;\r\n activeViewport.displayStyle.backgroundMapBase = bgColorDef.withTransparency(curTransparency);\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(bgColorDef.toJSON());\r\n }\r\n }, [activeViewport]);\r\n\r\n const handleBackgroundColorDialogCancel = React.useCallback(() => {\r\n ModalDialogManager.closeDialog();\r\n }, []);\r\n\r\n const handleBgColorClick = React.useCallback((newColor: ColorDef, e: React.MouseEvent<Element, MouseEvent>) => {\r\n e.preventDefault();\r\n ModalDialogManager.openDialog(<ColorPickerDialog dialogTitle={colorDialogTitle} color={newColor} colorPresets={presetColors}\r\n onOkResult={handleBackgroundColorDialogOk} onCancelResult={handleBackgroundColorDialogCancel} />);\r\n }, [presetColors, handleBackgroundColorDialogOk]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const handleBaseMapSelection = React.useCallback((value: string) => {\r\n if (bases && activeViewport && value) {\r\n const baseMap = bases.find((map) => map.name === value);\r\n if (baseMap) {\r\n const baseProps: MapLayerProps = baseMap.toJSON();\r\n if (activeViewport.displayStyle.backgroundMapBase instanceof BaseMapLayerSettings) {\r\n activeViewport.displayStyle.backgroundMapBase = activeViewport.displayStyle.backgroundMapBase.clone(baseProps);\r\n } else {\r\n activeViewport.displayStyle.backgroundMapBase = BaseMapLayerSettings.fromJSON(baseProps);\r\n }\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(baseProps);\r\n } else {\r\n const bgColorDef = ColorDef.fromJSON(bgColor);\r\n const curTransparency = activeViewport.displayStyle.backgroundMapBase instanceof ColorDef ? activeViewport.displayStyle.backgroundMapBase.getTransparency() : 0;\r\n activeViewport.displayStyle.backgroundMapBase = bgColorDef.withTransparency(curTransparency);\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(bgColorDef.toJSON());\r\n }\r\n }\r\n }, [bases, activeViewport, bgColor]);\r\n\r\n const [baseMapVisible, setBaseMapVisible] = React.useState(() => {\r\n if (activeViewport && activeViewport.displayStyle.backgroundMapBase instanceof MapLayerSettings) {\r\n return activeViewport.displayStyle.backgroundMapBase.visible;\r\n }\r\n return false;\r\n });\r\n\r\n const handleVisibilityChange = React.useCallback(() => {\r\n if (activeViewport) {\r\n const newState = !baseMapVisible;\r\n // BaseMap visibility is only support when backgroundBase is an instance of BaseMapLayerSettings (i.e not a color)...\r\n if (activeViewport.displayStyle.backgroundMapBase instanceof BaseMapLayerSettings) {\r\n activeViewport.displayStyle.backgroundMapBase = activeViewport.displayStyle.backgroundMapBase.clone({ visible: newState });\r\n activeViewport.invalidateRenderPlan();\r\n }\r\n setBaseMapVisible(newState);\r\n }\r\n }, [baseMapVisible, activeViewport]);\r\n\r\n const [baseLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.BaseLayer\"));\r\n const [selectBaseMapLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.SelectBaseMap\"));\r\n const [toggleVisibility] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\r\n\r\n return (\r\n <>\r\n <div className=\"map-manager-base-item\" >\r\n <button className=\"map-manager-item-visibility\" title={toggleVisibility} onClick={handleVisibilityChange}>\r\n <WebFontIcon iconName={baseMapVisible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} />\r\n </button>\r\n <span className=\"map-manager-base-label\">{baseLayerLabel}</span>\r\n <Select options={baseMapOptions} placeholder={selectBaseMapLabel} value={selectedBaseMapValue.value} onChange={handleBaseMapSelection} size=\"small\" />\r\n {\r\n baseIsColor &&\r\n <ColorSwatch className=\"map-manager-base-item-color\" colorDef={ColorDef.fromJSON(bgColor)} round={false} onColorPick={handleBgColorClick} />\r\n }\r\n <TransparencyPopupButton transparency={baseMapTransparencyValue} onTransparencyChange={handleBasemapTransparencyChange} />\r\n </div>\r\n </>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BasemapPanel.js","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\nimport { ModalDialogManager } from \"@itwin/appui-react\";\r\nimport { BaseMapLayerSettings, ColorByName, ColorDef, ImageMapLayerSettings, MapLayerProps } from \"@itwin/core-common\";\r\nimport { DisplayStyleState } from \"@itwin/core-frontend\";\r\nimport { WebFontIcon } from \"@itwin/core-react\";\r\nimport { ColorPickerDialog, ColorSwatch } from \"@itwin/imodel-components-react\";\r\nimport { Select, SelectOption } from \"@itwin/itwinui-react\";\r\nimport * as React from \"react\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport \"./BasemapPanel.scss\";\r\nimport { useSourceMapContext } from \"./MapLayerManager\";\r\nimport { TransparencyPopupButton } from \"./TransparencyPopupButton\";\r\n\r\nfunction getBaseMapFromStyle(displayStyle: DisplayStyleState | undefined) {\r\n if (!displayStyle)\r\n return undefined;\r\n\r\n if (displayStyle.settings.mapImagery.backgroundBase instanceof ImageMapLayerSettings || displayStyle.settings.mapImagery.backgroundBase instanceof ColorDef)\r\n return displayStyle.settings.mapImagery.backgroundBase.toJSON();\r\n\r\n return undefined;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function BasemapPanel() {\r\n const [useColorLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.ColorFill\"));\r\n const { activeViewport, bases } = useSourceMapContext();\r\n\r\n const [baseMapTransparencyValue, setBaseMapTransparencyValue] = React.useState(() => {\r\n if (activeViewport)\r\n return activeViewport.displayStyle.baseMapTransparency;\r\n return 0;\r\n });\r\n\r\n const handleBasemapTransparencyChange = React.useCallback((transparency: number) => {\r\n if (activeViewport) {\r\n activeViewport.displayStyle.changeBaseMapTransparency(transparency);\r\n activeViewport.invalidateRenderPlan();\r\n setBaseMapTransparencyValue(transparency);\r\n }\r\n }, [activeViewport]);\r\n\r\n const baseMapOptions = React.useMemo<SelectOption<string>[]>(() => {\r\n const baseOptions: SelectOption<string>[] = [];\r\n\r\n baseOptions.push({ value: useColorLabel, label: useColorLabel });\r\n\r\n if (bases)\r\n baseOptions.push(...bases.map((value) => ({ value: value.name, label: value.name })));\r\n return baseOptions;\r\n }, [bases, useColorLabel]);\r\n\r\n const [presetColors] = React.useState([\r\n ColorDef.create(ColorByName.grey),\r\n ColorDef.create(ColorByName.lightGrey),\r\n ColorDef.create(ColorByName.darkGrey),\r\n ColorDef.create(ColorByName.lightBlue),\r\n ColorDef.create(ColorByName.lightGreen),\r\n ColorDef.create(ColorByName.darkGreen),\r\n ColorDef.create(ColorByName.tan),\r\n ColorDef.create(ColorByName.darkBrown),\r\n ]);\r\n\r\n const [selectedBaseMap, setSelectedBaseMap] = React.useState<MapLayerProps | number | undefined>(getBaseMapFromStyle(activeViewport?.displayStyle));\r\n const baseIsColor = React.useMemo(() => typeof selectedBaseMap === \"number\", [selectedBaseMap]);\r\n const baseIsMap = React.useMemo(() => !baseIsColor && (selectedBaseMap !== undefined), [baseIsColor, selectedBaseMap]);\r\n const bgColor = React.useMemo(() => baseIsColor ? selectedBaseMap as number : presetColors[0].toJSON(), [baseIsColor, selectedBaseMap, presetColors]);\r\n const [colorDialogTitle] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:ColorDialog.Title\"));\r\n const selectedBaseMapValue = React.useMemo(() => {\r\n if (baseIsMap) {\r\n const mapName = (selectedBaseMap! as MapLayerProps).name;\r\n const foundItem = baseMapOptions.find((value) => value.label === mapName);\r\n if (foundItem)\r\n return foundItem;\r\n }\r\n return baseMapOptions[0];\r\n }, [selectedBaseMap, baseMapOptions, baseIsMap]);\r\n\r\n const handleBackgroundColorDialogOk = React.useCallback((bgColorDef: ColorDef) => {\r\n ModalDialogManager.closeDialog();\r\n if (activeViewport) {\r\n // change color and make sure previously set transparency is not lost.\r\n const curTransparency = activeViewport.displayStyle.backgroundMapBase instanceof ColorDef ? activeViewport.displayStyle.backgroundMapBase.getTransparency() : 0;\r\n activeViewport.displayStyle.backgroundMapBase = bgColorDef.withTransparency(curTransparency);\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(bgColorDef.toJSON());\r\n }\r\n }, [activeViewport]);\r\n\r\n const handleBackgroundColorDialogCancel = React.useCallback(() => {\r\n ModalDialogManager.closeDialog();\r\n }, []);\r\n\r\n const handleBgColorClick = React.useCallback((newColor: ColorDef, e: React.MouseEvent<Element, MouseEvent>) => {\r\n e.preventDefault();\r\n ModalDialogManager.openDialog(<ColorPickerDialog dialogTitle={colorDialogTitle} color={newColor} colorPresets={presetColors}\r\n onOkResult={handleBackgroundColorDialogOk} onCancelResult={handleBackgroundColorDialogCancel} />);\r\n }, [presetColors, handleBackgroundColorDialogOk]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const handleBaseMapSelection = React.useCallback((value: string) => {\r\n if (bases && activeViewport && value) {\r\n const baseMap = bases.find((map) => map.name === value);\r\n if (baseMap) {\r\n const baseProps: MapLayerProps = baseMap.toJSON();\r\n if (activeViewport.displayStyle.backgroundMapBase instanceof BaseMapLayerSettings) {\r\n activeViewport.displayStyle.backgroundMapBase = activeViewport.displayStyle.backgroundMapBase.clone(baseProps);\r\n } else {\r\n activeViewport.displayStyle.backgroundMapBase = BaseMapLayerSettings.fromJSON(baseProps);\r\n }\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(baseProps);\r\n } else {\r\n const bgColorDef = ColorDef.fromJSON(bgColor);\r\n const curTransparency = activeViewport.displayStyle.backgroundMapBase instanceof ColorDef ? activeViewport.displayStyle.backgroundMapBase.getTransparency() : 0;\r\n activeViewport.displayStyle.backgroundMapBase = bgColorDef.withTransparency(curTransparency);\r\n activeViewport.invalidateRenderPlan();\r\n setSelectedBaseMap(bgColorDef.toJSON());\r\n }\r\n }\r\n }, [bases, activeViewport, bgColor]);\r\n\r\n const [baseMapVisible, setBaseMapVisible] = React.useState(() => {\r\n if (activeViewport && activeViewport.displayStyle.backgroundMapBase instanceof ImageMapLayerSettings) {\r\n return activeViewport.displayStyle.backgroundMapBase.visible;\r\n }\r\n return false;\r\n });\r\n\r\n const handleVisibilityChange = React.useCallback(() => {\r\n if (activeViewport) {\r\n const newState = !baseMapVisible;\r\n // BaseMap visibility is only support when backgroundBase is an instance of BaseMapLayerSettings (i.e not a color)...\r\n if (activeViewport.displayStyle.backgroundMapBase instanceof BaseMapLayerSettings) {\r\n activeViewport.displayStyle.backgroundMapBase = activeViewport.displayStyle.backgroundMapBase.clone({ visible: newState });\r\n activeViewport.invalidateRenderPlan();\r\n }\r\n setBaseMapVisible(newState);\r\n }\r\n }, [baseMapVisible, activeViewport]);\r\n\r\n const [baseLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.BaseLayer\"));\r\n const [selectBaseMapLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.SelectBaseMap\"));\r\n const [toggleVisibility] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\r\n\r\n return (\r\n <>\r\n <div className=\"map-manager-base-item\" >\r\n <button className=\"map-manager-item-visibility\" title={toggleVisibility} onClick={handleVisibilityChange}>\r\n <WebFontIcon iconName={baseMapVisible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} />\r\n </button>\r\n <span className=\"map-manager-base-label\">{baseLayerLabel}</span>\r\n <Select options={baseMapOptions} placeholder={selectBaseMapLabel} value={selectedBaseMapValue.value} onChange={handleBaseMapSelection} size=\"small\" />\r\n {\r\n baseIsColor &&\r\n <ColorSwatch className=\"map-manager-base-item-color\" colorDef={ColorDef.fromJSON(bgColor)} round={false} onColorPick={handleBgColorClick} />\r\n }\r\n <TransparencyPopupButton transparency={baseMapTransparencyValue} onTransparencyChange={handleBasemapTransparencyChange} />\r\n </div>\r\n </>\r\n );\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerDroppable.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAiC,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQrF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapLayerDroppable.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAiC,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQrF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,wBAAwB,CAAC;AAGhC,gBAAgB;AAChB,UAAU,sBAAsB;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,EAAE,MAAM,WAAW,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACtF,6BAA6B,EAAE,CAAC,gBAAgB,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACjF,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,gBAAgB;AAEhB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,eAsG9D"}
|
|
@@ -21,6 +21,7 @@ const MapLayersUiItemsProvider_1 = require("../MapLayersUiItemsProvider");
|
|
|
21
21
|
const MapLayerSettingsMenu_1 = require("./MapLayerSettingsMenu");
|
|
22
22
|
const MapUrlDialog_1 = require("./MapUrlDialog");
|
|
23
23
|
require("./MapLayerManager.scss");
|
|
24
|
+
const core_common_1 = require("@itwin/core-common");
|
|
24
25
|
/** @internal */
|
|
25
26
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
26
27
|
function MapLayerDroppable(props) {
|
|
@@ -44,10 +45,12 @@ function MapLayerDroppable(props) {
|
|
|
44
45
|
((_a = activeLayer.provider) === null || _a === void 0 ? void 0 : _a.status) === core_frontend_1.MapLayerImageryProviderStatus.RequireAuth &&
|
|
45
46
|
React.createElement(itwinui_react_1.Button, { className: "map-manager-item-requireAuth", onClick: () => {
|
|
46
47
|
var _a;
|
|
47
|
-
const indexInDisplayStyle = (_a = props.activeViewport) === null || _a === void 0 ? void 0 : _a.displayStyle.
|
|
48
|
+
const indexInDisplayStyle = (_a = props.activeViewport) === null || _a === void 0 ? void 0 : _a.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
|
|
48
49
|
if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {
|
|
49
50
|
const layerSettings = props.activeViewport.displayStyle.mapLayerAtIndex(indexInDisplayStyle, activeLayer.isOverlay);
|
|
50
|
-
|
|
51
|
+
if (layerSettings instanceof core_common_1.ImageMapLayerSettings) {
|
|
52
|
+
appui_react_1.ModalDialogManager.openDialog(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: props.activeViewport, isOverlay: props.isOverlay, layerRequiringCredentials: layerSettings === null || layerSettings === void 0 ? void 0 : layerSettings.toJSON(), onOkResult: props.onItemEdited, mapTypesOptions: props.mapTypesOptions }));
|
|
53
|
+
}
|
|
51
54
|
}
|
|
52
55
|
}, title: requireAuthTooltip },
|
|
53
56
|
React.createElement(core_react_1.Icon, { iconSpec: "icon-status-warning" })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\n// the following quiet warning caused by react-beautiful-dnd package\r\n/* eslint-disable @typescript-eslint/unbound-method */\r\n\r\nimport * as React from \"react\";\r\nimport { Draggable, DraggableChildrenFn, Droppable, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\r\nimport { MapLayerImageryProviderStatus, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { Icon } from \"@itwin/core-react\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ModalDialogManager } from \"@itwin/appui-react\";\r\nimport { Button } from \"@itwin/itwinui-react\";\r\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\r\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport { MapTypesOptions, StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\r\nimport { MapUrlDialog } from \"./MapUrlDialog\";\r\nimport \"./MapLayerManager.scss\";\r\n\r\n/** @internal */\r\ninterface MapLayerDroppableProps {\r\n isOverlay: boolean;\r\n layersList?: StyleMapLayerSettings[];\r\n mapTypesOptions?: MapTypesOptions;\r\n getContainerForClone: () => HTMLElement;\r\n activeViewport: ScreenViewport;\r\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\r\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\r\n onItemEdited: () => void;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\r\n const containsLayer = props.layersList && props.layersList.length > 0;\r\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\r\n const [toggleVisibility] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\r\n const [requireAuthTooltip] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\r\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\r\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\r\n const [dropLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\r\n\r\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\r\n assert(props.layersList !== undefined);\r\n const activeLayer = props.layersList[rubric.source.index];\r\n\r\n return (\r\n <div className=\"map-manager-source-item\" data-id={rubric.source.index} key={activeLayer.name}\r\n {...dragProvided.draggableProps}\r\n ref={dragProvided.innerRef} >\r\n <button className=\"map-manager-item-visibility\" title={toggleVisibility} onClick={() => { props.onItemVisibilityToggleClicked(activeLayer); }}>\r\n <Icon iconSpec={activeLayer.visible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} /></button>\r\n <span className=\"map-manager-item-label\" {...dragProvided.dragHandleProps}>{activeLayer.name}</span>\r\n <div className=\"map-manager-item-sub-layer-container\">\r\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 &&\r\n <SubLayersPopupButton mapLayerSettings={activeLayer} activeViewport={props.activeViewport} />\r\n }\r\n </div>\r\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&\r\n <Button\r\n className=\"map-manager-item-requireAuth\"\r\n onClick={() => {\r\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndUrl(activeLayer.name, activeLayer.url, activeLayer.isOverlay);\r\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\r\n const layerSettings = props.activeViewport.displayStyle.mapLayerAtIndex(indexInDisplayStyle, activeLayer.isOverlay);\r\n\r\n ModalDialogManager.openDialog(<MapUrlDialog activeViewport={props.activeViewport}\r\n isOverlay={props.isOverlay}\r\n layerRequiringCredentials={layerSettings?.toJSON()}\r\n onOkResult={props.onItemEdited}\r\n mapTypesOptions={props.mapTypesOptions}></MapUrlDialog>);\r\n }\r\n\r\n }}\r\n title={requireAuthTooltip}\r\n >\r\n <Icon iconSpec=\"icon-status-warning\" />\r\n </Button>\r\n }\r\n <MapLayerSettingsMenu activeViewport={props.activeViewport} mapLayerSettings={activeLayer} onMenuItemSelection={props.onMenuItemSelected} />\r\n </div>\r\n );\r\n };\r\n\r\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\r\n let node: React.ReactNode;\r\n if (containsLayer) {\r\n // Render a <Draggable>\r\n node = (props.layersList?.map((mapLayerSettings, i) =>\r\n <Draggable key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\r\n {renderItem}\r\n </Draggable>));\r\n } else {\r\n // Render a label that provide a 'Drop here' hint\r\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\r\n node =\r\n <div title={label} className=\"map-manager-no-layers-container\">\r\n {snapshot.isDraggingOver ?\r\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\r\n :\r\n <>\r\n <span className=\"map-manager-no-layers-label\">{label}</span>\r\n <AttachLayerPopupButton buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\r\n </>\r\n }\r\n </div>;\r\n }\r\n return node;\r\n }\r\n\r\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\r\n return (\r\n <div className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`} ref={dropProvided.innerRef} {...dropProvided.droppableProps} >\r\n\r\n {renderDraggableContent(dropSnapshot)}\r\n\r\n {\r\n /* We don't want a placeholder when displaying the 'Drop here' message\r\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\r\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */\r\n }\r\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\r\n </div>);\r\n }\r\n\r\n return (\r\n <Droppable\r\n droppableId={droppableId}\r\n renderClone={renderItem}\r\n getContainerForClone={props.getContainerForClone as any}\r\n >\r\n {renderDraggable}\r\n </Droppable>\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\n// the following quiet warning caused by react-beautiful-dnd package\r\n/* eslint-disable @typescript-eslint/unbound-method */\r\n\r\nimport * as React from \"react\";\r\nimport { Draggable, DraggableChildrenFn, Droppable, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\r\nimport { MapLayerImageryProviderStatus, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { Icon } from \"@itwin/core-react\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ModalDialogManager } from \"@itwin/appui-react\";\r\nimport { Button } from \"@itwin/itwinui-react\";\r\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\r\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport { MapTypesOptions, StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\r\nimport { MapUrlDialog } from \"./MapUrlDialog\";\r\nimport \"./MapLayerManager.scss\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\n\r\n/** @internal */\r\ninterface MapLayerDroppableProps {\r\n isOverlay: boolean;\r\n layersList?: StyleMapLayerSettings[];\r\n mapTypesOptions?: MapTypesOptions;\r\n getContainerForClone: () => HTMLElement;\r\n activeViewport: ScreenViewport;\r\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\r\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\r\n onItemEdited: () => void;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\r\n const containsLayer = props.layersList && props.layersList.length > 0;\r\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\r\n const [toggleVisibility] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\r\n const [requireAuthTooltip] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\r\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\r\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\r\n const [dropLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\r\n\r\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\r\n assert(props.layersList !== undefined);\r\n const activeLayer = props.layersList[rubric.source.index];\r\n\r\n return (\r\n <div className=\"map-manager-source-item\" data-id={rubric.source.index} key={activeLayer.name}\r\n {...dragProvided.draggableProps}\r\n ref={dragProvided.innerRef} >\r\n <button className=\"map-manager-item-visibility\" title={toggleVisibility} onClick={() => { props.onItemVisibilityToggleClicked(activeLayer); }}>\r\n <Icon iconSpec={activeLayer.visible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} /></button>\r\n <span className=\"map-manager-item-label\" {...dragProvided.dragHandleProps}>{activeLayer.name}</span>\r\n <div className=\"map-manager-item-sub-layer-container\">\r\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 &&\r\n <SubLayersPopupButton mapLayerSettings={activeLayer} activeViewport={props.activeViewport} />\r\n }\r\n </div>\r\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&\r\n <Button\r\n className=\"map-manager-item-requireAuth\"\r\n onClick={() => {\r\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\r\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\r\n const layerSettings = props.activeViewport.displayStyle.mapLayerAtIndex(indexInDisplayStyle, activeLayer.isOverlay);\r\n if (layerSettings instanceof ImageMapLayerSettings) {\r\n ModalDialogManager.openDialog(<MapUrlDialog activeViewport={props.activeViewport}\r\n isOverlay={props.isOverlay}\r\n layerRequiringCredentials={layerSettings?.toJSON()}\r\n onOkResult={props.onItemEdited}\r\n mapTypesOptions={props.mapTypesOptions}></MapUrlDialog>);\r\n }\r\n }\r\n\r\n }}\r\n title={requireAuthTooltip}\r\n >\r\n <Icon iconSpec=\"icon-status-warning\" />\r\n </Button>\r\n }\r\n <MapLayerSettingsMenu activeViewport={props.activeViewport} mapLayerSettings={activeLayer} onMenuItemSelection={props.onMenuItemSelected} />\r\n </div>\r\n );\r\n };\r\n\r\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\r\n let node: React.ReactNode;\r\n if (containsLayer) {\r\n // Render a <Draggable>\r\n node = (props.layersList?.map((mapLayerSettings, i) =>\r\n <Draggable key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\r\n {renderItem}\r\n </Draggable>));\r\n } else {\r\n // Render a label that provide a 'Drop here' hint\r\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\r\n node =\r\n <div title={label} className=\"map-manager-no-layers-container\">\r\n {snapshot.isDraggingOver ?\r\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\r\n :\r\n <>\r\n <span className=\"map-manager-no-layers-label\">{label}</span>\r\n <AttachLayerPopupButton buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\r\n </>\r\n }\r\n </div>;\r\n }\r\n return node;\r\n }\r\n\r\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\r\n return (\r\n <div className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`} ref={dropProvided.innerRef} {...dropProvided.droppableProps} >\r\n\r\n {renderDraggableContent(dropSnapshot)}\r\n\r\n {\r\n /* We don't want a placeholder when displaying the 'Drop here' message\r\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\r\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */\r\n }\r\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\r\n </div>);\r\n }\r\n\r\n return (\r\n <Droppable\r\n droppableId={droppableId}\r\n renderClone={renderItem}\r\n getContainerForClone={props.getContainerForClone as any}\r\n >\r\n {renderDraggable}\r\n </Droppable>\r\n );\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import "./MapLayerManager.scss";
|
|
2
|
-
import * as React from "react";
|
|
3
1
|
import { MapLayerSource, ScreenViewport } from "@itwin/core-frontend";
|
|
2
|
+
import * as React from "react";
|
|
4
3
|
import { MapLayerOptions, MapTypesOptions, StyleMapLayerSettings } from "../Interfaces";
|
|
4
|
+
import "./MapLayerManager.scss";
|
|
5
5
|
/** @internal */
|
|
6
6
|
export interface SourceMapContextProps {
|
|
7
7
|
readonly sources: MapLayerSource[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAWA,OAAO,EACmD,cAAc,EACtE,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAKxF,OAAO,wBAAwB,CAAC;AAGhC,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;CAC5C;AAED,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,sCAK3B,CAAC;AAEH,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,qBAAqB,CAE3D;AAoCD,UAAU,oBAAoB;IAC5B,oBAAoB,EAAE,MAAM,WAAW,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,eAyX1D"}
|
|
@@ -8,17 +8,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.MapLayerManager = exports.useSourceMapContext = exports.SourceMapContext = void 0;
|
|
9
9
|
// the following quiet warning caused by react-beautiful-dnd package
|
|
10
10
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
11
|
-
require("./MapLayerManager.scss");
|
|
12
|
-
const React = require("react");
|
|
13
|
-
const react_beautiful_dnd_1 = require("react-beautiful-dnd");
|
|
14
11
|
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
+
const core_common_1 = require("@itwin/core-common");
|
|
15
13
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
16
14
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
15
|
+
const React = require("react");
|
|
16
|
+
const react_beautiful_dnd_1 = require("react-beautiful-dnd");
|
|
17
17
|
const MapLayerPreferences_1 = require("../../MapLayerPreferences");
|
|
18
18
|
const MapLayersUiItemsProvider_1 = require("../MapLayersUiItemsProvider");
|
|
19
19
|
const AttachLayerPopupButton_1 = require("./AttachLayerPopupButton");
|
|
20
20
|
const BasemapPanel_1 = require("./BasemapPanel");
|
|
21
21
|
const MapLayerDroppable_1 = require("./MapLayerDroppable");
|
|
22
|
+
require("./MapLayerManager.scss");
|
|
22
23
|
const MapLayerSettingsPopupButton_1 = require("./MapLayerSettingsPopupButton");
|
|
23
24
|
/** @internal */
|
|
24
25
|
exports.SourceMapContext = React.createContext({
|
|
@@ -45,13 +46,14 @@ function getMapLayerSettingsFromViewport(viewport, getBackgroundMap, populateSub
|
|
|
45
46
|
const layerSettings = displayStyleLayers[layerIdx];
|
|
46
47
|
const isOverlay = !getBackgroundMap;
|
|
47
48
|
const layerProvider = viewport.getMapLayerImageryProvider(layerIdx, isOverlay);
|
|
49
|
+
const popSubLayers = populateSubLayers && (layerSettings instanceof core_common_1.ImageMapLayerSettings);
|
|
48
50
|
layers.push({
|
|
49
51
|
visible: layerSettings.visible,
|
|
50
52
|
name: layerSettings.name,
|
|
51
|
-
|
|
53
|
+
source: layerSettings.source,
|
|
52
54
|
transparency: layerSettings.transparency,
|
|
53
55
|
transparentBackground: layerSettings.transparentBackground,
|
|
54
|
-
subLayers:
|
|
56
|
+
subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,
|
|
55
57
|
showSubLayers: false,
|
|
56
58
|
isOverlay,
|
|
57
59
|
provider: layerProvider,
|
|
@@ -224,7 +226,7 @@ function MapLayerManager(props) {
|
|
|
224
226
|
const handleOnMenuItemSelection = React.useCallback((action, mapLayerSettings) => {
|
|
225
227
|
if (!activeViewport || !activeViewport.displayStyle)
|
|
226
228
|
return;
|
|
227
|
-
const indexInDisplayStyle = activeViewport.displayStyle.
|
|
229
|
+
const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);
|
|
228
230
|
if (indexInDisplayStyle < 0)
|
|
229
231
|
return;
|
|
230
232
|
switch (action) {
|
|
@@ -248,7 +250,7 @@ function MapLayerManager(props) {
|
|
|
248
250
|
if (activeViewport) {
|
|
249
251
|
const isVisible = !mapLayerSettings.visible;
|
|
250
252
|
const displayStyle = activeViewport.displayStyle;
|
|
251
|
-
const indexInDisplayStyle = displayStyle.
|
|
253
|
+
const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);
|
|
252
254
|
if (-1 !== indexInDisplayStyle) {
|
|
253
255
|
// update the display style
|
|
254
256
|
displayStyle.changeMapLayerProps({ visible: isVisible }, indexInDisplayStyle, mapLayerSettings.isOverlay);
|
|
@@ -290,9 +292,9 @@ function MapLayerManager(props) {
|
|
|
290
292
|
else if (destination.droppableId === "backgroundMapLayers" && backgroundMapLayers)
|
|
291
293
|
toMapLayer = backgroundMapLayers[destination.index];
|
|
292
294
|
if (toMapLayer)
|
|
293
|
-
toIndexInDisplayStyle = displayStyle.
|
|
295
|
+
toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);
|
|
294
296
|
}
|
|
295
|
-
const fromIndexInDisplayStyle = displayStyle.
|
|
297
|
+
const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);
|
|
296
298
|
if (fromIndexInDisplayStyle < 0)
|
|
297
299
|
return;
|
|
298
300
|
if (destination.droppableId !== source.droppableId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\n// the following quiet warning caused by react-beautiful-dnd package\r\n/* eslint-disable @typescript-eslint/unbound-method */\r\n\r\nimport \"./MapLayerManager.scss\";\r\nimport * as React from \"react\";\r\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\r\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\r\nimport { MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\r\nimport {\r\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerSource, MapLayerSources, NotifyMessageDetails, OutputMessagePriority,\r\n ScreenViewport, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\r\nimport { MapLayerOptions, MapTypesOptions, StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport { AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\r\nimport { BasemapPanel } from \"./BasemapPanel\";\r\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\r\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\r\n\r\n/** @internal */\r\nexport interface SourceMapContextProps {\r\n readonly sources: MapLayerSource[];\r\n readonly loadingSources: boolean;\r\n readonly bases: MapLayerSource[];\r\n readonly refreshFromStyle: () => void;\r\n readonly activeViewport?: ScreenViewport;\r\n readonly backgroundLayers?: StyleMapLayerSettings[];\r\n readonly overlayLayers?: StyleMapLayerSettings[];\r\n readonly mapTypesOptions?: MapTypesOptions;\r\n}\r\n\r\n/** @internal */\r\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\r\n sources: [],\r\n loadingSources: false,\r\n bases: [],\r\n refreshFromStyle: () => { },\r\n});\r\n\r\n/** @internal */\r\nexport function useSourceMapContext(): SourceMapContextProps {\r\n return React.useContext(SourceMapContext);\r\n}\r\n\r\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\r\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\r\n}\r\n\r\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\r\n const displayStyle = viewport.displayStyle;\r\n if (!displayStyle)\r\n return undefined;\r\n\r\n const layers = new Array<StyleMapLayerSettings>();\r\n\r\n const displayStyleLayers = (getBackgroundMap ? displayStyle.backgroundMapLayers : displayStyle.overlayMapLayers);\r\n for (let layerIdx = 0; layerIdx < displayStyleLayers.length; layerIdx++) {\r\n const layerSettings = displayStyleLayers[layerIdx];\r\n const isOverlay = !getBackgroundMap;\r\n const layerProvider = viewport.getMapLayerImageryProvider(layerIdx, isOverlay);\r\n layers.push({\r\n visible: layerSettings.visible,\r\n name: layerSettings.name,\r\n url: layerSettings.url,\r\n transparency: layerSettings.transparency,\r\n transparentBackground: layerSettings.transparentBackground,\r\n subLayers: populateSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\r\n showSubLayers: false,\r\n isOverlay,\r\n provider: layerProvider,\r\n });\r\n }\r\n\r\n // since we want to display higher level maps above lower maps in UI reverse their order here.\r\n return layers.reverse();\r\n}\r\n\r\ninterface MapLayerManagerProps {\r\n getContainerForClone: () => HTMLElement;\r\n activeViewport: ScreenViewport;\r\n mapLayerOptions?: MapLayerOptions;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerManager(props: MapLayerManagerProps) {\r\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [loadingSources, setLoadingSources] = React.useState(false);\r\n const [baseSources, setBaseSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [overlaysLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\r\n const [underlaysLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\r\n const { activeViewport, mapLayerOptions } = props;\r\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\r\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\r\n\r\n // map layer settings from display style\r\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\r\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\r\n\r\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\r\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\r\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\r\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\r\n\r\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\r\n if (activeViewport) {\r\n return activeViewport.viewFlags.backgroundMap;\r\n }\r\n return false;\r\n });\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n });\r\n\r\n // Setup onTileTreeLoad events listening.\r\n // This is needed because we need to know when the imagery provider\r\n // is created, and be able to monitor to status change.\r\n React.useEffect(() => {\r\n const handleTileTreeLoad = (args: TileTreeOwner) => {\r\n\r\n // Ignore non-map tile trees\r\n if (args.tileTree instanceof ImageryMapTileTree) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n\r\n IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\r\n\r\n return () => {\r\n IModelApp.tileAdmin.onTileTreeLoad.removeListener(handleTileTreeLoad);\r\n };\r\n\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n // Setup onMapImageryChanged events listening.\r\n\r\n React.useEffect(() => {\r\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\r\n\r\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\r\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\r\n\r\n return () => {\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.removeListener(handleMapImageryChanged);\r\n };\r\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\r\n\r\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\r\n\r\n // Triggered whenever a provider status change\r\n React.useEffect(() => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n\r\n return () => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n };\r\n\r\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\r\n\r\n React.useEffect(() => {\r\n async function fetchWmsMapData() {\r\n const sources: MapLayerSource[] = [];\r\n const bases: MapLayerSource[] = [];\r\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\r\n\r\n const iModel = IModelApp.viewManager.selectedView ? IModelApp.viewManager.selectedView.iModel : undefined;\r\n if (iModel && iModel.iTwinId && iModel.iModelId) {\r\n try {\r\n const preferenceSources = await MapLayerPreferences.getSources(iModel.iTwinId, iModel.iModelId);\r\n for (const source of preferenceSources)\r\n await MapLayerSources.addSourceToMapLayerSources(source);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\r\n }\r\n }\r\n\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n\r\n // This is where the list of layers first gets populated... I need to update it\r\n // MapUrlDialog gets around knowing MapLayerManager exists and vice versa by affecting the viewports displayStyle which MapLayerManager is listening for\r\n // We know when displayStyle changes we've added a layer, this layer may not be a custom layer\r\n sourceLayers?.layers.forEach((source: MapLayerSource) => { sources.push(source); });\r\n setMapSources(sources);\r\n sourceLayers?.bases.forEach((source: MapLayerSource) => { bases.push(source); });\r\n setBaseSources(bases);\r\n }\r\n\r\n setLoadingSources(true);\r\n fetchWmsMapData().then(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n\r\n }).catch(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n });\r\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection]);\r\n\r\n const updateMapSources = React.useCallback(() => {\r\n const newSources: MapLayerSource[] = [];\r\n MapLayerSources.getInstance()?.layers?.forEach((sourceLayer: MapLayerSource) => { newSources.push(sourceLayer); });\r\n setMapSources(newSources);\r\n }, [setMapSources]);\r\n\r\n /**\r\n * Handle change events in the MapLayerPreferences\r\n */\r\n React.useEffect(() => {\r\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\r\n const removeSourceOnly = (changeType === MapLayerSourceChangeType.Removed);\r\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\r\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\r\n\r\n if (removeSource) {\r\n if (oldSource) {\r\n const succeeded = MapLayerSources.removeLayerByName(oldSource.name);\r\n assert(succeeded);\r\n if (!succeeded) {\r\n return;\r\n }\r\n\r\n if (removeSourceOnly) {\r\n updateMapSources();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (addSource) {\r\n const sources = await MapLayerSources.addSourceToMapLayerSources(newSource);\r\n assert(sources !== undefined);\r\n if (sources) {\r\n updateMapSources();\r\n }\r\n }\r\n };\r\n MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\r\n return (() => {\r\n MapLayerPreferences.onLayerSourceChanged.removeListener(handleLayerSourceChange);\r\n });\r\n }, [updateMapSources]);\r\n\r\n // update when a different display style is loaded.\r\n React.useEffect(() => {\r\n const handleDisplayStyleChange = (vp: Viewport) => {\r\n loadMapLayerSettingsFromViewport(vp);\r\n };\r\n activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\r\n return () => {\r\n activeViewport?.onDisplayStyleChanged.removeListener(handleDisplayStyleChange);\r\n };\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\r\n if (!activeViewport || !activeViewport.displayStyle)\r\n return;\r\n\r\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndUrl(mapLayerSettings.name, mapLayerSettings.url, mapLayerSettings.isOverlay);\r\n if (indexInDisplayStyle < 0)\r\n return;\r\n\r\n switch (action) {\r\n case \"delete\":\r\n activeViewport.displayStyle.detachMapLayerByIndex(indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n break;\r\n case \"zoom-to-layer\":\r\n activeViewport.displayStyle.viewMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay, activeViewport).then((status) => {\r\n if (!status) {\r\n const msg = MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\r\n }\r\n }).catch((_error) => { });\r\n break;\r\n }\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\r\n if (activeViewport) {\r\n const isVisible = !mapLayerSettings.visible;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndUrl(mapLayerSettings.name, mapLayerSettings.url, mapLayerSettings.isOverlay);\r\n if (-1 !== indexInDisplayStyle) {\r\n // update the display style\r\n displayStyle.changeMapLayerProps({ visible: isVisible }, indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n }\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleMapLayersToggle = React.useCallback(() => {\r\n if (activeViewport) {\r\n const newState = !backgroundMapVisible;\r\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\r\n setBackgroundMapVisible(newState);\r\n }\r\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\r\n\r\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\r\n const { destination, source } = result;\r\n\r\n if (!destination) // dropped outside of list\r\n return;\r\n\r\n // item was not moved\r\n if (destination.droppableId === source.droppableId && destination.index === source.index)\r\n return;\r\n\r\n let fromMapLayer: StyleMapLayerSettings | undefined;\r\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n fromMapLayer = overlayMapLayers[source.index];\r\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n fromMapLayer = backgroundMapLayers[source.index];\r\n\r\n if (!fromMapLayer || !activeViewport)\r\n return;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n let toMapLayer: StyleMapLayerSettings | undefined;\r\n let toIndexInDisplayStyle = -1;\r\n\r\n // If destination.index is undefined then the user dropped the map at the end of list of maps. To get the \"actual\" index in the style, look up index in style by name.\r\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\r\n if (undefined !== destination.index) {\r\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n toMapLayer = overlayMapLayers[destination.index];\r\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n toMapLayer = backgroundMapLayers[destination.index];\r\n if (toMapLayer)\r\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndUrl(toMapLayer.name, toMapLayer.url, toMapLayer.isOverlay);\r\n }\r\n\r\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndUrl(fromMapLayer.name, fromMapLayer.url, fromMapLayer.isOverlay);\r\n if (fromIndexInDisplayStyle < 0)\r\n return;\r\n\r\n if (destination.droppableId !== source.droppableId) {\r\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\r\n const layerSettings = activeViewport.displayStyle.mapLayerAtIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n if (layerSettings) {\r\n activeViewport.displayStyle.detachMapLayerByIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n\r\n // Manually reverse index when moved from one section to the other\r\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\r\n toIndexInDisplayStyle = displayStyle.backgroundMapLayers.length - destination.index;\r\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\r\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\r\n }\r\n\r\n activeViewport.displayStyle.attachMapLayerSettings(layerSettings, !fromMapLayer.isOverlay, toIndexInDisplayStyle);\r\n }\r\n } else {\r\n if (undefined === destination.index) {\r\n displayStyle.moveMapLayerToBottom(fromIndexInDisplayStyle, destination.droppableId === \"overlayMapLayers\");\r\n } else {\r\n if (toMapLayer) {\r\n if (toIndexInDisplayStyle !== -1)\r\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\r\n }\r\n }\r\n }\r\n\r\n // apply display style change to view\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\r\n\r\n const handleRefreshFromStyle = React.useCallback(() => {\r\n if (activeViewport)\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const [baseMapPanelLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\r\n\r\n return (\r\n <SourceMapContext.Provider value={{\r\n activeViewport,\r\n loadingSources,\r\n sources: mapSources ? mapSources : [],\r\n bases: baseSources ? baseSources : [],\r\n refreshFromStyle: handleRefreshFromStyle,\r\n backgroundLayers: backgroundMapLayers,\r\n overlayLayers: overlayMapLayers,\r\n mapTypesOptions: mapLayerOptions?.mapTypeOptions,\r\n }}>\r\n <div className=\"map-manager-top-header\">\r\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\r\n <div className=\"map-manager-header-buttons-group\">\r\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\r\n <MapLayerSettingsPopupButton />\r\n </div>\r\n </div>\r\n\r\n <div className=\"map-manager-container\">\r\n\r\n <div className=\"map-manager-basemap\">\r\n <BasemapPanel />\r\n </div>\r\n {!hideExternalMapLayersSection &&\r\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-underlays\" >\r\n <span className=\"map-manager-underlays-label\">{underlaysLabel}</span><AttachLayerPopupButton isOverlay={false} />\r\n </div>\r\n <MapLayerDroppable\r\n isOverlay={false}\r\n layersList={backgroundMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-overlays\" >\r\n <span className=\"map-manager-overlays-label\">{overlaysLabel}</span><AttachLayerPopupButton isOverlay={true} />\r\n </div>\r\n <MapLayerDroppable\r\n isOverlay={true}\r\n layersList={overlayMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n </DragDropContext>\r\n }\r\n </div >\r\n </SourceMapContext.Provider >\r\n );\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\n// the following quiet warning caused by react-beautiful-dnd package\r\n/* eslint-disable @typescript-eslint/unbound-method */\r\n\r\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\r\nimport { ImageMapLayerSettings, MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\r\nimport {\r\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerSource, MapLayerSources, NotifyMessageDetails, OutputMessagePriority,\r\n ScreenViewport, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport * as React from \"react\";\r\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\r\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\r\nimport { MapLayerOptions, MapTypesOptions, StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport { AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\r\nimport { BasemapPanel } from \"./BasemapPanel\";\r\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\r\nimport \"./MapLayerManager.scss\";\r\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\r\n\r\n/** @internal */\r\nexport interface SourceMapContextProps {\r\n readonly sources: MapLayerSource[];\r\n readonly loadingSources: boolean;\r\n readonly bases: MapLayerSource[];\r\n readonly refreshFromStyle: () => void;\r\n readonly activeViewport?: ScreenViewport;\r\n readonly backgroundLayers?: StyleMapLayerSettings[];\r\n readonly overlayLayers?: StyleMapLayerSettings[];\r\n readonly mapTypesOptions?: MapTypesOptions;\r\n}\r\n\r\n/** @internal */\r\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\r\n sources: [],\r\n loadingSources: false,\r\n bases: [],\r\n refreshFromStyle: () => { },\r\n});\r\n\r\n/** @internal */\r\nexport function useSourceMapContext(): SourceMapContextProps {\r\n return React.useContext(SourceMapContext);\r\n}\r\n\r\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\r\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\r\n}\r\n\r\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\r\n const displayStyle = viewport.displayStyle;\r\n if (!displayStyle)\r\n return undefined;\r\n\r\n const layers = new Array<StyleMapLayerSettings>();\r\n\r\n const displayStyleLayers = (getBackgroundMap ? displayStyle.backgroundMapLayers : displayStyle.overlayMapLayers);\r\n for (let layerIdx = 0; layerIdx < displayStyleLayers.length; layerIdx++) {\r\n const layerSettings = displayStyleLayers[layerIdx];\r\n const isOverlay = !getBackgroundMap;\r\n const layerProvider = viewport.getMapLayerImageryProvider(layerIdx, isOverlay);\r\n const popSubLayers = populateSubLayers && (layerSettings instanceof ImageMapLayerSettings);\r\n layers.push({\r\n visible: layerSettings.visible,\r\n name: layerSettings.name,\r\n source: layerSettings.source,\r\n transparency: layerSettings.transparency,\r\n transparentBackground: layerSettings.transparentBackground,\r\n subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\r\n showSubLayers: false,\r\n isOverlay,\r\n provider: layerProvider,\r\n });\r\n }\r\n\r\n // since we want to display higher level maps above lower maps in UI reverse their order here.\r\n return layers.reverse();\r\n}\r\n\r\ninterface MapLayerManagerProps {\r\n getContainerForClone: () => HTMLElement;\r\n activeViewport: ScreenViewport;\r\n mapLayerOptions?: MapLayerOptions;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerManager(props: MapLayerManagerProps) {\r\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [loadingSources, setLoadingSources] = React.useState(false);\r\n const [baseSources, setBaseSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [overlaysLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\r\n const [underlaysLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\r\n const { activeViewport, mapLayerOptions } = props;\r\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\r\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\r\n\r\n // map layer settings from display style\r\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\r\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\r\n\r\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\r\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\r\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\r\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\r\n\r\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\r\n if (activeViewport) {\r\n return activeViewport.viewFlags.backgroundMap;\r\n }\r\n return false;\r\n });\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n });\r\n\r\n // Setup onTileTreeLoad events listening.\r\n // This is needed because we need to know when the imagery provider\r\n // is created, and be able to monitor to status change.\r\n React.useEffect(() => {\r\n const handleTileTreeLoad = (args: TileTreeOwner) => {\r\n\r\n // Ignore non-map tile trees\r\n if (args.tileTree instanceof ImageryMapTileTree) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n\r\n IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\r\n\r\n return () => {\r\n IModelApp.tileAdmin.onTileTreeLoad.removeListener(handleTileTreeLoad);\r\n };\r\n\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n // Setup onMapImageryChanged events listening.\r\n\r\n React.useEffect(() => {\r\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\r\n\r\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\r\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\r\n\r\n return () => {\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.removeListener(handleMapImageryChanged);\r\n };\r\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\r\n\r\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\r\n\r\n // Triggered whenever a provider status change\r\n React.useEffect(() => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n\r\n return () => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n };\r\n\r\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\r\n\r\n React.useEffect(() => {\r\n async function fetchWmsMapData() {\r\n const sources: MapLayerSource[] = [];\r\n const bases: MapLayerSource[] = [];\r\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\r\n\r\n const iModel = IModelApp.viewManager.selectedView ? IModelApp.viewManager.selectedView.iModel : undefined;\r\n if (iModel && iModel.iTwinId && iModel.iModelId) {\r\n try {\r\n const preferenceSources = await MapLayerPreferences.getSources(iModel.iTwinId, iModel.iModelId);\r\n for (const source of preferenceSources)\r\n await MapLayerSources.addSourceToMapLayerSources(source);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\r\n }\r\n }\r\n\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n\r\n // This is where the list of layers first gets populated... I need to update it\r\n // MapUrlDialog gets around knowing MapLayerManager exists and vice versa by affecting the viewports displayStyle which MapLayerManager is listening for\r\n // We know when displayStyle changes we've added a layer, this layer may not be a custom layer\r\n sourceLayers?.layers.forEach((source: MapLayerSource) => { sources.push(source); });\r\n setMapSources(sources);\r\n sourceLayers?.bases.forEach((source: MapLayerSource) => { bases.push(source); });\r\n setBaseSources(bases);\r\n }\r\n\r\n setLoadingSources(true);\r\n fetchWmsMapData().then(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n\r\n }).catch(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n });\r\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection]);\r\n\r\n const updateMapSources = React.useCallback(() => {\r\n const newSources: MapLayerSource[] = [];\r\n MapLayerSources.getInstance()?.layers?.forEach((sourceLayer: MapLayerSource) => { newSources.push(sourceLayer); });\r\n setMapSources(newSources);\r\n }, [setMapSources]);\r\n\r\n /**\r\n * Handle change events in the MapLayerPreferences\r\n */\r\n React.useEffect(() => {\r\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\r\n const removeSourceOnly = (changeType === MapLayerSourceChangeType.Removed);\r\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\r\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\r\n\r\n if (removeSource) {\r\n if (oldSource) {\r\n const succeeded = MapLayerSources.removeLayerByName(oldSource.name);\r\n assert(succeeded);\r\n if (!succeeded) {\r\n return;\r\n }\r\n\r\n if (removeSourceOnly) {\r\n updateMapSources();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (addSource) {\r\n const sources = await MapLayerSources.addSourceToMapLayerSources(newSource);\r\n assert(sources !== undefined);\r\n if (sources) {\r\n updateMapSources();\r\n }\r\n }\r\n };\r\n MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\r\n return (() => {\r\n MapLayerPreferences.onLayerSourceChanged.removeListener(handleLayerSourceChange);\r\n });\r\n }, [updateMapSources]);\r\n\r\n // update when a different display style is loaded.\r\n React.useEffect(() => {\r\n const handleDisplayStyleChange = (vp: Viewport) => {\r\n loadMapLayerSettingsFromViewport(vp);\r\n };\r\n activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\r\n return () => {\r\n activeViewport?.onDisplayStyleChanged.removeListener(handleDisplayStyleChange);\r\n };\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\r\n if (!activeViewport || !activeViewport.displayStyle)\r\n return;\r\n\r\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (indexInDisplayStyle < 0)\r\n return;\r\n\r\n switch (action) {\r\n case \"delete\":\r\n activeViewport.displayStyle.detachMapLayerByIndex(indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n break;\r\n case \"zoom-to-layer\":\r\n activeViewport.displayStyle.viewMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay, activeViewport).then((status) => {\r\n if (!status) {\r\n const msg = MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\r\n }\r\n }).catch((_error) => { });\r\n break;\r\n }\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\r\n if (activeViewport) {\r\n const isVisible = !mapLayerSettings.visible;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (-1 !== indexInDisplayStyle) {\r\n // update the display style\r\n displayStyle.changeMapLayerProps({ visible: isVisible }, indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n }\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleMapLayersToggle = React.useCallback(() => {\r\n if (activeViewport) {\r\n const newState = !backgroundMapVisible;\r\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\r\n setBackgroundMapVisible(newState);\r\n }\r\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\r\n\r\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\r\n const { destination, source } = result;\r\n\r\n if (!destination) // dropped outside of list\r\n return;\r\n\r\n // item was not moved\r\n if (destination.droppableId === source.droppableId && destination.index === source.index)\r\n return;\r\n\r\n let fromMapLayer: StyleMapLayerSettings | undefined;\r\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n fromMapLayer = overlayMapLayers[source.index];\r\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n fromMapLayer = backgroundMapLayers[source.index];\r\n\r\n if (!fromMapLayer || !activeViewport)\r\n return;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n let toMapLayer: StyleMapLayerSettings | undefined;\r\n let toIndexInDisplayStyle = -1;\r\n\r\n // If destination.index is undefined then the user dropped the map at the end of list of maps. To get the \"actual\" index in the style, look up index in style by name.\r\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\r\n if (undefined !== destination.index) {\r\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n toMapLayer = overlayMapLayers[destination.index];\r\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n toMapLayer = backgroundMapLayers[destination.index];\r\n if (toMapLayer)\r\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\r\n }\r\n\r\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\r\n if (fromIndexInDisplayStyle < 0)\r\n return;\r\n\r\n if (destination.droppableId !== source.droppableId) {\r\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\r\n const layerSettings = activeViewport.displayStyle.mapLayerAtIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n if (layerSettings) {\r\n activeViewport.displayStyle.detachMapLayerByIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n\r\n // Manually reverse index when moved from one section to the other\r\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\r\n toIndexInDisplayStyle = displayStyle.backgroundMapLayers.length - destination.index;\r\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\r\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\r\n }\r\n\r\n activeViewport.displayStyle.attachMapLayerSettings(layerSettings, !fromMapLayer.isOverlay, toIndexInDisplayStyle);\r\n }\r\n } else {\r\n if (undefined === destination.index) {\r\n displayStyle.moveMapLayerToBottom(fromIndexInDisplayStyle, destination.droppableId === \"overlayMapLayers\");\r\n } else {\r\n if (toMapLayer) {\r\n if (toIndexInDisplayStyle !== -1)\r\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\r\n }\r\n }\r\n }\r\n\r\n // apply display style change to view\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\r\n\r\n const handleRefreshFromStyle = React.useCallback(() => {\r\n if (activeViewport)\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const [baseMapPanelLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\r\n\r\n return (\r\n <SourceMapContext.Provider value={{\r\n activeViewport,\r\n loadingSources,\r\n sources: mapSources ? mapSources : [],\r\n bases: baseSources ? baseSources : [],\r\n refreshFromStyle: handleRefreshFromStyle,\r\n backgroundLayers: backgroundMapLayers,\r\n overlayLayers: overlayMapLayers,\r\n mapTypesOptions: mapLayerOptions?.mapTypeOptions,\r\n }}>\r\n <div className=\"map-manager-top-header\">\r\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\r\n <div className=\"map-manager-header-buttons-group\">\r\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\r\n <MapLayerSettingsPopupButton />\r\n </div>\r\n </div>\r\n\r\n <div className=\"map-manager-container\">\r\n\r\n <div className=\"map-manager-basemap\">\r\n <BasemapPanel />\r\n </div>\r\n {!hideExternalMapLayersSection &&\r\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-underlays\" >\r\n <span className=\"map-manager-underlays-label\">{underlaysLabel}</span><AttachLayerPopupButton isOverlay={false} />\r\n </div>\r\n <MapLayerDroppable\r\n isOverlay={false}\r\n layersList={backgroundMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-overlays\" >\r\n <span className=\"map-manager-overlays-label\">{overlaysLabel}</span><AttachLayerPopupButton isOverlay={true} />\r\n </div>\r\n <MapLayerDroppable\r\n isOverlay={true}\r\n layersList={overlayMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n </DragDropContext>\r\n }\r\n </div >\r\n </SourceMapContext.Provider >\r\n );\r\n}\r\n\r\n"]}
|
|
@@ -21,7 +21,7 @@ function MapLayerSettingsMenu({ mapLayerSettings, onMenuItemSelection, activeVie
|
|
|
21
21
|
React.useEffect(() => {
|
|
22
22
|
async function fetchRangeData() {
|
|
23
23
|
let hasRange = false;
|
|
24
|
-
const indexInDisplayStyle = activeViewport === null || activeViewport === void 0 ? void 0 : activeViewport.displayStyle.
|
|
24
|
+
const indexInDisplayStyle = activeViewport === null || activeViewport === void 0 ? void 0 : activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);
|
|
25
25
|
if (undefined !== indexInDisplayStyle) {
|
|
26
26
|
hasRange = (undefined !== await activeViewport.displayStyle.getMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay));
|
|
27
27
|
}
|
|
@@ -48,7 +48,7 @@ function MapLayerSettingsMenu({ mapLayerSettings, onMenuItemSelection, activeVie
|
|
|
48
48
|
if (activeViewport) {
|
|
49
49
|
const newTransparency = value;
|
|
50
50
|
const displayStyle = activeViewport.displayStyle;
|
|
51
|
-
const indexInDisplayStyle = displayStyle.
|
|
51
|
+
const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);
|
|
52
52
|
if (-1 !== indexInDisplayStyle) {
|
|
53
53
|
const styleTransparency = (_a = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayerSettings.isOverlay)) === null || _a === void 0 ? void 0 : _a.transparency;
|
|
54
54
|
const styleTransparencyValue = styleTransparency ? styleTransparency : 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerSettingsMenu.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsMenu.tsx"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,+BAA+B;AAE/B,kDAAiE;AACjE,wDAA8C;AAC9C,0EAAuE;AACvE,kCAAgC;AAGhC,gEAAgE;AAChE,SAAgB,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAuK;IACjQ,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mDAAwB,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC7H,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mDAAwB,CAAC,YAAY,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACvI,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAuB,CAAC;IAC9E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,cAAc;YAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,mBAAmB,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"MapLayerSettingsMenu.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsMenu.tsx"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,+BAA+B;AAE/B,kDAAiE;AACjE,wDAA8C;AAC9C,0EAAuE;AACvE,kCAAgC;AAGhC,gEAAgE;AAChE,SAAgB,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,cAAc,EAAuK;IACjQ,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mDAAwB,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC7H,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mDAAwB,CAAC,YAAY,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACvI,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAuB,CAAC;IAC9E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,cAAc;YAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,mBAAmB,GAAG,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,YAAY,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACtK,IAAI,SAAS,KAAK,mBAAmB,EAAE;gBACrC,QAAQ,GAAG,CAAC,SAAS,KAAK,MAAM,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;aAChI;YACD,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,cAAc,EAAE,CAAC,CAAC,8DAA8D;IAClF,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEvC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7C,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAChD,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC/C,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAClD,CAAC,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC/C,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE/D,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;;QAClE,IAAI,cAAc,EAAE;YAClB,MAAM,eAAe,GAAG,KAAK,CAAC;YAC9B,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;YACjD,MAAM,mBAAmB,GAAG,YAAY,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACtJ,IAAI,CAAC,CAAC,KAAK,mBAAmB,EAAE;gBAC9B,MAAM,iBAAiB,GAAG,MAAA,YAAY,CAAC,eAAe,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,CAAC,0CAAE,YAAY,CAAC;gBACtH,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,eAAe,CAAC,GAAG,IAAI,EAAE;oBAC7D,2BAA2B;oBAC3B,YAAY,CAAC,mBAAmB,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;oBACrH,cAAc,CAAC,oBAAoB,EAAE,CAAC;oBAEtC,qBAAqB;oBACrB,8DAA8D;iBAC/D;aACF;SACF;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEvC,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAyB,EAAE,EAAE;QAC/E,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;YAC1C,IAAI,eAAe,KAAK,YAAY,EAAE;gBACpC,eAAe,CAAC,eAAe,CAAC,CAAC;gBACjC,uBAAuB,CAAC,eAAe,CAAC,CAAC;aAC1C;SACF;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL;QACE,+CAAoB,oBAAoB,EAAC,SAAS,EAAC,8CAA8C,EAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAY;QACxJ,oBAAC,wBAAW,IAAC,MAAM,EAAE,cAAc,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,EAAE,cAAc,EAAE,kBAAkB;YACrG,oBAAC,4BAAe,IAAC,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B,EAAE,QAAQ,EAAE,iBAAiB,IAAG,gBAAgB,CAAmB;YAChL,oBAAC,4BAAe,IAAC,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,IAAG,WAAW,CAAmB;YAC9G,oBAAC,4BAAe,IAAC,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;gBAC9C,oBAAC,sBAAM,IAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,wBAAwB,GAAI,CACvF,CACN,CACb,CACJ,CAAC;AACJ,CAAC;AAhFD,oDAgFC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as React from \"react\";\r\nimport { ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { ContextMenu, ContextMenuItem } from \"@itwin/core-react\";\r\nimport { Slider } from \"@itwin/itwinui-react\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport \"./MapLayerManager.scss\";\r\nimport { StyleMapLayerSettings } from \"../Interfaces\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerSettingsMenu({ mapLayerSettings, onMenuItemSelection, activeViewport }: { mapLayerSettings: StyleMapLayerSettings, onMenuItemSelection: (action: string, mapLayerSettings: StyleMapLayerSettings) => void, activeViewport: ScreenViewport }) {\r\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false);\r\n const settingsRef = React.useRef<HTMLButtonElement>(null);\r\n const [labelDetach] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:LayerMenu.Detach\"));\r\n const [labelZoomToLayer] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:LayerMenu.ZoomToLayer\"));\r\n const [hasRangeData, setHasRangeData] = React.useState<boolean | undefined>();\r\n const [transparency, setTransparency] = React.useState(mapLayerSettings.transparency);\r\n\r\n React.useEffect(() => {\r\n async function fetchRangeData() {\r\n let hasRange = false;\r\n const indexInDisplayStyle = activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (undefined !== indexInDisplayStyle) {\r\n hasRange = (undefined !== await activeViewport.displayStyle.getMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay));\r\n }\r\n setHasRangeData(hasRange);\r\n }\r\n fetchRangeData(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }, [activeViewport, mapLayerSettings]);\r\n\r\n const onSettingsClick = React.useCallback(() => {\r\n setIsSettingsOpen((prev) => !prev);\r\n }, [setIsSettingsOpen]);\r\n\r\n const handleCloseSetting = React.useCallback(() => {\r\n setIsSettingsOpen(false);\r\n }, [setIsSettingsOpen]);\r\n\r\n const handleRemoveLayer = React.useCallback(() => {\r\n setIsSettingsOpen(false);\r\n onMenuItemSelection(\"delete\", mapLayerSettings);\r\n }, [setIsSettingsOpen, onMenuItemSelection, mapLayerSettings]);\r\n\r\n const handleZoomToLayer = React.useCallback(() => {\r\n setIsSettingsOpen(false);\r\n onMenuItemSelection(\"zoom-to-layer\", mapLayerSettings);\r\n }, [setIsSettingsOpen, onMenuItemSelection, mapLayerSettings]);\r\n\r\n const applyTransparencyChange = React.useCallback((value: number) => {\r\n if (activeViewport) {\r\n const newTransparency = value;\r\n const displayStyle = activeViewport.displayStyle;\r\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (-1 !== indexInDisplayStyle) {\r\n const styleTransparency = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayerSettings.isOverlay)?.transparency;\r\n const styleTransparencyValue = styleTransparency ? styleTransparency : 0;\r\n if (Math.abs(styleTransparencyValue - newTransparency) > 0.01) {\r\n // update the display style\r\n displayStyle.changeMapLayerProps({ transparency: newTransparency }, indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n // loadMapLayerSettingsFromStyle(activeViewport.displayStyle);\r\n }\r\n }\r\n }\r\n }, [activeViewport, mapLayerSettings]);\r\n\r\n const handleTransparencyChange = React.useCallback((values: readonly number[]) => {\r\n if (values.length) {\r\n const newTransparency = values[0] / 100.0;\r\n if (newTransparency !== transparency) {\r\n setTransparency(newTransparency);\r\n applyTransparencyChange(newTransparency);\r\n }\r\n }\r\n }, [transparency, applyTransparencyChange]);\r\n\r\n return (\r\n <>\r\n <button data-testid=\"map-layer-settings\" className=\"map-layer-settings icon icon-more-vertical-2\" ref={settingsRef} onClick={onSettingsClick} ></button>\r\n <ContextMenu opened={isSettingsOpen && (undefined !== hasRangeData)} onOutsideClick={handleCloseSetting} >\r\n <ContextMenuItem hideIconContainer={true} key={0} className={hasRangeData ? \"\" : \"core-context-menu-disabled\"} onSelect={handleZoomToLayer}>{labelZoomToLayer}</ContextMenuItem>\r\n <ContextMenuItem hideIconContainer={true} key={1} onSelect={handleRemoveLayer}>{labelDetach}</ContextMenuItem>\r\n <ContextMenuItem hideIconContainer={true} key={2} >\r\n <Slider min={0} max={100} values={[transparency * 100]} step={1} onChange={handleTransparencyChange} />\r\n </ContextMenuItem>\r\n </ContextMenu>\r\n </>\r\n );\r\n}\r\n"]}
|