@itwin/map-layers 6.0.0-dev.1 → 6.0.0-dev.3

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 (57) hide show
  1. package/lib/cjs/ui/hooks/useCrossOriginPopup.d.ts +7 -0
  2. package/lib/cjs/ui/hooks/useCrossOriginPopup.d.ts.map +1 -0
  3. package/lib/cjs/ui/hooks/useCrossOriginPopup.js +123 -0
  4. package/lib/cjs/ui/hooks/useCrossOriginPopup.js.map +1 -0
  5. package/lib/cjs/ui/hooks/useInterval.d.ts +7 -0
  6. package/lib/cjs/ui/hooks/useInterval.d.ts.map +1 -0
  7. package/lib/cjs/ui/hooks/useInterval.js +60 -0
  8. package/lib/cjs/ui/hooks/useInterval.js.map +1 -0
  9. package/lib/cjs/ui/hooks/useResizeObserver.d.ts +2 -0
  10. package/lib/cjs/ui/hooks/useResizeObserver.d.ts.map +1 -0
  11. package/lib/cjs/ui/hooks/useResizeObserver.js +66 -0
  12. package/lib/cjs/ui/hooks/useResizeObserver.js.map +1 -0
  13. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  14. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +7 -1
  15. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  16. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  17. package/lib/cjs/ui/widget/FeatureInfoWidget.js +5 -4
  18. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  19. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +2 -2
  20. package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
  21. package/lib/cjs/ui/widget/MapManagerSettings.js +8 -6
  22. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  23. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  24. package/lib/cjs/ui/widget/MapUrlDialog.js +2 -3
  25. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  26. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  27. package/lib/cjs/ui/widget/SubLayersTree.js +9 -11
  28. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  29. package/lib/esm/ui/hooks/useCrossOriginPopup.d.ts +7 -0
  30. package/lib/esm/ui/hooks/useCrossOriginPopup.d.ts.map +1 -0
  31. package/lib/esm/ui/hooks/useCrossOriginPopup.js +96 -0
  32. package/lib/esm/ui/hooks/useCrossOriginPopup.js.map +1 -0
  33. package/lib/esm/ui/hooks/useInterval.d.ts +7 -0
  34. package/lib/esm/ui/hooks/useInterval.d.ts.map +1 -0
  35. package/lib/esm/ui/hooks/useInterval.js +33 -0
  36. package/lib/esm/ui/hooks/useInterval.js.map +1 -0
  37. package/lib/esm/ui/hooks/useResizeObserver.d.ts +2 -0
  38. package/lib/esm/ui/hooks/useResizeObserver.d.ts.map +1 -0
  39. package/lib/esm/ui/hooks/useResizeObserver.js +39 -0
  40. package/lib/esm/ui/hooks/useResizeObserver.js.map +1 -0
  41. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  42. package/lib/esm/ui/widget/AttachLayerPopupButton.js +7 -1
  43. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  44. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  45. package/lib/esm/ui/widget/FeatureInfoWidget.js +5 -4
  46. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  47. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +2 -2
  48. package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
  49. package/lib/esm/ui/widget/MapManagerSettings.js +9 -7
  50. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  51. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  52. package/lib/esm/ui/widget/MapUrlDialog.js +1 -2
  53. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  54. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  55. package/lib/esm/ui/widget/SubLayersTree.js +10 -12
  56. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  57. package/package.json +43 -81
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureInfoWidget.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoWidget.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 *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { useActiveFrontstageDef, WidgetState } from \"@itwin/appui-react\";\nimport { Orientation, VirtualizedPropertyGridWithDataProvider } from \"@itwin/components-react\";\nimport { ResizableContainerObserver } from \"@itwin/core-react\";\nimport { SvgCopy } from \"@itwin/itwinui-icons-react\";\nimport { Flex, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { FeatureInfoUiItemsProvider } from \"../FeatureInfoUiItemsProvider\";\nimport { FeatureInfoDataProvider } from \"./FeatureInfoDataProvider\";\n\nimport type { PrimitiveValue } from \"@itwin/appui-abstract\";\nimport type { ActionButtonRendererProps } from \"@itwin/components-react\";\nimport type { MapFeatureInfoOptions } from \"../Interfaces\";\nexport function useSpecificWidgetDef(id: string) {\n const frontstageDef = useActiveFrontstageDef();\n return frontstageDef?.findWidgetDef(id);\n}\n\n// MapFeatureInfoWidgetProps\ninterface MapFeatureInfoWidgetProps {\n featureInfoOpts: MapFeatureInfoOptions;\n}\n\nexport function MapFeatureInfoWidget({ featureInfoOpts }: MapFeatureInfoWidgetProps) {\n const dataProvider = React.useRef<FeatureInfoDataProvider | null>(null);\n const [hasData, setHasData] = React.useState<boolean>(false);\n\n const [noRecordsMessage] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:FeatureInfoWidget.NoRecords\"));\n\n const [{ width, height }, setSize] = React.useState({ width: 0, height: 0 });\n\n const widgetDef = useSpecificWidgetDef(FeatureInfoUiItemsProvider.widgetId);\n const handleDataChanged = React.useCallback(() => {\n const dataAvailable = dataProvider.current !== null && dataProvider.current.hasRecords;\n setHasData(dataAvailable);\n if (widgetDef) {\n widgetDef.setWidgetState(dataAvailable ? WidgetState.Open : WidgetState.Hidden);\n }\n }, [widgetDef]);\n\n React.useEffect(() => {\n dataProvider.current = new FeatureInfoDataProvider();\n return () => {\n dataProvider?.current?.onUnload();\n };\n }, []);\n\n React.useEffect(() => {\n dataProvider.current?.onDataChanged.addListener(handleDataChanged);\n return () => {\n dataProvider.current?.onDataChanged.removeListener(handleDataChanged);\n };\n }, [handleDataChanged]);\n\n const handleResize = React.useCallback((w: number, h: number) => {\n setSize({ width: w, height: h });\n }, []);\n\n const copyButton = React.useCallback(\n (props: ActionButtonRendererProps) =>\n props.isPropertyHovered && (\n <div>\n <IconButton\n styleType=\"borderless\"\n label=\"Copy\"\n onClick={() => {\n const value = props.property.value;\n if (value !== undefined && value.hasOwnProperty(\"displayValue\")) {\n navigator.clipboard.writeText((value as PrimitiveValue).displayValue ?? \"\").catch((_) => {});\n }\n }}\n >\n <SvgCopy />\n </IconButton>\n </div>\n ),\n [],\n );\n\n if (hasData && dataProvider.current) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <ResizableContainerObserver onResize={handleResize}>\n <VirtualizedPropertyGridWithDataProvider\n width={width}\n height={height}\n dataProvider={dataProvider.current}\n orientation={Orientation.Vertical}\n isPropertySelectionEnabled={featureInfoOpts?.propertyGridOptions?.isPropertySelectionEnabled}\n isPropertyHoverEnabled // This need to be turned on to have the action button appears only when property hovered\n actionButtonRenderers={[copyButton]}\n />\n </ResizableContainerObserver>\n );\n } else {\n return (\n <Flex justifyContent=\"center\" style={{ width: \"100%\", height: \"100%\" }}>\n <span>\n <i>{noRecordsMessage}</i>\n </span>\n </Flex>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"FeatureInfoWidget.js","sourceRoot":"","sources":["../../../../src/ui/widget/FeatureInfoWidget.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 *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { useActiveFrontstageDef, WidgetState } from \"@itwin/appui-react\";\nimport { Orientation, VirtualizedPropertyGridWithDataProvider } from \"@itwin/components-react\";\nimport { SvgCopy } from \"@itwin/itwinui-icons-react\";\nimport { Flex, IconButton } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { FeatureInfoUiItemsProvider } from \"../FeatureInfoUiItemsProvider\";\nimport { FeatureInfoDataProvider } from \"./FeatureInfoDataProvider\";\nimport { useResizeObserver } from \"../hooks/useResizeObserver\";\n\nimport type { PrimitiveValue } from \"@itwin/appui-abstract\";\nimport type { ActionButtonRendererProps } from \"@itwin/components-react\";\nimport type { MapFeatureInfoOptions } from \"../Interfaces\";\nexport function useSpecificWidgetDef(id: string) {\n const frontstageDef = useActiveFrontstageDef();\n return frontstageDef?.findWidgetDef(id);\n}\n\n// MapFeatureInfoWidgetProps\ninterface MapFeatureInfoWidgetProps {\n featureInfoOpts: MapFeatureInfoOptions;\n}\n\nexport function MapFeatureInfoWidget({ featureInfoOpts }: MapFeatureInfoWidgetProps) {\n const dataProvider = React.useRef<FeatureInfoDataProvider | null>(null);\n const [hasData, setHasData] = React.useState<boolean>(false);\n\n const [noRecordsMessage] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:FeatureInfoWidget.NoRecords\"));\n\n const [{ width, height }, setSize] = React.useState({ width: 0, height: 0 });\n\n const widgetDef = useSpecificWidgetDef(FeatureInfoUiItemsProvider.widgetId);\n const handleDataChanged = React.useCallback(() => {\n const dataAvailable = dataProvider.current !== null && dataProvider.current.hasRecords;\n setHasData(dataAvailable);\n if (widgetDef) {\n widgetDef.setWidgetState(dataAvailable ? WidgetState.Open : WidgetState.Hidden);\n }\n }, [widgetDef]);\n\n React.useEffect(() => {\n dataProvider.current = new FeatureInfoDataProvider();\n return () => {\n dataProvider?.current?.onUnload();\n };\n }, []);\n\n React.useEffect(() => {\n dataProvider.current?.onDataChanged.addListener(handleDataChanged);\n return () => {\n dataProvider.current?.onDataChanged.removeListener(handleDataChanged);\n };\n }, [handleDataChanged]);\n\n const handleResize = React.useCallback((w: number, h: number) => {\n setSize({ width: w, height: h });\n }, []);\n\n const [elementRef] = useResizeObserver<HTMLDivElement>((size) => {\n handleResize(size.width, size.height);\n });\n\n const copyButton = React.useCallback(\n (props: ActionButtonRendererProps) =>\n props.isPropertyHovered && (\n <div>\n <IconButton\n styleType=\"borderless\"\n label=\"Copy\"\n onClick={() => {\n const value = props.property.value;\n if (value !== undefined && value.hasOwnProperty(\"displayValue\")) {\n navigator.clipboard.writeText((value as PrimitiveValue).displayValue ?? \"\").catch((_) => {});\n }\n }}\n >\n <SvgCopy />\n </IconButton>\n </div>\n ),\n [],\n );\n\n if (hasData && dataProvider.current) {\n return (\n <div ref={elementRef}>\n <VirtualizedPropertyGridWithDataProvider\n width={width}\n height={height}\n dataProvider={dataProvider.current}\n orientation={Orientation.Vertical}\n isPropertySelectionEnabled={featureInfoOpts?.propertyGridOptions?.isPropertySelectionEnabled}\n isPropertyHoverEnabled // This need to be turned on to have the action button appears only when property hovered\n actionButtonRenderers={[copyButton]}\n />\n </div>\n );\n } else {\n return (\n <Flex justifyContent=\"center\" style={{ width: \"100%\", height: \"100%\" }}>\n <span>\n <i>{noRecordsMessage}</i>\n </span>\n </Flex>\n );\n }\n}\n"]}
@@ -7,14 +7,14 @@
7
7
  $hovered-icon-color: $buic-foreground-primary;
8
8
 
