@itwin/map-layers 6.0.0-dev.5 → 6.0.0-dev.6

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 (98) hide show
  1. package/lib/cjs/BrowserStorage.js +2 -0
  2. package/lib/cjs/BrowserStorage.js.map +1 -1
  3. package/lib/cjs/MapLayerPreferences.js +8 -8
  4. package/lib/cjs/MapLayerPreferences.js.map +1 -1
  5. package/lib/cjs/PreferencesBrowserStorage.js +2 -0
  6. package/lib/cjs/PreferencesBrowserStorage.js.map +1 -1
  7. package/lib/cjs/mapLayers.js +4 -2
  8. package/lib/cjs/mapLayers.js.map +1 -1
  9. package/lib/cjs/public/locales/en/mapLayers.json +6 -1
  10. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +3 -2
  11. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  12. package/lib/cjs/ui/MapLayersUiItemsProvider.js +2 -1
  13. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  14. package/lib/cjs/ui/hooks/useCrossOriginPopup.js +1 -2
  15. package/lib/cjs/ui/hooks/useCrossOriginPopup.js.map +1 -1
  16. package/lib/cjs/ui/hooks/useInterval.js +1 -2
  17. package/lib/cjs/ui/hooks/useInterval.js.map +1 -1
  18. package/lib/cjs/ui/hooks/useResizeObserver.d.ts.map +1 -1
  19. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +2 -2
  20. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  21. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  22. package/lib/cjs/ui/widget/BasemapPanel.js +46 -18
  23. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  24. package/lib/cjs/ui/widget/ConfirmMessageDialog.js +1 -2
  25. package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
  26. package/lib/cjs/ui/widget/CustomParamEditDialog.js +1 -2
  27. package/lib/cjs/ui/widget/CustomParamEditDialog.js.map +1 -1
  28. package/lib/cjs/ui/widget/CustomParamsSettings.js +1 -2
  29. package/lib/cjs/ui/widget/CustomParamsSettings.js.map +1 -1
  30. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +34 -33
  31. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  32. package/lib/cjs/ui/widget/FeatureInfoWidget.js +2 -3
  33. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  34. package/lib/cjs/ui/widget/MapLayerDroppable.js +3 -4
  35. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  36. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  37. package/lib/cjs/ui/widget/MapLayerManager.js +19 -4
  38. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  39. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +1 -2
  40. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  41. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +1 -2
  42. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  43. package/lib/cjs/ui/widget/MapLayersWidget.js +1 -2
  44. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  45. package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js +1 -2
  46. package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js.map +1 -1
  47. package/lib/cjs/ui/widget/MapManagerSettings.js +1 -2
  48. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  49. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js +1 -2
  50. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
  51. package/lib/cjs/ui/widget/MapUrlDialog.js +2 -2
  52. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  53. package/lib/cjs/ui/widget/SelectApiKey.js +1 -2
  54. package/lib/cjs/ui/widget/SelectApiKey.js.map +1 -1
  55. package/lib/cjs/ui/widget/SelectCustomParam.js +1 -2
  56. package/lib/cjs/ui/widget/SelectCustomParam.js.map +1 -1
  57. package/lib/cjs/ui/widget/SelectMapFormat.js +2 -2
  58. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  59. package/lib/cjs/ui/widget/SubLayersDataProvider.js +2 -1
  60. package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
  61. package/lib/cjs/ui/widget/SubLayersPopupButton.js +1 -2
  62. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  63. package/lib/cjs/ui/widget/SubLayersTree.js +35 -26
  64. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  65. package/lib/cjs/ui/widget/TransparencyPopupButton.js +1 -2
  66. package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
  67. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js +1 -2
  68. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js.map +1 -1
  69. package/lib/esm/BrowserStorage.js +2 -0
  70. package/lib/esm/BrowserStorage.js.map +1 -1
  71. package/lib/esm/MapLayerPreferences.js +8 -8
  72. package/lib/esm/MapLayerPreferences.js.map +1 -1
  73. package/lib/esm/PreferencesBrowserStorage.js +2 -0
  74. package/lib/esm/PreferencesBrowserStorage.js.map +1 -1
  75. package/lib/esm/mapLayers.js +4 -2
  76. package/lib/esm/mapLayers.js.map +1 -1
  77. package/lib/esm/public/locales/en/mapLayers.json +6 -1
  78. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +3 -2
  79. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  80. package/lib/esm/ui/MapLayersUiItemsProvider.js +2 -1
  81. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  82. package/lib/esm/ui/hooks/useResizeObserver.d.ts.map +1 -1
  83. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  84. package/lib/esm/ui/widget/BasemapPanel.js +46 -17
  85. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  86. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +34 -33
  87. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  88. package/lib/esm/ui/widget/MapLayerDroppable.js +2 -2
  89. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  90. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  91. package/lib/esm/ui/widget/MapLayerManager.js +16 -1
  92. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  93. package/lib/esm/ui/widget/SubLayersDataProvider.js +2 -1
  94. package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
  95. package/lib/esm/ui/widget/SubLayersTree.js +33 -23
  96. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  97. package/lib/public/locales/en/mapLayers.json +6 -1
  98. package/package.json +35 -33
