@itwin/map-layers 6.0.0-dev.2 → 6.0.0-dev.4

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.
Files changed (48) hide show
  1. package/lib/cjs/public/locales/en/mapLayers.json +0 -1
  2. package/lib/cjs/ui/hooks/useResizeObserver.d.ts.map +1 -1
  3. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  4. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +8 -11
  5. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  6. package/lib/cjs/ui/widget/BasemapPanel.js +3 -1
  7. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  8. package/lib/cjs/ui/widget/BasemapPanel.scss +3 -5
  9. package/lib/cjs/ui/widget/MapLayerDroppable.js +3 -3
  10. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  11. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  12. package/lib/cjs/ui/widget/MapLayerManager.js +1 -2
  13. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  14. package/lib/cjs/ui/widget/MapLayerManager.scss +25 -34
  15. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +1 -1
  16. package/lib/cjs/ui/widget/MapManagerSettings.scss +2 -3
  17. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.scss +1 -1
  18. package/lib/cjs/ui/widget/MapUrlDialog.scss +4 -7
  19. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  20. package/lib/cjs/ui/widget/SubLayersPopupButton.js +1 -1
  21. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  22. package/lib/cjs/ui/widget/SubLayersTree.scss +0 -2
  23. package/lib/cjs/ui/widget/TransparencyPopupButton.scss +3 -3
  24. package/lib/esm/public/locales/en/mapLayers.json +0 -1
  25. package/lib/esm/ui/hooks/useResizeObserver.d.ts.map +1 -1
  26. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  27. package/lib/esm/ui/widget/AttachLayerPopupButton.js +9 -12
  28. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  29. package/lib/esm/ui/widget/BasemapPanel.js +4 -2
  30. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  31. package/lib/esm/ui/widget/BasemapPanel.scss +3 -5
  32. package/lib/esm/ui/widget/MapLayerDroppable.js +4 -4
  33. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  34. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  35. package/lib/esm/ui/widget/MapLayerManager.js +1 -2
  36. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  37. package/lib/esm/ui/widget/MapLayerManager.scss +25 -34
  38. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +1 -1
  39. package/lib/esm/ui/widget/MapManagerSettings.scss +2 -3
  40. package/lib/esm/ui/widget/MapSelectFeaturesDialog.scss +1 -1
  41. package/lib/esm/ui/widget/MapUrlDialog.scss +4 -7
  42. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  43. package/lib/esm/ui/widget/SubLayersPopupButton.js +2 -2
  44. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  45. package/lib/esm/ui/widget/SubLayersTree.scss +0 -2
  46. package/lib/esm/ui/widget/TransparencyPopupButton.scss +3 -3
  47. package/lib/public/locales/en/mapLayers.json +0 -1
  48. package/package.json +36 -36
@@ -13,7 +13,7 @@ import { assert } from "@itwin/core-bentley";
13
13
  import { ImageMapLayerSettings } from "@itwin/core-common";