9
9
  .maplayers-settings-popup {
10
- /* TODO: z-index workaround while map-layers-react is using the deprecated Popup component from core-react */
11
- z-index: 6001; /* one more than floating widget */
10
+ overflow: auto;
12
11
  }
13
12
 
14
13
  .maplayers-settings-popup-panel {
15
14
  font-size: 12px;
16
15
  margin: 0.5em;
17
16
  width: 340px;
17
+ height: inherit;
18
18
  }
19
19
 
20
20
  .map-manager-header-buttons-group {
@@ -1 +1 @@
1
- {"version":3,"file":"MapManagerSettings.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":"AAMA,OAAO,2BAA2B,CAAC;AAoBnC,UAAU,uBAAuB;IAC/B,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD;AA+BD,wBAAgB,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,EAAE,uBAAuB,2CAyRnF"}
1
+ {"version":3,"file":"MapManagerSettings.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":"AAMA,OAAO,2BAA2B,CAAC;AAmBnC,UAAU,uBAAuB;IAC/B,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD;AA+BD,wBAAgB,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,EAAE,uBAAuB,2CAsSnF"}
@@ -34,7 +34,6 @@ require("./MapManagerSettings.scss");
34
34
  const React = __importStar(require("react"));
35
35
  const core_common_1 = require("@itwin/core-common");
36
36
  const core_frontend_1 = require("@itwin/core-frontend");
37
- const core_react_1 = require("@itwin/core-react");
38
37
  const imodel_components_react_1 = require("@itwin/imodel-components-react");
39
38
  const itwinui_react_1 = require("@itwin/itwinui-react");
40
39
  const mapLayers_1 = require("../../mapLayers");
@@ -151,11 +150,14 @@ function MapManagerSettings({ onHandleOutsideClick }) {
151
150
  setApplyTerrain(checked);
152
151
  }, [updateBackgroundMap]);
153
152
  const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);
154
- const handleExaggerationChange = React.useCallback((value, _stringValue) => {
155
- if (undefined !== value) {
156
- updateTerrainSettings({ exaggeration: value });
157
- setExaggeration(value);
153
+ const handleExaggerationChange = React.useCallback((e) => {
154
+ const numValue = Number(e.target.value);
155
+ if (isNaN(numValue) || numValue === undefined) {
156
+ e.preventDefault();
157
+ return;
158
158
  }
159
+ updateTerrainSettings({ exaggeration: numValue });
160
+ setExaggeration(numValue);
159
161
  }, [updateTerrainSettings]);
160
162
  const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);
161
163
  const handleHeightOriginChange = React.useCallback((value) => {
@@ -196,7 +198,7 @@ function MapManagerSettings({ onHandleOutsideClick }) {
196
198
  const [overrideMaskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.OverrideMaskTransparency"));
197
199
  const [maskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.MaskTransparency"));
198
200
  const [tabIndex, setTabIndex] = React.useState(0);
199
- return ((0, jsx_runtime_1.jsxs)(itwinui_react_1.Tabs, { activeIndex: tabIndex, orientation: "horizontal", labels: [(0, jsx_runtime_1.jsx)(itwinui_react_1.Tab, { label: "General" }, "general"), (0, jsx_runtime_1.jsx)(itwinui_react_1.Tab, { label: "Advanced" }, "advanced")], onTabSelected: setTabIndex, children: [tabIndex === 0 && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "maplayers-settings-container", children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: transparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Slider, { min: 0, max: 100, values: [transparency * 100], onChange: handleAlphaChange, step: 1 }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: locatableLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { onChange: onLocatableToggle, checked: isLocatable }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: maskingLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { onChange: onMaskingToggle, checked: masking !== MapMaskingOption.None }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: overrideMaskTransparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { disabled: masking === MapMaskingOption.None, onChange: onOverrideMaskTransparencyToggle, checked: overrideMaskTransparency }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: maskTransparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Slider, { disabled: masking === MapMaskingOption.None || !overrideMaskTransparency, min: 0, max: 100, values: [getNormalizedMaskTransparency() * 100], onChange: handleMaskTransparencyChange, step: 1 }), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: elevationOffsetLabel }), (0, jsx_runtime_1.jsx)(imodel_components_react_1.QuantityNumberInput, { disabled: applyTerrain, persistenceValue: groundBias, step: 1, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleElevationChange, onKeyDown: onKeyDown }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: useDepthBufferLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { disabled: applyTerrain, onChange: onToggleUseDepthBuffer, checked: useDepthBuffer })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "map-manager-settings-group", children: (0, jsx_runtime_1.jsxs)("fieldset", { children: [(0, jsx_runtime_1.jsx)("legend", { children: terrainLabel }), (0, jsx_runtime_1.jsxs)("div", { className: "maplayers-settings-container", children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: enableLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { onChange: onToggleTerrain, checked: applyTerrain }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: modelHeightLabel }), (0, jsx_runtime_1.jsx)(imodel_components_react_1.QuantityNumberInput, { disabled: !applyTerrain, persistenceValue: terrainOrigin, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleHeightOriginChange, onKeyDown: onKeyDown }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: heightOriginLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { options: terrainHeightOptions.current, disabled: !applyTerrain, value: heightOriginMode, onChange: handleElevationTypeSelected, size: "small" }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: exaggerationLabel }), (0, jsx_runtime_1.jsx)(core_react_1.NumberInput, { value: exaggeration, disabled: !applyTerrain, onChange: handleExaggerationChange, onKeyDown: onKeyDown })] })] }) })] })), tabIndex === 1 && (0, jsx_runtime_1.jsx)(CustomParamsSettings_1.CustomParamsSettingsPanel, { onHandleOutsideClick: onHandleOutsideClick })] }));
201
+ return ((0, jsx_runtime_1.jsxs)(itwinui_react_1.Tabs, { activeIndex: tabIndex, orientation: "horizontal", labels: [(0, jsx_runtime_1.jsx)(itwinui_react_1.Tab, { label: "General" }, "general"), (0, jsx_runtime_1.jsx)(itwinui_react_1.Tab, { label: "Advanced" }, "advanced")], onTabSelected: setTabIndex, children: [tabIndex === 0 && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "maplayers-settings-container", children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: transparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Slider, { min: 0, max: 100, values: [transparency * 100], onChange: handleAlphaChange, step: 1 }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: locatableLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { "data-testid": "locatable", onChange: onLocatableToggle, checked: isLocatable }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: maskingLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { "data-testid": "mask", onChange: onMaskingToggle, checked: masking !== MapMaskingOption.None }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: overrideMaskTransparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { "data-testid": "overrideMaskTransparency", disabled: masking === MapMaskingOption.None, onChange: onOverrideMaskTransparencyToggle, checked: overrideMaskTransparency }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: maskTransparencyLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Slider, { disabled: masking === MapMaskingOption.None || !overrideMaskTransparency, min: 0, max: 100, values: [getNormalizedMaskTransparency() * 100], onChange: handleMaskTransparencyChange, step: 1 }), (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: elevationOffsetLabel }), (0, jsx_runtime_1.jsx)(imodel_components_react_1.QuantityNumberInput, { "data-testid": "ground-bias", disabled: applyTerrain, persistenceValue: groundBias, step: 1, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleElevationChange, onKeyDown: onKeyDown }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: useDepthBufferLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { "data-testid": "depthBuffer", disabled: applyTerrain, onChange: onToggleUseDepthBuffer, checked: useDepthBuffer })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "map-manager-settings-group", children: (0, jsx_runtime_1.jsxs)("fieldset", { children: [(0, jsx_runtime_1.jsx)("legend", { children: terrainLabel }), (0, jsx_runtime_1.jsxs)("div", { className: "maplayers-settings-container", children: [(0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: enableLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.ToggleSwitch, { "data-testid": "terrain", onChange: onToggleTerrain, checked: applyTerrain }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: modelHeightLabel }), (0, jsx_runtime_1.jsx)(imodel_components_react_1.QuantityNumberInput, { "data-testid": "terrain-origin", disabled: !applyTerrain, persistenceValue: terrainOrigin, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleHeightOriginChange, onKeyDown: onKeyDown }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: heightOriginLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { "data-testid": "terrain-height-mode", options: terrainHeightOptions.current, disabled: !applyTerrain, value: heightOriginMode, onChange: handleElevationTypeSelected, size: "small" }), (0, jsx_runtime_1.jsx)("span", { className: "map-manager-settings-label", children: exaggerationLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Input, { "data-testid": "exaggeration-input", type: "number", value: exaggeration.toString(), disabled: !applyTerrain, onChange: handleExaggerationChange, onKeyDown: onKeyDown, size: "small" })] })] }) })] })), tabIndex === 1 && (0, jsx_runtime_1.jsx)(CustomParamsSettings_1.CustomParamsSettingsPanel, { onHandleOutsideClick: onHandleOutsideClick })] }));
200
202
  }
201
203
  exports.MapManagerSettings = MapManagerSettings;
