@itwin/map-layers 5.3.0 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -2
- package/lib/cjs/BrowserStorage.d.ts +25 -0
- package/lib/cjs/BrowserStorage.d.ts.map +1 -0
- package/lib/cjs/BrowserStorage.js +80 -0
- package/lib/cjs/BrowserStorage.js.map +1 -0
- package/lib/cjs/CustomParamUtils.d.ts +5 -0
- package/lib/cjs/CustomParamUtils.d.ts.map +1 -0
- package/lib/cjs/CustomParamUtils.js +26 -0
- package/lib/cjs/CustomParamUtils.js.map +1 -0
- package/lib/cjs/CustomParamsMappingStorage.d.ts +6 -0
- package/lib/cjs/CustomParamsMappingStorage.d.ts.map +1 -0
- package/lib/cjs/CustomParamsMappingStorage.js +15 -0
- package/lib/cjs/CustomParamsMappingStorage.js.map +1 -0
- package/lib/cjs/CustomParamsStorage.d.ts +6 -0
- package/lib/cjs/CustomParamsStorage.d.ts.map +1 -0
- package/lib/cjs/CustomParamsStorage.js +15 -0
- package/lib/cjs/CustomParamsStorage.js.map +1 -0
- package/lib/cjs/MapLayerPreferences.d.ts.map +1 -1
- package/lib/cjs/MapLayerPreferences.js +2 -0
- package/lib/cjs/MapLayerPreferences.js.map +1 -1
- package/lib/cjs/PreferencesBrowserStorage.d.ts +9 -2
- package/lib/cjs/PreferencesBrowserStorage.d.ts.map +1 -1
- package/lib/cjs/PreferencesBrowserStorage.js +11 -51
- package/lib/cjs/PreferencesBrowserStorage.js.map +1 -1
- package/lib/cjs/public/locales/en/mapLayers.json +29 -3
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +1 -1
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +1 -1
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
- package/lib/cjs/ui/Interfaces.d.ts +11 -0
- package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
- package/lib/cjs/ui/Interfaces.js.map +1 -1
- package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js +20 -18
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/CustomParamEditDialog.d.ts +11 -0
- package/lib/cjs/ui/widget/CustomParamEditDialog.d.ts.map +1 -0
- package/lib/cjs/ui/widget/CustomParamEditDialog.js +57 -0
- package/lib/cjs/ui/widget/CustomParamEditDialog.js.map +1 -0
- package/lib/cjs/ui/widget/CustomParamEditDialog.scss +26 -0
- package/lib/cjs/ui/widget/CustomParamsSettings.d.ts +4 -0
- package/lib/cjs/ui/widget/CustomParamsSettings.d.ts.map +1 -0
- package/lib/cjs/ui/widget/CustomParamsSettings.js +116 -0
- package/lib/cjs/ui/widget/CustomParamsSettings.js.map +1 -0
- package/lib/cjs/ui/widget/CustomParamsSettings.scss +67 -0
- package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +3 -3
- package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerDroppable.js +23 -10
- 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 +19 -11
- package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +4 -1
- package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapManagerSettings.js +37 -29
- package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts +15 -5
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.js +129 -58
- package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.scss +12 -1
- package/lib/cjs/ui/widget/SelectApiKey.d.ts +10 -0
- package/lib/cjs/ui/widget/SelectApiKey.d.ts.map +1 -0
- package/lib/cjs/ui/widget/SelectApiKey.js +39 -0
- package/lib/cjs/ui/widget/SelectApiKey.js.map +1 -0
- package/lib/cjs/ui/widget/SelectCustomParam.d.ts +10 -0
- package/lib/cjs/ui/widget/SelectCustomParam.d.ts.map +1 -0
- package/lib/cjs/ui/widget/SelectCustomParam.js +49 -0
- package/lib/cjs/ui/widget/SelectCustomParam.js.map +1 -0
- package/lib/cjs/ui/widget/SelectMapFormat.d.ts +11 -2
- package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
- package/lib/cjs/ui/widget/SelectMapFormat.js +5 -6
- package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.d.ts +10 -0
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.d.ts.map +1 -0
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js +17 -0
- package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js.map +1 -0
- package/lib/esm/BrowserStorage.d.ts +25 -0
- package/lib/esm/BrowserStorage.d.ts.map +1 -0
- package/lib/esm/BrowserStorage.js +76 -0
- package/lib/esm/BrowserStorage.js.map +1 -0
- package/lib/esm/CustomParamUtils.d.ts +5 -0
- package/lib/esm/CustomParamUtils.d.ts.map +1 -0
- package/lib/esm/CustomParamUtils.js +22 -0
- package/lib/esm/CustomParamUtils.js.map +1 -0
- package/lib/esm/CustomParamsMappingStorage.d.ts +6 -0
- package/lib/esm/CustomParamsMappingStorage.d.ts.map +1 -0
- package/lib/esm/CustomParamsMappingStorage.js +11 -0
- package/lib/esm/CustomParamsMappingStorage.js.map +1 -0
- package/lib/esm/CustomParamsStorage.d.ts +6 -0
- package/lib/esm/CustomParamsStorage.d.ts.map +1 -0
- package/lib/esm/CustomParamsStorage.js +11 -0
- package/lib/esm/CustomParamsStorage.js.map +1 -0
- package/lib/esm/MapLayerPreferences.d.ts.map +1 -1
- package/lib/esm/MapLayerPreferences.js +2 -0
- package/lib/esm/MapLayerPreferences.js.map +1 -1
- package/lib/esm/PreferencesBrowserStorage.d.ts +9 -2
- package/lib/esm/PreferencesBrowserStorage.d.ts.map +1 -1
- package/lib/esm/PreferencesBrowserStorage.js +11 -51
- package/lib/esm/PreferencesBrowserStorage.js.map +1 -1
- package/lib/esm/public/locales/en/mapLayers.json +29 -3
- package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +1 -1
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js +1 -1
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
- package/lib/esm/ui/Interfaces.d.ts +11 -0
- package/lib/esm/ui/Interfaces.d.ts.map +1 -1
- package/lib/esm/ui/Interfaces.js.map +1 -1
- package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
- package/lib/esm/ui/widget/AttachLayerPopupButton.js +20 -18
- package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
- package/lib/esm/ui/widget/CustomParamEditDialog.d.ts +11 -0
- package/lib/esm/ui/widget/CustomParamEditDialog.d.ts.map +1 -0
- package/lib/esm/ui/widget/CustomParamEditDialog.js +53 -0
- package/lib/esm/ui/widget/CustomParamEditDialog.js.map +1 -0
- package/lib/esm/ui/widget/CustomParamEditDialog.scss +26 -0
- package/lib/esm/ui/widget/CustomParamsSettings.d.ts +4 -0
- package/lib/esm/ui/widget/CustomParamsSettings.d.ts.map +1 -0
- package/lib/esm/ui/widget/CustomParamsSettings.js +112 -0
- package/lib/esm/ui/widget/CustomParamsSettings.js.map +1 -0
- package/lib/esm/ui/widget/CustomParamsSettings.scss +67 -0
- package/lib/esm/ui/widget/MapLayerDroppable.d.ts +3 -3
- package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerDroppable.js +24 -11
- 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 +20 -12
- package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +4 -1
- package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapManagerSettings.js +38 -30
- package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.d.ts +15 -5
- package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.js +129 -58
- package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.scss +12 -1
- package/lib/esm/ui/widget/SelectApiKey.d.ts +10 -0
- package/lib/esm/ui/widget/SelectApiKey.d.ts.map +1 -0
- package/lib/esm/ui/widget/SelectApiKey.js +35 -0
- package/lib/esm/ui/widget/SelectApiKey.js.map +1 -0
- package/lib/esm/ui/widget/SelectCustomParam.d.ts +10 -0
- package/lib/esm/ui/widget/SelectCustomParam.d.ts.map +1 -0
- package/lib/esm/ui/widget/SelectCustomParam.js +45 -0
- package/lib/esm/ui/widget/SelectCustomParam.js.map +1 -0
- package/lib/esm/ui/widget/SelectMapFormat.d.ts +11 -2
- package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
- package/lib/esm/ui/widget/SelectMapFormat.js +5 -6
- package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
- package/lib/esm/ui/widget/UserPreferencesStorageOptions.d.ts +10 -0
- package/lib/esm/ui/widget/UserPreferencesStorageOptions.d.ts.map +1 -0
- package/lib/esm/ui/widget/UserPreferencesStorageOptions.js +13 -0
- package/lib/esm/ui/widget/UserPreferencesStorageOptions.js.map +1 -0
- package/lib/public/locales/en/mapLayers.json +29 -3
- package/package.json +6 -6
|
@@ -5,20 +5,20 @@
|
|
|
5
5
|
// cSpell:ignore droppable Sublayer Basemap
|
|
6
6
|
// the following quiet warning caused by react-beautiful-dnd package
|
|
7
7
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
8
|
+
import "./MapLayerManager.scss";
|
|
8
9
|
import * as React from "react";
|
|
9
10
|
import { Draggable, Droppable } from "react-beautiful-dnd";
|
|
10
|
-
import { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from "@itwin/core-frontend";
|
|
11
|
-
import { Icon } from "@itwin/core-react";
|
|
12
|
-
import { assert } from "@itwin/core-bentley";
|
|
13
11
|
import { UiFramework } from "@itwin/appui-react";
|
|
12
|
+
import { assert } from "@itwin/core-bentley";
|
|
13
|
+
import { ImageMapLayerSettings } from "@itwin/core-common";
|
|
14
|
+
import { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority, } from "@itwin/core-frontend";
|
|
15
|
+
import { Icon } from "@itwin/core-react";
|
|
14
16
|
import { Button, Checkbox } from "@itwin/itwinui-react";
|
|
15
|
-
import {
|
|
17
|
+
import { MapLayersUI } from "../../mapLayers";
|
|
16
18
|
import { AttachLayerButtonType, AttachLayerPopupButton } from "./AttachLayerPopupButton";
|
|
17
19
|
import { MapLayerSettingsMenu } from "./MapLayerSettingsMenu";
|
|
18
20
|
import { MapUrlDialog } from "./MapUrlDialog";
|
|
19
|
-
import "./
|
|
20
|
-
import { MapLayersUI } from "../../mapLayers";
|
|
21
|
-
import { ImageMapLayerSettings } from "@itwin/core-common";
|
|
21
|
+
import { SubLayersPopupButton } from "./SubLayersPopupButton";
|
|
22
22
|
const changeVisibilityByElementId = (element, visible) => {
|
|
23
23
|
if (element)
|
|
24
24
|
element.setAttribute("style", `visibility: ${visible ? "visible" : "hidden"}`);
|
|
@@ -76,7 +76,20 @@ export function MapLayerDroppable(props) {
|
|
|
76
76
|
} }),
|
|
77
77
|
React.createElement(Button, { disabled: props.disabled, size: "small", styleType: "borderless", className: "map-manager-item-visibility map-manager-visibility-icon", title: toggleVisibility, onClick: () => { props.onItemVisibilityToggleClicked(activeLayer); } },
|
|
78
78
|
React.createElement(Icon, { iconSpec: activeLayer.visible ? "icon-visibility" : "icon-visibility-hide-2" })),
|
|
79
|
-
React.createElement("span", { className: props.disabled || outOfRange ? "map-manager-item-label-disabled" : "map-manager-item-label", title: outOfRange ? outOfRangeTitle : undefined, ...dragProvided.dragHandleProps },
|
|
79
|
+
React.createElement("span", { className: props.disabled || outOfRange ? "map-manager-item-label-disabled" : "map-manager-item-label", title: outOfRange ? outOfRangeTitle : undefined, ...dragProvided.dragHandleProps },
|
|
80
|
+
activeLayer.name,
|
|
81
|
+
activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&
|
|
82
|
+
React.createElement(Button, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
|
|
83
|
+
const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
|
|
84
|
+
if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {
|
|
85
|
+
const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };
|
|
86
|
+
const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);
|
|
87
|
+
if (layer instanceof ImageMapLayerSettings) {
|
|
88
|
+
UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog, { activeViewport: props.activeViewport, isOverlay: props.isOverlay, signInModeArgs: { layer }, onOkResult: (sourceState) => handleOk(index, sourceState), onCancelResult: () => { UiFramework.dialogs.modal.close(); }, mapLayerOptions: props.mapLayerOptions }));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}, title: requireAuthTooltip },
|
|
92
|
+
React.createElement(Icon, { className: "map-layer-source-item-warnMessage-icon", iconSpec: "icon-status-warning" }))),
|
|
80
93
|
React.createElement("div", { id: "MapLayerSettingsSubLayersMenu", style: { visibility: "hidden" }, className: "map-manager-item-sub-layer-container" }, activeLayer.subLayers && activeLayer.subLayers.length > 1 &&
|
|
81
94
|
React.createElement(SubLayersPopupButton, { checkboxStyle: "eye", expandMode: "rootGroupOnly", subLayers: props.activeViewport ? activeLayer.subLayers : undefined, singleVisibleSubLayer: activeLayer.provider?.mutualExclusiveSubLayer, onSubLayerStateChange: (subLayerId, isSelected) => { onSubLayerStateChange(activeLayer, subLayerId, isSelected); } })),
|
|
82
95
|
activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&
|
|
@@ -84,9 +97,9 @@ export function MapLayerDroppable(props) {
|
|
|
84
97
|
const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
|
|
85
98
|
if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {
|
|
86
99
|
const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };
|
|
87
|
-
const
|
|
88
|
-
if (
|
|
89
|
-
UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog, { activeViewport: props.activeViewport, isOverlay: props.isOverlay,
|
|
100
|
+
const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);
|
|
101
|
+
if (layer instanceof ImageMapLayerSettings) {
|
|
102
|
+
UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog, { activeViewport: props.activeViewport, isOverlay: props.isOverlay, signInModeArgs: { layer }, onOkResult: (sourceState) => handleOk(index, sourceState), onCancelResult: () => { UiFramework.dialogs.modal.close(); }, mapLayerOptions: props.mapLayerOptions }));
|
|
90
103
|
}
|
|
91
104
|
}
|
|
92
105
|
}, title: requireAuthTooltip },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n/* eslint-disable @typescript-eslint/unbound-method */\n\nimport * as React from \"react\";\nimport { Draggable, DraggableChildrenFn, Droppable, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport { IModelApp, MapLayerImageryProviderStatus, MapLayerIndex, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority, ScreenViewport } from \"@itwin/core-frontend\";\nimport { Icon } from \"@itwin/core-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { Button, Checkbox } from \"@itwin/itwinui-react\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapTypesOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog, SourceState } from \"./MapUrlDialog\";\nimport \"./MapLayerManager.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { ImageMapLayerSettings, SubLayerId } from \"@itwin/core-common\";\n\n/** @internal */\ninterface MapLayerDroppableProps {\n isOverlay: boolean;\n layersList?: StyleMapLayerSettings[];\n mapTypesOptions?: MapTypesOptions;\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\n onItemSelected: (isOverlay: boolean, index: number) => void;\n onItemEdited: ( ) => void;\n disabled?: boolean;\n}\n\nconst changeVisibilityByElementId = (element: Element|null, visible: boolean) => {\n if (element)\n element.setAttribute(\"style\", `visibility: ${visible ? \"visible\" : \"hidden\"}`);\n};\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\n const containsLayer = props.layersList && props.layersList.length > 0;\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\n const [toggleVisibility] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\n const [requireAuthTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\n const [dropLayerLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\n const [outOfRangeTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.layerOutOfRange\"));\n\n const onSubLayerStateChange = (activeLayer: StyleMapLayerSettings, subLayerId: SubLayerId, isSelected: boolean) => {\n const mapLayerStyleIdx = props.activeViewport.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (mapLayerStyleIdx !== -1 && activeLayer.subLayers)\n props.activeViewport.displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, { index: mapLayerStyleIdx, isOverlay: activeLayer.isOverlay });\n };\n\n const handleOk = React.useCallback((index: MapLayerIndex, sourceState?: SourceState) => {\n UiFramework.dialogs.modal.close();\n\n const source = sourceState?.source;\n const vp = props?.activeViewport;\n if (vp === undefined || sourceState === undefined || source === undefined) {\n const error = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachMissingViewOrSource\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source?.name ?? \"\" });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n const validation = sourceState.validation;\n\n // Layer is already attached,\n // This calls invalidateRenderPlan()\n vp.displayStyle.changeMapLayerProps({subLayers: validation.subLayers}, index);\n vp.displayStyle.changeMapLayerCredentials(index, source.userName, source.password);\n\n // Either initial attach/initialize failed or the layer failed to load at least one tile\n // because of an invalid token; in both cases tile tree needs to be fully reset\n const provider = vp.getMapLayerImageryProvider(index);\n provider?.resetStatus();\n vp.resetMapLayer(index);\n\n props.onItemEdited();\n }, [props]);\n\n const changeSettingsMenuVisibility = (event: React.MouseEvent<HTMLDivElement, MouseEvent>, visible: boolean)=>{\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsMenuWrapper\"), visible);\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsSubLayersMenu\"), visible);\n };\n\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\n assert(props.layersList !== undefined);\n const activeLayer = props.layersList[rubric.source.index];\n const outOfRange = activeLayer.treeVisibility === MapTileTreeScaleRangeVisibility.Hidden;\n\n return (\n <div className=\"map-manager-source-item\" data-id={rubric.source.index} key={activeLayer.name}\n {...dragProvided.draggableProps}\n ref={dragProvided.innerRef}\n onMouseEnter={(event)=>changeSettingsMenuVisibility(event, true)}\n onMouseLeave={(event)=>changeSettingsMenuVisibility(event, false)} >\n\n {/* Checkbox */}\n <Checkbox data-testid={\"select-item-checkbox\"} checked={activeLayer.selected} onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }\n\n }></Checkbox>\n {/* Visibility icon */}\n <Button disabled={props.disabled} size=\"small\" styleType=\"borderless\" className=\"map-manager-item-visibility map-manager-visibility-icon\" title={toggleVisibility} onClick={() => { props.onItemVisibilityToggleClicked(activeLayer); }}>\n <Icon iconSpec={activeLayer.visible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} />\n </Button>\n\n {/* Label */}\n <span className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n\n >\n {activeLayer.name}\n </span>\n\n {/* SubLayersPopupButton */}\n <div id=\"MapLayerSettingsSubLayersMenu\" style={{visibility: \"hidden\"}} className=\"map-manager-item-sub-layer-container\" >\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 &&\n <SubLayersPopupButton\n checkboxStyle=\"eye\"\n expandMode=\"rootGroupOnly\"\n subLayers={props.activeViewport ? activeLayer.subLayers : undefined}\n singleVisibleSubLayer={activeLayer.provider?.mutualExclusiveSubLayer}\n onSubLayerStateChange={(subLayerId: SubLayerId, isSelected: boolean) => { onSubLayerStateChange(activeLayer, subLayerId, isSelected); }\n\n } />\n }\n </div>\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&\n <Button\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layerSettings = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layerSettings instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(<MapUrlDialog activeViewport={props.activeViewport}\n isOverlay={props.isOverlay}\n layerRequiringCredentials={layerSettings?.toJSON()}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {UiFramework.dialogs.modal.close();}}\n mapTypesOptions={props.mapTypesOptions}></MapUrlDialog>);\n }\n }\n\n }}\n title={requireAuthTooltip}\n >\n <Icon className=\"map-layer-source-item-warnMessage-icon\" iconSpec=\"icon-status-warning\" />\n </Button>\n }\n <div id=\"MapLayerSettingsMenuWrapper\" style={{visibility: \"hidden\"}} >\n <MapLayerSettingsMenu activeViewport={props.activeViewport} mapLayerSettings={activeLayer} onMenuItemSelection={props.onMenuItemSelected} disabled={props.disabled} />\n </div>\n\n </div>\n );\n };\n\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\n let node: React.ReactNode;\n if (containsLayer) {\n // Render a <Draggable>\n node = (props.layersList?.map((mapLayerSettings, i) =>\n <Draggable isDragDisabled={props.disabled} key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\n {renderItem}\n </Draggable>));\n } else {\n // Render a label that provide a 'Drop here' hint\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\n node =\n <div title={label} className=\"map-manager-no-layers-container\">\n {snapshot.isDraggingOver ?\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\n :\n <>\n <span className=\"map-manager-no-layers-label\">{label}</span>\n <AttachLayerPopupButton disabled={props.disabled} buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\n </>\n }\n </div>;\n }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`} ref={dropProvided.innerRef} {...dropProvided.droppableProps} >\n\n {renderDraggableContent(dropSnapshot)}\n\n {\n /* We don't want a placeholder when displaying the 'Drop here' message\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */\n }\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>);\n }\n\n return (\n <Droppable\n droppableId={droppableId}\n renderClone={renderItem}\n getContainerForClone={props.getContainerForClone as any}\n >\n {renderDraggable}\n </Droppable>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerDroppable.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerDroppable.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n/* eslint-disable @typescript-eslint/unbound-method */\n\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { Draggable, DraggableChildrenFn, Droppable, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings, SubLayerId } from \"@itwin/core-common\";\nimport {\n IModelApp, MapLayerImageryProviderStatus, MapLayerIndex, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority,\n ScreenViewport,\n} from \"@itwin/core-frontend\";\nimport { Icon } from \"@itwin/core-react\";\nimport { Button, Checkbox } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog, SourceState } from \"./MapUrlDialog\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\n\n/** @internal */\ninterface MapLayerDroppableProps {\n isOverlay: boolean;\n layersList?: StyleMapLayerSettings[];\n mapLayerOptions?: MapLayerOptions;\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n onMenuItemSelected: (action: string, mapLayerSettings: StyleMapLayerSettings) => void;\n onItemVisibilityToggleClicked: (mapLayerSettings: StyleMapLayerSettings) => void;\n onItemSelected: (isOverlay: boolean, index: number) => void;\n onItemEdited: ( ) => void;\n disabled?: boolean;\n}\n\nconst changeVisibilityByElementId = (element: Element|null, visible: boolean) => {\n if (element)\n element.setAttribute(\"style\", `visibility: ${visible ? \"visible\" : \"hidden\"}`);\n};\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerDroppable(props: MapLayerDroppableProps) {\n const containsLayer = props.layersList && props.layersList.length > 0;\n const droppableId = props.isOverlay ? \"overlayMapLayers\" : \"backgroundMapLayers\";\n const [toggleVisibility] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.ToggleVisibility\"));\n const [requireAuthTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.RequireAuthTooltip\"));\n const [noBackgroundMapsSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoBackgroundLayers\"));\n const [noUnderlaysSpecifiedLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.NoOverlayLayers\"));\n const [dropLayerLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.DropLayerLabel\"));\n const [outOfRangeTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.layerOutOfRange\"));\n\n const onSubLayerStateChange = (activeLayer: StyleMapLayerSettings, subLayerId: SubLayerId, isSelected: boolean) => {\n const mapLayerStyleIdx = props.activeViewport.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (mapLayerStyleIdx !== -1 && activeLayer.subLayers)\n props.activeViewport.displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, { index: mapLayerStyleIdx, isOverlay: activeLayer.isOverlay });\n };\n\n const handleOk = React.useCallback((index: MapLayerIndex, sourceState?: SourceState) => {\n UiFramework.dialogs.modal.close();\n\n const source = sourceState?.source;\n const vp = props?.activeViewport;\n if (vp === undefined || sourceState === undefined || source === undefined) {\n const error = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachMissingViewOrSource\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source?.name ?? \"\" });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n const validation = sourceState.validation;\n\n // Layer is already attached,\n // This calls invalidateRenderPlan()\n vp.displayStyle.changeMapLayerProps({subLayers: validation.subLayers}, index);\n vp.displayStyle.changeMapLayerCredentials(index, source.userName, source.password);\n\n // Either initial attach/initialize failed or the layer failed to load at least one tile\n // because of an invalid token; in both cases tile tree needs to be fully reset\n const provider = vp.getMapLayerImageryProvider(index);\n provider?.resetStatus();\n vp.resetMapLayer(index);\n\n props.onItemEdited();\n }, [props]);\n\n const changeSettingsMenuVisibility = (event: React.MouseEvent<HTMLDivElement, MouseEvent>, visible: boolean)=>{\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsMenuWrapper\"), visible);\n changeVisibilityByElementId(event.currentTarget.querySelector(\"#MapLayerSettingsSubLayersMenu\"), visible);\n };\n\n const renderItem: DraggableChildrenFn = (dragProvided, _, rubric) => {\n assert(props.layersList !== undefined);\n const activeLayer = props.layersList[rubric.source.index];\n const outOfRange = activeLayer.treeVisibility === MapTileTreeScaleRangeVisibility.Hidden;\n\n return (\n <div className=\"map-manager-source-item\" data-id={rubric.source.index} key={activeLayer.name}\n {...dragProvided.draggableProps}\n ref={dragProvided.innerRef}\n onMouseEnter={(event)=>changeSettingsMenuVisibility(event, true)}\n onMouseLeave={(event)=>changeSettingsMenuVisibility(event, false)} >\n\n {/* Checkbox */}\n <Checkbox data-testid={\"select-item-checkbox\"} checked={activeLayer.selected} onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }\n\n }></Checkbox>\n {/* Visibility icon */}\n <Button disabled={props.disabled} size=\"small\" styleType=\"borderless\" className=\"map-manager-item-visibility map-manager-visibility-icon\" title={toggleVisibility} onClick={() => { props.onItemVisibilityToggleClicked(activeLayer); }}>\n <Icon iconSpec={activeLayer.visible ? \"icon-visibility\" : \"icon-visibility-hide-2\"} />\n </Button>\n\n {/* Label */}\n <span className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n\n >\n {activeLayer.name}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&\n <Button\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n isOverlay={props.isOverlay}\n signInModeArgs={{layer}}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {UiFramework.dialogs.modal.close();}}\n mapLayerOptions={props.mapLayerOptions} />\n );\n }\n }\n\n }}\n title={requireAuthTooltip}\n >\n <Icon className=\"map-layer-source-item-warnMessage-icon\" iconSpec=\"icon-status-warning\" />\n </Button>\n }\n </span>\n\n {/* SubLayersPopupButton */}\n <div id=\"MapLayerSettingsSubLayersMenu\" style={{visibility: \"hidden\"}} className=\"map-manager-item-sub-layer-container\" >\n {activeLayer.subLayers && activeLayer.subLayers.length > 1 &&\n <SubLayersPopupButton\n checkboxStyle=\"eye\"\n expandMode=\"rootGroupOnly\"\n subLayers={props.activeViewport ? activeLayer.subLayers : undefined}\n singleVisibleSubLayer={activeLayer.provider?.mutualExclusiveSubLayer}\n onSubLayerStateChange={(subLayerId: SubLayerId, isSelected: boolean) => { onSubLayerStateChange(activeLayer, subLayerId, isSelected); }}\n />\n }\n </div>\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth &&\n <Button\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);\n if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {\n const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };\n const layer = props.activeViewport.displayStyle.mapLayerAtIndex(index);\n if (layer instanceof ImageMapLayerSettings) {\n UiFramework.dialogs.modal.open(\n <MapUrlDialog\n activeViewport={props.activeViewport}\n isOverlay={props.isOverlay}\n signInModeArgs={{layer}}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {UiFramework.dialogs.modal.close();}}\n mapLayerOptions={props.mapLayerOptions} />\n );\n }\n }\n\n }}\n title={requireAuthTooltip}\n >\n <Icon className=\"map-layer-source-item-warnMessage-icon\" iconSpec=\"icon-status-warning\" />\n </Button>\n }\n <div id=\"MapLayerSettingsMenuWrapper\" style={{visibility: \"hidden\"}} >\n <MapLayerSettingsMenu activeViewport={props.activeViewport} mapLayerSettings={activeLayer} onMenuItemSelection={props.onMenuItemSelected} disabled={props.disabled} />\n </div>\n\n </div>\n );\n };\n\n function renderDraggableContent(snapshot: DroppableStateSnapshot): React.ReactNode {\n let node: React.ReactNode;\n if (containsLayer) {\n // Render a <Draggable>\n node = (props.layersList?.map((mapLayerSettings, i) =>\n <Draggable isDragDisabled={props.disabled} key={mapLayerSettings.name} draggableId={mapLayerSettings.name} index={i}>\n {renderItem}\n </Draggable>));\n } else {\n // Render a label that provide a 'Drop here' hint\n const label = props.isOverlay ? noUnderlaysSpecifiedLabel : noBackgroundMapsSpecifiedLabel;\n node =\n <div title={label} className=\"map-manager-no-layers-container\">\n {snapshot.isDraggingOver ?\n <span className=\"map-manager-no-layers-label\">{dropLayerLabel}</span>\n :\n <>\n <span className=\"map-manager-no-layers-label\">{label}</span>\n <AttachLayerPopupButton disabled={props.disabled} buttonType={AttachLayerButtonType.Blue} isOverlay={props.isOverlay} />\n </>\n }\n </div>;\n }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`} ref={dropProvided.innerRef} {...dropProvided.droppableProps} >\n\n {renderDraggableContent(dropSnapshot)}\n\n {\n /* We don't want a placeholder when displaying the 'Drop here' message\n Unfortunately, if don't add it, 'react-beautiful-dnd' show an error message in the console.\n So I simply make it hidden. See https://github.com/atlassian/react-beautiful-dnd/issues/518 */\n }\n <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>);\n }\n\n return (\n <Droppable\n droppableId={droppableId}\n renderClone={renderItem}\n getContainerForClone={props.getContainerForClone as any}\n >\n {renderDraggable}\n </Droppable>\n );\n}\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import "./MapLayerManager.scss";
|
|
2
|
+
import * as React from "react";
|
|
1
3
|
import { BaseMapLayerSettings } from "@itwin/core-common";
|
|
2
4
|
import { MapLayerSource, ScreenViewport } from "@itwin/core-frontend";
|
|
3
|
-
import * as React from "react";
|
|
4
5
|
import { MapLayerOptions, StyleMapLayerSettings } from "../Interfaces";
|
|
5
|
-
import "./MapLayerManager.scss";
|
|
6
6
|
/** @internal */
|
|
7
7
|
export interface SourceMapContextProps {
|
|
8
8
|
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":"AASA,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EACqC,oBAAoB,EAC/D,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACiF,cAAc,EAC7E,cAAc,EACtC,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAOvE,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,oBAAoB,EAAE,CAAC;IACvC,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,oBAAoB,wBAIhC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,sCAK3B,CAAC;AAEH,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,qBAAqB,CAE3D;AAwCD,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,eA2e1D"}
|
|
@@ -5,20 +5,22 @@
|
|
|
5
5
|
// cSpell:ignore droppable Sublayer Basemap
|
|
6
6
|
// the following quiet warning caused by react-beautiful-dnd package
|
|
7
7
|
/* eslint-disable @typescript-eslint/unbound-method */
|
|
8
|
+
import "./MapLayerManager.scss";
|
|
9
|
+
import * as React from "react";
|
|
10
|
+
import { DragDropContext } from "react-beautiful-dnd";
|
|
8
11
|
import { BentleyError, compareStrings } from "@itwin/core-bentley";
|
|
9
|
-
import { BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings } from "@itwin/core-common";
|
|
12
|
+
import { BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings, } from "@itwin/core-common";
|
|
10
13
|
import { ImageryMapTileTree, IModelApp, MapLayerSources, NotifyMessageDetails, OutputMessagePriority, } from "@itwin/core-frontend";
|
|
11
14
|
import { ToggleSwitch } from "@itwin/itwinui-react";
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
15
|
+
import { CustomParamsMappingStorage } from "../../CustomParamsMappingStorage";
|
|
16
|
+
import { CustomParamUtils } from "../../CustomParamUtils";
|
|
14
17
|
import { MapLayerPreferences, MapLayerSourceChangeType } from "../../MapLayerPreferences";
|
|
15
|
-
import { BasemapPanel } from "./BasemapPanel";
|
|
16
|
-
import { MapLayerDroppable } from "./MapLayerDroppable";
|
|
17
|
-
import "./MapLayerManager.scss";
|
|
18
18
|
import { MapLayersUI } from "../../mapLayers";
|
|
19
|
+
import { BasemapPanel } from "./BasemapPanel";
|
|
19
20
|
import { MapLayerActionButtons } from "./MapLayerActionButtons";
|
|
20
|
-
import {
|
|
21
|
+
import { MapLayerDroppable } from "./MapLayerDroppable";
|
|
21
22
|
import { MapLayerSettingsPopupButton } from "./MapLayerSettingsPopupButton";
|
|
23
|
+
import { MapManagerLayersHeader } from "./MapManagerMapLayersHeader";
|
|
22
24
|
/** @internal */
|
|
23
25
|
export const defaultBaseMapLayers = [
|
|
24
26
|
BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({ name: "BingProvider", type: BackgroundMapType.Aerial })),
|
|
@@ -181,14 +183,20 @@ export function MapLayerManager(props) {
|
|
|
181
183
|
if (!isMounted.current) {
|
|
182
184
|
return;
|
|
183
185
|
}
|
|
184
|
-
// This is where the list of
|
|
186
|
+
// This is where the list of sources first gets populated...
|
|
185
187
|
const sources = [];
|
|
186
188
|
const addSource = (source) => !source.baseMap && sources.push(source); // No longer let MapLayerSources drive bg maps.
|
|
187
189
|
sourceLayers?.allSource.forEach(addSource);
|
|
190
|
+
const cpMappingStorage = new CustomParamsMappingStorage();
|
|
188
191
|
preferenceSources.forEach((source) => {
|
|
189
|
-
//
|
|
190
|
-
if (!sources.find((curSource) => source.name === curSource.name))
|
|
192
|
+
// Find existing entries to avoid adding duplicated sources
|
|
193
|
+
if (!sources.find((curSource) => source.name === curSource.name)) {
|
|
194
|
+
const cpMapping = cpMappingStorage.get(source.url.toLowerCase());
|
|
195
|
+
if (cpMapping && cpMapping.length > 0) {
|
|
196
|
+
CustomParamUtils.setSourceCustomParams(source, cpMapping[0].customParamNames);
|
|
197
|
+
}
|
|
191
198
|
addSource(source);
|
|
199
|
+
}
|
|
192
200
|
});
|
|
193
201
|
sources.sort((a, b) => compareStrings(a.name.toLowerCase(), b.name.toLowerCase()));
|
|
194
202
|
setMapSources(sources);
|
|
@@ -408,8 +416,8 @@ export function MapLayerManager(props) {
|
|
|
408
416
|
(layerList && layerList.length > 0) &&
|
|
409
417
|
React.createElement(React.Fragment, null,
|
|
410
418
|
React.createElement(MapLayerActionButtons, { disabled: !backgroundMapVisible, disabledUnlink: !hasItemSelected(isOverlay), hideAll: async () => changeAllLayerVisibility(false, isOverlay), showAll: async () => changeAllLayerVisibility(true, isOverlay), invert: async () => invertAllLayerVisibility(isOverlay), selectAll: async () => selectAllLayers(isOverlay), unlink: async () => detachSelectedLayers(isOverlay), checked: hasItemSelected(isOverlay) })),
|
|
411
|
-
React.createElement(MapLayerDroppable, { disabled: !backgroundMapVisible, isOverlay: isOverlay, layersList: layerList,
|
|
412
|
-
}, [backgroundMapLayers, backgroundMapVisible, changeAllLayerVisibility, detachSelectedLayers, handleItemSelected, handleLayerVisibilityChange, handleOnMenuItemSelection, handleRefreshFromStyle, hasItemSelected, invertAllLayerVisibility, overlayMapLayers, overlaysLabel, props.activeViewport, props.getContainerForClone, props.mapLayerOptions
|
|
419
|
+
React.createElement(MapLayerDroppable, { disabled: !backgroundMapVisible, isOverlay: isOverlay, layersList: layerList, mapLayerOptions: props.mapLayerOptions, getContainerForClone: props.getContainerForClone, activeViewport: props.activeViewport, onMenuItemSelected: handleOnMenuItemSelection, onItemVisibilityToggleClicked: handleLayerVisibilityChange, onItemSelected: handleItemSelected, onItemEdited: handleRefreshFromStyle })));
|
|
420
|
+
}, [backgroundMapLayers, backgroundMapVisible, changeAllLayerVisibility, detachSelectedLayers, handleItemSelected, handleLayerVisibilityChange, handleOnMenuItemSelection, handleRefreshFromStyle, hasItemSelected, invertAllLayerVisibility, overlayMapLayers, overlaysLabel, props.activeViewport, props.getContainerForClone, props.mapLayerOptions, selectAllLayers, underlaysLabel]);
|
|
413
421
|
const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString("mapLayers:Basemap.BaseMapPanelTitle"));
|
|
414
422
|
return (React.createElement(SourceMapContext.Provider, { value: {
|
|
415
423
|
activeViewport,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { BentleyError, compareStrings } from \"@itwin/core-bentley\";\nimport { BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings, MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\nimport {\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, MapLayerSources, NotifyMessageDetails, OutputMessagePriority,\n ScreenViewport, TileTreeOwner, Viewport,\n} from \"@itwin/core-frontend\";\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\nimport { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport { BasemapPanel } from \"./BasemapPanel\";\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\nimport \"./MapLayerManager.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { MapLayerActionButtons } from \"./MapLayerActionButtons\";\nimport { MapManagerLayersHeader } from \"./MapManagerMapLayersHeader\";\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\n\n/** @internal */\nexport interface SourceMapContextProps {\n readonly sources: MapLayerSource[];\n readonly loadingSources: boolean;\n readonly bases: BaseMapLayerSettings[];\n readonly refreshFromStyle: () => void;\n readonly activeViewport?: ScreenViewport;\n readonly backgroundLayers?: StyleMapLayerSettings[];\n readonly overlayLayers?: StyleMapLayerSettings[];\n readonly mapLayerOptions?: MapLayerOptions;\n}\n\n/** @internal */\nexport const defaultBaseMapLayers = [\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Aerial})),\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Hybrid})),\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Street})),\n];\n\n/** @internal */\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\n sources: [],\n loadingSources: false,\n bases: [],\n refreshFromStyle: () => { },\n});\n\n/** @internal */\nexport function useSourceMapContext(): SourceMapContextProps {\n return React.useContext(SourceMapContext);\n}\n\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\n}\n\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\n const displayStyle = viewport.displayStyle;\n if (!displayStyle)\n return undefined;\n\n const layers = new Array<StyleMapLayerSettings>();\n\n const displayStyleLayers = (getBackgroundMap ? displayStyle.settings.mapImagery.backgroundLayers : displayStyle.settings.mapImagery.overlayLayers);\n for (let layerIndex = 0; layerIndex < displayStyleLayers.length; layerIndex++) {\n const layerSettings = displayStyleLayers[layerIndex];\n const isOverlay = !getBackgroundMap;\n const layerProvider = viewport.getMapLayerImageryProvider({index: layerIndex, isOverlay});\n const treeVisibility = viewport.getMapLayerScaleRangeVisibility({index: layerIndex, isOverlay});\n const popSubLayers = populateSubLayers && (layerSettings instanceof ImageMapLayerSettings);\n layers.push({\n visible: layerSettings.visible,\n treeVisibility,\n name: layerSettings.name,\n source: layerSettings.source,\n transparency: layerSettings.transparency,\n transparentBackground: layerSettings.transparentBackground,\n subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\n showSubLayers: false,\n isOverlay,\n layerIndex,\n provider: layerProvider,\n selected: false,\n });\n }\n\n // since we want to display higher level maps above lower maps in UI reverse their order here.\n return layers.reverse();\n}\n\ninterface MapLayerManagerProps {\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n mapLayerOptions?: MapLayerOptions;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerManager(props: MapLayerManagerProps) {\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\n const [loadingSources, setLoadingSources] = React.useState(false);\n const [bgProviders] = React.useState<BaseMapLayerSettings[]>(props.mapLayerOptions?.baseMapLayers ?? defaultBaseMapLayers);\n const [overlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\n const [underlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\n const { activeViewport, mapLayerOptions } = props;\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\n\n // map layer settings from display style\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\n\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\n\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\n if (activeViewport) {\n return activeViewport.viewFlags.backgroundMap;\n }\n return false;\n });\n\n React.useEffect(() => {\n const updateBackgroundMapVisible = () => setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n return activeViewport.onDisplayStyleChanged.addListener(updateBackgroundMapVisible);\n }, [activeViewport]);\n\n // 'isMounted' is used to prevent any async operation once the hook has been\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\n const isMounted = React.useRef(false);\n React.useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n });\n\n // Setup onTileTreeLoad events listening.\n // This is needed because we need to know when the imagery provider\n // is created, and be able to monitor to status change.\n React.useEffect(() => {\n const handleTileTreeLoad = (args: TileTreeOwner) => {\n\n // Ignore non-map tile trees\n if (args.tileTree instanceof ImageryMapTileTree) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n\n return IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n const handleScaleRangeVisibilityChanged = (layerIndexes: MapLayerScaleRangeVisibility[]) => {\n const updateLayers = (array: StyleMapLayerSettings[] | undefined) => {\n if (array === undefined)\n return undefined;\n\n return array.map((curStyledLayer) => {\n const foundScaleRangeVisibility = layerIndexes.find((layerIdx) => layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay);\n if (undefined === foundScaleRangeVisibility)\n return curStyledLayer;\n else\n return { ...curStyledLayer, treeVisibility: foundScaleRangeVisibility.visibility };\n });\n\n };\n setBackgroundMapLayers(updateLayers(backgroundMapLayers));\n setOverlayMapLayers(updateLayers(overlayMapLayers));\n\n };\n\n return activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\n\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n // Setup onMapImageryChanged events listening.\n\n React.useEffect(() => {\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\n\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n return activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\n\n // Triggered whenever a provider status change\n React.useEffect(() => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n\n return () => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n };\n\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\n\n // Monitor viewport updates, and refresh the widget accordingly.\n // Note: This is needed for multiple viewport applications.\n React.useEffect(() => {\n // Update background map status\n setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n\n // Refresh list of layers\n loadMapLayerSettingsFromViewport(activeViewport);\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n async function fetchSources() {\n\n let preferenceSources: MapLayerSource[] = [];\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\n\n const iModel = activeViewport.iModel;\n try {\n if (iModel?.iTwinId !== undefined) {\n preferenceSources = await MapLayerPreferences.getSources(iModel.iTwinId, iModel.iModelId);\n }\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\n }\n\n if (!isMounted.current) {\n return;\n }\n\n // This is where the list of layers first gets populated...\n const sources: MapLayerSource[] = [];\n const addSource = (source: MapLayerSource) => !source.baseMap && sources.push(source); // No longer let MapLayerSources drive bg maps.\n sourceLayers?.allSource.forEach(addSource);\n preferenceSources.forEach((source) => {\n // Do not add duplicate\n if (!sources.find((curSource) => source.name === curSource.name))\n addSource(source);\n });\n sources.sort((a: MapLayerSource, b: MapLayerSource) => compareStrings(a.name.toLowerCase(), b.name.toLowerCase()));\n\n setMapSources(sources);\n }\n\n setLoadingSources(true);\n\n fetchSources().then(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n\n }).catch(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n });\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection, activeViewport.iModel]);\n\n /**\n * Handle change events in the MapLayerPreferences\n */\n React.useEffect(() => {\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\n\n let tmpSources = (mapSources ? [...mapSources] : undefined);\n if (removeSource) {\n if (oldSource && tmpSources) {\n tmpSources = tmpSources.filter((source) => source.name !== oldSource.name);\n\n // We don't update state in case of replacement... it will be done when the source is re-added right after.\n if (changeType !== MapLayerSourceChangeType.Replaced )\n setMapSources(tmpSources);\n }\n }\n\n if (addSource) {\n if (tmpSources && newSource && !tmpSources.find((curSource) => newSource.name === curSource.name)) {\n tmpSources.push(newSource);\n tmpSources.sort((a: MapLayerSource, b: MapLayerSource) => compareStrings(a.name.toLowerCase(), b.name.toLowerCase()));\n setMapSources(tmpSources);\n }\n }\n };\n return MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\n\n }, [setMapSources, mapSources]);\n\n // update when a different display style is loaded.\n React.useEffect(() => {\n const handleDisplayStyleChange = (vp: Viewport) => {\n loadMapLayerSettingsFromViewport(vp);\n };\n return activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\n if (!activeViewport || !activeViewport.displayStyle)\n return;\n\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (indexInDisplayStyle < 0)\n return;\n\n switch (action) {\n case \"delete\":\n activeViewport.displayStyle.detachMapLayerByIndex({index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay});\n break;\n case \"zoom-to-layer\":\n activeViewport.viewMapLayerRange({index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay}, activeViewport).then((status) => {\n if (!status) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\n }\n }).catch((_error) => { });\n break;\n }\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\n if (activeViewport) {\n const isVisible = !mapLayerSettings.visible;\n\n const displayStyle = activeViewport.displayStyle;\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (-1 !== indexInDisplayStyle) {\n // update the display style\n displayStyle.changeMapLayerProps({ visible: isVisible }, {index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay});\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n }\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleMapLayersToggle = React.useCallback(() => {\n if (activeViewport) {\n const newState = !backgroundMapVisible;\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\n setBackgroundMapVisible(newState);\n }\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\n\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\n const { destination, source } = result;\n\n if (!destination) // dropped outside of list\n return;\n\n // item was not moved\n if (destination.droppableId === source.droppableId && destination.index === source.index)\n return;\n\n let fromMapLayer: StyleMapLayerSettings | undefined;\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n fromMapLayer = overlayMapLayers[source.index];\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n fromMapLayer = backgroundMapLayers[source.index];\n\n if (!fromMapLayer || !activeViewport)\n return;\n\n const displayStyle = activeViewport.displayStyle;\n let toMapLayer: StyleMapLayerSettings | undefined;\n let toIndexInDisplayStyle = -1;\n\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.\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\n if (undefined !== destination.index) {\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n toMapLayer = overlayMapLayers[destination.index];\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n toMapLayer = backgroundMapLayers[destination.index];\n if (toMapLayer)\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\n }\n\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\n if (fromIndexInDisplayStyle < 0)\n return;\n\n if (destination.droppableId !== source.droppableId) {\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\n const settings = activeViewport.displayStyle.mapLayerAtIndex({index: fromIndexInDisplayStyle, isOverlay: fromMapLayer.isOverlay});\n if (settings) {\n activeViewport.displayStyle.detachMapLayerByIndex({index: fromIndexInDisplayStyle, isOverlay: fromMapLayer.isOverlay});\n\n // Manually reverse index when moved from one section to the other\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\n toIndexInDisplayStyle = displayStyle.settings.mapImagery.backgroundLayers.length - destination.index;\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\n }\n\n activeViewport.displayStyle.attachMapLayer({ settings, mapLayerIndex: {isOverlay: !fromMapLayer.isOverlay, index: toIndexInDisplayStyle} });\n }\n } else {\n if (undefined === destination.index) {\n displayStyle.moveMapLayerToBottom({index: fromIndexInDisplayStyle, isOverlay: destination.droppableId === \"overlayMapLayers\"});\n } else {\n if (toMapLayer) {\n if (toIndexInDisplayStyle !== -1)\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\n }\n }\n }\n // Note: display style change is automatically applied to view via DisplayStyleState._synchBackgroundMapImagery()\n // So no need to call Viewport.invalidateRenderPlan() here\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\n\n const handleRefreshFromStyle = React.useCallback(() => {\n if (activeViewport)\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleItemSelected = React.useCallback((isOverlay: boolean, _index: number) => {\n if (isOverlay ) {\n if (overlayMapLayers)\n setOverlayMapLayers([...overlayMapLayers]);\n } else {\n if (backgroundMapLayers)\n setBackgroundMapLayers([...backgroundMapLayers]);\n }\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const hasItemSelected = React.useCallback((isOverlay: boolean) => {\n const layerList = (isOverlay ? overlayMapLayers : backgroundMapLayers);\n if (!layerList)\n return false;\n return undefined !== layerList?.find((value) => value.selected === true);\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const changeLayerVisibility = React.useCallback((visible: boolean, index: number, isOverlay: boolean) => {\n activeViewport.displayStyle.changeMapLayerProps({ visible }, {index, isOverlay});\n }, [activeViewport]);\n\n const changeAllLayerVisibility = React.useCallback(async (visible: boolean, isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay)\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n\n if (isOverlay === undefined || isOverlay)\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }, [backgroundMapLayers, overlayMapLayers, changeLayerVisibility]);\n\n const invertAllLayerVisibility = React.useCallback(async (isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay)\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n\n if (isOverlay === undefined || isOverlay)\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }, [backgroundMapLayers, overlayMapLayers, changeLayerVisibility]);\n\n const detachSelectedLayers = React.useCallback(async (isOverlay: boolean) => {\n const layerList = (isOverlay ? overlayMapLayers : backgroundMapLayers);\n if (!layerList || layerList.length === 0)\n return;\n\n for (let i=0; i<layerList.length; i++) {\n if (layerList[i].selected) {\n const index = (layerList.length -1) - i; // Layers are reverted order is display style\n activeViewport.displayStyle.detachMapLayerByIndex({isOverlay, index});\n }\n }\n\n }, [activeViewport, overlayMapLayers, backgroundMapLayers]);\n\n const selectAllLayers = React.useCallback(async (isOverlay: boolean) => {\n if (!overlayMapLayers || !backgroundMapLayers)\n return;\n\n const layerList = (isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers]);\n const hasCheckedLayer = undefined !== layerList?.find((value) => value.selected === true);\n layerList.forEach((layer) => {layer.selected = !hasCheckedLayer;} );\n\n if (isOverlay)\n setOverlayMapLayers(layerList);\n else\n setBackgroundMapLayers(layerList);\n\n }, [overlayMapLayers, backgroundMapLayers]);\n\n const renderMapLayersList = React.useCallback((options: {isOverlay: boolean}): React.ReactElement<HTMLElement> => {\n if (!overlayMapLayers || !backgroundMapLayers)\n return <></>;\n\n const {isOverlay} = options;\n const layerList = (isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers]);\n\n const label = (isOverlay ? overlaysLabel : underlaysLabel);\n return (\n <div className=\"map-manager-layer-wrapper\" data-testid={\"map-manager-layer-section\"}>\n <MapManagerLayersHeader\n label={label}\n isOverlay={isOverlay}\n disabled={!backgroundMapVisible}\n />\n {(layerList && layerList.length > 0) &&\n <>\n <MapLayerActionButtons\n disabled={!backgroundMapVisible}\n disabledUnlink={!hasItemSelected(isOverlay)}\n hideAll={async () => changeAllLayerVisibility(false, isOverlay)}\n showAll={async () => changeAllLayerVisibility(true, isOverlay)}\n invert={async ()=>invertAllLayerVisibility(isOverlay)}\n selectAll={async ()=>selectAllLayers(isOverlay)}\n unlink={async ()=>detachSelectedLayers(isOverlay)}\n checked={hasItemSelected(isOverlay)}\n />\n </>\n }\n <MapLayerDroppable\n disabled={!backgroundMapVisible}\n isOverlay={isOverlay}\n layersList={layerList}\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\n getContainerForClone={props.getContainerForClone as any}\n activeViewport={props.activeViewport}\n onMenuItemSelected={handleOnMenuItemSelection}\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\n onItemSelected={handleItemSelected}\n onItemEdited={handleRefreshFromStyle} />\n </div>\n );\n\n },[backgroundMapLayers, backgroundMapVisible, changeAllLayerVisibility, detachSelectedLayers, handleItemSelected, handleLayerVisibilityChange, handleOnMenuItemSelection, handleRefreshFromStyle, hasItemSelected, invertAllLayerVisibility, overlayMapLayers, overlaysLabel, props.activeViewport, props.getContainerForClone, props.mapLayerOptions?.mapTypeOptions, selectAllLayers, underlaysLabel]);\n\n const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\n\n return (\n <SourceMapContext.Provider value={{\n activeViewport,\n loadingSources,\n sources: mapSources ? mapSources : [],\n bases: bgProviders,\n refreshFromStyle: handleRefreshFromStyle,\n backgroundLayers: backgroundMapLayers,\n overlayLayers: overlayMapLayers,\n mapLayerOptions,\n }}>\n {/* Header*/}\n <div className=\"map-manager-top-header\">\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\n <div className=\"map-manager-header-buttons-group\">\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\n <MapLayerSettingsPopupButton disabled={!backgroundMapVisible} />\n </div>\n </div>\n\n <div className=\"map-manager-container\">\n\n {/* Base map*/}\n <div className=\"map-manager-basemap\">\n <BasemapPanel disabled={!backgroundMapVisible} />\n </div>\n\n {/* List of Layers (droppable) */}\n {!hideExternalMapLayersSection &&\n <div>\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\n {renderMapLayersList({isOverlay: false})}\n {renderMapLayersList({isOverlay: true})}\n </DragDropContext>\n </div>\n }\n </div >\n </SourceMapContext.Provider >\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,2CAA2C;AAE3C,oEAAoE;AACpE,sDAAsD;AAEtD,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAc,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,GACtF,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAAE,SAAS,EAAyE,eAAe,EAAE,oBAAoB,EAC3I,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAcrE,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAI;IACnC,oBAAoB,CAAC,YAAY,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAC,CAAC,CAAC;IACzH,oBAAoB,CAAC,YAAY,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAC,CAAC,CAAC;IACzH,oBAAoB,CAAC,YAAY,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,CAAC,MAAM,EAAC,CAAC,CAAC;CAC1H,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAwB;IACzE,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,EAAE;IACT,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC;CAC5B,CAAC,CAAC;AAEH,gBAAgB;AAChB,MAAM,UAAU,mBAAmB;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,gBAAgB,CAAC,gBAAuC;IAC/D,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAkB,EAAE,gBAAyB,EAAE,iBAAiB,GAAG,IAAI;IAC9G,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3C,IAAI,CAAC,YAAY;QACf,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,KAAK,EAAyB,CAAC;IAElD,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACnJ,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAC;QACpC,MAAM,aAAa,GAAG,QAAQ,CAAC,0BAA0B,CAAC,EAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,QAAQ,CAAC,+BAA+B,CAAC,EAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAC,CAAC,CAAC;QAChG,MAAM,YAAY,GAAG,iBAAiB,IAAI,CAAC,aAAa,YAAY,qBAAqB,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,cAAc;YACd,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/E,aAAa,EAAE,KAAK;YACpB,SAAS;YACT,UAAU;YACV,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;KACJ;IAED,8FAA8F;IAC9F,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAQD,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAgC,CAAC;IACnF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAyB,KAAK,CAAC,eAAe,EAAE,aAAa,IAAI,oBAAoB,CAAC,CAAC;IAC3H,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACtH,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC1H,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,4BAA4B,GAAG,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5H,MAAM,0BAA0B,GAAG,eAAe,EAAE,0BAA0B,CAAC,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpI,wCAAwC;IACxC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsC,+BAA+B,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IACjK,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsC,+BAA+B,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5J,MAAM,gCAAgC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAkB,EAAE,EAAE;QAChF,sBAAsB,CAAC,+BAA+B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,mBAAmB,CAAC,+BAA+B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAElD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC1E,IAAI,cAAc,EAAE;YAClB,OAAO,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;SAC/C;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzG,OAAO,cAAc,CAAC,qBAAqB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IACtF,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,4EAA4E;IAC5E,wHAAwH;IACxH,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,mEAAmE;IACnE,uDAAuD;IACvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,kBAAkB,GAAG,CAAC,IAAmB,EAAE,EAAE;YAEjD,4BAA4B;YAC5B,IAAI,IAAI,CAAC,QAAQ,YAAY,kBAAkB,EAAE;gBAC/C,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;QACH,CAAC,CAAC;QAEF,OAAO,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAE5E,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,iCAAiC,GAAG,CAAC,YAA4C,EAAE,EAAE;YACzF,MAAM,YAAY,GAAG,CAAC,KAA0C,EAAE,EAAE;gBAClE,IAAI,KAAK,KAAK,SAAS;oBACrB,OAAO,SAAS,CAAC;gBAEnB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;oBAClC,MAAM,yBAAyB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,CAAC,CAAC;oBACnK,IAAI,SAAS,KAAK,yBAAyB;wBACzC,OAAO,cAAc,CAAC;;wBAEtB,OAAO,EAAE,GAAG,cAAc,EAAE,cAAc,EAAE,yBAAyB,CAAC,UAAU,EAAE,CAAC;gBACvF,CAAC,CAAC,CAAC;YAEL,CAAC,CAAC;YACF,sBAAsB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1D,mBAAmB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEtD,CAAC,CAAC;QAEF,OAAO,cAAc,CAAC,qCAAqC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;IAE7G,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE9F,8CAA8C;IAE9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,CAAC,IAAkC,EAAE,EAAE;YAErE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;mBACtF,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;QACH,CAAC,CAAC;QACF,OAAO,cAAc,EAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IACxG,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE9F,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAA8B,EAAE,EAAE;QACvF,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,gCAAgC,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,mBAAmB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvH,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpH,OAAO,GAAG,EAAE;YACV,mBAAmB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,CAAC,CAAC;IAEJ,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,gCAAgC,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAE3H,gEAAgE;IAChE,2DAA2D;IAC3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,+BAA+B;QAC/B,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEhE,yBAAyB;QACzB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAEnD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,YAAY;YAEzB,IAAI,iBAAiB,GAAqB,EAAE,CAAC;YAC7C,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,0BAA0B,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAE5H,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;YACrC,IAAI;gBACF,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE;oBACjC,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;iBAC3F;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2CAA2C,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzN;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtB,OAAO;aACR;YAED,4DAA4D;YAC5D,MAAM,OAAO,GAAqB,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,CAAC,MAAsB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,+CAA+C;YACvI,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,gBAAgB,GAAG,IAAI,0BAA0B,EAAE,CAAC;YAC1D,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACnC,2DAA2D;gBAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE;oBAChE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBACjE,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACrC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;qBAC/E;oBACD,SAAS,CAAC,MAAM,CAAC,CAAC;iBACnB;YAEH,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YAEnH,aAAa,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExB,YAAY,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACvB,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAC1B;QAEH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAErG;;MAEE;IACF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,KAAK,EAAE,UAAoC,EAAE,SAA0B,EAAE,SAA0B,EAAE,EAAE;YACrI,MAAM,YAAY,GAAG,CAAC,UAAU,KAAK,wBAAwB,CAAC,QAAQ,IAAI,UAAU,KAAK,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC3H,MAAM,SAAS,GAAG,CAAC,UAAU,KAAK,wBAAwB,CAAC,QAAQ,IAAI,UAAU,KAAK,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAEtH,IAAI,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,YAAY,EAAE;gBAChB,IAAI,SAAS,IAAI,UAAU,EAAE;oBAC3B,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC;oBAE5E,2GAA2G;oBAC3G,IAAI,UAAU,KAAK,wBAAwB,CAAC,QAAQ;wBAClD,aAAa,CAAC,UAAU,CAAC,CAAC;iBAC7B;aACF;YAED,IAAI,SAAS,EAAE;gBACb,IAAI,UAAU,IAAI,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE;oBACjG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;oBACtH,aAAa,CAAC,UAAU,CAAC,CAAC;iBAC3B;aACF;QACH,CAAC,CAAC;QACF,OAAO,mBAAmB,CAAC,oBAAoB,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAEvF,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhC,mDAAmD;IACnD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,wBAAwB,GAAG,CAAC,EAAY,EAAE,EAAE;YAChD,gCAAgC,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,OAAO,cAAc,EAAE,qBAAqB,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IACrF,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAc,EAAE,gBAAuC,EAAE,EAAE;QAC9G,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,YAAY;YACjD,OAAO;QAET,MAAM,mBAAmB,GAAG,cAAc,CAAC,YAAY,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACrK,IAAI,mBAAmB,GAAG,CAAC;YACzB,OAAO;QAET,QAAQ,MAAM,EAAE;YACd,KAAK,QAAQ;gBACX,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAC,CAAC,CAAC;gBACvH,MAAM;YACR,KAAK,eAAe;gBAClB,cAAc,CAAC,iBAAiB,CAAC,EAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAC,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBACpI,IAAI,CAAC,MAAM,EAAE;wBACX,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC;wBAC7F,SAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;qBACnI;gBACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1B,MAAM;SACT;QAED,qBAAqB;QACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,gBAAuC,EAAE,EAAE;QAChG,IAAI,cAAc,EAAE;YAClB,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAE5C,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,2BAA2B;gBAC3B,YAAY,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAC,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAC,CAAC,CAAC;gBAE9H,qBAAqB;gBACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;SACF;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnD,IAAI,cAAc,EAAE;YAClB,MAAM,QAAQ,GAAG,CAAC,oBAAoB,CAAC;YACvC,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACpF,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SACnC;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpE,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAkB,CAAC,oCAAoC,EAAE,EAAE;QAC5G,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEvC,IAAI,CAAC,WAAW,EAAE,0BAA0B;YAC1C,OAAO;QAET,qBAAqB;QACrB,IAAI,WAAW,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YACtF,OAAO;QAET,IAAI,YAA+C,CAAC;QACpD,IAAI,MAAM,CAAC,WAAW,KAAK,kBAAkB,IAAI,gBAAgB;YAC/D,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC3C,IAAI,MAAM,CAAC,WAAW,KAAK,qBAAqB,IAAI,mBAAmB;YAC1E,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;YAClC,OAAO;QAET,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QACjD,IAAI,UAA6C,CAAC;QAClD,IAAI,qBAAqB,GAAG,CAAC,CAAC,CAAC;QAE/B,sKAAsK;QACtK,gHAAgH;QAChH,IAAI,SAAS,KAAK,WAAW,CAAC,KAAK,EAAE;YACnC,IAAI,WAAW,CAAC,WAAW,KAAK,kBAAkB,IAAI,gBAAgB;gBACpE,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC9C,IAAI,WAAW,CAAC,WAAW,KAAK,qBAAqB,IAAI,mBAAmB;gBAC/E,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,UAAU;gBACZ,qBAAqB,GAAG,YAAY,CAAC,gCAAgC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;SACnI;QAED,MAAM,uBAAuB,GAAG,YAAY,CAAC,gCAAgC,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9I,IAAI,uBAAuB,GAAG,CAAC;YAC7B,OAAO;QAET,IAAI,WAAW,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE;YAClD,iFAAiF;YACjF,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,EAAC,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAC,CAAC,CAAC;YAClI,IAAI,QAAQ,EAAE;gBACZ,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAC,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAC,CAAC,CAAC;gBAEvH,kEAAkE;gBAClE,IAAI,YAAY,CAAC,SAAS,IAAI,mBAAmB,EAAE;oBACjD,qBAAqB,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;iBACtG;qBAAM,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,gBAAgB,EAAE;oBACtD,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;iBACrE;gBAED,cAAc,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAC,SAAS,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAC,EAAE,CAAC,CAAC;aAC7I;SACF;aAAM;YACL,IAAI,SAAS,KAAK,WAAW,CAAC,KAAK,EAAE;gBACnC,YAAY,CAAC,oBAAoB,CAAC,EAAC,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,WAAW,CAAC,WAAW,KAAK,kBAAkB,EAAC,CAAC,CAAC;aAChI;iBAAM;gBACL,IAAI,UAAU,EAAE;oBACd,IAAI,qBAAqB,KAAK,CAAC,CAAC;wBAC9B,YAAY,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,qBAAqB,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;iBAC1G;aACF;SACF;QACD,iHAAiH;QACjH,0DAA0D;QAE1D,qBAAqB;QACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,gCAAgC,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9F,MAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACpD,IAAI,cAAc;YAChB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAkB,EAAE,MAAc,EAAE,EAAE;QAClF,IAAI,SAAS,EAAG;YACd,IAAI,gBAAgB;gBAClB,mBAAmB,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;SAC9C;aAAM;YACL,IAAI,mBAAmB;gBACrB,sBAAsB,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;SACpD;IACH,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5C,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAkB,EAAE,EAAE;QAC/D,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS;YACZ,OAAO,KAAK,CAAC;QACf,OAAO,SAAS,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC3E,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE5C,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,OAAgB,EAAE,KAAa,EAAE,SAAkB,EAAE,EAAE;QACtG,cAAc,CAAC,YAAY,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC;IACnF,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAgB,EAAE,SAAmB,EAAE,EAAE;QACjG,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS;YACvC,mBAAmB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAE7G,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS;YACtC,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5G,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEnE,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAmB,EAAE,EAAE;QAC/E,IAAI,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS;YACvC,mBAAmB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAEpH,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS;YACtC,gBAAgB,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACnH,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEnE,MAAM,oBAAoB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QAC1E,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACvE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YACtC,OAAO;QAET,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;gBACzB,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,MAAM,GAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAI,6CAA6C;gBACzF,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;aACvE;SACF;IAEH,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE5D,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAkB,EAAE,EAAE;QACrE,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB;YAC3C,OAAO;QAET,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;QACjF,MAAM,eAAe,GAAG,SAAS,KAAK,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAC1F,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,eAAe,CAAC,CAAA,CAAC,CAAE,CAAC;QAEpE,IAAI,SAAS;YACX,mBAAmB,CAAC,SAAS,CAAC,CAAC;;YAE/B,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAEtC,CAAC,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE5C,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,OAA6B,EAAoC,EAAE;QAChH,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB;YAC3C,OAAO,yCAAK,CAAC;QAEf,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;QAC5B,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAI,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC5D,OAAO,CACL,6BAAK,SAAS,EAAC,2BAA2B,iBAAc,2BAA2B;YACjF,oBAAC,sBAAsB,IACrB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,oBAAoB,GAC/B;YACD,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC;oBACE,oBAAC,qBAAqB,IACpB,QAAQ,EAAE,CAAC,oBAAoB,EAC/B,cAAc,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,EAC3C,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,EAC/D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,SAAS,CAAC,EAC9D,MAAM,EAAE,KAAK,IAAG,EAAE,CAAA,wBAAwB,CAAC,SAAS,CAAC,EACrD,SAAS,EAAE,KAAK,IAAG,EAAE,CAAA,eAAe,CAAC,SAAS,CAAC,EAC/C,MAAM,EAAE,KAAK,IAAG,EAAE,CAAA,oBAAoB,CAAC,SAAS,CAAC,EACjD,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GACnC,CACD;YAED,oBAAC,iBAAiB,IAChB,QAAQ,EAAE,CAAC,oBAAoB,EAC/B,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,SAAS,EACrB,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,oBAAoB,EAAE,KAAK,CAAC,oBAA2B,EACvD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,kBAAkB,EAAE,yBAAyB,EAC7C,6BAA6B,EAAE,2BAA2B,EAC1D,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,sBAAsB,GAAI,CACtC,CACP,CAAC;IAEJ,CAAC,EAAC,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzX,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAE/H,OAAO,CACL,oBAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE;YAChC,cAAc;YACd,cAAc;YACd,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACrC,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,sBAAsB;YACxC,gBAAgB,EAAE,mBAAmB;YACrC,aAAa,EAAE,gBAAgB;YAC/B,eAAe;SAChB;QAEC,6BAAK,SAAS,EAAC,wBAAwB;YACrC,8BAAM,SAAS,EAAC,0BAA0B,IAAE,iBAAiB,CAAQ;YACrE,6BAAK,SAAS,EAAC,kCAAkC;gBAC/C,oBAAC,YAAY,IAAC,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,GAAI;gBAC/G,oBAAC,2BAA2B,IAAC,QAAQ,EAAE,CAAC,oBAAoB,GAAI,CAC5D,CACF;QAEN,6BAAK,SAAS,EAAC,uBAAuB;YAGpC,6BAAK,SAAS,EAAC,qBAAqB;gBAClC,oBAAC,YAAY,IAAC,QAAQ,EAAE,CAAC,oBAAoB,GAAI,CAC7C;YAGL,CAAC,4BAA4B;gBAC9B;oBACE,oBAAC,eAAe,IAAC,SAAS,EAAE,uBAAuB;wBAChD,mBAAmB,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;wBACvC,mBAAmB,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CACvB,CACd,CAED,CACoB,CAC9B,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n/* eslint-disable @typescript-eslint/unbound-method */\n\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\nimport { BentleyError, compareStrings } from \"@itwin/core-bentley\";\nimport {\n BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings, MapImagerySettings, MapSubLayerProps, MapSubLayerSettings,\n} from \"@itwin/core-common\";\nimport {\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, MapLayerSources, NotifyMessageDetails,\n OutputMessagePriority, ScreenViewport, TileTreeOwner, Viewport,\n} from \"@itwin/core-frontend\";\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamUtils } from \"../../CustomParamUtils\";\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport { BasemapPanel } from \"./BasemapPanel\";\nimport { MapLayerActionButtons } from \"./MapLayerActionButtons\";\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\nimport { MapManagerLayersHeader } from \"./MapManagerMapLayersHeader\";\n\n/** @internal */\nexport interface SourceMapContextProps {\n readonly sources: MapLayerSource[];\n readonly loadingSources: boolean;\n readonly bases: BaseMapLayerSettings[];\n readonly refreshFromStyle: () => void;\n readonly activeViewport?: ScreenViewport;\n readonly backgroundLayers?: StyleMapLayerSettings[];\n readonly overlayLayers?: StyleMapLayerSettings[];\n readonly mapLayerOptions?: MapLayerOptions;\n}\n\n/** @internal */\nexport const defaultBaseMapLayers = [\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Aerial})),\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Hybrid})),\n BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON({name: \"BingProvider\", type: BackgroundMapType.Street})),\n];\n\n/** @internal */\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\n sources: [],\n loadingSources: false,\n bases: [],\n refreshFromStyle: () => { },\n});\n\n/** @internal */\nexport function useSourceMapContext(): SourceMapContextProps {\n return React.useContext(SourceMapContext);\n}\n\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\n}\n\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\n const displayStyle = viewport.displayStyle;\n if (!displayStyle)\n return undefined;\n\n const layers = new Array<StyleMapLayerSettings>();\n\n const displayStyleLayers = (getBackgroundMap ? displayStyle.settings.mapImagery.backgroundLayers : displayStyle.settings.mapImagery.overlayLayers);\n for (let layerIndex = 0; layerIndex < displayStyleLayers.length; layerIndex++) {\n const layerSettings = displayStyleLayers[layerIndex];\n const isOverlay = !getBackgroundMap;\n const layerProvider = viewport.getMapLayerImageryProvider({index: layerIndex, isOverlay});\n const treeVisibility = viewport.getMapLayerScaleRangeVisibility({index: layerIndex, isOverlay});\n const popSubLayers = populateSubLayers && (layerSettings instanceof ImageMapLayerSettings);\n layers.push({\n visible: layerSettings.visible,\n treeVisibility,\n name: layerSettings.name,\n source: layerSettings.source,\n transparency: layerSettings.transparency,\n transparentBackground: layerSettings.transparentBackground,\n subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\n showSubLayers: false,\n isOverlay,\n layerIndex,\n provider: layerProvider,\n selected: false,\n });\n }\n\n // since we want to display higher level maps above lower maps in UI reverse their order here.\n return layers.reverse();\n}\n\ninterface MapLayerManagerProps {\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n mapLayerOptions?: MapLayerOptions;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerManager(props: MapLayerManagerProps) {\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\n const [loadingSources, setLoadingSources] = React.useState(false);\n const [bgProviders] = React.useState<BaseMapLayerSettings[]>(props.mapLayerOptions?.baseMapLayers ?? defaultBaseMapLayers);\n const [overlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\n const [underlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\n const { activeViewport, mapLayerOptions } = props;\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\n\n // map layer settings from display style\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\n\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\n\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\n if (activeViewport) {\n return activeViewport.viewFlags.backgroundMap;\n }\n return false;\n });\n\n React.useEffect(() => {\n const updateBackgroundMapVisible = () => setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n return activeViewport.onDisplayStyleChanged.addListener(updateBackgroundMapVisible);\n }, [activeViewport]);\n\n // 'isMounted' is used to prevent any async operation once the hook has been\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\n const isMounted = React.useRef(false);\n React.useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n });\n\n // Setup onTileTreeLoad events listening.\n // This is needed because we need to know when the imagery provider\n // is created, and be able to monitor to status change.\n React.useEffect(() => {\n const handleTileTreeLoad = (args: TileTreeOwner) => {\n\n // Ignore non-map tile trees\n if (args.tileTree instanceof ImageryMapTileTree) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n\n return IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n const handleScaleRangeVisibilityChanged = (layerIndexes: MapLayerScaleRangeVisibility[]) => {\n const updateLayers = (array: StyleMapLayerSettings[] | undefined) => {\n if (array === undefined)\n return undefined;\n\n return array.map((curStyledLayer) => {\n const foundScaleRangeVisibility = layerIndexes.find((layerIdx) => layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay);\n if (undefined === foundScaleRangeVisibility)\n return curStyledLayer;\n else\n return { ...curStyledLayer, treeVisibility: foundScaleRangeVisibility.visibility };\n });\n\n };\n setBackgroundMapLayers(updateLayers(backgroundMapLayers));\n setOverlayMapLayers(updateLayers(overlayMapLayers));\n\n };\n\n return activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\n\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n // Setup onMapImageryChanged events listening.\n\n React.useEffect(() => {\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\n\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n return activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\n\n // Triggered whenever a provider status change\n React.useEffect(() => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n\n return () => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n };\n\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\n\n // Monitor viewport updates, and refresh the widget accordingly.\n // Note: This is needed for multiple viewport applications.\n React.useEffect(() => {\n // Update background map status\n setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n\n // Refresh list of layers\n loadMapLayerSettingsFromViewport(activeViewport);\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n async function fetchSources() {\n\n let preferenceSources: MapLayerSource[] = [];\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\n\n const iModel = activeViewport.iModel;\n try {\n if (iModel?.iTwinId !== undefined) {\n preferenceSources = await MapLayerPreferences.getSources(iModel.iTwinId, iModel.iModelId);\n }\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\n }\n\n if (!isMounted.current) {\n return;\n }\n\n // This is where the list of sources first gets populated...\n const sources: MapLayerSource[] = [];\n const addSource = (source: MapLayerSource) => !source.baseMap && sources.push(source); // No longer let MapLayerSources drive bg maps.\n sourceLayers?.allSource.forEach(addSource);\n const cpMappingStorage = new CustomParamsMappingStorage();\n preferenceSources.forEach((source) => {\n // Find existing entries to avoid adding duplicated sources\n if (!sources.find((curSource) => source.name === curSource.name)) {\n const cpMapping = cpMappingStorage.get(source.url.toLowerCase());\n if (cpMapping && cpMapping.length > 0) {\n CustomParamUtils.setSourceCustomParams(source, cpMapping[0].customParamNames);\n }\n addSource(source);\n }\n\n });\n sources.sort((a: MapLayerSource, b: MapLayerSource) => compareStrings(a.name.toLowerCase(), b.name.toLowerCase()));\n\n setMapSources(sources);\n }\n\n setLoadingSources(true);\n\n fetchSources().then(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n\n }).catch(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n });\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection, activeViewport.iModel]);\n\n /**\n * Handle change events in the MapLayerPreferences\n */\n React.useEffect(() => {\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\n\n let tmpSources = (mapSources ? [...mapSources] : undefined);\n if (removeSource) {\n if (oldSource && tmpSources) {\n tmpSources = tmpSources.filter((source) => source.name !== oldSource.name);\n\n // We don't update state in case of replacement... it will be done when the source is re-added right after.\n if (changeType !== MapLayerSourceChangeType.Replaced )\n setMapSources(tmpSources);\n }\n }\n\n if (addSource) {\n if (tmpSources && newSource && !tmpSources.find((curSource) => newSource.name === curSource.name)) {\n tmpSources.push(newSource);\n tmpSources.sort((a: MapLayerSource, b: MapLayerSource) => compareStrings(a.name.toLowerCase(), b.name.toLowerCase()));\n setMapSources(tmpSources);\n }\n }\n };\n return MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\n\n }, [setMapSources, mapSources]);\n\n // update when a different display style is loaded.\n React.useEffect(() => {\n const handleDisplayStyleChange = (vp: Viewport) => {\n loadMapLayerSettingsFromViewport(vp);\n };\n return activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\n if (!activeViewport || !activeViewport.displayStyle)\n return;\n\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (indexInDisplayStyle < 0)\n return;\n\n switch (action) {\n case \"delete\":\n activeViewport.displayStyle.detachMapLayerByIndex({index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay});\n break;\n case \"zoom-to-layer\":\n activeViewport.viewMapLayerRange({index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay}, activeViewport).then((status) => {\n if (!status) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\n }\n }).catch((_error) => { });\n break;\n }\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\n if (activeViewport) {\n const isVisible = !mapLayerSettings.visible;\n\n const displayStyle = activeViewport.displayStyle;\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (-1 !== indexInDisplayStyle) {\n // update the display style\n displayStyle.changeMapLayerProps({ visible: isVisible }, {index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay});\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n }\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleMapLayersToggle = React.useCallback(() => {\n if (activeViewport) {\n const newState = !backgroundMapVisible;\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\n setBackgroundMapVisible(newState);\n }\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\n\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\n const { destination, source } = result;\n\n if (!destination) // dropped outside of list\n return;\n\n // item was not moved\n if (destination.droppableId === source.droppableId && destination.index === source.index)\n return;\n\n let fromMapLayer: StyleMapLayerSettings | undefined;\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n fromMapLayer = overlayMapLayers[source.index];\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n fromMapLayer = backgroundMapLayers[source.index];\n\n if (!fromMapLayer || !activeViewport)\n return;\n\n const displayStyle = activeViewport.displayStyle;\n let toMapLayer: StyleMapLayerSettings | undefined;\n let toIndexInDisplayStyle = -1;\n\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.\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\n if (undefined !== destination.index) {\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n toMapLayer = overlayMapLayers[destination.index];\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n toMapLayer = backgroundMapLayers[destination.index];\n if (toMapLayer)\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\n }\n\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\n if (fromIndexInDisplayStyle < 0)\n return;\n\n if (destination.droppableId !== source.droppableId) {\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\n const settings = activeViewport.displayStyle.mapLayerAtIndex({index: fromIndexInDisplayStyle, isOverlay: fromMapLayer.isOverlay});\n if (settings) {\n activeViewport.displayStyle.detachMapLayerByIndex({index: fromIndexInDisplayStyle, isOverlay: fromMapLayer.isOverlay});\n\n // Manually reverse index when moved from one section to the other\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\n toIndexInDisplayStyle = displayStyle.settings.mapImagery.backgroundLayers.length - destination.index;\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\n }\n\n activeViewport.displayStyle.attachMapLayer({ settings, mapLayerIndex: {isOverlay: !fromMapLayer.isOverlay, index: toIndexInDisplayStyle} });\n }\n } else {\n if (undefined === destination.index) {\n displayStyle.moveMapLayerToBottom({index: fromIndexInDisplayStyle, isOverlay: destination.droppableId === \"overlayMapLayers\"});\n } else {\n if (toMapLayer) {\n if (toIndexInDisplayStyle !== -1)\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\n }\n }\n }\n // Note: display style change is automatically applied to view via DisplayStyleState._synchBackgroundMapImagery()\n // So no need to call Viewport.invalidateRenderPlan() here\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\n\n const handleRefreshFromStyle = React.useCallback(() => {\n if (activeViewport)\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleItemSelected = React.useCallback((isOverlay: boolean, _index: number) => {\n if (isOverlay ) {\n if (overlayMapLayers)\n setOverlayMapLayers([...overlayMapLayers]);\n } else {\n if (backgroundMapLayers)\n setBackgroundMapLayers([...backgroundMapLayers]);\n }\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const hasItemSelected = React.useCallback((isOverlay: boolean) => {\n const layerList = (isOverlay ? overlayMapLayers : backgroundMapLayers);\n if (!layerList)\n return false;\n return undefined !== layerList?.find((value) => value.selected === true);\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const changeLayerVisibility = React.useCallback((visible: boolean, index: number, isOverlay: boolean) => {\n activeViewport.displayStyle.changeMapLayerProps({ visible }, {index, isOverlay});\n }, [activeViewport]);\n\n const changeAllLayerVisibility = React.useCallback(async (visible: boolean, isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay)\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n\n if (isOverlay === undefined || isOverlay)\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }, [backgroundMapLayers, overlayMapLayers, changeLayerVisibility]);\n\n const invertAllLayerVisibility = React.useCallback(async (isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay)\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n\n if (isOverlay === undefined || isOverlay)\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }, [backgroundMapLayers, overlayMapLayers, changeLayerVisibility]);\n\n const detachSelectedLayers = React.useCallback(async (isOverlay: boolean) => {\n const layerList = (isOverlay ? overlayMapLayers : backgroundMapLayers);\n if (!layerList || layerList.length === 0)\n return;\n\n for (let i=0; i<layerList.length; i++) {\n if (layerList[i].selected) {\n const index = (layerList.length -1) - i; // Layers are reverted order is display style\n activeViewport.displayStyle.detachMapLayerByIndex({isOverlay, index});\n }\n }\n\n }, [activeViewport, overlayMapLayers, backgroundMapLayers]);\n\n const selectAllLayers = React.useCallback(async (isOverlay: boolean) => {\n if (!overlayMapLayers || !backgroundMapLayers)\n return;\n\n const layerList = (isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers]);\n const hasCheckedLayer = undefined !== layerList?.find((value) => value.selected === true);\n layerList.forEach((layer) => {layer.selected = !hasCheckedLayer;} );\n\n if (isOverlay)\n setOverlayMapLayers(layerList);\n else\n setBackgroundMapLayers(layerList);\n\n }, [overlayMapLayers, backgroundMapLayers]);\n\n const renderMapLayersList = React.useCallback((options: {isOverlay: boolean}): React.ReactElement<HTMLElement> => {\n if (!overlayMapLayers || !backgroundMapLayers)\n return <></>;\n\n const {isOverlay} = options;\n const layerList = (isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers]);\n\n const label = (isOverlay ? overlaysLabel : underlaysLabel);\n return (\n <div className=\"map-manager-layer-wrapper\" data-testid={\"map-manager-layer-section\"}>\n <MapManagerLayersHeader\n label={label}\n isOverlay={isOverlay}\n disabled={!backgroundMapVisible}\n />\n {(layerList && layerList.length > 0) &&\n <>\n <MapLayerActionButtons\n disabled={!backgroundMapVisible}\n disabledUnlink={!hasItemSelected(isOverlay)}\n hideAll={async () => changeAllLayerVisibility(false, isOverlay)}\n showAll={async () => changeAllLayerVisibility(true, isOverlay)}\n invert={async ()=>invertAllLayerVisibility(isOverlay)}\n selectAll={async ()=>selectAllLayers(isOverlay)}\n unlink={async ()=>detachSelectedLayers(isOverlay)}\n checked={hasItemSelected(isOverlay)}\n />\n </>\n }\n <MapLayerDroppable\n disabled={!backgroundMapVisible}\n isOverlay={isOverlay}\n layersList={layerList}\n mapLayerOptions={props.mapLayerOptions}\n getContainerForClone={props.getContainerForClone as any}\n activeViewport={props.activeViewport}\n onMenuItemSelected={handleOnMenuItemSelection}\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\n onItemSelected={handleItemSelected}\n onItemEdited={handleRefreshFromStyle} />\n </div>\n );\n\n },[backgroundMapLayers, backgroundMapVisible, changeAllLayerVisibility, detachSelectedLayers, handleItemSelected, handleLayerVisibilityChange, handleOnMenuItemSelection, handleRefreshFromStyle, hasItemSelected, invertAllLayerVisibility, overlayMapLayers, overlaysLabel, props.activeViewport, props.getContainerForClone, props.mapLayerOptions, selectAllLayers, underlaysLabel]);\n\n const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\n\n return (\n <SourceMapContext.Provider value={{\n activeViewport,\n loadingSources,\n sources: mapSources ? mapSources : [],\n bases: bgProviders,\n refreshFromStyle: handleRefreshFromStyle,\n backgroundLayers: backgroundMapLayers,\n overlayLayers: overlayMapLayers,\n mapLayerOptions,\n }}>\n {/* Header*/}\n <div className=\"map-manager-top-header\">\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\n <div className=\"map-manager-header-buttons-group\">\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\n <MapLayerSettingsPopupButton disabled={!backgroundMapVisible} />\n </div>\n </div>\n\n <div className=\"map-manager-container\">\n\n {/* Base map*/}\n <div className=\"map-manager-basemap\">\n <BasemapPanel disabled={!backgroundMapVisible} />\n </div>\n\n {/* List of Layers (droppable) */}\n {!hideExternalMapLayersSection &&\n <div>\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\n {renderMapLayersList({isOverlay: false})}\n {renderMapLayersList({isOverlay: true})}\n </DragDropContext>\n </div>\n }\n </div >\n </SourceMapContext.Provider >\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerSettingsPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsPopupButton.tsx"],"names":[],"mappings":";AAUA,OAAO,oCAAoC,CAAC;AAI5C,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,aAAa;AAEb,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,
|
|
1
|
+
{"version":3,"file":"MapLayerSettingsPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsPopupButton.tsx"],"names":[],"mappings":";AAUA,OAAO,oCAAoC,CAAC;AAI5C,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,aAAa;AAEb,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,gCAAgC,eAqElF"}
|
|
@@ -56,7 +56,7 @@ export function MapLayerSettingsPopupButton(props) {
|
|
|
56
56
|
return (React.createElement(React.Fragment, null,
|
|
57
57
|
React.createElement(IconButton, { disabled: props.disabled, styleType: "borderless", title: buttonTooltip, className: "maplayers-settings-popup-button", onClick: togglePopupDisplay, ref: buttonRef },
|
|
58
58
|
React.createElement(SvgSettings, null)),
|
|
59
|
-
React.createElement(Popup, { isOpen: isSettingsOpen, position: RelativePosition.BottomRight, onClose: handleCloseSetting, target: buttonRef.current, onOutsideClick: handleOutsideClick, repositionOnResize: true },
|
|
59
|
+
React.createElement(Popup, { className: "maplayers-settings-popup", isOpen: isSettingsOpen, position: RelativePosition.BottomRight, onClose: handleCloseSetting, target: buttonRef.current, onOutsideClick: handleOutsideClick, repositionOnResize: true },
|
|
60
60
|
React.createElement("div", { ref: panelRef, className: "maplayers-settings-popup-panel" },
|
|
61
61
|
React.createElement(MapManagerSettings, null)))));
|
|
62
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayerSettingsPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsPopupButton.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport * as React from \"react\";\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport { Popup } from \"@itwin/core-react\";\nimport { MapManagerSettings } from \"./MapManagerSettings\";\n\nimport \"./MapLayerSettingsPopupButton.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport { SvgSettings } from \"@itwin/itwinui-icons-react\";\nexport interface MapLayerSettingsPopupButtonProps {\n disabled?: boolean;\n}\n\n/** @alpha */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerSettingsPopupButton(props: MapLayerSettingsPopupButtonProps) {\n const panelRef = React.useRef<HTMLDivElement>(null);\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false);\n const [buttonTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.SettingsButtonTooltip\"));\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const togglePopupDisplay = React.useCallback((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.preventDefault();\n setIsSettingsOpen((prev) => !prev);\n }, [setIsSettingsOpen]);\n\n const handleCloseSetting = React.useCallback(() => {\n setIsSettingsOpen(false);\n }, [setIsSettingsOpen]);\n\n const isInsideCoreDialog = React.useCallback((element: HTMLElement) => {\n if (element.nodeName === \"DIV\") {\n if (element.classList && element.classList.contains(\"core-dialog\"))\n return true;\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\n return true;\n } else {\n // istanbul ignore else\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\n return true;\n }\n return false;\n }, []);\n\n const handleOutsideClick = React.useCallback((event: MouseEvent) => {\n if (isInsideCoreDialog(event.target as HTMLElement)) {\n return;\n }\n\n // If clicking on button that open panel - don't trigger outside click processing\n if (buttonRef?.current && buttonRef?.current.contains(event.target as Node)) {\n return;\n }\n\n // If clicking the panel, this is not an outside clicked\n if (panelRef.current && panelRef?.current.contains(event.target as Node)) {\n return;\n }\n\n // If we reach this point, we got an outside clicked, no close the popup\n setIsSettingsOpen(false);\n\n }, [isInsideCoreDialog]);\n\n return (\n <>\n <IconButton disabled={props.disabled} styleType=\"borderless\" title={buttonTooltip} className=\"maplayers-settings-popup-button\" onClick={togglePopupDisplay} ref={buttonRef}>\n <SvgSettings/>\n </IconButton>\n <Popup\n isOpen={isSettingsOpen}\n position={RelativePosition.BottomRight}\n onClose={handleCloseSetting}\n target={buttonRef.current}\n onOutsideClick={handleOutsideClick}\n repositionOnResize={true}\n >\n <div ref={panelRef} className=\"maplayers-settings-popup-panel\">\n <MapManagerSettings />\n </div>\n </Popup >\n </ >\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MapLayerSettingsPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerSettingsPopupButton.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAKzD,aAAa;AACb,gEAAgE;AAChE,MAAM,UAAU,2BAA2B,CAAC,KAAuC;IACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC,CAAC;IAE9H,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAsD,EAAE,EAAE;QACtG,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,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,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,OAAoB,EAAE,EAAE;QACpE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC9B,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAChE,OAAO,IAAI,CAAC;YACd,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC;gBACpE,OAAO,IAAI,CAAC;SACf;aAAM;YACL,uBAAuB;YACvB,IAAI,OAAO,CAAC,aAAa,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC;gBACpE,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAiB,EAAE,EAAE;QACjE,IAAI,kBAAkB,CAAC,KAAK,CAAC,MAAqB,CAAC,EAAE;YACnD,OAAO;SACR;QAED,kFAAkF;QAClF,IAAI,SAAS,EAAE,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YAC3E,OAAO;SACR;QAED,wDAAwD;QACxD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YACxE,OAAO;SACR;QAED,wEAAwE;QACxE,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE3B,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL;QACE,oBAAC,UAAU,IAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAC,iCAAiC,EAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,EAAE,SAAS;YACxK,oBAAC,WAAW,OAAE,CACH;QACb,oBAAC,KAAK,IACJ,SAAS,EAAC,0BAA0B,EACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,CAAC,WAAW,EACtC,OAAO,EAAE,kBAAkB,EAC3B,MAAM,EAAE,SAAS,CAAC,OAAO,EACzB,cAAc,EAAE,kBAAkB,EAClC,kBAAkB,EAAE,IAAI;YAExB,6BAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,gCAAgC;gBAC5D,oBAAC,kBAAkB,OAAG,CAClB,CACC,CACP,CACL,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport * as React from \"react\";\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport { Popup } from \"@itwin/core-react\";\nimport { MapManagerSettings } from \"./MapManagerSettings\";\n\nimport \"./MapLayerSettingsPopupButton.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport { SvgSettings } from \"@itwin/itwinui-icons-react\";\nexport interface MapLayerSettingsPopupButtonProps {\n disabled?: boolean;\n}\n\n/** @alpha */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerSettingsPopupButton(props: MapLayerSettingsPopupButtonProps) {\n const panelRef = React.useRef<HTMLDivElement>(null);\n const [isSettingsOpen, setIsSettingsOpen] = React.useState(false);\n const [buttonTooltip] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.SettingsButtonTooltip\"));\n\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n const togglePopupDisplay = React.useCallback((event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.preventDefault();\n setIsSettingsOpen((prev) => !prev);\n }, [setIsSettingsOpen]);\n\n const handleCloseSetting = React.useCallback(() => {\n setIsSettingsOpen(false);\n }, [setIsSettingsOpen]);\n\n const isInsideCoreDialog = React.useCallback((element: HTMLElement) => {\n if (element.nodeName === \"DIV\") {\n if (element.classList && element.classList.contains(\"core-dialog\"))\n return true;\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\n return true;\n } else {\n // istanbul ignore else\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\n return true;\n }\n return false;\n }, []);\n\n const handleOutsideClick = React.useCallback((event: MouseEvent) => {\n if (isInsideCoreDialog(event.target as HTMLElement)) {\n return;\n }\n\n // If clicking on button that open panel - don't trigger outside click processing\n if (buttonRef?.current && buttonRef?.current.contains(event.target as Node)) {\n return;\n }\n\n // If clicking the panel, this is not an outside clicked\n if (panelRef.current && panelRef?.current.contains(event.target as Node)) {\n return;\n }\n\n // If we reach this point, we got an outside clicked, no close the popup\n setIsSettingsOpen(false);\n\n }, [isInsideCoreDialog]);\n\n return (\n <>\n <IconButton disabled={props.disabled} styleType=\"borderless\" title={buttonTooltip} className=\"maplayers-settings-popup-button\" onClick={togglePopupDisplay} ref={buttonRef}>\n <SvgSettings/>\n </IconButton>\n <Popup\n className=\"maplayers-settings-popup\"\n isOpen={isSettingsOpen}\n position={RelativePosition.BottomRight}\n onClose={handleCloseSetting}\n target={buttonRef.current}\n onOutsideClick={handleOutsideClick}\n repositionOnResize={true}\n >\n <div ref={panelRef} className=\"maplayers-settings-popup-panel\">\n <MapManagerSettings />\n </div>\n </Popup >\n </ >\n );\n}\n"]}
|
|
@@ -6,8 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
$hovered-icon-color: $buic-foreground-primary;
|
|
8
8
|
|
|
9
|
+
.maplayers-settings-popup {
|
|
10
|
+
z-index: 900; // Used to be higher, but we want this be less than modal dialog z-index
|
|
11
|
+
}
|
|
12
|
+
|
|
9
13
|
.maplayers-settings-popup-panel {
|
|
10
|
-
z-index: 14000;
|
|
11
14
|
font-size: 12px;
|
|
12
15
|
margin: 0.5em;
|
|
13
16
|
width: 340px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapManagerSettings.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":";AAWA,OAAO,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"MapManagerSettings.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":";AAWA,OAAO,2BAA2B,CAAC;AAwCnC,wBAAgB,kBAAkB,gBA0NjC"}
|