@@ -1 +1 @@
1
- {"version":3,"file":"MapSelectFeaturesDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapSelectFeaturesDialog.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 \"./MapSelectFeaturesDialog.scss\";\nimport * as React from \"react\";\nimport { SvgStatusWarning } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Modal, ModalContent } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SubLayersTree } from \"./SubLayersTree\";\n\nimport type { MapLayerSource } from \"@itwin/core-frontend\";\nimport type { MapSubLayerProps } from \"@itwin/core-common\";\nexport interface MapSelectFeaturesProps {\n source: MapLayerSource;\n subLayers: MapSubLayerProps[];\n handleOk: (subLayers: MapSubLayerProps[]) => void;\n handleCancel: () => void;\n}\nconst minHeight = 250;\nconst maxSubLayers = 30;\n\nexport function MapSelectFeaturesDialog(props: MapSelectFeaturesProps) {\n const [subLayers, setSubLayers] = React.useState(props.subLayers);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const handleOk = React.useCallback(() => {\n props.handleOk(subLayers);\n }, [props, subLayers]);\n\n const handleCancel = React.useCallback(() => {\n props.handleCancel();\n }, [props]);\n\n const hasVisibleLayers = () => subLayers.some((entry) => entry.visible);\n const hasTooManyVisibleLayers = () => subLayers.filter((entry) => entry.visible).length > maxSubLayers;\n const readyToSave = () => hasVisibleLayers();\n\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (!hasVisibleLayers()) {\n warningMessage = MapLayersUI.translate(\"CustomAttach.NoLayersSelected\");\n } else if (hasTooManyVisibleLayers()) {\n warningMessage = MapLayersUI.translate(\"CustomAttach.TooManyLayersSelected\", { layerCount: subLayers.filter((entry) => entry.visible).length });\n }\n\n return (\n <div className=\"map-layer-source-warnMessage\">\n {warningMessage !== undefined && (\n <>\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n </>\n )}\n </div>\n );\n }\n\n function getFooter() {\n return (\n <div className=\"map-layer-features-footer\">\n <div className=\"map-layer-features-footer-warnMessage\">{renderWarningMessage()}</div>\n\n <div className=\"map-layer-features-footer-buttons\">\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-features-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-select-features-dialog\"\n title={MapLayersUI.translate(\"CustomAttach.SelectLayersToCreate\")}\n isOpen={true}\n onClose={handleCancel}\n style={{ minHeight, maxWidth: 600 }}\n portal\n >\n {/* 'onSubLayerStateChange' is used to trigger hook state change only, no need to update subLayer objects */}\n <ModalContent>\n <SubLayersTree expandMode=\"full\" checkboxStyle=\"standard\" subLayers={subLayers} onSubLayerStateChange={() => setSubLayers([...subLayers])} />\n {getFooter()}\n </ModalContent>\n </Modal>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"MapSelectFeaturesDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapSelectFeaturesDialog.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 \"./MapSelectFeaturesDialog.scss\";\nimport * as React from \"react\";\nimport { SvgStatusWarning } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Modal, ModalContent } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SubLayersTree } from \"./SubLayersTree\";\n\nimport type { MapLayerSource } from \"@itwin/core-frontend\";\nimport type { MapSubLayerProps } from \"@itwin/core-common\";\nexport interface MapSelectFeaturesProps {\n source: MapLayerSource;\n subLayers: MapSubLayerProps[];\n handleOk: (subLayers: MapSubLayerProps[]) => void;\n handleCancel: () => void;\n}\nconst minHeight = 250;\nconst maxSubLayers = 30;\n\nexport function MapSelectFeaturesDialog(props: MapSelectFeaturesProps) {\n const [subLayers, setSubLayers] = React.useState(props.subLayers);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const handleOk = React.useCallback(() => {\n props.handleOk(subLayers);\n }, [props, subLayers]);\n\n const handleCancel = React.useCallback(() => {\n props.handleCancel();\n }, [props]);\n\n const hasVisibleLayers = () => subLayers.some((entry) => entry.visible);\n const hasTooManyVisibleLayers = () => subLayers.filter((entry) => entry.visible).length > maxSubLayers;\n const readyToSave = () => hasVisibleLayers();\n\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (!hasVisibleLayers()) {\n warningMessage = MapLayersUI.translate(\"CustomAttach.NoLayersSelected\");\n } else if (hasTooManyVisibleLayers()) {\n warningMessage = MapLayersUI.translate(\"CustomAttach.TooManyLayersSelected\", { layerCount: subLayers.filter((entry) => entry.visible).length });\n }\n\n return (\n <div className=\"map-layer-source-warnMessage\">\n {warningMessage !== undefined && (\n <>\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n </>\n )}\n </div>\n );\n }\n\n function getFooter() {\n return (\n <div className=\"map-layer-features-footer\">\n <div className=\"map-layer-features-footer-warnMessage\">{renderWarningMessage()}</div>\n\n <div className=\"map-layer-features-footer-buttons\">\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-features-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-select-features-dialog\"\n title={MapLayersUI.translate(\"CustomAttach.SelectLayersToCreate\")}\n isOpen={true}\n onClose={handleCancel}\n style={{ minHeight, maxWidth: 600 }}\n portal\n >\n {/* 'onSubLayerStateChange' is used to trigger hook state change only, no need to update subLayer objects */}\n <ModalContent>\n <SubLayersTree expandMode=\"full\" checkboxStyle=\"standard\" subLayers={subLayers} onSubLayerStateChange={() => setSubLayers([...subLayers])} />\n {getFooter()}\n </ModalContent>\n </Modal>\n </div>\n );\n}\n"]}
@@ -23,7 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.MapUrlDialog = exports.MAP_TYPES = void 0;
26
+ exports.MAP_TYPES = void 0;
27
+ exports.MapUrlDialog = MapUrlDialog;
27
28
  const jsx_runtime_1 = require("react/jsx-runtime");