202
204
  //# sourceMappingURL=MapManagerSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapManagerSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.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\nimport \"./MapManagerSettings.scss\";\nimport * as React from \"react\";\nimport { PlanarClipMaskMode, PlanarClipMaskPriority, TerrainHeightOriginMode } from \"@itwin/core-common\";\nimport { QuantityType } from \"@itwin/core-frontend\";\nimport { NumberInput } from \"@itwin/core-react\";\nimport { QuantityNumberInput } from \"@itwin/imodel-components-react\";\nimport { Select, Slider, Tab, Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { CustomParamsSettingsPanel } from \"./CustomParamsSettings\";\nimport { useSourceMapContext } from \"./MapLayerManager\";\n\nimport type { ViewState3d } from \"@itwin/core-frontend\";\nimport type { BackgroundMapProps, BackgroundMapSettings, TerrainProps } from \"@itwin/core-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\n\nenum MapMaskingOption {\n None,\n AllModels,\n}\n\ninterface MapManagerSettingsProps {\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\n}\n\nfunction getMapMaskingFromBackgroundMapSetting(backgroundMapSettings: BackgroundMapSettings): MapMaskingOption {\n if (backgroundMapSettings.planarClipMask.mode === PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {\n if (backgroundMapSettings.planarClipMask.priority >= PlanarClipMaskPriority.BackgroundMap) {\n return MapMaskingOption.AllModels;\n }\n }\n return MapMaskingOption.None;\n}\n\nfunction getHeightOriginModeKey(mode: TerrainHeightOriginMode): string {\n if (TerrainHeightOriginMode.Geodetic === mode) {\n return \"geodetic\";\n }\n if (TerrainHeightOriginMode.Geoid === mode) {\n return \"geoid\";\n }\n return \"ground\";\n}\n\nfunction getHeightOriginModeFromKey(mode: string): TerrainHeightOriginMode {\n if (\"geodetic\" === mode) {\n return TerrainHeightOriginMode.Geodetic;\n }\n if (\"geoid\" === mode) {\n return TerrainHeightOriginMode.Geoid;\n }\n return TerrainHeightOriginMode.Ground;\n}\n\nexport function MapManagerSettings({ onHandleOutsideClick }: MapManagerSettingsProps) {\n const { activeViewport } = useSourceMapContext();\n const backgroundMapSettings = (activeViewport!.view as ViewState3d).getDisplayStyle3d().settings.backgroundMap;\n\n const [transparency, setTransparency] = React.useState(() =>\n typeof backgroundMapSettings.transparency === \"boolean\" ? 0 : Math.round(backgroundMapSettings.transparency * 100) / 100,\n );\n\n const terrainSettings = backgroundMapSettings.terrainSettings;\n const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);\n\n const terrainHeightOptions = React.useRef<SelectOption<string>[]>([\n { value: \"geodetic\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeodetic\") },\n { value: \"geoid\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeoid\") },\n { value: \"ground\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGround\") },\n ]);\n\n const updateTerrainSettings = React.useCallback(\n (props: TerrainProps) => {\n activeViewport!.changeBackgroundMapProps({ terrainSettings: props });\n },\n [activeViewport],\n );\n\n const updateBackgroundMap = React.useCallback(\n (props: BackgroundMapProps) => {\n activeViewport!.changeBackgroundMapProps(props);\n },\n [activeViewport],\n );\n\n const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));\n const handleElevationTypeSelected = React.useCallback(\n (newValue: string): void => {\n if (newValue) {\n const newHeightOriginMode = getHeightOriginModeFromKey(newValue);\n updateTerrainSettings({ heightOriginMode: newHeightOriginMode });\n setHeightOriginMode(newValue);\n }\n },\n [updateTerrainSettings],\n );\n\n const [maskTransparency, setMaskTransparency] = React.useState(() =>\n backgroundMapSettings.planarClipMask.transparency === undefined ? undefined : Math.round(backgroundMapSettings.planarClipMask.transparency * 100) / 100,\n );\n\n const getNormalizedMaskTransparency = React.useCallback(() => {\n return maskTransparency === undefined ? 0 : maskTransparency;\n }, [maskTransparency]);\n\n const updateMaskingSettings = React.useCallback(\n (option: MapMaskingOption) => {\n if (option === MapMaskingOption.AllModels) {\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency },\n });\n }\n if (option === MapMaskingOption.None) {\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None } });\n }\n },\n [activeViewport, maskTransparency],\n );\n\n const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));\n\n const onMaskingToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;\n updateMaskingSettings(maskingOption);\n setMasking(maskingOption);\n },\n [updateMaskingSettings],\n );\n\n const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);\n\n const onOverrideMaskTransparencyToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const trans = checked ? getNormalizedMaskTransparency() : undefined;\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: trans },\n });\n\n setOverrideMaskTransparency(checked);\n },\n [activeViewport, getNormalizedMaskTransparency],\n );\n\n const handleElevationChange = React.useCallback(\n (value: number) => {\n if (value !== undefined) {\n updateBackgroundMap({ groundBias: value });\n setGroundBias(value);\n }\n },\n [updateBackgroundMap],\n );\n\n const handleAlphaChange = React.useCallback(\n (values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({ transparency: newTransparency });\n setTransparency(newTransparency);\n },\n [activeViewport],\n );\n\n const handleMaskTransparencyChange = React.useCallback(\n (values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency },\n });\n setMaskTransparency(newTransparency);\n },\n [activeViewport],\n );\n\n const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);\n\n const onToggleTerrain = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ applyTerrain: checked });\n setApplyTerrain(checked);\n },\n [updateBackgroundMap],\n );\n\n const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);\n\n const handleExaggerationChange = React.useCallback(\n (value: number | undefined, _stringValue: string) => {\n if (undefined !== value) {\n updateTerrainSettings({ exaggeration: value });\n setExaggeration(value);\n }\n },\n [updateTerrainSettings],\n );\n\n const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);\n\n const handleHeightOriginChange = React.useCallback(\n (value: number) => {\n if (undefined !== value) {\n updateTerrainSettings({ heightOrigin: value });\n setTerrainOrigin(value);\n }\n },\n [updateTerrainSettings],\n );\n\n const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);\n const onToggleUseDepthBuffer = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ useDepthBuffer: checked });\n setUseDepthBuffer(checked);\n },\n [updateBackgroundMap],\n );\n\n /** Disable commas and letters */\n const onKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\n const isLetter = /^[a-zA-Z]$/.test(event.key);\n if (event.key === \",\" || isLetter) {\n event.preventDefault();\n }\n }, []);\n\n const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);\n const onLocatableToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ nonLocatable: !checked });\n setIsLocatable(checked);\n },\n [updateBackgroundMap],\n );\n\n const [transparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Transparency\"));\n const [terrainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Terrain\"));\n const [enableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Enable\"));\n const [elevationOffsetLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationOffset\"));\n const [useDepthBufferLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.UseDepthBuffer\"));\n const [modelHeightLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ModelHeight\"));\n const [heightOriginLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.HeightOrigin\"));\n const [exaggerationLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Exaggeration\"));\n const [locatableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Locatable\"));\n const [maskingLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Mask\"));\n const [overrideMaskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.OverrideMaskTransparency\"));\n const [maskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.MaskTransparency\"));\n\n const [tabIndex, setTabIndex] = React.useState(0);\n\n return (\n <Tabs activeIndex={tabIndex} orientation=\"horizontal\" labels={[<Tab key=\"general\" label=\"General\" />, <Tab key=\"advanced\" label=\"Advanced\" />]} onTabSelected={setTabIndex}>\n {tabIndex === 0 && (\n <>\n <div className=\"maplayers-settings-container\">\n <span className=\"map-manager-settings-label\">{transparencyLabel}</span>\n <Slider min={0} max={100} values={[transparency * 100]} onChange={handleAlphaChange} step={1} />\n\n <span className=\"map-manager-settings-label\">{locatableLabel}</span>\n <ToggleSwitch onChange={onLocatableToggle} checked={isLocatable} />\n\n <span className=\"map-manager-settings-label\">{maskingLabel}</span>\n <ToggleSwitch onChange={onMaskingToggle} checked={masking !== MapMaskingOption.None} />\n\n <span className=\"map-manager-settings-label\">{overrideMaskTransparencyLabel}</span>\n <ToggleSwitch disabled={masking === MapMaskingOption.None} onChange={onOverrideMaskTransparencyToggle} checked={overrideMaskTransparency} />\n\n <span className=\"map-manager-settings-label\">{maskTransparencyLabel}</span>\n <Slider\n disabled={masking === MapMaskingOption.None || !overrideMaskTransparency}\n min={0}\n max={100}\n values={[getNormalizedMaskTransparency() * 100]}\n onChange={handleMaskTransparencyChange}\n step={1}\n />\n\n <>\n <span className=\"map-manager-settings-label\">{elevationOffsetLabel}</span>\n <QuantityNumberInput\n disabled={applyTerrain}\n persistenceValue={groundBias}\n step={1}\n snap\n quantityType={QuantityType.LengthEngineering}\n onChange={handleElevationChange}\n onKeyDown={onKeyDown}\n />\n\n <span className=\"map-manager-settings-label\">{useDepthBufferLabel}</span>\n <ToggleSwitch disabled={applyTerrain} onChange={onToggleUseDepthBuffer} checked={useDepthBuffer} />\n </>\n </div>\n <div className=\"map-manager-settings-group\">\n <fieldset>\n <legend>{terrainLabel}</legend>\n\n <div className=\"maplayers-settings-container\">\n <span className=\"map-manager-settings-label\">{enableLabel}</span>\n <ToggleSwitch onChange={onToggleTerrain} checked={applyTerrain} />\n\n <span className=\"map-manager-settings-label\">{modelHeightLabel}</span>\n <QuantityNumberInput\n disabled={!applyTerrain}\n persistenceValue={terrainOrigin}\n snap\n quantityType={QuantityType.LengthEngineering}\n onChange={handleHeightOriginChange}\n onKeyDown={onKeyDown}\n />\n\n <span className=\"map-manager-settings-label\">{heightOriginLabel}</span>\n <Select\n options={terrainHeightOptions.current}\n disabled={!applyTerrain}\n value={heightOriginMode}\n onChange={handleElevationTypeSelected}\n size=\"small\"\n />\n\n <span className=\"map-manager-settings-label\">{exaggerationLabel}</span>\n {/*eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <NumberInput value={exaggeration} disabled={!applyTerrain} onChange={handleExaggerationChange} onKeyDown={onKeyDown} />\n </div>\n </fieldset>\n </div>\n </>\n )}\n {tabIndex === 1 && <CustomParamsSettingsPanel onHandleOutsideClick={onHandleOutsideClick}></CustomParamsSettingsPanel>}\n </Tabs>\n );\n}\n"]}