14
14
  import { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from "@itwin/core-frontend";
15
15
  import { SvgStatusWarning, SvgVisibilityHide, SvgVisibilityShow } from "@itwin/itwinui-icons-react";
16
- import { Button, Checkbox } from "@itwin/itwinui-react";
16
+ import { Checkbox, IconButton } from "@itwin/itwinui-react";
17
17
  import { MapLayersUI } from "../../mapLayers";
18
18
  import { AttachLayerButtonType, AttachLayerPopupButton } from "./AttachLayerPopupButton";
19
19
  import { MapLayerSettingsMenu } from "./MapLayerSettingsMenu";
@@ -76,9 +76,9 @@ export function MapLayerDroppable(props) {
76
76
  return (_jsxs("div", { className: "map-manager-source-item", "data-id": rubric.source.index, ...dragProvided.draggableProps, ref: dragProvided.innerRef, onMouseEnter: (event) => changeSettingsMenuVisibility(event, true), onMouseLeave: (event) => changeSettingsMenuVisibility(event, false), children: [_jsx(Checkbox, { "data-testid": "select-item-checkbox", checked: activeLayer.selected, onChange: (event) => {
77
77
  activeLayer.selected = event.target.checked;
78
78
  props.onItemSelected(props.isOverlay, rubric.source.index);
79
- } }), _jsx(Button, { disabled: props.disabled, size: "small", styleType: "borderless", className: "map-manager-item-visibility map-manager-visibility-icon", title: toggleVisibility, onClick: () => {
79
+ } }), _jsx(IconButton, { disabled: props.disabled, size: "small", styleType: "borderless", className: "map-manager-item-visibility", label: toggleVisibility, onClick: () => {
80
80
  props.onItemVisibilityToggleClicked(activeLayer);
81
- }, children: activeLayer.visible ? _jsx(SvgVisibilityShow, { "data-testid": "layer-visibility-icon-show" }) : _jsx(SvgVisibilityHide, { "data-testid": "layer-visibility-icon-hide" }) }), _jsxs("span", { className: props.disabled || outOfRange ? "map-manager-item-label-disabled" : "map-manager-item-label", title: outOfRange ? outOfRangeTitle : undefined, ...dragProvided.dragHandleProps, children: [activeLayer.name, activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (_jsx(Button, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
81
+ }, children: activeLayer.visible ? _jsx(SvgVisibilityShow, { "data-testid": "layer-visibility-icon-show" }) : _jsx(SvgVisibilityHide, { "data-testid": "layer-visibility-icon-hide" }) }), _jsxs("span", { className: props.disabled || outOfRange ? "map-manager-item-label-disabled" : "map-manager-item-label", title: outOfRange ? outOfRangeTitle : undefined, ...dragProvided.dragHandleProps, children: [activeLayer.name, activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (_jsx(IconButton, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
82
82
  const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
83
83
  if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {
84
84
  const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };
@@ -91,7 +91,7 @@ export function MapLayerDroppable(props) {
91
91
  }
92
92
  }, title: requireAuthTooltip, children: _jsx(SvgStatusWarning, {}) }))] }), _jsx("div", { id: "MapLayerSettingsSubLayersMenu", style: { visibility: "hidden" }, className: "map-manager-item-sub-layer-container", children: activeLayer.subLayers && activeLayer.subLayers.length > 1 && (_jsx(SubLayersPopupButton, { checkboxStyle: "eye", expandMode: "rootGroupOnly", subLayers: props.activeViewport ? activeLayer.subLayers : undefined, singleVisibleSubLayer: activeLayer.provider?.mutualExclusiveSubLayer, onSubLayerStateChange: (subLayerId, isSelected) => {
93
93
  onSubLayerStateChange(activeLayer, subLayerId, isSelected);
94
- } })) }), activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (_jsx(Button, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
94
+ } })) }), activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (_jsx(IconButton, { disabled: props.disabled, size: "small", styleType: "borderless", onClick: () => {
95
95
  const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(activeLayer.name, activeLayer.source, activeLayer.isOverlay);
96
96
  if (indexInDisplayStyle !== undefined && indexInDisplayStyle >= 0) {
97
97
  const index = { index: indexInDisplayStyle, isOverlay: activeLayer.isOverlay };
@@ -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\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { Draggable, Droppable } from \"react-beautiful-dnd\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Button, Checkbox } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog } from \"./MapUrlDialog\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\n\nimport type { DraggableChildrenFn, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport type { SubLayerId } from \"@itwin/core-common\";\nimport type { MapLayerIndex, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport type { SourceState } from \"./MapUrlDialog\";\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\n/** @internal */\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, {\n index: mapLayerStyleIdx,\n isOverlay: activeLayer.isOverlay,\n });\n }\n };\n\n const handleOk = React.useCallback(\n (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 },\n [props],\n );\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\n className=\"map-manager-source-item\"\n data-id={rubric.source.index}\n 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\n data-testid={\"select-item-checkbox\"}\n checked={activeLayer.selected}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }}\n ></Checkbox>\n {/* Visibility icon */}\n <Button\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-manager-item-visibility map-manager-visibility-icon\"\n title={toggleVisibility}\n onClick={() => {\n props.onItemVisibilityToggleClicked(activeLayer);\n }}\n >\n {activeLayer.visible ? <SvgVisibilityShow data-testid=\"layer-visibility-icon-show\" /> : <SvgVisibilityHide data-testid=\"layer-visibility-icon-hide\" />}\n </Button>\n\n {/* Label */}\n <span\n className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n >\n {activeLayer.name}\n {/* eslint-disable-next-line @itwin/no-internal */}\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(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\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 signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\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) => {\n onSubLayerStateChange(activeLayer, subLayerId, isSelected);\n }}\n />\n )}\n </div>\n {/* eslint-disable-next-line @itwin/no-internal */}\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(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\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 signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </Button>\n )}\n <div id=\"MapLayerSettingsMenuWrapper\" style={{ visibility: \"hidden\" }}>\n <MapLayerSettingsMenu\n activeViewport={props.activeViewport}\n mapLayerSettings={activeLayer}\n onMenuItemSelection={props.onMenuItemSelected}\n disabled={props.disabled}\n />\n </div>\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 ));\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 }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div\n className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`}\n ref={dropProvided.innerRef}\n {...dropProvided.droppableProps}\n >\n {renderDraggableContent(dropSnapshot)}\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 <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>\n );\n }\n\n return (\n <Droppable droppableId={droppableId} renderClone={renderItem} getContainerForClone={props.getContainerForClone as any}>\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\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { Draggable, Droppable } from \"react-beautiful-dnd\";\nimport { UiFramework } from \"@itwin/appui-react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { IModelApp, MapLayerImageryProviderStatus, MapTileTreeScaleRangeVisibility, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\nimport { Checkbox, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { AttachLayerButtonType, AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { MapLayerSettingsMenu } from \"./MapLayerSettingsMenu\";\nimport { MapUrlDialog } from \"./MapUrlDialog\";\nimport { SubLayersPopupButton } from \"./SubLayersPopupButton\";\n\nimport type { DraggableChildrenFn, DroppableProvided, DroppableStateSnapshot } from \"react-beautiful-dnd\";\nimport type { SubLayerId } from \"@itwin/core-common\";\nimport type { MapLayerIndex, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport type { SourceState } from \"./MapUrlDialog\";\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\n/** @internal */\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, {\n index: mapLayerStyleIdx,\n isOverlay: activeLayer.isOverlay,\n });\n }\n };\n\n const handleOk = React.useCallback(\n (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 },\n [props],\n );\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\n className=\"map-manager-source-item\"\n data-id={rubric.source.index}\n 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\n data-testid={\"select-item-checkbox\"}\n checked={activeLayer.selected}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => {\n activeLayer.selected = event.target.checked;\n props.onItemSelected(props.isOverlay, rubric.source.index);\n }}\n ></Checkbox>\n {/* Visibility icon */}\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n className=\"map-manager-item-visibility\"\n label={toggleVisibility}\n onClick={() => {\n props.onItemVisibilityToggleClicked(activeLayer);\n }}\n >\n {activeLayer.visible ? <SvgVisibilityShow data-testid=\"layer-visibility-icon-show\" /> : <SvgVisibilityHide data-testid=\"layer-visibility-icon-hide\" />}\n </IconButton>\n\n {/* Label */}\n <span\n className={props.disabled || outOfRange ? \"map-manager-item-label-disabled\" : \"map-manager-item-label\"}\n title={outOfRange ? outOfRangeTitle : undefined}\n {...dragProvided.dragHandleProps}\n >\n {activeLayer.name}\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\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 signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\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) => {\n onSubLayerStateChange(activeLayer, subLayerId, isSelected);\n }}\n />\n )}\n </div>\n {/* eslint-disable-next-line @itwin/no-internal */}\n {activeLayer.provider?.status === MapLayerImageryProviderStatus.RequireAuth && (\n <IconButton\n disabled={props.disabled}\n size=\"small\"\n styleType=\"borderless\"\n onClick={() => {\n const indexInDisplayStyle = props.activeViewport?.displayStyle.findMapLayerIndexByNameAndSource(\n activeLayer.name,\n activeLayer.source,\n activeLayer.isOverlay,\n );\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 signInModeArgs={{ layer }}\n onOkResult={(sourceState?: SourceState) => handleOk(index, sourceState)}\n onCancelResult={() => {\n UiFramework.dialogs.modal.close();\n }}\n mapLayerOptions={props.mapLayerOptions}\n />,\n );\n }\n }\n }}\n title={requireAuthTooltip}\n >\n <SvgStatusWarning />\n </IconButton>\n )}\n <div id=\"MapLayerSettingsMenuWrapper\" style={{ visibility: \"hidden\" }}>\n <MapLayerSettingsMenu\n activeViewport={props.activeViewport}\n mapLayerSettings={activeLayer}\n onMenuItemSelection={props.onMenuItemSelected}\n disabled={props.disabled}\n />\n </div>\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 ));\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 }\n return node;\n }\n\n function renderDraggable(dropProvided: DroppableProvided, dropSnapshot: DroppableStateSnapshot): React.ReactElement<HTMLElement> {\n return (\n <div\n className={`map-manager-attachments${dropSnapshot.isDraggingOver && containsLayer ? \" is-dragging-map-over\" : \"\"}`}\n ref={dropProvided.innerRef}\n {...dropProvided.droppableProps}\n >\n {renderDraggableContent(dropSnapshot)}\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 <div style={containsLayer ? undefined : { display: \"none\" }}>{dropProvided.placeholder}</div>\n </div>\n );\n }\n\n return (\n <Droppable droppableId={droppableId} renderClone={renderItem} getContainerForClone={props.getContainerForClone as any}>\n {renderDraggable}\n </Droppable>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAOA,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA4C,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AAgB3H,OAAO,KAAK,EAAyD,cAAc,EAAE,cAAc,EAA2B,MAAM,sBAAsB,CAAC;AAC3J,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,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;AAyCD,UAAU,oBAAoB;IAC5B,oBAAoB,EAAE,MAAM,WAAW,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAilB1D"}
1
+ {"version":3,"file":"MapLayerManager.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"AAOA,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAA4C,oBAAoB,EAAyB,MAAM,oBAAoB,CAAC;AAgB3H,OAAO,KAAK,EAAyD,cAAc,EAAE,cAAc,EAA2B,MAAM,sBAAsB,CAAC;AAC3J,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC5E,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;AAyCD,UAAU,oBAAoB;IAC5B,oBAAoB,EAAE,MAAM,WAAW,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CA8kB1D"}
@@ -481,7 +481,6 @@ export function MapLayerManager(props) {
481
481
  selectAllLayers,
482
482
  underlaysLabel,
483
483
  ]);
484
- const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString("mapLayers:Basemap.BaseMapPanelTitle"));
485
484
  return (_jsxs(SourceMapContext.Provider, { value: {
486
485
  activeViewport,
487
486
  loadingSources,
@@ -491,6 +490,6 @@ export function MapLayerManager(props) {
491
490
  backgroundLayers: backgroundMapLayers,
492
491
  overlayLayers: overlayMapLayers,
493
492
  mapLayerOptions,
494
- }, children: [_jsxs("div", { className: "map-manager-top-header", children: [_jsx("span", { className: "map-manager-header-label", children: baseMapPanelLabel }), _jsxs("div", { className: "map-manager-header-buttons-group", children: [_jsx(ToggleSwitch, { className: "map-manager-toggle", checked: backgroundMapVisible, onChange: handleMapLayersToggle }), _jsx(MapLayerSettingsPopupButton, { disabled: !backgroundMapVisible })] })] }), _jsxs("div", { className: "map-manager-container", children: [_jsx("div", { className: "map-manager-basemap", children: _jsx(BasemapPanel, { disabled: !backgroundMapVisible }) }), !hideExternalMapLayersSection && (_jsx("div", { children: _jsxs(DragDropContext, { onDragEnd: handleOnMapLayerDragEnd, children: [renderMapLayersList({ isOverlay: false }), renderMapLayersList({ isOverlay: true })] }) }))] })] }));
493
+ }, children: [_jsx("div", { className: "map-manager-top-header", children: _jsxs("div", { className: "map-manager-header-buttons-group", children: [_jsx(ToggleSwitch, { className: "map-manager-toggle", checked: backgroundMapVisible, onChange: handleMapLayersToggle }), _jsx(MapLayerSettingsPopupButton, { disabled: !backgroundMapVisible })] }) }), _jsxs("div", { className: "map-manager-container", children: [_jsx("div", { className: "map-manager-basemap", children: _jsx(BasemapPanel, { disabled: !backgroundMapVisible }) }), !hideExternalMapLayersSection && (_jsx("div", { children: _jsxs(DragDropContext, { onDragEnd: handleOnMapLayerDragEnd, children: [renderMapLayersList({ isOverlay: false }), renderMapLayersList({ isOverlay: true })] }) }))] })] }));
495
494
  }
496
495
  //# sourceMappingURL=MapLayerManager.js.map
@@ -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\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { DragDropContext } from \"react-beautiful-dnd\";\nimport { BentleyError, compareStrings } from \"@itwin/core-bentley\";\nimport { BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { ImageryMapTileTree, IModelApp, MapLayerSources, NotifyMessageDetails, OutputMessagePriority } 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 { MapLayersSyncUiEventId } from \"../../MapLayersActionIds\";\nimport { BasemapPanel } from \"./BasemapPanel\";\nimport { MapLayerActionButtons } from \"./MapLayerActionButtons\";\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\nimport { MapManagerLayersHeader } from \"./MapManagerMapLayersHeader\";\n\nimport type { DropResult } from \"react-beautiful-dnd\";\nimport type { MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, ScreenViewport, TileTreeOwner, Viewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\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>({\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\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\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>(\n getMapLayerSettingsFromViewport(activeViewport, true),\n );\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\n\n const loadMapLayerSettingsFromViewport = React.useCallback(\n (viewport: Viewport) => {\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\n },\n [setBackgroundMapLayers, setOverlayMapLayers],\n );\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 // 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 }, [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\n return array.map((curStyledLayer) => {\n const foundScaleRangeVisibility = layerIndexes.find(\n (layerIdx) => layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay,\n );\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 return activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\n }, [activeViewport, backgroundMapLayers, overlayMapLayers]);\n\n // Setup onMapImageryChanged events listening.\n\n React.useEffect(() => {\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\n if (\n args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0) ||\n args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)\n ) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n return activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n React.useEffect(() => {\n IModelApp.toolAdmin.dispatchUiSyncEvent(MapLayersSyncUiEventId.MapImageryChanged);\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const handleProviderStatusChanged = React.useCallback(\n (_args: MapLayerImageryProvider) => {\n loadMapLayerSettingsFromViewport(activeViewport);\n },\n [loadMapLayerSettingsFromViewport, activeViewport],\n );\n\n // Triggered whenever a provider status change\n React.useEffect(() => {\n backgroundMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged);\n });\n overlayMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged);\n });\n\n return () => {\n backgroundMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged);\n });\n overlayMapLayers?.forEach((layer) => {\n 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 }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n async function fetchSources() {\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(\n new NotifyMessageDetails(\n OutputMessagePriority.Error,\n IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"),\n BentleyError.getErrorMessage(err),\n ),\n );\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 && !Array.isArray(cpMapping)) {\n CustomParamUtils.setSourceCustomParams(source, cpMapping.customParamNames);\n }\n addSource(source);\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()\n .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\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 }, [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(\n (action: string, mapLayerSettings: StyleMapLayerSettings) => {\n if (!activeViewport || !activeViewport.displayStyle) {\n return;\n }\n\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(\n mapLayerSettings.name,\n mapLayerSettings.source,\n mapLayerSettings.isOverlay,\n );\n if (indexInDisplayStyle < 0) {\n return;\n }\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\n .viewMapLayerRange({ index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay }, activeViewport)\n .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 })\n .catch((_error) => {});\n break;\n }\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n },\n [activeViewport, loadMapLayerSettingsFromViewport],\n );\n\n const handleLayerVisibilityChange = React.useCallback(\n (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 },\n [activeViewport, loadMapLayerSettingsFromViewport],\n );\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 IModelApp.toolAdmin.dispatchUiSyncEvent(MapLayersSyncUiEventId.MapImageryChanged);\n }\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\n\n const handleOnMapLayerDragEnd = React.useCallback(\n (result: DropResult /* , _provided: ResponderProvided*/) => {\n const { destination, source } = result;\n\n if (!destination) {\n // dropped outside of list\n return;\n }\n\n // item was not moved\n if (destination.droppableId === source.droppableId && destination.index === source.index) {\n return;\n }\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\n if (!fromMapLayer || !activeViewport) {\n return;\n }\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 }\n if (toMapLayer) {\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\n }\n }\n\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\n if (fromIndexInDisplayStyle < 0) {\n return;\n }\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 }\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 },\n [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers],\n );\n\n const handleRefreshFromStyle = React.useCallback(() => {\n if (activeViewport) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleItemSelected = React.useCallback(\n (isOverlay: boolean, _index: number) => {\n if (isOverlay) {\n if (overlayMapLayers) {\n setOverlayMapLayers([...overlayMapLayers]);\n }\n } else {\n if (backgroundMapLayers) {\n setBackgroundMapLayers([...backgroundMapLayers]);\n }\n }\n },\n [backgroundMapLayers, overlayMapLayers],\n );\n\n const hasItemSelected = React.useCallback(\n (isOverlay: boolean) => {\n const layerList = isOverlay ? overlayMapLayers : backgroundMapLayers;\n if (!layerList) {\n return false;\n }\n return undefined !== layerList?.find((value) => value.selected === true);\n },\n [backgroundMapLayers, overlayMapLayers],\n );\n\n const changeLayerVisibility = React.useCallback(\n (visible: boolean, index: number, isOverlay: boolean) => {\n activeViewport.displayStyle.changeMapLayerProps({ visible }, { index, isOverlay });\n },\n [activeViewport],\n );\n\n const changeAllLayerVisibility = React.useCallback(\n async (visible: boolean, isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay) {\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }\n\n if (isOverlay === undefined || isOverlay) {\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }\n },\n [backgroundMapLayers, overlayMapLayers, changeLayerVisibility],\n );\n\n const invertAllLayerVisibility = React.useCallback(\n async (isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay) {\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }\n\n if (isOverlay === undefined || isOverlay) {\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }\n },\n [backgroundMapLayers, overlayMapLayers, changeLayerVisibility],\n );\n\n const detachSelectedLayers = React.useCallback(\n async (isOverlay: boolean) => {\n const layerList = isOverlay ? overlayMapLayers : backgroundMapLayers;\n if (!layerList || layerList.length === 0) {\n return;\n }\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\n const selectAllLayers = React.useCallback(\n async (isOverlay: boolean) => {\n if (!overlayMapLayers || !backgroundMapLayers) {\n return;\n }\n\n const layerList = isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers];\n const hasCheckedLayer = undefined !== layerList?.find((value) => value.selected === true);\n layerList.forEach((layer) => {\n layer.selected = !hasCheckedLayer;\n });\n\n if (isOverlay) {\n setOverlayMapLayers(layerList);\n } else {\n setBackgroundMapLayers(layerList);\n }\n },\n [overlayMapLayers, backgroundMapLayers],\n );\n\n const renderMapLayersList = React.useCallback(\n (options: { isOverlay: boolean }): React.ReactElement<HTMLElement> => {\n if (!overlayMapLayers || !backgroundMapLayers) {\n return <></>;\n }\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 label={label} isOverlay={isOverlay} disabled={!backgroundMapVisible} />\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 />\n </div>\n );\n },\n [\n backgroundMapLayers,\n backgroundMapVisible,\n changeAllLayerVisibility,\n detachSelectedLayers,\n handleItemSelected,\n handleLayerVisibilityChange,\n handleOnMenuItemSelection,\n handleRefreshFromStyle,\n hasItemSelected,\n invertAllLayerVisibility,\n overlayMapLayers,\n overlaysLabel,\n props.activeViewport,\n props.getContainerForClone,\n props.mapLayerOptions,\n selectAllLayers,\n underlaysLabel,\n ],\n );\n\n const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\n\n return (\n <SourceMapContext.Provider\n 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 >\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 {/* 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":"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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\nimport \"./MapLayerManager.scss\";\nimport * as React from \"react\";\nimport { DragDropContext } from \"react-beautiful-dnd\";\nimport { BentleyError, compareStrings } from \"@itwin/core-bentley\";\nimport { BackgroundMapProvider, BackgroundMapType, BaseMapLayerSettings, ImageMapLayerSettings } from \"@itwin/core-common\";\nimport { ImageryMapTileTree, IModelApp, MapLayerSources, NotifyMessageDetails, OutputMessagePriority } 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 { MapLayersSyncUiEventId } from \"../../MapLayersActionIds\";\nimport { BasemapPanel } from \"./BasemapPanel\";\nimport { MapLayerActionButtons } from \"./MapLayerActionButtons\";\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\nimport { MapManagerLayersHeader } from \"./MapManagerMapLayersHeader\";\n\nimport type { DropResult } from \"react-beautiful-dnd\";\nimport type { MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, ScreenViewport, TileTreeOwner, Viewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\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>({\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\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\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>(\n getMapLayerSettingsFromViewport(activeViewport, true),\n );\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\n\n const loadMapLayerSettingsFromViewport = React.useCallback(\n (viewport: Viewport) => {\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\n },\n [setBackgroundMapLayers, setOverlayMapLayers],\n );\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 // 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 }, [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\n return array.map((curStyledLayer) => {\n const foundScaleRangeVisibility = layerIndexes.find(\n (layerIdx) => layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay,\n );\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 return activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\n }, [activeViewport, backgroundMapLayers, overlayMapLayers]);\n\n // Setup onMapImageryChanged events listening.\n\n React.useEffect(() => {\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\n if (\n args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0) ||\n args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)\n ) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n return activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n React.useEffect(() => {\n IModelApp.toolAdmin.dispatchUiSyncEvent(MapLayersSyncUiEventId.MapImageryChanged);\n }, [backgroundMapLayers, overlayMapLayers]);\n\n const handleProviderStatusChanged = React.useCallback(\n (_args: MapLayerImageryProvider) => {\n loadMapLayerSettingsFromViewport(activeViewport);\n },\n [loadMapLayerSettingsFromViewport, activeViewport],\n );\n\n // Triggered whenever a provider status change\n React.useEffect(() => {\n backgroundMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged);\n });\n overlayMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged);\n });\n\n return () => {\n backgroundMapLayers?.forEach((layer) => {\n layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged);\n });\n overlayMapLayers?.forEach((layer) => {\n 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 }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n async function fetchSources() {\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(\n new NotifyMessageDetails(\n OutputMessagePriority.Error,\n IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"),\n BentleyError.getErrorMessage(err),\n ),\n );\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 && !Array.isArray(cpMapping)) {\n CustomParamUtils.setSourceCustomParams(source, cpMapping.customParamNames);\n }\n addSource(source);\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()\n .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\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 }, [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(\n (action: string, mapLayerSettings: StyleMapLayerSettings) => {\n if (!activeViewport || !activeViewport.displayStyle) {\n return;\n }\n\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(\n mapLayerSettings.name,\n mapLayerSettings.source,\n mapLayerSettings.isOverlay,\n );\n if (indexInDisplayStyle < 0) {\n return;\n }\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\n .viewMapLayerRange({ index: indexInDisplayStyle, isOverlay: mapLayerSettings.isOverlay }, activeViewport)\n .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 })\n .catch((_error) => {});\n break;\n }\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n },\n [activeViewport, loadMapLayerSettingsFromViewport],\n );\n\n const handleLayerVisibilityChange = React.useCallback(\n (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 },\n [activeViewport, loadMapLayerSettingsFromViewport],\n );\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 IModelApp.toolAdmin.dispatchUiSyncEvent(MapLayersSyncUiEventId.MapImageryChanged);\n }\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\n\n const handleOnMapLayerDragEnd = React.useCallback(\n (result: DropResult /* , _provided: ResponderProvided*/) => {\n const { destination, source } = result;\n\n if (!destination) {\n // dropped outside of list\n return;\n }\n\n // item was not moved\n if (destination.droppableId === source.droppableId && destination.index === source.index) {\n return;\n }\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\n if (!fromMapLayer || !activeViewport) {\n return;\n }\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 }\n if (toMapLayer) {\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\n }\n }\n\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\n if (fromIndexInDisplayStyle < 0) {\n return;\n }\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 }\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 },\n [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers],\n );\n\n const handleRefreshFromStyle = React.useCallback(() => {\n if (activeViewport) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleItemSelected = React.useCallback(\n (isOverlay: boolean, _index: number) => {\n if (isOverlay) {\n if (overlayMapLayers) {\n setOverlayMapLayers([...overlayMapLayers]);\n }\n } else {\n if (backgroundMapLayers) {\n setBackgroundMapLayers([...backgroundMapLayers]);\n }\n }\n },\n [backgroundMapLayers, overlayMapLayers],\n );\n\n const hasItemSelected = React.useCallback(\n (isOverlay: boolean) => {\n const layerList = isOverlay ? overlayMapLayers : backgroundMapLayers;\n if (!layerList) {\n return false;\n }\n return undefined !== layerList?.find((value) => value.selected === true);\n },\n [backgroundMapLayers, overlayMapLayers],\n );\n\n const changeLayerVisibility = React.useCallback(\n (visible: boolean, index: number, isOverlay: boolean) => {\n activeViewport.displayStyle.changeMapLayerProps({ visible }, { index, isOverlay });\n },\n [activeViewport],\n );\n\n const changeAllLayerVisibility = React.useCallback(\n async (visible: boolean, isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay) {\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }\n\n if (isOverlay === undefined || isOverlay) {\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(visible, layer.layerIndex, layer.isOverlay));\n }\n },\n [backgroundMapLayers, overlayMapLayers, changeLayerVisibility],\n );\n\n const invertAllLayerVisibility = React.useCallback(\n async (isOverlay?: boolean) => {\n if (isOverlay === undefined || !isOverlay) {\n backgroundMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }\n\n if (isOverlay === undefined || isOverlay) {\n overlayMapLayers?.forEach((layer) => changeLayerVisibility(!layer.visible, layer.layerIndex, layer.isOverlay));\n }\n },\n [backgroundMapLayers, overlayMapLayers, changeLayerVisibility],\n );\n\n const detachSelectedLayers = React.useCallback(\n async (isOverlay: boolean) => {\n const layerList = isOverlay ? overlayMapLayers : backgroundMapLayers;\n if (!layerList || layerList.length === 0) {\n return;\n }\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\n const selectAllLayers = React.useCallback(\n async (isOverlay: boolean) => {\n if (!overlayMapLayers || !backgroundMapLayers) {\n return;\n }\n\n const layerList = isOverlay ? [...overlayMapLayers] : [...backgroundMapLayers];\n const hasCheckedLayer = undefined !== layerList?.find((value) => value.selected === true);\n layerList.forEach((layer) => {\n layer.selected = !hasCheckedLayer;\n });\n\n if (isOverlay) {\n setOverlayMapLayers(layerList);\n } else {\n setBackgroundMapLayers(layerList);\n }\n },\n [overlayMapLayers, backgroundMapLayers],\n );\n\n const renderMapLayersList = React.useCallback(\n (options: { isOverlay: boolean }): React.ReactElement<HTMLElement> => {\n if (!overlayMapLayers || !backgroundMapLayers) {\n return <></>;\n }\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 label={label} isOverlay={isOverlay} disabled={!backgroundMapVisible} />\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 />\n </div>\n );\n },\n [\n backgroundMapLayers,\n backgroundMapVisible,\n changeAllLayerVisibility,\n detachSelectedLayers,\n handleItemSelected,\n handleLayerVisibilityChange,\n handleOnMenuItemSelection,\n handleRefreshFromStyle,\n hasItemSelected,\n invertAllLayerVisibility,\n overlayMapLayers,\n overlaysLabel,\n props.activeViewport,\n props.getContainerForClone,\n props.mapLayerOptions,\n selectAllLayers,\n underlaysLabel,\n ],\n );\n\n return (\n <SourceMapContext.Provider\n 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 >\n {/* Header*/}\n <div className=\"map-manager-top-header\">\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 {/* 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"]}
@@ -2,9 +2,8 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- @import "~@itwin/core-react/lib/cjs/core-react/index";
6
5
 
7
- $divider-color: $buic-background-toolbutton-stroke;
6
+ $divider-color: --iui-color-background-disabled;
8
7
  $hovered-icon-color: --iui-color-background-accent;
9
8
  $default-icon-height: 20px;
10
9
  $default-font-size: --iui-font-size-1;
@@ -32,14 +31,6 @@ $default-font-size: --iui-font-size-1;
32
31
  border-bottom-style: solid;
33
32
  border-bottom-width: 1px;
34
33
 
35
- .map-manager-header-label {
36
- font-size: $default-font-size;
37
- width: auto;
38
- white-space: nowrap;
39
- flex: 1 1 auto;
40
- padding-left: 10px;
41
- }
42
-
43
34
  .map-manager-header-buttons-group {
44
35
  margin-left: auto;
45
36
  border: none;
@@ -76,6 +67,9 @@ $default-font-size: --iui-font-size-1;
76
67
  }
77
68
  }
78
69
 
70
+ .map-manager-attach-layer-label {
71
+ font-style: normal;
72
+ }
79
73
  .core-ls {
80
74
  position: absolute;
81
75
  top: 50%;
@@ -119,13 +113,13 @@ $default-font-size: --iui-font-size-1;
119
113
  justify-content: center;
120
114
  align-items: center;
121
115
  padding: 10px;
122
- border-color: $uicore-gray-a;
123
- background-color: $buic-background-1;
116
+ border-color: var(--buic-inputs-border);
117
+ background-color: var(--iui-color-background);
124
118
  overflow: hidden;
125
119
  text-overflow: ellipsis;
126
120
  white-space: nowrap;
127
121
  text-align: center;
128
- color: $buic-foreground-muted;
122
+ color: var(--iui-color-text-muted);
129
123
  font-style: italic;
130
124
  border-style: dotted;
131
125
  border-width: 2px;
@@ -186,7 +180,7 @@ $default-font-size: --iui-font-size-1;
186
180
  max-height: 30%;
187
181
 
188
182
  &.is-dragging-map-over {
189
- background-color: $buic-background-5;
183
+ background-color:var(--iui-color-background-disabled);
190
184
  }
191
185
  }
192
186
  }
@@ -200,7 +194,7 @@ $default-font-size: --iui-font-size-1;
200
194
  padding-left: 10px;
201
195
  border-width: 0 0 1px 0;
202
196
  border-style: solid;
203
- border-color: $uicore-gray-a;
197
+ border-color: var(--buic-inputs-border);
204
198
 
205
199
  .map-manager-item-label {
206
200
  width: 465px;
@@ -226,7 +220,7 @@ $default-font-size: --iui-font-size-1;
226
220
  border-bottom-style: solid;
227
221
  border-bottom-width: thin;
228
222
  margin-bottom: 1em;
229
- background-color: $buic-background-1;
223
+ background-color: var(--iui-color-background);
230
224
  }
231
225
 
232
226
  .map-manager-layer-action-unlink-button {
@@ -245,9 +239,6 @@ $default-font-size: --iui-font-size-1;
245
239
  margin: 0 2px;
246
240
  }
247
241
 
248
- .map-manager-visibility-icon {
249
- padding-top: 0.5ex;
250
- }
251
242
  .map-manager-source-item {
252
243
  display: flex;
253
244
  justify-content: flex-start;
@@ -255,7 +246,7 @@ $default-font-size: --iui-font-size-1;
255
246
  height: 2.5em;
256
247
  width: 100%;
257
248
  padding-right: 4px;
258
- background-color: $buic-background-1;
249
+ background-color: var(--iui-color-background);
259
250
 
260
251
  .map-manager-item-label {
261
252
  flex: 1 1;
@@ -297,22 +288,22 @@ $default-font-size: --iui-font-size-1;
297
288
  }
298
289
 
299
290
  .map-manager-item-sub-layer-container {
300
- @include uicore-z-index(dialog-popup);
291
+ z-index: var(--uicore-z-index-dialog-popup);
301
292
  }
302
293
 
303
294
  .map-manager-sublayer-panel {
304
295
  width: 400px; // Ideally I would let the popup's content drives the width, unfortunately without an explicit width, the popup location is not consistent.
305
- color: $buic-foreground-body;
296
+ color: var(--iui-color-text-muted);
306
297
  font-size: $default-font-size;
307
298
  padding: 4px;
308
299
  display: block;
309
300
  box-sizing: border-box;
310
301
  border-radius: 4px;
311
- border: 1px solid $buic-background-panel-stroke;
312
- background: $buic-background-panel;
313
- color: $buic-text-color;
302
+ border: 1px solid var(--iui-color-background-disabled);
303
+ background: var(--iui-color-background-hover);
304
+ color: var(--iui-color-text);
314
305
  cursor: default;
315
- @include uicore-z-index(dialog-popup);
306
+ z-index: var(--uicore-z-index-dialog-popup);
316
307
  }
317
308
 
318
309
  .map-manager-sublayer-label {
@@ -325,14 +316,14 @@ $default-font-size: --iui-font-size-1;
325
316
  }
326
317
 
327
318
  .map-layer-settings-popup-panel {
328
- color: $buic-foreground-body;
319
+ color: var(--iui-color-text-muted);
329
320
  font-size: $default-font-size;
330
321
  display: grid;
331
322
  grid-row-gap: 4px;
332
323
  padding: 4px;
333
324
 
334
325
  &:hover {
335
- color: $buic-foreground-activehover;
326
+ color: var(--iui-color-text);
336
327
  cursor: auto;
337
328
  }
338
329
 
@@ -343,7 +334,7 @@ $default-font-size: --iui-font-size-1;
343
334
  position: relative;
344
335
 
345
336
  &:hover {
346
- background-color: $buic-row-hover;
337
+ background-color: var(--iui-color-background-hover);
347
338
  }
348
339
  }
349
340
 
@@ -357,18 +348,18 @@ $default-font-size: --iui-font-size-1;
357
348
  padding-right: 4px;
358
349
  border-width: 1px;
359
350
  border-style: solid;
360
- border-color: $uicore-gray-a;
351
+ border-color: var(--buic-inputs-border);
361
352
  border-radius: 3px;
362
- background-color: $buic-background-1;
353
+ background-color: var(--iui-color-background);
363
354
  overflow: hidden;
364
- color: $buic-foreground-muted;
355
+ color: var(--iui-color-text-muted);
365
356
  font-style: italic;
366
357
  }
367
358
  }
368
359
 
369
360
  .map-manager-not-geo-located-text {
370
361
  width: 90%;
371
- color: $buic-foreground-muted;
362
+ color: var(--iui-color-text-muted);
372
363
  font-style: italic;
373
364
  text-align: center;
374
365
  }
@@ -389,7 +380,7 @@ $default-font-size: --iui-font-size-1;
389
380
  }
390
381
 
391
382
  ul.core-listbox {
392
- background-color: $buic-background-1;
383
+ background-color: var(--iui-color-background);
393
384
  }
394
385
 
395
386
  .map-manager-sources {