28
29
  /*---------------------------------------------------------------------------------------------
29
30
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -544,5 +545,4 @@ function MapUrlDialog(props) {
544
545
  externalLoginUrl === undefined && // external login is handled in popup
545
546
  props.mapLayerSourceToEdit === undefined && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { className: "map-layer-source-label", children: userNameLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.LabeledInput, { className: "map-layer-source-input", displayStyle: "inline", placeholder: serverRequireCredentials ? userNameRequiredLabel : userNameLabel, status: (!userName && serverRequireCredentials) || invalidCredentialsProvided ? "warning" : undefined, disabled: layerAttachPending || layerAuthPending, onChange: onUsernameChange, value: userName, size: "small" }), (0, jsx_runtime_1.jsx)("span", { className: "map-layer-source-label", children: passwordLabel }), (0, jsx_runtime_1.jsx)(itwinui_react_1.LabeledInput, { className: "map-layer-source-input", displayStyle: "inline", type: "password", placeholder: serverRequireCredentials ? passwordRequiredLabel : passwordLabel, status: (!password && serverRequireCredentials) || invalidCredentialsProvided ? "warning" : undefined, disabled: layerAttachPending || layerAuthPending, onChange: onPasswordChange, onKeyDown: handleOnKeyDown, value: password, size: "small" })] })), !props.signInModeArgs && !props.mapLayerSourceToEdit && ((0, jsx_runtime_1.jsx)("div", { title: !isSettingsStorageAvailable ? noSaveSettingsWarning : "", children: hasImodelContext && mapLayerOptions?.showUserPreferencesStorageOptions && ((0, jsx_runtime_1.jsx)(UserPreferencesStorageOptions_1.UserPreferencesStorageOptions, { disabled: !isSettingsStorageAvailable, itwinChecked: settingsStorage === "iTwin", modelChecked: settingsStorage === "Model", onChange: onRadioChange })) }))] }), (0, jsx_runtime_1.jsxs)(itwinui_react_1.ModalButtonBar, { children: [(0, jsx_runtime_1.jsx)(itwinui_react_1.Button, { className: "map-layer-features-footer-button", styleType: "high-visibility", onClick: handleOk, disabled: !readyToSave(), children: props?.mapLayerSourceToEdit ? mapLayers_1.MapLayersUI.translate("Dialog.Edit") : mapLayers_1.MapLayersUI.translate("Dialog.Add") }), (0, jsx_runtime_1.jsx)(itwinui_react_1.Button, { className: "map-layer-source-footer-button", styleType: "default", onClick: handleCancel, children: mapLayers_1.MapLayersUI.translate("Dialog.Cancel") })] })] }), renderWarningMessage(), (layerAttachPending || layerAuthPending) && ((0, jsx_runtime_1.jsx)("div", { className: "map-layer-source-progressBar", children: (0, jsx_runtime_1.jsx)(itwinui_react_1.ProgressLinear, { indeterminate: true }) }))] }) }));
546
547
  }
547
- exports.MapUrlDialog = MapUrlDialog;
548
548
  //# sourceMappingURL=MapUrlDialog.js.map
@@ -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 { 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
+ {"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"]}
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.SelectApiKey = void 0;
26
+ exports.SelectApiKey = SelectApiKey;
27
27
  const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  /*---------------------------------------------------------------------------------------------
29
29
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -62,5 +62,4 @@ function SelectApiKey(props) {
62
62
  }, []);
63
63
  return ((0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { className: "map-layer-source-select", options: apiKeys, value: keyValue, disabled: props.disabled, onChange: handleOnChange, size: "small", onKeyDown: handleKeyDown }));
64
64
  }
65
- exports.SelectApiKey = SelectApiKey;
66
65
  //# sourceMappingURL=SelectApiKey.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectApiKey.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectApiKey.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,wDAA8C;AAC9C,mEAAgE;AAQhE,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAqB,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhF,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,yCAAmB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC1B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsB,EAAE,EAAE;QACjE,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACjD,WAAW,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,uBAAC,sBAAM,IACL,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,aAAa,GACxB,CACH,CAAC;AACJ,CAAC;AA7CD,oCA6CC","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 { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\n\ninterface SelectApiKeyProps {\n value?: string;\n disabled?: boolean;\n onChange?: (value: string) => void;\n}\n\nexport function SelectApiKey(props: SelectApiKeyProps) {\n const [keyValue, setKeyValue] = React.useState<string | undefined>(props.value);\n\n const [apiKeys] = React.useState(() => {\n const storage = new CustomParamsStorage();\n const keys = storage.get(undefined);\n if (keys && Array.isArray(keys)) {\n return keys.map((keyItem) => {\n return { value: keyItem.name, label: keyItem.name };\n });\n }\n return [];\n });\n\n React.useEffect(() => {\n setKeyValue(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setKeyValue(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setKeyValue(undefined);\n }\n }, []);\n\n return (\n <Select\n className=\"map-layer-source-select\"\n options={apiKeys}\n value={keyValue}\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"SelectApiKey.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectApiKey.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,oCA6CC;;AA9DD;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,wDAA8C;AAC9C,mEAAgE;AAQhE,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAqB,KAAK,CAAC,KAAK,CAAC,CAAC;IAEhF,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,IAAI,yCAAmB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC1B,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAElB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsB,EAAE,EAAE;QACjE,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;YACjD,WAAW,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,uBAAC,sBAAM,IACL,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,EACZ,SAAS,EAAE,aAAa,GACxB,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\n\ninterface SelectApiKeyProps {\n value?: string;\n disabled?: boolean;\n onChange?: (value: string) => void;\n}\n\nexport function SelectApiKey(props: SelectApiKeyProps) {\n const [keyValue, setKeyValue] = React.useState<string | undefined>(props.value);\n\n const [apiKeys] = React.useState(() => {\n const storage = new CustomParamsStorage();\n const keys = storage.get(undefined);\n if (keys && Array.isArray(keys)) {\n return keys.map((keyItem) => {\n return { value: keyItem.name, label: keyItem.name };\n });\n }\n return [];\n });\n\n React.useEffect(() => {\n setKeyValue(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setKeyValue(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setKeyValue(undefined);\n }\n }, []);\n\n return (\n <Select\n className=\"map-layer-source-select\"\n options={apiKeys}\n value={keyValue}\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n />\n );\n}\n"]}
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.SelectCustomParam = void 0;
26
+ exports.SelectCustomParam = SelectCustomParam;
27
27
  const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  /*---------------------------------------------------------------------------------------------
29
29
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -73,5 +73,4 @@ function SelectCustomParam(props) {
73
73
  }, []);
74
74
  return ((0, jsx_runtime_1.jsx)("div", { className: "map-layer-custom-param-select", title: customParams.length === 0 ? mapLayers_1.MapLayersUI.translate("CustomParamSelect.DisabledTitle") : undefined, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { className: "map-layer-source-select", options: customParams, value: paramValues, disabled: props.disabled || customParams.length === 0, menuStyle: { zIndex: 100000 }, onChange: handleOnChange, size: "small", onKeyDown: handleKeyDown, multiple: true }) }));
75
75
  }
76
- exports.SelectCustomParam = SelectCustomParam;
77
76
  //# sourceMappingURL=SelectCustomParam.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCustomParam.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.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 { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\nimport type { SelectValueChangeEvent } from \"@itwin/itwinui-react\";\n\ninterface SelectCustomParamProps {\n value?: string[];\n disabled?: boolean;\n onChange?: (value: string[]) => void;\n}\n\nexport function SelectCustomParam(props: SelectCustomParamProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n\n const [paramValues, setParamValues] = React.useState<string[] | undefined>(props.value);\n\n const getCustomParamsFromStorage = React.useCallback(() => {\n const params = storage.get(undefined);\n return params && Array.isArray(params)\n ? params.map((item) => {\n return { value: item.name, label: item.name };\n })\n : [];\n }, [storage]);\n\n const [customParams] = React.useState(() => getCustomParamsFromStorage());\n\n React.useEffect(() => {\n setParamValues(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (val: string, event: SelectValueChangeEvent) => {\n const stateSetter = (prev: string[] | undefined) => {\n const getValue = (): string[] => {\n if (!prev) {\n return [val];\n }\n\n return event === \"removed\" ? prev.filter((v) => val !== v) : [...prev, val];\n };\n const value = getValue();\n if (props.onChange) {\n props.onChange(value);\n }\n return value;\n };\n setParamValues(stateSetter);\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setParamValues(undefined);\n }\n }, []);\n\n return (\n <div className=\"map-layer-custom-param-select\" title={customParams.length === 0 ? MapLayersUI.translate(\"CustomParamSelect.DisabledTitle\") : undefined}>\n <Select<string>\n className=\"map-layer-source-select\"\n options={customParams}\n value={paramValues}\n disabled={props.disabled || customParams.length === 0}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n multiple\n ></Select>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SelectCustomParam.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.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 { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\nimport type { SelectValueChangeEvent } from \"@itwin/itwinui-react\";\n\ninterface SelectCustomParamProps {\n value?: string[];\n disabled?: boolean;\n onChange?: (value: string[]) => void;\n}\n\nexport function SelectCustomParam(props: SelectCustomParamProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n\n const [paramValues, setParamValues] = React.useState<string[] | undefined>(props.value);\n\n const getCustomParamsFromStorage = React.useCallback(() => {\n const params = storage.get(undefined);\n return params && Array.isArray(params)\n ? params.map((item) => {\n return { value: item.name, label: item.name };\n })\n : [];\n }, [storage]);\n\n const [customParams] = React.useState(() => getCustomParamsFromStorage());\n\n React.useEffect(() => {\n setParamValues(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (val: string, event: SelectValueChangeEvent) => {\n const stateSetter = (prev: string[] | undefined) => {\n const getValue = (): string[] => {\n if (!prev) {\n return [val];\n }\n\n return event === \"removed\" ? prev.filter((v) => val !== v) : [...prev, val];\n };\n const value = getValue();\n if (props.onChange) {\n props.onChange(value);\n }\n return value;\n };\n setParamValues(stateSetter);\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setParamValues(undefined);\n }\n }, []);\n\n return (\n <div className=\"map-layer-custom-param-select\" title={customParams.length === 0 ? MapLayersUI.translate(\"CustomParamSelect.DisabledTitle\") : undefined}>\n <Select<string>\n className=\"map-layer-source-select\"\n options={customParams}\n value={paramValues}\n disabled={props.disabled || customParams.length === 0}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n multiple\n ></Select>\n </div>\n );\n}\n"]}
@@ -23,7 +23,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.SelectMapFormat = exports.MAP_TYPES = void 0;
26
+ exports.MAP_TYPES = void 0;
27
+ exports.SelectMapFormat = SelectMapFormat;
27
28
  const jsx_runtime_1 = require("react/jsx-runtime");
28
29
  /*---------------------------------------------------------------------------------------------
29
30
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -69,5 +70,4 @@ function SelectMapFormat(props) {
69
70
  }, [props]);
70
71
  return ((0, jsx_runtime_1.jsx)(itwinui_react_1.LabeledSelect, { className: "map-layer-source-select", options: mapFormats, value: mapFormat, menuStyle: { zIndex: 100000 }, disabled: props.disabled, onChange: handleOnChange, size: "small" }));
71
72
  }
72
- exports.SelectMapFormat = SelectMapFormat;
73
73
  //# sourceMappingURL=SelectMapFormat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectMapFormat.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,wDAAiD;AACjD,wDAAqD;AAKrD,QAAQ;AACR,wEAAwE;AACxE,4EAA4E;AAC5E,wDAAwD;AAC3C,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC;AAkBF,SAAgB,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,iBAAS,CAAC,MAAM,CAAC,CAAC;IAElF,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAA2B,EAAE;QAC/D,MAAM,OAAO,GAA2B;YACtC,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE;YACpD,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE;YAC9C,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE;SACjD,CAAC;QACF,IAAI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,yBAAS,CAAC,sBAAsB,CAAC,YAAY,CAAC,iBAAS,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,uBAAC,6BAAa,IACZ,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,GACZ,CACH,CAAC;AACJ,CAAC;AAxCD,0CAwCC","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 { IModelApp } from \"@itwin/core-frontend\";\nimport { LabeledSelect } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { MapTypesOptions } from \"../Interfaces\";\n\n// TODO:\n// Remove this structure and iterate over the registry's active formats.\n// Still need a proper way to exclude some format, like we currently do with\n// 'TileUrl' without the need to hardcode any format Id.\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\n\ninterface SelectMapFormatProps {\n value?: string;\n disabled?: boolean;\n mapTypesOptions?: MapTypesOptions;\n onChange?: (mapType: string) => void;\n /**\n * Message below the select. Does not apply to 'inline' select.\n */\n message?: React.ReactNode;\n /**\n * Status of the select.\n * @default ''\n */\n status?: \"positive\" | \"warning\" | \"negative\";\n}\n\nexport function SelectMapFormat(props: SelectMapFormatProps) {\n const [mapFormat, setMapFormat] = React.useState(props.value ?? MAP_TYPES.arcGis);\n\n const [mapFormats] = React.useState((): SelectOption<string>[] => {\n const formats: SelectOption<string>[] = [\n { value: MAP_TYPES.arcGis, label: MAP_TYPES.arcGis },\n { value: MAP_TYPES.wms, label: MAP_TYPES.wms },\n { value: MAP_TYPES.wmts, label: MAP_TYPES.wmts },\n ];\n if (props.mapTypesOptions?.supportTileUrl) {\n formats.push({ value: MAP_TYPES.tileUrl, label: MAP_TYPES.tileUrl });\n }\n\n if (IModelApp.mapLayerFormatRegistry.isRegistered(MAP_TYPES.arcGisFeature)) {\n formats.push({ value: MAP_TYPES.arcGisFeature, label: MAP_TYPES.arcGisFeature });\n }\n return formats;\n });\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setMapFormat(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n return (\n <LabeledSelect\n className=\"map-layer-source-select\"\n options={mapFormats}\n value={mapFormat}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n />\n );\n}\n"]}