1
+ {"version":3,"file":"MapManagerSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.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\nimport \"./MapManagerSettings.scss\";\nimport * as React from \"react\";\nimport { PlanarClipMaskMode, PlanarClipMaskPriority, TerrainHeightOriginMode } from \"@itwin/core-common\";\nimport { QuantityType } from \"@itwin/core-frontend\";\nimport { QuantityNumberInput } from \"@itwin/imodel-components-react\";\nimport { Input, Select, Slider, Tab, Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { CustomParamsSettingsPanel } from \"./CustomParamsSettings\";\nimport { useSourceMapContext } from \"./MapLayerManager\";\n\nimport type { ViewState3d } from \"@itwin/core-frontend\";\nimport type { BackgroundMapProps, BackgroundMapSettings, TerrainProps } from \"@itwin/core-common\";\nimport type { SelectOption } from \"@itwin/itwinui-react\";\n\nenum MapMaskingOption {\n None,\n AllModels,\n}\n\ninterface MapManagerSettingsProps {\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\n}\n\nfunction getMapMaskingFromBackgroundMapSetting(backgroundMapSettings: BackgroundMapSettings): MapMaskingOption {\n if (backgroundMapSettings.planarClipMask.mode === PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {\n if (backgroundMapSettings.planarClipMask.priority >= PlanarClipMaskPriority.BackgroundMap) {\n return MapMaskingOption.AllModels;\n }\n }\n return MapMaskingOption.None;\n}\n\nfunction getHeightOriginModeKey(mode: TerrainHeightOriginMode): string {\n if (TerrainHeightOriginMode.Geodetic === mode) {\n return \"geodetic\";\n }\n if (TerrainHeightOriginMode.Geoid === mode) {\n return \"geoid\";\n }\n return \"ground\";\n}\n\nfunction getHeightOriginModeFromKey(mode: string): TerrainHeightOriginMode {\n if (\"geodetic\" === mode) {\n return TerrainHeightOriginMode.Geodetic;\n }\n if (\"geoid\" === mode) {\n return TerrainHeightOriginMode.Geoid;\n }\n return TerrainHeightOriginMode.Ground;\n}\n\nexport function MapManagerSettings({ onHandleOutsideClick }: MapManagerSettingsProps) {\n const { activeViewport } = useSourceMapContext();\n const backgroundMapSettings = (activeViewport!.view as ViewState3d).getDisplayStyle3d().settings.backgroundMap;\n\n const [transparency, setTransparency] = React.useState(() =>\n typeof backgroundMapSettings.transparency === \"boolean\" ? 0 : Math.round(backgroundMapSettings.transparency * 100) / 100,\n );\n\n const terrainSettings = backgroundMapSettings.terrainSettings;\n const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);\n\n const terrainHeightOptions = React.useRef<SelectOption<string>[]>([\n { value: \"geodetic\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeodetic\") },\n { value: \"geoid\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeoid\") },\n { value: \"ground\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGround\") },\n ]);\n\n const updateTerrainSettings = React.useCallback(\n (props: TerrainProps) => {\n activeViewport!.changeBackgroundMapProps({ terrainSettings: props });\n },\n [activeViewport],\n );\n\n const updateBackgroundMap = React.useCallback(\n (props: BackgroundMapProps) => {\n activeViewport!.changeBackgroundMapProps(props);\n },\n [activeViewport],\n );\n\n const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));\n const handleElevationTypeSelected = React.useCallback(\n (newValue: string): void => {\n if (newValue) {\n const newHeightOriginMode = getHeightOriginModeFromKey(newValue);\n updateTerrainSettings({ heightOriginMode: newHeightOriginMode });\n setHeightOriginMode(newValue);\n }\n },\n [updateTerrainSettings],\n );\n\n const [maskTransparency, setMaskTransparency] = React.useState(() =>\n backgroundMapSettings.planarClipMask.transparency === undefined ? undefined : Math.round(backgroundMapSettings.planarClipMask.transparency * 100) / 100,\n );\n\n const getNormalizedMaskTransparency = React.useCallback(() => {\n return maskTransparency === undefined ? 0 : maskTransparency;\n }, [maskTransparency]);\n\n const updateMaskingSettings = React.useCallback(\n (option: MapMaskingOption) => {\n if (option === MapMaskingOption.AllModels) {\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency },\n });\n }\n if (option === MapMaskingOption.None) {\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None } });\n }\n },\n [activeViewport, maskTransparency],\n );\n\n const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));\n\n const onMaskingToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;\n updateMaskingSettings(maskingOption);\n setMasking(maskingOption);\n },\n [updateMaskingSettings],\n );\n\n const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);\n\n const onOverrideMaskTransparencyToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const trans = checked ? getNormalizedMaskTransparency() : undefined;\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: trans },\n });\n\n setOverrideMaskTransparency(checked);\n },\n [activeViewport, getNormalizedMaskTransparency],\n );\n\n const handleElevationChange = React.useCallback(\n (value: number) => {\n if (value !== undefined) {\n updateBackgroundMap({ groundBias: value });\n setGroundBias(value);\n }\n },\n [updateBackgroundMap],\n );\n\n const handleAlphaChange = React.useCallback(\n (values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({ transparency: newTransparency });\n setTransparency(newTransparency);\n },\n [activeViewport],\n );\n\n const handleMaskTransparencyChange = React.useCallback(\n (values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({\n planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency },\n });\n setMaskTransparency(newTransparency);\n },\n [activeViewport],\n );\n\n const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);\n\n const onToggleTerrain = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ applyTerrain: checked });\n setApplyTerrain(checked);\n },\n [updateBackgroundMap],\n );\n\n const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);\n\n const handleExaggerationChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const numValue = Number(e.target.value);\n if (isNaN(numValue) || numValue === undefined) {\n e.preventDefault();\n return;\n }\n updateTerrainSettings({ exaggeration: numValue });\n setExaggeration(numValue);\n },\n [updateTerrainSettings],\n );\n\n const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);\n\n const handleHeightOriginChange = React.useCallback(\n (value: number) => {\n if (undefined !== value) {\n updateTerrainSettings({ heightOrigin: value });\n setTerrainOrigin(value);\n }\n },\n [updateTerrainSettings],\n );\n\n const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);\n const onToggleUseDepthBuffer = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ useDepthBuffer: checked });\n setUseDepthBuffer(checked);\n },\n [updateBackgroundMap],\n );\n\n /** Disable commas and letters */\n const onKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\n const isLetter = /^[a-zA-Z]$/.test(event.key);\n if (event.key === \",\" || isLetter) {\n event.preventDefault();\n }\n }, []);\n\n const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);\n const onLocatableToggle = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ nonLocatable: !checked });\n setIsLocatable(checked);\n },\n [updateBackgroundMap],\n );\n\n const [transparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Transparency\"));\n const [terrainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Terrain\"));\n const [enableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Enable\"));\n const [elevationOffsetLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationOffset\"));\n const [useDepthBufferLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.UseDepthBuffer\"));\n const [modelHeightLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ModelHeight\"));\n const [heightOriginLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.HeightOrigin\"));\n const [exaggerationLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Exaggeration\"));\n const [locatableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Locatable\"));\n const [maskingLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Mask\"));\n const [overrideMaskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.OverrideMaskTransparency\"));\n const [maskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.MaskTransparency\"));\n\n const [tabIndex, setTabIndex] = React.useState(0);\n\n return (\n <Tabs activeIndex={tabIndex} orientation=\"horizontal\" labels={[<Tab key=\"general\" label=\"General\" />, <Tab key=\"advanced\" label=\"Advanced\" />]} onTabSelected={setTabIndex}>\n {tabIndex === 0 && (\n <>\n <div className=\"maplayers-settings-container\">\n <span className=\"map-manager-settings-label\">{transparencyLabel}</span>\n <Slider min={0} max={100} values={[transparency * 100]} onChange={handleAlphaChange} step={1} />\n\n <span className=\"map-manager-settings-label\">{locatableLabel}</span>\n <ToggleSwitch data-testid=\"locatable\" onChange={onLocatableToggle} checked={isLocatable} />\n\n <span className=\"map-manager-settings-label\">{maskingLabel}</span>\n <ToggleSwitch data-testid=\"mask\" onChange={onMaskingToggle} checked={masking !== MapMaskingOption.None} />\n\n <span className=\"map-manager-settings-label\">{overrideMaskTransparencyLabel}</span>\n <ToggleSwitch data-testid=\"overrideMaskTransparency\" disabled={masking === MapMaskingOption.None} onChange={onOverrideMaskTransparencyToggle} checked={overrideMaskTransparency} />\n\n <span className=\"map-manager-settings-label\">{maskTransparencyLabel}</span>\n <Slider\n disabled={masking === MapMaskingOption.None || !overrideMaskTransparency}\n min={0}\n max={100}\n values={[getNormalizedMaskTransparency() * 100]}\n onChange={handleMaskTransparencyChange}\n step={1}\n />\n\n <>\n <span className=\"map-manager-settings-label\">{elevationOffsetLabel}</span>\n <QuantityNumberInput\n data-testid=\"ground-bias\"\n disabled={applyTerrain}\n persistenceValue={groundBias}\n step={1}\n snap\n quantityType={QuantityType.LengthEngineering}\n onChange={handleElevationChange}\n onKeyDown={onKeyDown}\n />\n\n <span className=\"map-manager-settings-label\">{useDepthBufferLabel}</span>\n <ToggleSwitch data-testid=\"depthBuffer\" disabled={applyTerrain} onChange={onToggleUseDepthBuffer} checked={useDepthBuffer} />\n </>\n </div>\n <div className=\"map-manager-settings-group\">\n <fieldset>\n <legend>{terrainLabel}</legend>\n\n <div className=\"maplayers-settings-container\">\n <span className=\"map-manager-settings-label\">{enableLabel}</span>\n <ToggleSwitch data-testid=\"terrain\" onChange={onToggleTerrain} checked={applyTerrain} />\n\n <span className=\"map-manager-settings-label\">{modelHeightLabel}</span>\n <QuantityNumberInput\n data-testid=\"terrain-origin\"\n disabled={!applyTerrain}\n persistenceValue={terrainOrigin}\n snap\n quantityType={QuantityType.LengthEngineering}\n onChange={handleHeightOriginChange}\n onKeyDown={onKeyDown}\n />\n\n <span className=\"map-manager-settings-label\">{heightOriginLabel}</span>\n <Select\n data-testid=\"terrain-height-mode\"\n options={terrainHeightOptions.current}\n disabled={!applyTerrain}\n value={heightOriginMode}\n onChange={handleElevationTypeSelected}\n size=\"small\"\n />\n\n <span className=\"map-manager-settings-label\">{exaggerationLabel}</span>\n <Input\n data-testid=\"exaggeration-input\"\n type=\"number\"\n value={exaggeration.toString()}\n disabled={!applyTerrain}\n onChange={handleExaggerationChange}\n onKeyDown={onKeyDown}\n size=\"small\"\n />\n </div>\n </fieldset>\n </div>\n </>\n )}\n {tabIndex === 1 && <CustomParamsSettingsPanel onHandleOutsideClick={onHandleOutsideClick}></CustomParamsSettingsPanel>}\n </Tabs>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MapUrlDialog.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAa,cAAc,EAAqE,MAAM,sBAAsB,CAAC;AAapI,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAwB,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAMF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACtD,UAAU,iBAAiB;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,cAAc,CAAC,EAAE;QACf,KAAK,EAAE,qBAAqB,CAAC;QAC7B,UAAU,CAAC,EAAE,wBAAwB,CAAC;QACtC,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB,CAAC;IAEF,oBAAoB,CAAC,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,wBAAwB,CAAC;IACrC,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC3C,qBAAqB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA6qBpD"}
1
+ {"version":3,"file":"MapUrlDialog.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAG7B,OAAO,EAAa,cAAc,EAAqE,MAAM,sBAAsB,CAAC;AAapI,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAwB,wBAAwB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAMF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AACtD,UAAU,iBAAiB;IACzB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,cAAc,CAAC,EAAE;QACf,KAAK,EAAE,qBAAqB,CAAC;QAC7B,UAAU,CAAC,EAAE,wBAAwB,CAAC;QACtC,MAAM,CAAC,EAAE,cAAc,CAAC;KACzB,CAAC;IAEF,oBAAoB,CAAC,EAAE,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,wBAAwB,CAAC;IACrC,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC3C,qBAAqB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,2CA4qBpD"}
@@ -34,7 +34,6 @@ require("./MapUrlDialog.scss");
34
34
  const React = __importStar(require("react"));
35
35
  const core_bentley_1 = require("@itwin/core-bentley");
36
36
  const core_frontend_1 = require("@itwin/core-frontend");
37
- const core_react_1 = require("@itwin/core-react");
38
37
  const itwinui_icons_color_react_1 = require("@itwin/itwinui-icons-color-react");
39
38
  const itwinui_react_1 = require("@itwin/itwinui-react");
40
39
  const CustomParamsMappingStorage_1 = require("../../CustomParamsMappingStorage");
@@ -45,6 +44,7 @@ const mapLayers_1 = require("../../mapLayers");
45
44
  const SelectCustomParam_1 = require("./SelectCustomParam");
46
45
  const SelectMapFormat_1 = require("./SelectMapFormat");
47
46
  const UserPreferencesStorageOptions_1 = require("./UserPreferencesStorageOptions");