1
+ {"version":3,"file":"SelectMapFormat.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,0CAwCC;;AAlFD;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,wDAAiD;AACjD,wDAAqD;AAKrD,QAAQ;AACR,wEAAwE;AACxE,4EAA4E;AAC5E,wDAAwD;AAC3C,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC;AAkBF,SAAgB,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,iBAAS,CAAC,MAAM,CAAC,CAAC;IAElF,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAA2B,EAAE;QAC/D,MAAM,OAAO,GAA2B;YACtC,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE;YACpD,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE;YAC9C,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE;SACjD,CAAC;QACF,IAAI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,yBAAS,CAAC,sBAAsB,CAAC,YAAY,CAAC,iBAAS,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,uBAAC,6BAAa,IACZ,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,GACZ,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { LabeledSelect } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { MapTypesOptions } from \"../Interfaces\";\n\n// TODO:\n// Remove this structure and iterate over the registry's active formats.\n// Still need a proper way to exclude some format, like we currently do with\n// 'TileUrl' without the need to hardcode any format Id.\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\n\ninterface SelectMapFormatProps {\n value?: string;\n disabled?: boolean;\n mapTypesOptions?: MapTypesOptions;\n onChange?: (mapType: string) => void;\n /**\n * Message below the select. Does not apply to 'inline' select.\n */\n message?: React.ReactNode;\n /**\n * Status of the select.\n * @default ''\n */\n status?: \"positive\" | \"warning\" | \"negative\";\n}\n\nexport function SelectMapFormat(props: SelectMapFormatProps) {\n const [mapFormat, setMapFormat] = React.useState(props.value ?? MAP_TYPES.arcGis);\n\n const [mapFormats] = React.useState((): SelectOption<string>[] => {\n const formats: SelectOption<string>[] = [\n { value: MAP_TYPES.arcGis, label: MAP_TYPES.arcGis },\n { value: MAP_TYPES.wms, label: MAP_TYPES.wms },\n { value: MAP_TYPES.wmts, label: MAP_TYPES.wmts },\n ];\n if (props.mapTypesOptions?.supportTileUrl) {\n formats.push({ value: MAP_TYPES.tileUrl, label: MAP_TYPES.tileUrl });\n }\n\n if (IModelApp.mapLayerFormatRegistry.isRegistered(MAP_TYPES.arcGisFeature)) {\n formats.push({ value: MAP_TYPES.arcGisFeature, label: MAP_TYPES.arcGisFeature });\n }\n return formats;\n });\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setMapFormat(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n return (\n <LabeledSelect\n className=\"map-layer-source-select\"\n options={mapFormats}\n value={mapFormat}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n />\n );\n}\n"]}
@@ -12,8 +12,9 @@ const components_react_1 = require("@itwin/components-react");
12
12
  * Data provider that returns some fake nodes to show in tree.
13
13
  */
14
14
  class SubLayersDataProvider {
15
+ _nodeMap = new Map();
16
+ _expandMode;
15
17
  constructor(subLayers, expandMode = "rootGroupOnly") {
16
- this._nodeMap = new Map();
17
18
  this._expandMode = expandMode;
18
19
  this.loadNodes(subLayers);
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersDataProvider.ts"],"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 { compareStringsOrUndefined } from \"@itwin/core-bentley\";\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { CheckBoxState } from \"@itwin/components-react\";\nimport type { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport type { DelayLoadedTreeNodeItem, ITreeDataProvider, TreeNodeItem } from \"@itwin/components-react\";\nexport type SubLayersTreeExpandMode = \"full\" | \"rootGroupOnly\";\n\n/**\n * Data provider that returns some fake nodes to show in tree.\n */\nexport class SubLayersDataProvider implements ITreeDataProvider {\n private readonly _nodeMap = new Map<string, TreeNodeItem[]>();\n private readonly _expandMode;\n\n constructor(subLayers: MapSubLayerProps[], expandMode: SubLayersTreeExpandMode = \"rootGroupOnly\") {\n this._expandMode = expandMode;\n this.loadNodes(subLayers);\n }\n\n public static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer) {\n return false;\n }\n\n return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;\n }\n\n private createId(props: MapSubLayerProps): string {\n return undefined !== props.id ? `${props.id}` : props.name ? props.name : \"no-id\";\n }\n\n private createNode(props: MapSubLayerProps, expanded?: boolean, isCheckboxDisabled?: boolean, icon?: string): DelayLoadedTreeNodeItem {\n return {\n id: this.createId(props),\n label: PropertyRecord.fromString(props.title ?? props.name ?? \"unknown\"),\n hasChildren: !!props.children,\n isCheckboxVisible: true,\n checkBoxState: props.visible && !isCheckboxDisabled ? CheckBoxState.On : CheckBoxState.Off,\n extendedData: { subLayerId: props.id },\n isCheckboxDisabled,\n autoExpand: expanded,\n icon,\n };\n }\n\n private loadChildNodes(allSubLayers: MapSubLayerProps[], parentId?: SubLayerId) {\n const filteredProps = allSubLayers.filter((props) => parentId === props.parent);\n if (filteredProps.length) {\n filteredProps?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n const treeNodes: TreeNodeItem[] = [];\n\n filteredProps.forEach((props) => {\n treeNodes.push(\n this.createNode(\n props,\n this._expandMode === \"full\" ? true : !parentId && props?.children !== undefined ? true : undefined,\n undefined,\n SubLayersDataProvider.isUnnamedGroup(props) ? \"icon-folder\" : \"icon-layers\",\n ),\n );\n if (props.children) {\n this.loadChildNodes(allSubLayers, props.id);\n }\n });\n\n this._nodeMap.set(undefined !== parentId ? `${parentId}` : \"\", treeNodes);\n }\n }\n\n private loadNodes(subLayerNodes: MapSubLayerProps[] | undefined) {\n subLayerNodes?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n if (subLayerNodes) {\n this.loadChildNodes(subLayerNodes, undefined);\n }\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray.length;\n }\n\n return 0;\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray;\n }\n\n return [];\n }\n}\n"]}
1
+ {"version":3,"file":"SubLayersDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersDataProvider.ts"],"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 { compareStringsOrUndefined } from \"@itwin/core-bentley\";\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { CheckBoxState } from \"@itwin/components-react\";\nimport type { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport type { DelayLoadedTreeNodeItem, ITreeDataProvider, TreeNodeItem } from \"@itwin/components-react\";\nexport type SubLayersTreeExpandMode = \"full\" | \"rootGroupOnly\";\n\n/**\n * Data provider that returns some fake nodes to show in tree.\n */\nexport class SubLayersDataProvider implements ITreeDataProvider {\n private readonly _nodeMap = new Map<string, TreeNodeItem[]>();\n private readonly _expandMode;\n\n constructor(subLayers: MapSubLayerProps[], expandMode: SubLayersTreeExpandMode = \"rootGroupOnly\") {\n this._expandMode = expandMode;\n this.loadNodes(subLayers);\n }\n\n public static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer) {\n return false;\n }\n\n return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;\n }\n\n private createId(props: MapSubLayerProps): string {\n return undefined !== props.id ? `${props.id}` : props.name ? props.name : \"no-id\";\n }\n\n private createNode(props: MapSubLayerProps, expanded?: boolean, isCheckboxDisabled?: boolean, icon?: string): DelayLoadedTreeNodeItem {\n return {\n id: this.createId(props),\n label: PropertyRecord.fromString(props.title ?? props.name ?? \"unknown\"),\n hasChildren: !!props.children,\n isCheckboxVisible: true,\n checkBoxState: props.visible && !isCheckboxDisabled ? CheckBoxState.On : CheckBoxState.Off,\n extendedData: { subLayerId: props.id },\n isCheckboxDisabled,\n autoExpand: expanded,\n icon,\n };\n }\n\n private loadChildNodes(allSubLayers: MapSubLayerProps[], parentId?: SubLayerId) {\n const filteredProps = allSubLayers.filter((props) => parentId === props.parent);\n if (filteredProps.length) {\n filteredProps?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n const treeNodes: TreeNodeItem[] = [];\n\n filteredProps.forEach((props) => {\n treeNodes.push(\n this.createNode(\n props,\n this._expandMode === \"full\" ? true : !parentId && props?.children !== undefined ? true : undefined,\n undefined,\n SubLayersDataProvider.isUnnamedGroup(props) ? \"icon-folder\" : \"icon-layers\",\n ),\n );\n if (props.children) {\n this.loadChildNodes(allSubLayers, props.id);\n }\n });\n\n this._nodeMap.set(undefined !== parentId ? `${parentId}` : \"\", treeNodes);\n }\n }\n\n private loadNodes(subLayerNodes: MapSubLayerProps[] | undefined) {\n subLayerNodes?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n if (subLayerNodes) {\n this.loadChildNodes(subLayerNodes, undefined);\n }\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray.length;\n }\n\n return 0;\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray;\n }\n\n return [];\n }\n}\n"]}
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.SubLayersPopupButton = void 0;
26
+ exports.SubLayersPopupButton = SubLayersPopupButton;
27
27
  const jsx_runtime_1 = require("react/jsx-runtime");