47
+ const useCrossOriginPopup_1 = require("../hooks/useCrossOriginPopup");
48
48
  exports.MAP_TYPES = {
49
49
  wms: "WMS",
50
50
  arcGis: "ArcGIS",
@@ -535,8 +535,7 @@ function MapUrlDialog(props) {
535
535
  }
536
536
  // Use a hook to display the popup.
537
537
  // The display of the popup is controlled by the 'showOauthPopup' state variable.
538
- // eslint-disable-next-line @typescript-eslint/no-deprecated
539
- (0, core_react_1.useCrossOriginPopup)(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);
538
+ (0, useCrossOriginPopup_1.useCrossOriginPopup)(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);
540
539
  return ((0, jsx_runtime_1.jsx)("div", { ref: dialogContainer, children: (0, jsx_runtime_1.jsxs)(itwinui_react_1.Modal, { as: "div", className: "map-layer-url-dialog", title: dialogTitle, isOpen: true, onClose: handleCancel, style: { minHeight: 120, maxWidth: 600 }, portal: true, children: [(0, jsx_runtime_1.jsxs)(itwinui_react_1.ModalContent, { children: [(0, jsx_runtime_1.jsxs)("div", { className: "map-layer-source-url", children: [(0, jsx_runtime_1.jsx)("span", { className: "map-layer-source-label", children: typeLabel }), (0, jsx_runtime_1.jsx)(SelectMapFormat_1.SelectMapFormat, { value: mapType, disabled: props.signInModeArgs !== undefined || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending, onChange: setMapType, mapTypesOptions: mapLayerOptions?.mapTypeOptions, status: incompatibleFormat ? "warning" : undefined, message: incompatibleFormat ? mapLayers_1.MapLayersUI.translate("CustomAttach.InvalidType") : undefined }), (0, jsx_runtime_1.jsx)("span", { className: "map-layer-source-label", children: nameLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Input, { className: "map-layer-source-input", placeholder: nameInputPlaceHolder, onChange: onNameChange, value: mapName, disabled: !!props.signInModeArgs || layerAttachPending || layerAuthPending }), (0, jsx_runtime_1.jsx)("span", { className: "map-layer-source-label", children: urlLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Input, { className: "map-layer-source-input", placeholder: urlInputPlaceHolder, onKeyDown: handleOnKeyDown, onChange: onUrlChange, disabled: !!props.signInModeArgs || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending, value: mapUrl }), (0, jsx_runtime_1.jsxs)("span", { className: "map-layer-source-label", children: [mapLayers_1.MapLayersUI.translate("CustomAttach.CustomParamsLabel"), (0, jsx_runtime_1.jsx)("div", { title: mapLayers_1.MapLayersUI.translate("Labels.TechPreviewBadgeTooltip"), className: "map-layer-source-previewBadge-icon", children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Icon, { size: "small", children: (0, jsx_runtime_1.jsx)(itwinui_icons_color_react_1.SvgTechnicalPreviewMini, {}) }) })] }), (0, jsx_runtime_1.jsx)(SelectCustomParam_1.SelectCustomParam, { value: customParamNames, disabled: layerAttachPending || layerAuthPending, onChange: (paramNames) => {
541
540
  setCustomParamNames(paramNames);
542
541
  SetCustomParamNamesChangedByUser(true);
@@ -1 +1 @@
1
- {"version":3,"file":"MapUrlDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.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 Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { BeEvent, Guid } from \"@itwin/core-bentley\";\nimport { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { useCrossOriginPopup } from \"@itwin/core-react\";\nimport { SvgStatusWarning, SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Input, LabeledInput, Modal, ModalButtonBar, ModalContent, ProgressLinear } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { CustomParamUtils } from \"../../CustomParamUtils\";\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SelectCustomParam } from \"./SelectCustomParam\";\nimport { SelectMapFormat } from \"./SelectMapFormat\";\nimport { UserPreferencesStorageOptions } from \"./UserPreferencesStorageOptions\";\n\nimport type { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerAccessClient, MapLayerSourceValidation, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions } from \"../Interfaces\";\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\nconst URL_SCHEMES = {\n http: \"http://\",\n https: \"https://\",\n};\n\nexport type LayerCreationMode = \"single\" | \"multiple\";\ninterface MapUrlDialogProps {\n activeViewport?: ScreenViewport;\n onOkResult: (result?: SourceState) => void;\n onCancelResult?: () => void;\n mapLayerOptions?: MapLayerOptions;\n\n // An optional layer definition can be provide to enable the edit mode\n signInModeArgs?: {\n layer: ImageMapLayerSettings;\n validation?: MapLayerSourceValidation;\n source?: MapLayerSource;\n };\n\n mapLayerSourceToEdit?: MapLayerSource;\n}\n\nexport interface SourceState {\n source: MapLayerSource;\n validation: MapLayerSourceValidation;\n customParamIdx?: { [key: string]: string };\n privateCustomParamIdx?: { [key: string]: string };\n}\n\nexport function MapUrlDialog(props: MapUrlDialogProps) {\n const { onOkResult, mapLayerOptions } = props;\n\n const getMapUrlFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.url;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.url;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getMapNameFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.name;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.name;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getFormatFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.formatId;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.formatId;\n }\n return undefined;\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getCustomParamsMapping = React.useCallback((url: string): string[] => {\n const cpMappingStorage = new CustomParamsMappingStorage();\n const cpMapping = cpMappingStorage.get(url.toLowerCase());\n if (cpMapping && !Array.isArray(cpMapping)) {\n return cpMapping.customParamNames;\n }\n return [];\n }, []);\n\n const [dialogTitle] = React.useState(\n MapLayersUI.localization.getLocalizedString(\n props.signInModeArgs || props.mapLayerSourceToEdit ? \"mapLayers:CustomAttach.EditCustomLayer\" : \"mapLayers:CustomAttach.AttachCustomLayer\",\n ),\n );\n const [typeLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Type\"));\n const [nameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Name\"));\n const [nameInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NameInputPlaceHolder\"));\n const [urlLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.URL\"));\n const [urlInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.UrlInputPlaceHolder\"));\n const [missingCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.MissingCredentials\"));\n const [invalidCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCredentials\"));\n const [externalLoginTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLogin\"));\n const [externalLoginFailedMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginFailed\"));\n const [externalLoginSucceededMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginSucceeded\"));\n const [externalLoginWaitingMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginWaiting\"));\n const [externalLoginTryAgainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginTryAgain\"));\n const [serverRequireCredentials, setServerRequireCredentials] = React.useState(false);\n const [invalidCredentialsProvided, setInvalidCredentialsProvided] = React.useState(false);\n const [layerAttachPending, setLayerAttachPending] = React.useState(false);\n const [layerAuthPending, setLayerAuthPending] = React.useState(false);\n const [mapUrl, setMapUrl] = React.useState(getMapUrlFromProps());\n const [mapName, setMapName] = React.useState(getMapNameFromProps());\n const [userName, setUserName] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [noSaveSettingsWarning] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NoSaveSettingsWarning\"));\n const [passwordLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Password\"));\n const [passwordRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.PasswordRequired\"));\n const [userNameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Username\"));\n const [userNameRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.UsernameRequired\"));\n const [settingsStorage, setSettingsStorageRadio] = React.useState(\"iTwin\");\n const [oauthProcessSucceeded, setOAuthProcessSucceeded] = React.useState<undefined | boolean>(undefined);\n const [showOauthPopup, setShowOauthPopup] = React.useState(false);\n const [externalLoginUrl, setExternalLoginUrl] = React.useState<string | undefined>();\n const [onOauthProcessEnd] = React.useState(new BeEvent());\n const [accessClient, setAccessClient] = React.useState<MapLayerAccessClient | undefined>();\n const [isAccessClientInitialized, setAccessClientInitialized] = React.useState(false);\n const [shouldAutoAttachSource, setShouldAutoAttachSource] = React.useState(true);\n const [incompatibleFormat, setIncompatibleFormat] = React.useState(false);\n\n const [mapType, setMapType] = React.useState(getFormatFromProps() ?? \"ArcGIS\");\n const [customParamNamesChangedByUser, SetCustomParamNamesChangedByUser] = React.useState<boolean>(false);\n const [customParamNames, setCustomParamNames] = React.useState<string[] | undefined>(() => {\n if (mapUrl) {\n return getCustomParamsMapping(mapUrl);\n }\n return undefined;\n });\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 const [isSettingsStorageAvailable] = React.useState(MapLayersUI.iTwinConfig && props?.activeViewport?.iModel?.iTwinId);\n const [hasImodelContext] = React.useState(\n props?.activeViewport?.iModel?.iTwinId !== undefined &&\n props.activeViewport.iModel.iTwinId !== Guid.empty &&\n props?.activeViewport?.iModel?.iModelId !== undefined &&\n props?.activeViewport.iModel.iModelId !== Guid.empty,\n );\n\n const handleCancel = React.useCallback(() => {\n if (props.onCancelResult) {\n props.onCancelResult();\n return;\n }\n }, [props]);\n\n const onUsernameChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setUserName(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setUserName, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const onPasswordChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setPassword(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setPassword, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const handleArcGisLogin = React.useCallback(() => {\n setLayerAuthPending(true);\n setShowOauthPopup(true);\n if (oauthProcessSucceeded === false) {\n setOAuthProcessSucceeded(undefined);\n }\n }, [oauthProcessSucceeded]);\n\n // return true if authorization is needed\n const updateAuthState = React.useCallback(\n async (source: MapLayerSource, sourceValidation: MapLayerSourceValidation) => {\n const sourceRequireAuth = sourceValidation.status === MapLayerSourceStatus.RequireAuth;\n let invalidCredentials = sourceValidation.status === MapLayerSourceStatus.InvalidCredentials;\n if (sourceRequireAuth) {\n let hasTokenEndPoint = false;\n const settings = source.toLayerSettings();\n\n if (accessClient !== undefined && accessClient.getTokenServiceEndPoint !== undefined && settings !== undefined) {\n try {\n const tokenEndpoint = await accessClient.getTokenServiceEndPoint(settings.url);\n if (tokenEndpoint !== undefined) {\n const loginUrl = tokenEndpoint.getLoginUrl();\n setExternalLoginUrl(loginUrl);\n hasTokenEndPoint = true;\n }\n } catch {}\n } else if (userName.length > 0 || password.length > 0) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n\n if (!hasTokenEndPoint && (userName.length > 0 || password.length > 0)) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n }\n setServerRequireCredentials(sourceRequireAuth || invalidCredentials);\n if (invalidCredentials) {\n setInvalidCredentialsProvided(true);\n } else if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false); // flag reset\n }\n\n return sourceRequireAuth || invalidCredentials;\n },\n [accessClient, invalidCredentialsProvided, password.length, userName.length],\n );\n\n const onNameChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setMapName(event.target.value);\n }, []);\n\n const onRadioChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSettingsStorageRadio(event.target.value);\n },\n [setSettingsStorageRadio],\n );\n\n const onUrlChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setMapUrl(value);\n\n if (!customParamNamesChangedByUser) {\n if (value === \"\") {\n setCustomParamNames(undefined);\n } else {\n const paramNames = getCustomParamsMapping(value);\n setCustomParamNames(paramNames);\n }\n }\n },\n [getCustomParamsMapping, customParamNamesChangedByUser],\n );\n\n const createSource = React.useCallback(\n (url: string) => {\n let source: MapLayerSource | undefined;\n if (url && mapName) {\n source = MapLayerSource.fromJSON({ url, name: mapName, formatId: mapType });\n\n // Set credentials separately since they are not part of JSON\n if (source) {\n source.userName = userName || undefined; // When there is no value, empty string is always returned, in this case force it to undefined,\n source.password = password || undefined;\n\n if (customParamNames) {\n CustomParamUtils.setSourceCustomParams(source, customParamNames);\n }\n }\n }\n return source;\n },\n [customParamNames, mapName, mapType, password, userName],\n );\n\n const handleOk = React.useCallback(() => {\n const mapUrlLow = mapUrl.toLowerCase();\n // Append 'https://' if url is missing scheme\n let url = mapUrl;\n if (!mapUrlLow.startsWith(URL_SCHEMES.http) && !mapUrlLow.startsWith(URL_SCHEMES.https)) {\n url = `${URL_SCHEMES.https}${mapUrl}`;\n setMapUrl(url);\n }\n\n const source = createSource(url);\n if (source === undefined || props.mapLayerSourceToEdit) {\n onOkResult();\n\n if (source === undefined) {\n // Close the dialog and inform end user something went wrong.\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerLayerSourceCreationFailed\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: msgError, sourceName: mapName });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n // Store custom params mapping\n if (customParamNames) {\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n }\n\n // Simply change the source definition in the setting service\n if (props.mapLayerSourceToEdit !== undefined) {\n // Apply changes to original source object\n props.mapLayerSourceToEdit.savedQueryParams = { ...source.savedQueryParams };\n props.mapLayerSourceToEdit.unsavedQueryParams = { ...source.unsavedQueryParams };\n\n const vp = props.activeViewport;\n void (async () => {\n if (isSettingsStorageAvailable && vp?.iModel?.iTwinId) {\n try {\n await MapLayerPreferences.replaceSource(props.mapLayerSourceToEdit!, source, vp.iModel.iTwinId, vp?.iModel.iModelId);\n } catch {\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerEditError\", {\n layerName: props.mapLayerSourceToEdit?.name,\n });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\n return;\n }\n }\n })();\n return;\n }\n }\n\n // Attach source asynchronously.\n void (async () => {\n try {\n setLayerAttachPending(true);\n const validation = await source.validateSource(true);\n\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n\n if (validation.status === MapLayerSourceStatus.Valid) {\n // Update service settings if storage is available and we are not prompting user for credentials\n if (isSettingsStorageAvailable && !props.signInModeArgs) {\n const storeOnIModel = hasImodelContext ? \"Model\" === settingsStorage : undefined;\n const vp = props.activeViewport;\n if (vp?.iModel.iTwinId && !(await MapLayerPreferences.storeSource(source, vp.iModel.iTwinId, vp.iModel.iModelId, storeOnIModel))) {\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerPreferencesStoreFailed\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msgError));\n }\n }\n\n // Link an API key to this map-layer URL\n const customParamIdx: { [key: string]: string } = {};\n const privateCustomParamIdx: { [key: string]: string } = {};\n if (customParamNames && customParamNames.length > 0) {\n // Link the map-layers URL custom params.\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n\n const cpStorage = new CustomParamsStorage();\n customParamNames.forEach((customParamName) => {\n const items = cpStorage.get(customParamName);\n if (items && !Array.isArray(items)) {\n (items.secret ? privateCustomParamIdx : customParamIdx)[items.key] = items.value;\n }\n });\n }\n\n onOkResult({ source, validation, customParamIdx, privateCustomParamIdx });\n } else if (validation.status === MapLayerSourceStatus.InvalidCoordinateSystem) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCoordinateSystem\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult({ source, validation });\n } else if (validation.status === MapLayerSourceStatus.IncompatibleFormat) {\n setIncompatibleFormat(true);\n } else {\n const authNeeded = await updateAuthState(source, validation);\n if (!authNeeded) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ValidationError\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} ${source.url}`));\n onOkResult({ source, validation });\n }\n }\n } catch (error) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source.name });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult();\n }\n })();\n }, [\n mapUrl,\n createSource,\n props.mapLayerSourceToEdit,\n props.activeViewport,\n props.signInModeArgs,\n onOkResult,\n customParamNames,\n mapName,\n isSettingsStorageAvailable,\n hasImodelContext,\n settingsStorage,\n updateAuthState,\n ]);\n\n React.useEffect(() => {\n const handleOAuthProcessEnd = (success: boolean, _state: any) => {\n onOauthProcessEnd.raiseEvent(success, _state);\n };\n\n const ac = IModelApp.mapLayerFormatRegistry.getAccessClient(mapType);\n if (ac?.onOAuthProcessEnd) {\n setAccessClient(ac); // cache it, so we don't need to make another lookup;\n ac.onOAuthProcessEnd.addListener(handleOAuthProcessEnd);\n }\n setAccessClientInitialized(true);\n return () => {\n if (ac?.onOAuthProcessEnd) {\n ac.onOAuthProcessEnd.removeListener(handleOAuthProcessEnd);\n }\n\n setAccessClient(undefined);\n setAccessClientInitialized(false);\n };\n }, [mapType, onOauthProcessEnd, setAccessClient]);\n\n const resetSignInState = React.useCallback(() => {\n setServerRequireCredentials(false);\n setInvalidCredentialsProvided(false);\n setShowOauthPopup(false);\n setOAuthProcessSucceeded(undefined);\n setExternalLoginUrl(undefined);\n }, []);\n\n // After a map type chang(or setting a new custom query Parameter), make sure the different Oauth states are reset.\n React.useEffect(() => {\n resetSignInState();\n }, [mapType, resetSignInState]);\n\n // After a map type change, make sure the different Oauth states are reset.\n React.useEffect(() => {\n setIncompatibleFormat(false);\n }, [mapType, mapUrl]);\n\n // The first time the dialog is loaded and we already know the layer requires auth. (i.e ImageryProvider already made an attempt)\n // makes a request to discover the authentification types and adjust UI accordingly (i.e. username/password fields, Oauth popup)\n // Without this effect, user would have to manually click the 'OK' button in order to trigger the layer connection.\n React.useEffect(() => {\n // Attach source asynchronously.\n void (async () => {\n if (isAccessClientInitialized && shouldAutoAttachSource && props.signInModeArgs !== undefined) {\n try {\n let source = props.signInModeArgs.source;\n let validation = props.signInModeArgs.validation;\n if (!source || !validation) {\n // In some cases we don't know why the layer failed to attach, so we need to go through validation process\n source = MapLayerSource.fromJSON({\n url: props.signInModeArgs.layer.url,\n name: props.signInModeArgs.layer.name,\n formatId: props.signInModeArgs.layer.formatId,\n });\n\n if (source !== undefined) {\n if (props.signInModeArgs.layer.savedQueryParams) {\n source.savedQueryParams = { ...props.signInModeArgs.layer.savedQueryParams };\n }\n if (props.signInModeArgs.layer.unsavedQueryParams) {\n source.unsavedQueryParams = { ...props.signInModeArgs.layer.unsavedQueryParams };\n }\n\n setLayerAttachPending(true);\n\n validation = await source.validateSource(true);\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n }\n }\n if (source && validation) {\n setShouldAutoAttachSource(false);\n await updateAuthState(source, validation);\n }\n } catch {}\n }\n })();\n }, [isAccessClientInitialized, props.signInModeArgs, shouldAutoAttachSource, updateAuthState]);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const readyToSave = React.useCallback(() => {\n const credentialsSet = !!userName && !!password;\n const ready =\n !!mapUrl &&\n !!mapName &&\n !layerAttachPending &&\n (!serverRequireCredentials || credentialsSet) &&\n !invalidCredentialsProvided &&\n !incompatibleFormat &&\n (externalLoginUrl === undefined || (externalLoginUrl !== undefined && oauthProcessSucceeded));\n return ready;\n }, [\n userName,\n password,\n mapUrl,\n mapName,\n layerAttachPending,\n serverRequireCredentials,\n invalidCredentialsProvided,\n incompatibleFormat,\n externalLoginUrl,\n oauthProcessSucceeded,\n ]);\n\n const handleOnKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n if (readyToSave()) {\n handleOk();\n }\n }\n },\n [handleOk, readyToSave],\n );\n\n // onOauthProcessEnd events handler\n React.useEffect(() => {\n const handleOauthProcess = (success: boolean, _state: any) => {\n setLayerAuthPending(false);\n if (success) {\n setOAuthProcessSucceeded(true);\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n handleOk(); // Add the layer the same way the user would do by clicking 'ok'\n } else {\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n setOAuthProcessSucceeded(false);\n }\n };\n\n onOauthProcessEnd.addListener(handleOauthProcess);\n return () => {\n onOauthProcessEnd.removeListener(handleOauthProcess);\n };\n }, [handleOk, onOauthProcessEnd]);\n\n //\n // Monitors authentication method changes\n React.useEffect(() => {\n if (serverRequireCredentials && oauthProcessSucceeded === undefined && externalLoginUrl !== undefined) {\n handleArcGisLogin();\n }\n }, [oauthProcessSucceeded, externalLoginUrl, handleArcGisLogin, serverRequireCredentials]);\n\n // Monitors Oauth2 popup was closed\n const handleOAuthPopupClose = React.useCallback(() => {\n setShowOauthPopup(false);\n setLayerAuthPending(false);\n if (oauthProcessSucceeded === undefined) {\n setOAuthProcessSucceeded(false);\n } // indicates there was a failed attempt\n }, [oauthProcessSucceeded]);\n\n // Utility function to get warning message section\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (showOauthPopup) {\n warningMessage = externalLoginWaitingMsg;\n } else if (oauthProcessSucceeded === false) {\n warningMessage = externalLoginFailedMsg;\n } else if (oauthProcessSucceeded === true) {\n warningMessage = externalLoginSucceededMsg;\n } else if (invalidCredentialsProvided) {\n warningMessage = invalidCredentialsLabel;\n } else if (serverRequireCredentials && (!userName || !password)) {\n warningMessage = missingCredentialsLabel;\n }\n\n // Sometimes we want to add an extra node, such as a button\n let extraNode: React.ReactNode;\n if (oauthProcessSucceeded === false) {\n extraNode = (\n <div>\n <Button onClick={handleArcGisLogin}>{externalLoginTryAgainLabel}</Button>\n </div>\n );\n }\n\n if (warningMessage !== undefined) {\n return (\n <div className=\"map-layer-source-warnMessage\">\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n {extraNode}\n </div>\n );\n } else {\n return <span className=\"map-layer-source-placeholder\">&nbsp;</span>;\n }\n }\n\n // Use a hook to display the popup.\n // The display of the popup is controlled by the 'showOauthPopup' state variable.\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n useCrossOriginPopup(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-url-dialog\"\n title={dialogTitle}\n isOpen={true}\n onClose={handleCancel}\n style={{ minHeight: 120, maxWidth: 600 }}\n portal\n >\n <ModalContent>\n <div className=\"map-layer-source-url\">\n <span className=\"map-layer-source-label\">{typeLabel}</span>\n <SelectMapFormat\n value={mapType}\n disabled={props.signInModeArgs !== undefined || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n onChange={setMapType}\n mapTypesOptions={mapLayerOptions?.mapTypeOptions}\n status={incompatibleFormat ? \"warning\" : undefined}\n message={incompatibleFormat ? MapLayersUI.translate(\"CustomAttach.InvalidType\") : undefined}\n />\n <span className=\"map-layer-source-label\">{nameLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={nameInputPlaceHolder}\n onChange={onNameChange}\n value={mapName}\n disabled={!!props.signInModeArgs || layerAttachPending || layerAuthPending}\n />\n <span className=\"map-layer-source-label\">{urlLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={urlInputPlaceHolder}\n onKeyDown={handleOnKeyDown}\n onChange={onUrlChange}\n disabled={!!props.signInModeArgs || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n value={mapUrl}\n />\n <span className=\"map-layer-source-label\">\n {MapLayersUI.translate(\"CustomAttach.CustomParamsLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"map-layer-source-previewBadge-icon\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n <SelectCustomParam\n value={customParamNames}\n disabled={layerAttachPending || layerAuthPending}\n onChange={(paramNames) => {\n setCustomParamNames(paramNames);\n SetCustomParamNamesChangedByUser(true);\n resetSignInState();\n }}\n />\n\n {serverRequireCredentials &&\n externalLoginUrl === undefined && // external login is handled in popup\n props.mapLayerSourceToEdit === undefined && (\n <>\n <span className=\"map-layer-source-label\">{userNameLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n placeholder={serverRequireCredentials ? userNameRequiredLabel : userNameLabel}\n status={(!userName && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onUsernameChange}\n value={userName}\n size=\"small\"\n />\n\n <span className=\"map-layer-source-label\">{passwordLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n type=\"password\"\n placeholder={serverRequireCredentials ? passwordRequiredLabel : passwordLabel}\n status={(!password && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onPasswordChange}\n onKeyDown={handleOnKeyDown}\n value={password}\n size=\"small\"\n />\n </>\n )}\n\n {/* Store settings options, not shown when editing a layer */}\n {!props.signInModeArgs && !props.mapLayerSourceToEdit && (\n <div title={!isSettingsStorageAvailable ? noSaveSettingsWarning : \"\"}>\n {hasImodelContext && mapLayerOptions?.showUserPreferencesStorageOptions && (\n <UserPreferencesStorageOptions\n disabled={!isSettingsStorageAvailable}\n itwinChecked={settingsStorage === \"iTwin\"}\n modelChecked={settingsStorage === \"Model\"}\n onChange={onRadioChange}\n />\n )}\n </div>\n )}\n </div>\n <ModalButtonBar>\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {props?.mapLayerSourceToEdit ? MapLayersUI.translate(\"Dialog.Edit\") : MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-source-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </ModalButtonBar>\n </ModalContent>\n\n {/* Warning message */}\n {renderWarningMessage()}\n\n {/* Progress bar */}\n {(layerAttachPending || layerAuthPending) && (\n <div className=\"map-layer-source-progressBar\">\n <ProgressLinear indeterminate />\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"MapUrlDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.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 Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { BeEvent, Guid } from \"@itwin/core-bentley\";\nimport { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Input, LabeledInput, Modal, ModalButtonBar, ModalContent, ProgressLinear } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { CustomParamUtils } from \"../../CustomParamUtils\";\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SelectCustomParam } from \"./SelectCustomParam\";\nimport { SelectMapFormat } from \"./SelectMapFormat\";\nimport { UserPreferencesStorageOptions } from \"./UserPreferencesStorageOptions\";\nimport { useCrossOriginPopup } from \"../hooks/useCrossOriginPopup\";\n\nimport type { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerAccessClient, MapLayerSourceValidation, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions } from \"../Interfaces\";\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\nconst URL_SCHEMES = {\n http: \"http://\",\n https: \"https://\",\n};\n\nexport type LayerCreationMode = \"single\" | \"multiple\";\ninterface MapUrlDialogProps {\n activeViewport?: ScreenViewport;\n onOkResult: (result?: SourceState) => void;\n onCancelResult?: () => void;\n mapLayerOptions?: MapLayerOptions;\n\n // An optional layer definition can be provide to enable the edit mode\n signInModeArgs?: {\n layer: ImageMapLayerSettings;\n validation?: MapLayerSourceValidation;\n source?: MapLayerSource;\n };\n\n mapLayerSourceToEdit?: MapLayerSource;\n}\n\nexport interface SourceState {\n source: MapLayerSource;\n validation: MapLayerSourceValidation;\n customParamIdx?: { [key: string]: string };\n privateCustomParamIdx?: { [key: string]: string };\n}\n\nexport function MapUrlDialog(props: MapUrlDialogProps) {\n const { onOkResult, mapLayerOptions } = props;\n\n const getMapUrlFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.url;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.url;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getMapNameFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.name;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.name;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getFormatFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.formatId;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.formatId;\n }\n return undefined;\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getCustomParamsMapping = React.useCallback((url: string): string[] => {\n const cpMappingStorage = new CustomParamsMappingStorage();\n const cpMapping = cpMappingStorage.get(url.toLowerCase());\n if (cpMapping && !Array.isArray(cpMapping)) {\n return cpMapping.customParamNames;\n }\n return [];\n }, []);\n\n const [dialogTitle] = React.useState(\n MapLayersUI.localization.getLocalizedString(\n props.signInModeArgs || props.mapLayerSourceToEdit ? \"mapLayers:CustomAttach.EditCustomLayer\" : \"mapLayers:CustomAttach.AttachCustomLayer\",\n ),\n );\n const [typeLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Type\"));\n const [nameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Name\"));\n const [nameInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NameInputPlaceHolder\"));\n const [urlLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.URL\"));\n const [urlInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.UrlInputPlaceHolder\"));\n const [missingCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.MissingCredentials\"));\n const [invalidCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCredentials\"));\n const [externalLoginTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLogin\"));\n const [externalLoginFailedMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginFailed\"));\n const [externalLoginSucceededMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginSucceeded\"));\n const [externalLoginWaitingMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginWaiting\"));\n const [externalLoginTryAgainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginTryAgain\"));\n const [serverRequireCredentials, setServerRequireCredentials] = React.useState(false);\n const [invalidCredentialsProvided, setInvalidCredentialsProvided] = React.useState(false);\n const [layerAttachPending, setLayerAttachPending] = React.useState(false);\n const [layerAuthPending, setLayerAuthPending] = React.useState(false);\n const [mapUrl, setMapUrl] = React.useState(getMapUrlFromProps());\n const [mapName, setMapName] = React.useState(getMapNameFromProps());\n const [userName, setUserName] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [noSaveSettingsWarning] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NoSaveSettingsWarning\"));\n const [passwordLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Password\"));\n const [passwordRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.PasswordRequired\"));\n const [userNameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Username\"));\n const [userNameRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.UsernameRequired\"));\n const [settingsStorage, setSettingsStorageRadio] = React.useState(\"iTwin\");\n const [oauthProcessSucceeded, setOAuthProcessSucceeded] = React.useState<undefined | boolean>(undefined);\n const [showOauthPopup, setShowOauthPopup] = React.useState(false);\n const [externalLoginUrl, setExternalLoginUrl] = React.useState<string | undefined>();\n const [onOauthProcessEnd] = React.useState(new BeEvent());\n const [accessClient, setAccessClient] = React.useState<MapLayerAccessClient | undefined>();\n const [isAccessClientInitialized, setAccessClientInitialized] = React.useState(false);\n const [shouldAutoAttachSource, setShouldAutoAttachSource] = React.useState(true);\n const [incompatibleFormat, setIncompatibleFormat] = React.useState(false);\n\n const [mapType, setMapType] = React.useState(getFormatFromProps() ?? \"ArcGIS\");\n const [customParamNamesChangedByUser, SetCustomParamNamesChangedByUser] = React.useState<boolean>(false);\n const [customParamNames, setCustomParamNames] = React.useState<string[] | undefined>(() => {\n if (mapUrl) {\n return getCustomParamsMapping(mapUrl);\n }\n return undefined;\n });\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 const [isSettingsStorageAvailable] = React.useState(MapLayersUI.iTwinConfig && props?.activeViewport?.iModel?.iTwinId);\n const [hasImodelContext] = React.useState(\n props?.activeViewport?.iModel?.iTwinId !== undefined &&\n props.activeViewport.iModel.iTwinId !== Guid.empty &&\n props?.activeViewport?.iModel?.iModelId !== undefined &&\n props?.activeViewport.iModel.iModelId !== Guid.empty,\n );\n\n const handleCancel = React.useCallback(() => {\n if (props.onCancelResult) {\n props.onCancelResult();\n return;\n }\n }, [props]);\n\n const onUsernameChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setUserName(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setUserName, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const onPasswordChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setPassword(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setPassword, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const handleArcGisLogin = React.useCallback(() => {\n setLayerAuthPending(true);\n setShowOauthPopup(true);\n if (oauthProcessSucceeded === false) {\n setOAuthProcessSucceeded(undefined);\n }\n }, [oauthProcessSucceeded]);\n\n // return true if authorization is needed\n const updateAuthState = React.useCallback(\n async (source: MapLayerSource, sourceValidation: MapLayerSourceValidation) => {\n const sourceRequireAuth = sourceValidation.status === MapLayerSourceStatus.RequireAuth;\n let invalidCredentials = sourceValidation.status === MapLayerSourceStatus.InvalidCredentials;\n if (sourceRequireAuth) {\n let hasTokenEndPoint = false;\n const settings = source.toLayerSettings();\n\n if (accessClient !== undefined && accessClient.getTokenServiceEndPoint !== undefined && settings !== undefined) {\n try {\n const tokenEndpoint = await accessClient.getTokenServiceEndPoint(settings.url);\n if (tokenEndpoint !== undefined) {\n const loginUrl = tokenEndpoint.getLoginUrl();\n setExternalLoginUrl(loginUrl);\n hasTokenEndPoint = true;\n }\n } catch {}\n } else if (userName.length > 0 || password.length > 0) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n\n if (!hasTokenEndPoint && (userName.length > 0 || password.length > 0)) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n }\n setServerRequireCredentials(sourceRequireAuth || invalidCredentials);\n if (invalidCredentials) {\n setInvalidCredentialsProvided(true);\n } else if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false); // flag reset\n }\n\n return sourceRequireAuth || invalidCredentials;\n },\n [accessClient, invalidCredentialsProvided, password.length, userName.length],\n );\n\n const onNameChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setMapName(event.target.value);\n }, []);\n\n const onRadioChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSettingsStorageRadio(event.target.value);\n },\n [setSettingsStorageRadio],\n );\n\n const onUrlChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setMapUrl(value);\n\n if (!customParamNamesChangedByUser) {\n if (value === \"\") {\n setCustomParamNames(undefined);\n } else {\n const paramNames = getCustomParamsMapping(value);\n setCustomParamNames(paramNames);\n }\n }\n },\n [getCustomParamsMapping, customParamNamesChangedByUser],\n );\n\n const createSource = React.useCallback(\n (url: string) => {\n let source: MapLayerSource | undefined;\n if (url && mapName) {\n source = MapLayerSource.fromJSON({ url, name: mapName, formatId: mapType });\n\n // Set credentials separately since they are not part of JSON\n if (source) {\n source.userName = userName || undefined; // When there is no value, empty string is always returned, in this case force it to undefined,\n source.password = password || undefined;\n\n if (customParamNames) {\n CustomParamUtils.setSourceCustomParams(source, customParamNames);\n }\n }\n }\n return source;\n },\n [customParamNames, mapName, mapType, password, userName],\n );\n\n const handleOk = React.useCallback(() => {\n const mapUrlLow = mapUrl.toLowerCase();\n // Append 'https://' if url is missing scheme\n let url = mapUrl;\n if (!mapUrlLow.startsWith(URL_SCHEMES.http) && !mapUrlLow.startsWith(URL_SCHEMES.https)) {\n url = `${URL_SCHEMES.https}${mapUrl}`;\n setMapUrl(url);\n }\n\n const source = createSource(url);\n if (source === undefined || props.mapLayerSourceToEdit) {\n onOkResult();\n\n if (source === undefined) {\n // Close the dialog and inform end user something went wrong.\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerLayerSourceCreationFailed\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: msgError, sourceName: mapName });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n // Store custom params mapping\n if (customParamNames) {\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n }\n\n // Simply change the source definition in the setting service\n if (props.mapLayerSourceToEdit !== undefined) {\n // Apply changes to original source object\n props.mapLayerSourceToEdit.savedQueryParams = { ...source.savedQueryParams };\n props.mapLayerSourceToEdit.unsavedQueryParams = { ...source.unsavedQueryParams };\n\n const vp = props.activeViewport;\n void (async () => {\n if (isSettingsStorageAvailable && vp?.iModel?.iTwinId) {\n try {\n await MapLayerPreferences.replaceSource(props.mapLayerSourceToEdit!, source, vp.iModel.iTwinId, vp?.iModel.iModelId);\n } catch {\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerEditError\", {\n layerName: props.mapLayerSourceToEdit?.name,\n });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\n return;\n }\n }\n })();\n return;\n }\n }\n\n // Attach source asynchronously.\n void (async () => {\n try {\n setLayerAttachPending(true);\n const validation = await source.validateSource(true);\n\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n\n if (validation.status === MapLayerSourceStatus.Valid) {\n // Update service settings if storage is available and we are not prompting user for credentials\n if (isSettingsStorageAvailable && !props.signInModeArgs) {\n const storeOnIModel = hasImodelContext ? \"Model\" === settingsStorage : undefined;\n const vp = props.activeViewport;\n if (vp?.iModel.iTwinId && !(await MapLayerPreferences.storeSource(source, vp.iModel.iTwinId, vp.iModel.iModelId, storeOnIModel))) {\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerPreferencesStoreFailed\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msgError));\n }\n }\n\n // Link an API key to this map-layer URL\n const customParamIdx: { [key: string]: string } = {};\n const privateCustomParamIdx: { [key: string]: string } = {};\n if (customParamNames && customParamNames.length > 0) {\n // Link the map-layers URL custom params.\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n\n const cpStorage = new CustomParamsStorage();\n customParamNames.forEach((customParamName) => {\n const items = cpStorage.get(customParamName);\n if (items && !Array.isArray(items)) {\n (items.secret ? privateCustomParamIdx : customParamIdx)[items.key] = items.value;\n }\n });\n }\n\n onOkResult({ source, validation, customParamIdx, privateCustomParamIdx });\n } else if (validation.status === MapLayerSourceStatus.InvalidCoordinateSystem) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCoordinateSystem\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult({ source, validation });\n } else if (validation.status === MapLayerSourceStatus.IncompatibleFormat) {\n setIncompatibleFormat(true);\n } else {\n const authNeeded = await updateAuthState(source, validation);\n if (!authNeeded) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ValidationError\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} ${source.url}`));\n onOkResult({ source, validation });\n }\n }\n } catch (error) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source.name });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult();\n }\n })();\n }, [\n mapUrl,\n createSource,\n props.mapLayerSourceToEdit,\n props.activeViewport,\n props.signInModeArgs,\n onOkResult,\n customParamNames,\n mapName,\n isSettingsStorageAvailable,\n hasImodelContext,\n settingsStorage,\n updateAuthState,\n ]);\n\n React.useEffect(() => {\n const handleOAuthProcessEnd = (success: boolean, _state: any) => {\n onOauthProcessEnd.raiseEvent(success, _state);\n };\n\n const ac = IModelApp.mapLayerFormatRegistry.getAccessClient(mapType);\n if (ac?.onOAuthProcessEnd) {\n setAccessClient(ac); // cache it, so we don't need to make another lookup;\n ac.onOAuthProcessEnd.addListener(handleOAuthProcessEnd);\n }\n setAccessClientInitialized(true);\n return () => {\n if (ac?.onOAuthProcessEnd) {\n ac.onOAuthProcessEnd.removeListener(handleOAuthProcessEnd);\n }\n\n setAccessClient(undefined);\n setAccessClientInitialized(false);\n };\n }, [mapType, onOauthProcessEnd, setAccessClient]);\n\n const resetSignInState = React.useCallback(() => {\n setServerRequireCredentials(false);\n setInvalidCredentialsProvided(false);\n setShowOauthPopup(false);\n setOAuthProcessSucceeded(undefined);\n setExternalLoginUrl(undefined);\n }, []);\n\n // After a map type chang(or setting a new custom query Parameter), make sure the different Oauth states are reset.\n React.useEffect(() => {\n resetSignInState();\n }, [mapType, resetSignInState]);\n\n // After a map type change, make sure the different Oauth states are reset.\n React.useEffect(() => {\n setIncompatibleFormat(false);\n }, [mapType, mapUrl]);\n\n // The first time the dialog is loaded and we already know the layer requires auth. (i.e ImageryProvider already made an attempt)\n // makes a request to discover the authentification types and adjust UI accordingly (i.e. username/password fields, Oauth popup)\n // Without this effect, user would have to manually click the 'OK' button in order to trigger the layer connection.\n React.useEffect(() => {\n // Attach source asynchronously.\n void (async () => {\n if (isAccessClientInitialized && shouldAutoAttachSource && props.signInModeArgs !== undefined) {\n try {\n let source = props.signInModeArgs.source;\n let validation = props.signInModeArgs.validation;\n if (!source || !validation) {\n // In some cases we don't know why the layer failed to attach, so we need to go through validation process\n source = MapLayerSource.fromJSON({\n url: props.signInModeArgs.layer.url,\n name: props.signInModeArgs.layer.name,\n formatId: props.signInModeArgs.layer.formatId,\n });\n\n if (source !== undefined) {\n if (props.signInModeArgs.layer.savedQueryParams) {\n source.savedQueryParams = { ...props.signInModeArgs.layer.savedQueryParams };\n }\n if (props.signInModeArgs.layer.unsavedQueryParams) {\n source.unsavedQueryParams = { ...props.signInModeArgs.layer.unsavedQueryParams };\n }\n\n setLayerAttachPending(true);\n\n validation = await source.validateSource(true);\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n }\n }\n if (source && validation) {\n setShouldAutoAttachSource(false);\n await updateAuthState(source, validation);\n }\n } catch {}\n }\n })();\n }, [isAccessClientInitialized, props.signInModeArgs, shouldAutoAttachSource, updateAuthState]);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const readyToSave = React.useCallback(() => {\n const credentialsSet = !!userName && !!password;\n const ready =\n !!mapUrl &&\n !!mapName &&\n !layerAttachPending &&\n (!serverRequireCredentials || credentialsSet) &&\n !invalidCredentialsProvided &&\n !incompatibleFormat &&\n (externalLoginUrl === undefined || (externalLoginUrl !== undefined && oauthProcessSucceeded));\n return ready;\n }, [\n userName,\n password,\n mapUrl,\n mapName,\n layerAttachPending,\n serverRequireCredentials,\n invalidCredentialsProvided,\n incompatibleFormat,\n externalLoginUrl,\n oauthProcessSucceeded,\n ]);\n\n const handleOnKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n if (readyToSave()) {\n handleOk();\n }\n }\n },\n [handleOk, readyToSave],\n );\n\n // onOauthProcessEnd events handler\n React.useEffect(() => {\n const handleOauthProcess = (success: boolean, _state: any) => {\n setLayerAuthPending(false);\n if (success) {\n setOAuthProcessSucceeded(true);\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n handleOk(); // Add the layer the same way the user would do by clicking 'ok'\n } else {\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n setOAuthProcessSucceeded(false);\n }\n };\n\n onOauthProcessEnd.addListener(handleOauthProcess);\n return () => {\n onOauthProcessEnd.removeListener(handleOauthProcess);\n };\n }, [handleOk, onOauthProcessEnd]);\n\n //\n // Monitors authentication method changes\n React.useEffect(() => {\n if (serverRequireCredentials && oauthProcessSucceeded === undefined && externalLoginUrl !== undefined) {\n handleArcGisLogin();\n }\n }, [oauthProcessSucceeded, externalLoginUrl, handleArcGisLogin, serverRequireCredentials]);\n\n // Monitors Oauth2 popup was closed\n const handleOAuthPopupClose = React.useCallback(() => {\n setShowOauthPopup(false);\n setLayerAuthPending(false);\n if (oauthProcessSucceeded === undefined) {\n setOAuthProcessSucceeded(false);\n } // indicates there was a failed attempt\n }, [oauthProcessSucceeded]);\n\n // Utility function to get warning message section\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (showOauthPopup) {\n warningMessage = externalLoginWaitingMsg;\n } else if (oauthProcessSucceeded === false) {\n warningMessage = externalLoginFailedMsg;\n } else if (oauthProcessSucceeded === true) {\n warningMessage = externalLoginSucceededMsg;\n } else if (invalidCredentialsProvided) {\n warningMessage = invalidCredentialsLabel;\n } else if (serverRequireCredentials && (!userName || !password)) {\n warningMessage = missingCredentialsLabel;\n }\n\n // Sometimes we want to add an extra node, such as a button\n let extraNode: React.ReactNode;\n if (oauthProcessSucceeded === false) {\n extraNode = (\n <div>\n <Button onClick={handleArcGisLogin}>{externalLoginTryAgainLabel}</Button>\n </div>\n );\n }\n\n if (warningMessage !== undefined) {\n return (\n <div className=\"map-layer-source-warnMessage\">\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n {extraNode}\n </div>\n );\n } else {\n return <span className=\"map-layer-source-placeholder\">&nbsp;</span>;\n }\n }\n\n // Use a hook to display the popup.\n // The display of the popup is controlled by the 'showOauthPopup' state variable.\n useCrossOriginPopup(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-url-dialog\"\n title={dialogTitle}\n isOpen={true}\n onClose={handleCancel}\n style={{ minHeight: 120, maxWidth: 600 }}\n portal\n >\n <ModalContent>\n <div className=\"map-layer-source-url\">\n <span className=\"map-layer-source-label\">{typeLabel}</span>\n <SelectMapFormat\n value={mapType}\n disabled={props.signInModeArgs !== undefined || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n onChange={setMapType}\n mapTypesOptions={mapLayerOptions?.mapTypeOptions}\n status={incompatibleFormat ? \"warning\" : undefined}\n message={incompatibleFormat ? MapLayersUI.translate(\"CustomAttach.InvalidType\") : undefined}\n />\n <span className=\"map-layer-source-label\">{nameLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={nameInputPlaceHolder}\n onChange={onNameChange}\n value={mapName}\n disabled={!!props.signInModeArgs || layerAttachPending || layerAuthPending}\n />\n <span className=\"map-layer-source-label\">{urlLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={urlInputPlaceHolder}\n onKeyDown={handleOnKeyDown}\n onChange={onUrlChange}\n disabled={!!props.signInModeArgs || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n value={mapUrl}\n />\n <span className=\"map-layer-source-label\">\n {MapLayersUI.translate(\"CustomAttach.CustomParamsLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"map-layer-source-previewBadge-icon\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n <SelectCustomParam\n value={customParamNames}\n disabled={layerAttachPending || layerAuthPending}\n onChange={(paramNames) => {\n setCustomParamNames(paramNames);\n SetCustomParamNamesChangedByUser(true);\n resetSignInState();\n }}\n />\n\n {serverRequireCredentials &&\n externalLoginUrl === undefined && // external login is handled in popup\n props.mapLayerSourceToEdit === undefined && (\n <>\n <span className=\"map-layer-source-label\">{userNameLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n placeholder={serverRequireCredentials ? userNameRequiredLabel : userNameLabel}\n status={(!userName && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onUsernameChange}\n value={userName}\n size=\"small\"\n />\n\n <span className=\"map-layer-source-label\">{passwordLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n type=\"password\"\n placeholder={serverRequireCredentials ? passwordRequiredLabel : passwordLabel}\n status={(!password && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onPasswordChange}\n onKeyDown={handleOnKeyDown}\n value={password}\n size=\"small\"\n />\n </>\n )}\n\n {/* Store settings options, not shown when editing a layer */}\n {!props.signInModeArgs && !props.mapLayerSourceToEdit && (\n <div title={!isSettingsStorageAvailable ? noSaveSettingsWarning : \"\"}>\n {hasImodelContext && mapLayerOptions?.showUserPreferencesStorageOptions && (\n <UserPreferencesStorageOptions\n disabled={!isSettingsStorageAvailable}\n itwinChecked={settingsStorage === \"iTwin\"}\n modelChecked={settingsStorage === \"Model\"}\n onChange={onRadioChange}\n />\n )}\n </div>\n )}\n </div>\n <ModalButtonBar>\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {props?.mapLayerSourceToEdit ? MapLayersUI.translate(\"Dialog.Edit\") : MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-source-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </ModalButtonBar>\n </ModalContent>\n\n {/* Warning message */}\n {renderWarningMessage()}\n\n {/* Progress bar */}\n {(layerAttachPending || layerAuthPending) && (\n <div className=\"map-layer-source-progressBar\">\n <ProgressLinear indeterminate />\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"AAMA,OAAO,sBAAsB,CAAC;AAoC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAevE,MAAM,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CA0HtD"}
1
+ {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"AAMA,OAAO,sBAAsB,CAAC;AAmC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAsBvE,MAAM,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAsHtD"}