28
28
  /*---------------------------------------------------------------------------------------------
29
29
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
@@ -45,5 +45,4 @@ function SubLayersPopupButton(props) {
45
45
  }, [popupOpen]);
46
46
  return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Popover, { content: (0, jsx_runtime_1.jsx)("div", { className: "map-transparency-popup-panel", children: (0, jsx_runtime_1.jsx)("div", { className: "map-manager-sublayer-panel", children: (0, jsx_runtime_1.jsx)(SubLayersTree_1.SubLayersPanel, { ...props, width: 390, height: 350 }) }) }), visible: popupOpen, onVisibleChange: setPopupOpen, placement: "bottom-end", applyBackground: true, positionReference: buttonRef.current ?? undefined, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { size: "small", styleType: "borderless", ref: buttonRef, className: "map-manager-item-sub-layer-button", label: popupOpen ? hideSubLayersLabel : showSubLayersLabel, onClick: togglePopup, children: (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgLayers, {}) }) }) }));
47
47
  }
48
- exports.SubLayersPopupButton = SubLayersPopupButton;
49
48
  //# sourceMappingURL=SubLayersPopupButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gGAGgG;AAChG,6CAA+B;AAC/B,oEAAuD;AACvD,wDAA2D;AAC3D,+CAA8C;AAC9C,mDAAiD;AASjD,gBAAgB;AAChB,SAAgB,oBAAoB,CAAC,KAAgC;IACnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACL,2DACE,uBAAC,uBAAO,IACN,OAAO,EACL,gCAAK,SAAS,EAAC,8BAA8B,YAC3C,gCAAK,SAAS,EAAC,4BAA4B,YACzC,uBAAC,8BAAc,OAAK,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAI,GAClD,GACF,EAER,OAAO,EAAE,SAAS,EAClB,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAC,YAAY,EACtB,eAAe,QACf,iBAAiB,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS,YAEjD,uBAAC,0BAAU,IACT,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,YAAY,EACtB,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,EAC1D,OAAO,EAAE,WAAW,YAEpB,uBAAC,+BAAS,KAAG,GACF,GACL,GACT,CACJ,CAAC;AACJ,CAAC;AAvCD,oDAuCC","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 { SvgLayers } from \"@itwin/itwinui-icons-react\";\nimport { IconButton, Popover } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SubLayersPanel } from \"./SubLayersTree\";\n\nimport type { SubLayersPanelProps } from \"./SubLayersTree\";\n// cSpell:ignore droppable Sublayer\n\n/** @internal */\n\nexport type SubLayersPopupButtonProps = SubLayersPanelProps;\n\n/** @internal */\nexport function SubLayersPopupButton(props: SubLayersPopupButtonProps) {\n const [showSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Show\"));\n const [hideSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Hide\"));\n const [popupOpen, setPopupOpen] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const togglePopup = React.useCallback(() => {\n setPopupOpen(!popupOpen);\n }, [popupOpen]);\n\n return (\n <>\n <Popover\n content={\n <div className=\"map-transparency-popup-panel\">\n <div className=\"map-manager-sublayer-panel\">\n <SubLayersPanel {...props} width={390} height={350} />\n </div>\n </div>\n }\n visible={popupOpen}\n onVisibleChange={setPopupOpen}\n placement=\"bottom-end\"\n applyBackground\n positionReference={buttonRef.current ?? undefined}\n >\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n ref={buttonRef}\n className=\"map-manager-item-sub-layer-button\"\n label={popupOpen ? hideSubLayersLabel : showSubLayersLabel}\n onClick={togglePopup}\n >\n <SvgLayers />\n </IconButton>\n </Popover>\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"SubLayersPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,oDAuCC;;AAzDD;;;gGAGgG;AAChG,6CAA+B;AAC/B,oEAAuD;AACvD,wDAA2D;AAC3D,+CAA8C;AAC9C,mDAAiD;AASjD,gBAAgB;AAChB,SAAgB,oBAAoB,CAAC,KAAgC;IACnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,OAAO,CACL,2DACE,uBAAC,uBAAO,IACN,OAAO,EACL,gCAAK,SAAS,EAAC,8BAA8B,YAC3C,gCAAK,SAAS,EAAC,4BAA4B,YACzC,uBAAC,8BAAc,OAAK,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAI,GAClD,GACF,EAER,OAAO,EAAE,SAAS,EAClB,eAAe,EAAE,YAAY,EAC7B,SAAS,EAAC,YAAY,EACtB,eAAe,QACf,iBAAiB,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS,YAEjD,uBAAC,0BAAU,IACT,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,YAAY,EACtB,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,EAC1D,OAAO,EAAE,WAAW,YAEpB,uBAAC,+BAAS,KAAG,GACF,GACL,GACT,CACJ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\nimport { SvgLayers } from \"@itwin/itwinui-icons-react\";\nimport { IconButton, Popover } from \"@itwin/itwinui-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SubLayersPanel } from \"./SubLayersTree\";\n\nimport type { SubLayersPanelProps } from \"./SubLayersTree\";\n// cSpell:ignore droppable Sublayer\n\n/** @internal */\n\nexport type SubLayersPopupButtonProps = SubLayersPanelProps;\n\n/** @internal */\nexport function SubLayersPopupButton(props: SubLayersPopupButtonProps) {\n const [showSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Show\"));\n const [hideSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Hide\"));\n const [popupOpen, setPopupOpen] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const togglePopup = React.useCallback(() => {\n setPopupOpen(!popupOpen);\n }, [popupOpen]);\n\n return (\n <>\n <Popover\n content={\n <div className=\"map-transparency-popup-panel\">\n <div className=\"map-manager-sublayer-panel\">\n <SubLayersPanel {...props} width={390} height={350} />\n </div>\n </div>\n }\n visible={popupOpen}\n onVisibleChange={setPopupOpen}\n placement=\"bottom-end\"\n applyBackground\n positionReference={buttonRef.current ?? undefined}\n >\n <IconButton\n size=\"small\"\n styleType=\"borderless\"\n ref={buttonRef}\n className=\"map-manager-item-sub-layer-button\"\n label={popupOpen ? hideSubLayersLabel : showSubLayersLabel}\n onClick={togglePopup}\n >\n <SvgLayers />\n </IconButton>\n </Popover>\n </>\n );\n}\n"]}