@itwin/map-layers 3.1.0-dev.8 → 3.1.2

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 (145) hide show
  1. package/CHANGELOG.md +79 -4
  2. package/lib/cjs/MapLayerPreferences.d.ts +8 -8
  3. package/lib/cjs/MapLayerPreferences.d.ts.map +1 -1
  4. package/lib/cjs/MapLayerPreferences.js +13 -13
  5. package/lib/cjs/MapLayerPreferences.js.map +1 -1
  6. package/lib/cjs/map-layers.d.ts +2 -0
  7. package/lib/cjs/map-layers.d.ts.map +1 -1
  8. package/lib/cjs/map-layers.js +2 -0
  9. package/lib/cjs/map-layers.js.map +1 -1
  10. package/lib/cjs/mapLayers.d.ts +15 -17
  11. package/lib/cjs/mapLayers.d.ts.map +1 -1
  12. package/lib/cjs/mapLayers.js +25 -35
  13. package/lib/cjs/mapLayers.js.map +1 -1
  14. package/lib/cjs/public/locales/en/mapLayers.json +4 -0
  15. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +11 -0
  16. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -0
  17. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +51 -0
  18. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -0
  19. package/lib/cjs/ui/Interfaces.d.ts +19 -3
  20. package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
  21. package/lib/cjs/ui/Interfaces.js.map +1 -1
  22. package/lib/cjs/ui/MapFeatureInfoTool.d.ts +14 -0
  23. package/lib/cjs/ui/MapFeatureInfoTool.d.ts.map +1 -0
  24. package/lib/cjs/ui/MapFeatureInfoTool.js +51 -0
  25. package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -0
  26. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +4 -18
  27. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  28. package/lib/cjs/ui/MapLayersUiItemsProvider.js +13 -29
  29. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  30. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  31. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +72 -48
  32. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  33. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  34. package/lib/cjs/ui/widget/BasemapPanel.js +13 -13
  35. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  36. package/lib/cjs/ui/widget/BasemapPanel.scss +5 -1
  37. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +41 -0
  38. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -0
  39. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +140 -0
  40. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -0
  41. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +8 -0
  42. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -0
  43. package/lib/cjs/ui/widget/FeatureInfoWidget.js +72 -0
  44. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -0
  45. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  46. package/lib/cjs/ui/widget/MapLayerDroppable.js +14 -11
  47. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  48. package/lib/cjs/ui/widget/MapLayerManager.d.ts +2 -2
  49. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  50. package/lib/cjs/ui/widget/MapLayerManager.js +25 -23
  51. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  52. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  53. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +5 -5
  54. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  55. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  56. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +2 -2
  57. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  58. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  59. package/lib/cjs/ui/widget/MapLayersWidget.js +2 -2
  60. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  61. package/lib/cjs/ui/widget/MapManagerSettings.js +16 -16
  62. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  63. package/lib/cjs/ui/widget/MapUrlDialog.d.ts +3 -3
  64. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  65. package/lib/cjs/ui/widget/MapUrlDialog.js +54 -45
  66. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  67. package/lib/cjs/ui/widget/SubLayersPopupButton.js +3 -3
  68. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  69. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  70. package/lib/cjs/ui/widget/SubLayersTree.js +26 -20
  71. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  72. package/lib/cjs/ui/widget/SubLayersTree.scss +3 -0
  73. package/lib/esm/MapLayerPreferences.d.ts +8 -8
  74. package/lib/esm/MapLayerPreferences.d.ts.map +1 -1
  75. package/lib/esm/MapLayerPreferences.js +13 -13
  76. package/lib/esm/MapLayerPreferences.js.map +1 -1
  77. package/lib/esm/map-layers.d.ts +2 -0
  78. package/lib/esm/map-layers.d.ts.map +1 -1
  79. package/lib/esm/map-layers.js +2 -0
  80. package/lib/esm/map-layers.js.map +1 -1
  81. package/lib/esm/mapLayers.d.ts +15 -17
  82. package/lib/esm/mapLayers.d.ts.map +1 -1
  83. package/lib/esm/mapLayers.js +25 -35
  84. package/lib/esm/mapLayers.js.map +1 -1
  85. package/lib/esm/public/locales/en/mapLayers.json +4 -0
  86. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +11 -0
  87. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -0
  88. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +47 -0
  89. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -0
  90. package/lib/esm/ui/Interfaces.d.ts +19 -3
  91. package/lib/esm/ui/Interfaces.d.ts.map +1 -1
  92. package/lib/esm/ui/Interfaces.js.map +1 -1
  93. package/lib/esm/ui/MapFeatureInfoTool.d.ts +14 -0
  94. package/lib/esm/ui/MapFeatureInfoTool.d.ts.map +1 -0
  95. package/lib/esm/ui/MapFeatureInfoTool.js +46 -0
  96. package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -0
  97. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +4 -18
  98. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  99. package/lib/esm/ui/MapLayersUiItemsProvider.js +14 -29
  100. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  101. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  102. package/lib/esm/ui/widget/AttachLayerPopupButton.js +72 -48
  103. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  104. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  105. package/lib/esm/ui/widget/BasemapPanel.js +14 -14
  106. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  107. package/lib/esm/ui/widget/BasemapPanel.scss +5 -1
  108. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +41 -0
  109. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -0
  110. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +136 -0
  111. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -0
  112. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +8 -0
  113. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -0
  114. package/lib/esm/ui/widget/FeatureInfoWidget.js +68 -0
  115. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -0
  116. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  117. package/lib/esm/ui/widget/MapLayerDroppable.js +14 -11
  118. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  119. package/lib/esm/ui/widget/MapLayerManager.d.ts +2 -2
  120. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  121. package/lib/esm/ui/widget/MapLayerManager.js +25 -23
  122. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  123. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  124. package/lib/esm/ui/widget/MapLayerSettingsMenu.js +5 -5
  125. package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  126. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  127. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +2 -2
  128. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  129. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  130. package/lib/esm/ui/widget/MapLayersWidget.js +2 -2
  131. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  132. package/lib/esm/ui/widget/MapManagerSettings.js +16 -16
  133. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  134. package/lib/esm/ui/widget/MapUrlDialog.d.ts +3 -3
  135. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  136. package/lib/esm/ui/widget/MapUrlDialog.js +54 -45
  137. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  138. package/lib/esm/ui/widget/SubLayersPopupButton.js +3 -3
  139. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  140. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  141. package/lib/esm/ui/widget/SubLayersTree.js +26 -20
  142. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  143. package/lib/esm/ui/widget/SubLayersTree.scss +3 -0
  144. package/lib/public/locales/en/mapLayers.json +4 -0
  145. package/package.json +31 -31
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersTree.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as React from \"react\";\r\nimport { useResizeDetector } from \"react-resize-detector\";\r\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\r\nimport { CheckBoxState, ImageCheckBox, NodeCheckboxRenderProps, useDisposable, WebFontIcon } from \"@itwin/core-react\";\r\nimport {\r\n AbstractTreeNodeLoaderWithProvider, ControlledTree, DelayLoadedTreeNodeItem, HighlightableTreeProps, ITreeDataProvider,\r\n MutableTreeModel,\r\n MutableTreeModelNode,\r\n SelectionMode, TreeCheckboxStateChangeEventArgs, TreeDataProvider, TreeEventHandler, TreeImageLoader, TreeModel, TreeModelChanges, TreeModelSource, TreeNodeItem, TreeNodeLoader,\r\n TreeNodeRenderer, TreeNodeRendererProps, TreeRenderer, TreeRendererProps, useTreeModel,\r\n} from \"@itwin/components-react\";\r\nimport { MapLayerSettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\r\nimport { Input } from \"@itwin/itwinui-react\";\r\nimport { StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { SubLayersDataProvider } from \"./SubLayersDataProvider\";\r\nimport { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport \"./SubLayersTree.scss\";\r\n\r\ninterface ToolbarProps {\r\n searchField?: React.ReactNode;\r\n children?: React.ReactNode[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction Toolbar(props: ToolbarProps) {\r\n return (\r\n <div className=\"map-manager-sublayer-tree-toolbar\">\r\n <div className=\"tree-toolbar-action-buttons\">\r\n {props.children}\r\n </div>\r\n {props.searchField && <div className=\"tree-toolbar-searchbox\">\r\n {props.searchField}\r\n </div>}\r\n </div>\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function SubLayersPanel({ mapLayer, viewport }: { mapLayer: StyleMapLayerSettings, viewport: ScreenViewport | undefined }) {\r\n const [noneAvailableLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:SubLayers.NoSubLayers\"));\r\n if (!viewport || (undefined === mapLayer.subLayers || 0 === mapLayer.subLayers.length)) {\r\n return <div className=\"map-manager-sublayer-panel\">\r\n <div>{noneAvailableLabel}</div>\r\n </div>;\r\n }\r\n\r\n return (\r\n <SubLayersTree mapLayer={mapLayer} />\r\n );\r\n}\r\n\r\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\r\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\r\n}\r\n\r\nfunction getStyleMapLayerSettings(settings: MapLayerSettings, isOverlay: boolean): StyleMapLayerSettings {\r\n return {\r\n visible: settings.visible,\r\n name: settings.name,\r\n url: settings.url,\r\n transparency: settings.transparency,\r\n transparentBackground: settings.transparentBackground,\r\n subLayers: settings.subLayers ? getSubLayerProps(settings.subLayers) : undefined,\r\n showSubLayers: true,\r\n isOverlay,\r\n provider: IModelApp.mapLayerFormatRegistry.createImageryProvider(settings),\r\n };\r\n}\r\n\r\n/**\r\n * Tree Control that displays sub-layer hierarchy\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function SubLayersTree(props: { mapLayer: StyleMapLayerSettings }) {\r\n const [placeholderLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:SubLayers.SearchPlaceholder\"));\r\n const [allOnLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:SubLayers.AllOn\"));\r\n const [allOffLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:SubLayers.AllOff\"));\r\n const [mapLayer, setMapLayer] = React.useState(props.mapLayer);\r\n const [layerFilterString, setLayerFilterString] = React.useState<string>(\"\");\r\n\r\n // create data provider to get some nodes to show in tree\r\n // `React.useMemo' is used avoid creating new object on each render cycle\r\n const dataProvider = React.useMemo(() => new SubLayersDataProvider(mapLayer), [mapLayer]);\r\n\r\n const {\r\n modelSource,\r\n nodeLoader,\r\n nodeHighlightingProps,\r\n } = useTreeFiltering(dataProvider, layerFilterString);\r\n\r\n // create custom event handler. It handles all tree event same as `TreeEventHandler` but additionally\r\n // it selects/deselects node when checkbox is checked/unchecked and vice versa.\r\n // `useDisposable` takes care of disposing old event handler when new is created in case 'nodeLoader' has changed\r\n // `React.useCallback` is used to avoid creating new callback that creates handler on each render\r\n const eventHandler = useDisposable(React.useCallback(() => new SubLayerCheckboxHandler(mapLayer, nodeLoader), [nodeLoader, mapLayer]));\r\n\r\n // Get an immutable tree model from the model source. The model is regenerated every time the model source\r\n // emits the `onModelChanged` event.\r\n const treeModel = useTreeModel(modelSource);\r\n\r\n const showAll = React.useCallback(async () => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n if (displayStyle && vp) {\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndUrl(mapLayer.name, mapLayer.url, mapLayer.isOverlay) : -1;\r\n displayStyle.changeMapSubLayerProps({ visible: true }, -1, indexInDisplayStyle, mapLayer.isOverlay);\r\n vp.invalidateRenderPlan();\r\n const updatedMapLayer = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayer.isOverlay);\r\n if (updatedMapLayer) {\r\n setMapLayer(getStyleMapLayerSettings(updatedMapLayer, mapLayer.isOverlay));\r\n }\r\n }\r\n }, [mapLayer]);\r\n\r\n const hideAll = React.useCallback(async () => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n if (displayStyle && vp) {\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndUrl(mapLayer.name, mapLayer.url, mapLayer.isOverlay) : -1;\r\n displayStyle.changeMapSubLayerProps({ visible: false }, -1, indexInDisplayStyle, mapLayer.isOverlay);\r\n const updatedMapLayer = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayer.isOverlay);\r\n if (updatedMapLayer) {\r\n setMapLayer(getStyleMapLayerSettings(updatedMapLayer, mapLayer.isOverlay));\r\n }\r\n vp.invalidateRenderPlan();\r\n }\r\n }, [mapLayer]);\r\n\r\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setLayerFilterString(event.target.value);\r\n }, []);\r\n\r\n const { width, height, ref } = useResizeDetector();\r\n\r\n return <>\r\n <div className=\"map-manager-sublayer-tree\">\r\n <Toolbar\r\n searchField={\r\n <Input type=\"text\" className=\"map-manager-source-list-filter\"\r\n placeholder={placeholderLabel}\r\n value={layerFilterString}\r\n onChange={handleFilterTextChanged}\r\n size=\"small\" />\r\n }\r\n >\r\n {mapLayer.provider?.mutualExclusiveSubLayer ? undefined : [\r\n <button key=\"show-all-btn\" title={allOnLabel} onClick={showAll}>\r\n <WebFontIcon iconName=\"icon-visibility\" />\r\n </button>,\r\n <button key=\"hide-all-btn\" title={allOffLabel} onClick={hideAll}>\r\n <WebFontIcon iconName=\"icon-visibility-hide-2\" />\r\n </button>,\r\n ]}\r\n </Toolbar>\r\n <div ref={ref} className=\"map-manager-sublayer-tree-content\">\r\n {width && height ? <ControlledTree\r\n nodeLoader={nodeLoader}\r\n selectionMode={SelectionMode.None}\r\n eventsHandler={eventHandler}\r\n model={treeModel}\r\n treeRenderer={nodeWithEyeCheckboxTreeRenderer}\r\n nodeHighlightingProps={nodeHighlightingProps}\r\n width={width}\r\n height={height}\r\n /> : null}\r\n </div>\r\n </div>\r\n </>;\r\n}\r\n\r\n/** TreeEventHandler derived class that handler processing changes to subLayer visibility */\r\nclass SubLayerCheckboxHandler extends TreeEventHandler {\r\n private _removeModelChangedListener: () => void;\r\n\r\n constructor(private _mapLayer: StyleMapLayerSettings, nodeLoader: AbstractTreeNodeLoaderWithProvider<TreeDataProvider>) {\r\n super({ modelSource: nodeLoader.modelSource, nodeLoader, collapsedChildrenDisposalEnabled: true });\r\n this._removeModelChangedListener = this.modelSource.onModelChanged.addListener(this.onModelChanged);\r\n }\r\n\r\n public override dispose() {\r\n this._removeModelChangedListener();\r\n super.dispose();\r\n }\r\n\r\n // Cascade state\r\n // Children on unnamed groups must get disabled in the tree view, because\r\n // they get rendered anyway.\r\n private cascadeStateToAllChildren(model: MutableTreeModel, parentId?: string) {\r\n const children = model.getChildren(parentId);\r\n if (children === undefined)\r\n return;\r\n\r\n for (const childID of children) {\r\n const childNode = childID ? model.getNode(childID) : undefined;\r\n\r\n if (childNode)\r\n this.syncNodeStateWithParent(model, childNode);\r\n\r\n // Drill down the tree.\r\n this.cascadeStateToAllChildren(model, childID);\r\n }\r\n }\r\n\r\n private applyMutualExclusiveState(model: MutableTreeModel, nodeId: string) {\r\n const changedNode = model.getNode(nodeId);\r\n if (changedNode?.checkbox.state === CheckBoxState.Off)\r\n return;\r\n\r\n for (const node of model.iterateTreeModelNodes()) {\r\n if (node.id === changedNode?.id)\r\n continue;\r\n\r\n if (node && node.checkbox.state === CheckBoxState.On)\r\n node.checkbox.state = CheckBoxState.Off;\r\n }\r\n }\r\n\r\n //-----------------------------------------------------------------------\r\n // Listen to model changes\r\n //------------------------------------------------------------------------\r\n // This is required because nodes are delay loaded in the model until\r\n // they are made visible (i.e. parent node is expanded). So even though\r\n // you might have created nodes in the data provided with a proper\r\n // initial state, by the time it gets loaded, their state might have became\r\n // out of date in the TreeView's active model. So whenever a node\r\n // is added, when must confirm its state matches the current model\r\n // (i.e. state of their parent.)\r\n public onModelChanged = (args: [TreeModel, TreeModelChanges]) => {\r\n this.modelSource.modifyModel((model) => {\r\n const addedNodes = args[1].addedNodeIds.map((id) => model.getNode(id));\r\n addedNodes.forEach((node) => {\r\n if (!node)\r\n return;\r\n\r\n this.syncNodeStateWithParent(model, node);\r\n });\r\n });\r\n };\r\n\r\n private static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\r\n if (!subLayer)\r\n return false;\r\n\r\n return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);\r\n }\r\n\r\n // Ensure the state of changed node matches the state of its parent.\r\n private syncNodeStateWithParent(model: MutableTreeModel, changedNode: MutableTreeModelNode) {\r\n // Lookup node parent. If non exists, I assume thats the root node,\r\n // and it must have a proper initial state.\r\n const parentNode = changedNode.parentId ? model.getNode(changedNode.parentId) : undefined;\r\n if (!parentNode)\r\n return;\r\n\r\n if (!changedNode.checkbox)\r\n return; // don't see why this would happen, but if there is no checkbox, we cant do much here.\r\n\r\n const parentLayerId = undefined !== parentNode.item.extendedData?.subLayerId ? parentNode.item.extendedData?.subLayerId : parentNode.item.id;\r\n const parentSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === parentLayerId);\r\n\r\n // If parent is disabled, then children must be too.\r\n // Also, Non-visible unnamed group must have their children disabled (unamed groups have visibility inherence)\r\n if (parentNode.checkbox.isDisabled || (SubLayerCheckboxHandler.isUnnamedGroup(parentSubLayer) && parentNode.checkbox.state === CheckBoxState.Off)) {\r\n changedNode.checkbox.isDisabled = true;\r\n changedNode.checkbox.state = CheckBoxState.Off;\r\n } else {\r\n // Visibility state from StyleMapLayerSettings applies\r\n const subLayerId = undefined !== changedNode.item.extendedData?.subLayerId ? changedNode.item.extendedData?.subLayerId : changedNode.item.id;\r\n const foundSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === subLayerId);\r\n changedNode.checkbox.isDisabled = false;\r\n changedNode.checkbox.state = foundSubLayer?.visible ? CheckBoxState.On : CheckBoxState.Off;\r\n }\r\n }\r\n\r\n /** Changes nodes checkboxes states until event is handled or handler is disposed */\r\n public override onCheckboxStateChanged({ stateChanges }: TreeCheckboxStateChangeEventArgs) {\r\n // call base checkbox handling\r\n const baseHandling = super.onCheckboxStateChanged({ stateChanges });\r\n\r\n // subscribe to checkbox state changes to new checkbox states and do some additional work with them\r\n const selectionHandling = stateChanges.subscribe({\r\n next: (changes) => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndUrl(this._mapLayer.name, this._mapLayer.url, this._mapLayer.isOverlay) : -1;\r\n changes.forEach((change) => {\r\n const isSelected = (change.newState === CheckBoxState.On);\r\n\r\n const subLayerId = undefined !== change.nodeItem.extendedData?.subLayerId ? change.nodeItem.extendedData?.subLayerId : change.nodeItem.id;\r\n\r\n // Get the previously visible node if any\r\n let prevVisibleLayer: MapSubLayerProps | undefined;\r\n if (this._mapLayer.provider?.mutualExclusiveSubLayer) {\r\n prevVisibleLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.visible && subLayer.id !== subLayerId);\r\n }\r\n\r\n // Update sublayer object, otherwise state would get out of sync with DisplayStyle each time the TreeView is re-rendered\r\n const foundSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === subLayerId);\r\n if (foundSubLayer)\r\n foundSubLayer.visible = isSelected;\r\n if (prevVisibleLayer?.visible)\r\n prevVisibleLayer.visible = false;\r\n\r\n // Update displaystyle state\r\n if (-1 !== indexInDisplayStyle && displayStyle) {\r\n if (prevVisibleLayer && prevVisibleLayer.id !== undefined)\r\n displayStyle.changeMapSubLayerProps({ visible: false }, prevVisibleLayer.id, indexInDisplayStyle, this._mapLayer.isOverlay);\r\n displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, indexInDisplayStyle, this._mapLayer.isOverlay);\r\n }\r\n\r\n // Cascade state\r\n this.modelSource.modifyModel((model) => {\r\n if (this._mapLayer.provider?.mutualExclusiveSubLayer)\r\n this.applyMutualExclusiveState(model, change.nodeItem.id);\r\n this.cascadeStateToAllChildren(model, change.nodeItem.id);\r\n });\r\n });\r\n\r\n if (vp)\r\n vp.invalidateRenderPlan();\r\n },\r\n });\r\n // stop handling selection when checkboxes handling is stopped\r\n baseHandling?.add(selectionHandling);\r\n return baseHandling;\r\n }\r\n}\r\n\r\n/** Custom checkbox renderer that renders checkbox as an eye */\r\nconst eyeCheckboxRenderer = (props: NodeCheckboxRenderProps) => (\r\n <ImageCheckBox\r\n checked={props.checked}\r\n disabled={props.disabled}\r\n imageOn=\"icon-visibility\"\r\n imageOff=\"icon-visibility-hide-2\"\r\n onClick={props.onChange}\r\n tooltip={props.title}\r\n />\r\n);\r\n\r\n/** Custom node renderer. It uses default 'TreeNodeRenderer' but overrides default checkbox renderer to render checkbox as an eye */\r\nconst imageLoader = new TreeImageLoader();\r\nconst nodeWithEyeCheckboxRenderer = (props: TreeNodeRendererProps) => (\r\n <TreeNodeRenderer\r\n {...props}\r\n checkboxRenderer={eyeCheckboxRenderer}\r\n imageLoader={imageLoader}\r\n />\r\n);\r\n\r\n/** Custom tree renderer. It uses default `TreeRenderer` but overrides default node renderer to render node with custom checkbox */\r\nconst nodeWithEyeCheckboxTreeRenderer = (props: TreeRendererProps) => (\r\n <TreeRenderer\r\n {...props}\r\n nodeRenderer={nodeWithEyeCheckboxRenderer}\r\n />\r\n);\r\n\r\nfunction useTreeFiltering(\r\n dataProvider: ITreeDataProvider,\r\n filter: string,\r\n) {\r\n const nodeLoader = useFilteredProvider(dataProvider, filter);\r\n const nodeHighlightingProps = useNodeHighlightingProps(filter);\r\n return {\r\n nodeLoader,\r\n modelSource: nodeLoader.modelSource,\r\n nodeHighlightingProps,\r\n };\r\n}\r\n\r\nfunction useFilteredProvider(\r\n dataProvider: ITreeDataProvider,\r\n filter: string,\r\n) {\r\n const filteredProvider = React.useMemo(() => {\r\n return new FilteredTreeDataProvider(dataProvider, filter);\r\n }, [dataProvider, filter]);\r\n\r\n const nodeLoader = React.useMemo(() => {\r\n return new TreeNodeLoader(filteredProvider, new TreeModelSource());\r\n }, [filteredProvider]);\r\n\r\n return nodeLoader;\r\n}\r\n\r\nfunction useNodeHighlightingProps(\r\n filter: string,\r\n) {\r\n const [nodeHighlightingProps, setNodeHighlightingProps] = React.useState<HighlightableTreeProps>();\r\n\r\n React.useEffect(() => {\r\n if (filter === \"\") {\r\n setNodeHighlightingProps(undefined);\r\n return;\r\n }\r\n setNodeHighlightingProps({\r\n searchText: filter,\r\n activeMatch: undefined,\r\n });\r\n }, [filter]);\r\n\r\n return nodeHighlightingProps;\r\n}\r\n\r\nclass FullTreeHierarchy {\r\n private _dataProvider: ITreeDataProvider;\r\n private _hierarchy = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\r\n private _init: Promise<void>;\r\n\r\n public constructor(dataProvider: ITreeDataProvider) {\r\n this._dataProvider = dataProvider;\r\n\r\n this._init = (async () => {\r\n await this.initNode();\r\n })();\r\n }\r\n\r\n private async initNode(parent?: TreeNodeItem) {\r\n const nodes = await this._dataProvider.getNodes(parent);\r\n this._hierarchy.set(parent?.id, nodes);\r\n for (const node of nodes) {\r\n await this.initNode(node);\r\n }\r\n }\r\n\r\n public async getHierarchy() {\r\n await this._init;\r\n return this._hierarchy;\r\n }\r\n}\r\n\r\nclass FilteredTreeHierarchy {\r\n private _fullHierarchy: FullTreeHierarchy;\r\n private _filter: string;\r\n private _filtered = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\r\n private _init: Promise<void>;\r\n\r\n public constructor(dataProvider: ITreeDataProvider, filter: string) {\r\n this._fullHierarchy = new FullTreeHierarchy(dataProvider);\r\n this._filter = filter;\r\n\r\n this._init = (async () => {\r\n await this.init();\r\n })();\r\n }\r\n\r\n private async init() {\r\n const hierarchy = await this._fullHierarchy.getHierarchy();\r\n if (this._filter === \"\") {\r\n this._filtered = hierarchy;\r\n return;\r\n }\r\n this.filterNodes(hierarchy);\r\n }\r\n\r\n /** Initializes `this._filtered` field. Returns a node if it matches a filter. */\r\n private filterNodes(hierarchy: Map<string | undefined, DelayLoadedTreeNodeItem[]>, current?: DelayLoadedTreeNodeItem): DelayLoadedTreeNodeItem | undefined {\r\n const matches = current ? this.matchesFilter(current) : false;\r\n const children = hierarchy.get(current?.id);\r\n if (!children)\r\n return matches ? current : undefined;\r\n\r\n const matchedChildren = new Array<DelayLoadedTreeNodeItem>();\r\n for (const child of children) {\r\n const matchedChild = this.filterNodes(hierarchy, child);\r\n matchedChild && matchedChildren.push(matchedChild);\r\n }\r\n\r\n const hasChildren = matchedChildren.length > 0;\r\n const included = matches || hasChildren;\r\n let filtered: DelayLoadedTreeNodeItem | undefined;\r\n if (included) {\r\n this._filtered.set(current?.id, matchedChildren);\r\n\r\n // Return a modified copy of current node (to persist initial hierarchy when filter is cleared).\r\n if (current) {\r\n filtered = {\r\n ...current,\r\n hasChildren,\r\n autoExpand: hasChildren ? true : current.autoExpand,\r\n };\r\n }\r\n }\r\n return filtered;\r\n }\r\n\r\n private matchesFilter(node: TreeNodeItem) {\r\n if (node.label.value.valueFormat !== PropertyValueFormat.Primitive)\r\n return false;\r\n\r\n const value = node.label.value.displayValue?.toLowerCase();\r\n if (!value)\r\n return false;\r\n return value.includes(this._filter.toLowerCase());\r\n }\r\n\r\n public async getHierarchy() {\r\n await this._init;\r\n return this._filtered;\r\n }\r\n}\r\n\r\nclass FilteredTreeDataProvider implements ITreeDataProvider {\r\n private _hierarchy: FilteredTreeHierarchy;\r\n\r\n public constructor(\r\n parentDataProvider: ITreeDataProvider,\r\n filter: string,\r\n ) {\r\n this._hierarchy = new FilteredTreeHierarchy(parentDataProvider, filter);\r\n }\r\n\r\n public async getNodes(parent?: TreeNodeItem) {\r\n const hierarchy = await this._hierarchy.getHierarchy();\r\n const nodes = hierarchy.get(parent?.id);\r\n return nodes || [];\r\n }\r\n\r\n public async getNodesCount(parent?: TreeNodeItem) {\r\n const hierarchy = await this._hierarchy.getHierarchy();\r\n const nodes = hierarchy.get(parent?.id);\r\n return nodes?.length || 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SubLayersTree.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\r\nimport {\r\n AbstractTreeNodeLoaderWithProvider, ControlledTree, DelayLoadedTreeNodeItem, HighlightableTreeProps, ITreeDataProvider,\r\n MutableTreeModel,\r\n MutableTreeModelNode,\r\n SelectionMode, TreeCheckboxStateChangeEventArgs, TreeDataProvider, TreeEventHandler, TreeImageLoader, TreeModel, TreeModelChanges, TreeModelSource, TreeNodeItem, TreeNodeLoader,\r\n TreeNodeRenderer, TreeNodeRendererProps, TreeRenderer, TreeRendererProps, useTreeModel,\r\n} from \"@itwin/components-react\";\r\nimport { ImageMapLayerSettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\r\nimport { IModelApp, ScreenViewport } from \"@itwin/core-frontend\";\r\nimport { CheckBoxState, ImageCheckBox, NodeCheckboxRenderProps, useDisposable, useLayoutResizeObserver, useRefState, WebFontIcon } from \"@itwin/core-react\";\r\nimport { Input } from \"@itwin/itwinui-react\";\r\nimport * as React from \"react\";\r\nimport { StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { SubLayersDataProvider } from \"./SubLayersDataProvider\";\r\nimport \"./SubLayersTree.scss\";\r\nimport { MapLayersUI } from \"../../mapLayers\";\r\n\r\ninterface ToolbarProps {\r\n searchField?: React.ReactNode;\r\n children?: React.ReactNode[];\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction Toolbar(props: ToolbarProps) {\r\n return (\r\n <div className=\"map-manager-sublayer-tree-toolbar\">\r\n <div className=\"tree-toolbar-action-buttons\">\r\n {props.children}\r\n </div>\r\n {props.searchField && <div className=\"tree-toolbar-searchbox\">\r\n {props.searchField}\r\n </div>}\r\n </div>\r\n );\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function SubLayersPanel({ mapLayer, viewport }: { mapLayer: StyleMapLayerSettings, viewport: ScreenViewport | undefined }) {\r\n const [noneAvailableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.NoSubLayers\"));\r\n if (!viewport || (undefined === mapLayer.subLayers || 0 === mapLayer.subLayers.length)) {\r\n return <div className=\"map-manager-sublayer-panel\">\r\n <div>{noneAvailableLabel}</div>\r\n </div>;\r\n }\r\n\r\n return (\r\n <SubLayersTree mapLayer={mapLayer} />\r\n );\r\n}\r\n\r\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\r\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\r\n}\r\n\r\nfunction getStyleMapLayerSettings(settings: ImageMapLayerSettings, isOverlay: boolean): StyleMapLayerSettings {\r\n return {\r\n visible: settings.visible,\r\n name: settings.name,\r\n source: settings.source,\r\n transparency: settings.transparency,\r\n transparentBackground: settings.transparentBackground,\r\n subLayers: settings.subLayers ? getSubLayerProps(settings.subLayers) : undefined,\r\n showSubLayers: true,\r\n isOverlay,\r\n provider: IModelApp.mapLayerFormatRegistry.createImageryProvider(settings),\r\n };\r\n}\r\n\r\n/**\r\n * Tree Control that displays sub-layer hierarchy\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function SubLayersTree(props: { mapLayer: StyleMapLayerSettings }) {\r\n const [placeholderLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.SearchPlaceholder\"));\r\n const [allOnLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.AllOn\"));\r\n const [allOffLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.AllOff\"));\r\n const [mapLayer, setMapLayer] = React.useState(props.mapLayer);\r\n const [layerFilterString, setLayerFilterString] = React.useState<string>(\"\");\r\n\r\n // create data provider to get some nodes to show in tree\r\n // `React.useMemo' is used avoid creating new object on each render cycle\r\n const dataProvider = React.useMemo(() => new SubLayersDataProvider(mapLayer), [mapLayer]);\r\n\r\n const {\r\n modelSource,\r\n nodeLoader,\r\n nodeHighlightingProps,\r\n } = useTreeFiltering(dataProvider, layerFilterString);\r\n\r\n // create custom event handler. It handles all tree event same as `TreeEventHandler` but additionally\r\n // it selects/deselects node when checkbox is checked/unchecked and vice versa.\r\n // `useDisposable` takes care of disposing old event handler when new is created in case 'nodeLoader' has changed\r\n // `React.useCallback` is used to avoid creating new callback that creates handler on each render\r\n const eventHandler = useDisposable(React.useCallback(() => new SubLayerCheckboxHandler(mapLayer, nodeLoader), [nodeLoader, mapLayer]));\r\n\r\n // Get an immutable tree model from the model source. The model is regenerated every time the model source\r\n // emits the `onModelChanged` event.\r\n const treeModel = useTreeModel(modelSource);\r\n\r\n const showAll = React.useCallback(async () => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n if (displayStyle && vp) {\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndSource(mapLayer.name, mapLayer.source, mapLayer.isOverlay) : -1;\r\n displayStyle.changeMapSubLayerProps({ visible: true }, -1, indexInDisplayStyle, mapLayer.isOverlay);\r\n vp.invalidateRenderPlan();\r\n const updatedMapLayer = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayer.isOverlay);\r\n if (updatedMapLayer) {\r\n if (updatedMapLayer instanceof ImageMapLayerSettings)\r\n setMapLayer(getStyleMapLayerSettings(updatedMapLayer, mapLayer.isOverlay));\r\n }\r\n }\r\n }, [mapLayer]);\r\n\r\n const hideAll = React.useCallback(async () => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n if (displayStyle && vp) {\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndSource(mapLayer.name, mapLayer.source, mapLayer.isOverlay) : -1;\r\n displayStyle.changeMapSubLayerProps({ visible: false }, -1, indexInDisplayStyle, mapLayer.isOverlay);\r\n const updatedMapLayer = displayStyle.mapLayerAtIndex(indexInDisplayStyle, mapLayer.isOverlay);\r\n if (updatedMapLayer && updatedMapLayer instanceof ImageMapLayerSettings) {\r\n setMapLayer(getStyleMapLayerSettings(updatedMapLayer, mapLayer.isOverlay));\r\n }\r\n vp.invalidateRenderPlan();\r\n }\r\n }, [mapLayer]);\r\n\r\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setLayerFilterString(event.target.value);\r\n }, []);\r\n\r\n const [divRef, divElement] = useRefState<HTMLDivElement>();\r\n const [width, height] = useLayoutResizeObserver(divElement ?? null);\r\n\r\n return <>\r\n <div className=\"map-manager-sublayer-tree\">\r\n <Toolbar\r\n searchField={\r\n <Input type=\"text\" className=\"map-manager-source-list-filter\"\r\n placeholder={placeholderLabel}\r\n value={layerFilterString}\r\n onChange={handleFilterTextChanged}\r\n size=\"small\" />\r\n }\r\n >\r\n {mapLayer.provider?.mutualExclusiveSubLayer ? undefined : [\r\n <button key=\"show-all-btn\" title={allOnLabel} onClick={showAll}>\r\n <WebFontIcon iconName=\"icon-visibility\" />\r\n </button>,\r\n <button key=\"hide-all-btn\" title={allOffLabel} onClick={hideAll}>\r\n <WebFontIcon iconName=\"icon-visibility-hide-2\" />\r\n </button>,\r\n ]}\r\n </Toolbar>\r\n {/* <div ref={ref} className=\"map-manager-sublayer-tree-content\"> */}\r\n <div ref={divRef} className=\"map-manager-sublayer-tree-content\">\r\n {width && height ? <ControlledTree\r\n nodeLoader={nodeLoader}\r\n selectionMode={SelectionMode.None}\r\n eventsHandler={eventHandler}\r\n model={treeModel}\r\n treeRenderer={nodeWithEyeCheckboxTreeRenderer}\r\n nodeHighlightingProps={nodeHighlightingProps}\r\n width={width}\r\n height={height}\r\n /> : null}\r\n </div>\r\n </div>\r\n </>;\r\n}\r\n\r\n/** TreeEventHandler derived class that handler processing changes to subLayer visibility */\r\nclass SubLayerCheckboxHandler extends TreeEventHandler {\r\n private _removeModelChangedListener: () => void;\r\n\r\n constructor(private _mapLayer: StyleMapLayerSettings, nodeLoader: AbstractTreeNodeLoaderWithProvider<TreeDataProvider>) {\r\n super({ modelSource: nodeLoader.modelSource, nodeLoader, collapsedChildrenDisposalEnabled: true });\r\n this._removeModelChangedListener = this.modelSource.onModelChanged.addListener(this.onModelChanged);\r\n }\r\n\r\n public override dispose() {\r\n this._removeModelChangedListener();\r\n super.dispose();\r\n }\r\n\r\n // Cascade state\r\n // Children on unnamed groups must get disabled in the tree view, because\r\n // they get rendered anyway.\r\n private cascadeStateToAllChildren(model: MutableTreeModel, parentId?: string) {\r\n const children = model.getChildren(parentId);\r\n if (children === undefined)\r\n return;\r\n\r\n for (const childID of children) {\r\n const childNode = childID ? model.getNode(childID) : undefined;\r\n\r\n if (childNode)\r\n this.syncNodeStateWithParent(model, childNode);\r\n\r\n // Drill down the tree.\r\n this.cascadeStateToAllChildren(model, childID);\r\n }\r\n }\r\n\r\n private applyMutualExclusiveState(model: MutableTreeModel, nodeId: string) {\r\n const changedNode = model.getNode(nodeId);\r\n if (changedNode?.checkbox.state === CheckBoxState.Off)\r\n return;\r\n\r\n for (const node of model.iterateTreeModelNodes()) {\r\n if (node.id === changedNode?.id)\r\n continue;\r\n\r\n if (node && node.checkbox.state === CheckBoxState.On)\r\n node.checkbox.state = CheckBoxState.Off;\r\n }\r\n }\r\n\r\n //-----------------------------------------------------------------------\r\n // Listen to model changes\r\n //------------------------------------------------------------------------\r\n // This is required because nodes are delay loaded in the model until\r\n // they are made visible (i.e. parent node is expanded). So even though\r\n // you might have created nodes in the data provided with a proper\r\n // initial state, by the time it gets loaded, their state might have became\r\n // out of date in the TreeView's active model. So whenever a node\r\n // is added, when must confirm its state matches the current model\r\n // (i.e. state of their parent.)\r\n public onModelChanged = (args: [TreeModel, TreeModelChanges]) => {\r\n this.modelSource.modifyModel((model) => {\r\n const addedNodes = args[1].addedNodeIds.map((id) => model.getNode(id));\r\n addedNodes.forEach((node) => {\r\n if (!node)\r\n return;\r\n\r\n this.syncNodeStateWithParent(model, node);\r\n });\r\n });\r\n };\r\n\r\n private static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\r\n if (!subLayer)\r\n return false;\r\n\r\n return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);\r\n }\r\n\r\n // Ensure the state of changed node matches the state of its parent.\r\n private syncNodeStateWithParent(model: MutableTreeModel, changedNode: MutableTreeModelNode) {\r\n // Lookup node parent. If non exists, I assume thats the root node,\r\n // and it must have a proper initial state.\r\n const parentNode = changedNode.parentId ? model.getNode(changedNode.parentId) : undefined;\r\n if (!parentNode)\r\n return;\r\n\r\n if (!changedNode.checkbox)\r\n return; // don't see why this would happen, but if there is no checkbox, we cant do much here.\r\n\r\n const parentLayerId = undefined !== parentNode.item.extendedData?.subLayerId ? parentNode.item.extendedData?.subLayerId : parentNode.item.id;\r\n const parentSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === parentLayerId);\r\n\r\n // If parent is disabled, then children must be too.\r\n // Also, Non-visible unnamed group must have their children disabled (unamed groups have visibility inherence)\r\n if (parentNode.checkbox.isDisabled || (SubLayerCheckboxHandler.isUnnamedGroup(parentSubLayer) && parentNode.checkbox.state === CheckBoxState.Off)) {\r\n changedNode.checkbox.isDisabled = true;\r\n changedNode.checkbox.state = CheckBoxState.Off;\r\n } else {\r\n // Visibility state from StyleMapLayerSettings applies\r\n const subLayerId = undefined !== changedNode.item.extendedData?.subLayerId ? changedNode.item.extendedData?.subLayerId : changedNode.item.id;\r\n const foundSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === subLayerId);\r\n changedNode.checkbox.isDisabled = false;\r\n changedNode.checkbox.state = foundSubLayer?.visible ? CheckBoxState.On : CheckBoxState.Off;\r\n }\r\n }\r\n\r\n /** Changes nodes checkboxes states until event is handled or handler is disposed */\r\n public override onCheckboxStateChanged({ stateChanges }: TreeCheckboxStateChangeEventArgs) {\r\n // call base checkbox handling\r\n const baseHandling = super.onCheckboxStateChanged({ stateChanges });\r\n\r\n // subscribe to checkbox state changes to new checkbox states and do some additional work with them\r\n const selectionHandling = stateChanges.subscribe({\r\n next: (changes) => {\r\n const vp = IModelApp.viewManager.selectedView;\r\n const displayStyle = vp?.displayStyle;\r\n const indexInDisplayStyle = displayStyle ? displayStyle.findMapLayerIndexByNameAndSource(this._mapLayer.name, this._mapLayer.source, this._mapLayer.isOverlay) : -1;\r\n changes.forEach((change) => {\r\n const isSelected = (change.newState === CheckBoxState.On);\r\n\r\n const subLayerId = undefined !== change.nodeItem.extendedData?.subLayerId ? change.nodeItem.extendedData?.subLayerId : change.nodeItem.id;\r\n\r\n // Get the previously visible node if any\r\n let prevVisibleLayer: MapSubLayerProps | undefined;\r\n if (this._mapLayer.provider?.mutualExclusiveSubLayer) {\r\n prevVisibleLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.visible && subLayer.id !== subLayerId);\r\n }\r\n\r\n // Update sublayer object, otherwise state would get out of sync with DisplayStyle each time the TreeView is re-rendered\r\n const foundSubLayer = this._mapLayer.subLayers?.find((subLayer) => subLayer.id === subLayerId);\r\n if (foundSubLayer)\r\n foundSubLayer.visible = isSelected;\r\n if (prevVisibleLayer?.visible)\r\n prevVisibleLayer.visible = false;\r\n\r\n // Update displaystyle state\r\n if (-1 !== indexInDisplayStyle && displayStyle) {\r\n if (prevVisibleLayer && prevVisibleLayer.id !== undefined)\r\n displayStyle.changeMapSubLayerProps({ visible: false }, prevVisibleLayer.id, indexInDisplayStyle, this._mapLayer.isOverlay);\r\n displayStyle.changeMapSubLayerProps({ visible: isSelected }, subLayerId, indexInDisplayStyle, this._mapLayer.isOverlay);\r\n }\r\n\r\n // Cascade state\r\n this.modelSource.modifyModel((model) => {\r\n if (this._mapLayer.provider?.mutualExclusiveSubLayer)\r\n this.applyMutualExclusiveState(model, change.nodeItem.id);\r\n this.cascadeStateToAllChildren(model, change.nodeItem.id);\r\n });\r\n });\r\n\r\n if (vp)\r\n vp.invalidateRenderPlan();\r\n },\r\n });\r\n // stop handling selection when checkboxes handling is stopped\r\n baseHandling?.add(selectionHandling);\r\n return baseHandling;\r\n }\r\n}\r\n\r\n/** Custom checkbox renderer that renders checkbox as an eye */\r\nconst eyeCheckboxRenderer = (props: NodeCheckboxRenderProps) => (\r\n <ImageCheckBox\r\n checked={props.checked}\r\n disabled={props.disabled}\r\n imageOn=\"icon-visibility\"\r\n imageOff=\"icon-visibility-hide-2\"\r\n onClick={props.onChange}\r\n tooltip={props.title}\r\n />\r\n);\r\n\r\n/** Custom node renderer. It uses default 'TreeNodeRenderer' but overrides default checkbox renderer to render checkbox as an eye */\r\nconst imageLoader = new TreeImageLoader();\r\nconst nodeWithEyeCheckboxRenderer = (props: TreeNodeRendererProps) => (\r\n <TreeNodeRenderer\r\n {...props}\r\n checkboxRenderer={eyeCheckboxRenderer}\r\n imageLoader={imageLoader}\r\n />\r\n);\r\n\r\n/** Custom tree renderer. It uses default `TreeRenderer` but overrides default node renderer to render node with custom checkbox */\r\nconst nodeWithEyeCheckboxTreeRenderer = (props: TreeRendererProps) => (\r\n <TreeRenderer\r\n {...props}\r\n nodeRenderer={nodeWithEyeCheckboxRenderer}\r\n />\r\n);\r\n\r\nfunction useTreeFiltering(\r\n dataProvider: ITreeDataProvider,\r\n filter: string,\r\n) {\r\n const nodeLoader = useFilteredProvider(dataProvider, filter);\r\n const nodeHighlightingProps = useNodeHighlightingProps(filter);\r\n return {\r\n nodeLoader,\r\n modelSource: nodeLoader.modelSource,\r\n nodeHighlightingProps,\r\n };\r\n}\r\n\r\nfunction useFilteredProvider(\r\n dataProvider: ITreeDataProvider,\r\n filter: string,\r\n) {\r\n const filteredProvider = React.useMemo(() => {\r\n return new FilteredTreeDataProvider(dataProvider, filter);\r\n }, [dataProvider, filter]);\r\n\r\n const nodeLoader = React.useMemo(() => {\r\n return new TreeNodeLoader(filteredProvider, new TreeModelSource());\r\n }, [filteredProvider]);\r\n\r\n return nodeLoader;\r\n}\r\n\r\nfunction useNodeHighlightingProps(\r\n filter: string,\r\n) {\r\n const [nodeHighlightingProps, setNodeHighlightingProps] = React.useState<HighlightableTreeProps>();\r\n\r\n React.useEffect(() => {\r\n if (filter === \"\") {\r\n setNodeHighlightingProps(undefined);\r\n return;\r\n }\r\n setNodeHighlightingProps({\r\n searchText: filter,\r\n activeMatch: undefined,\r\n });\r\n }, [filter]);\r\n\r\n return nodeHighlightingProps;\r\n}\r\n\r\nclass FullTreeHierarchy {\r\n private _dataProvider: ITreeDataProvider;\r\n private _hierarchy = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\r\n private _init: Promise<void>;\r\n\r\n public constructor(dataProvider: ITreeDataProvider) {\r\n this._dataProvider = dataProvider;\r\n\r\n this._init = (async () => {\r\n await this.initNode();\r\n })();\r\n }\r\n\r\n private async initNode(parent?: TreeNodeItem) {\r\n const nodes = await this._dataProvider.getNodes(parent);\r\n this._hierarchy.set(parent?.id, nodes);\r\n for (const node of nodes) {\r\n await this.initNode(node);\r\n }\r\n }\r\n\r\n public async getHierarchy() {\r\n await this._init;\r\n return this._hierarchy;\r\n }\r\n}\r\n\r\nclass FilteredTreeHierarchy {\r\n private _fullHierarchy: FullTreeHierarchy;\r\n private _filter: string;\r\n private _filtered = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\r\n private _init: Promise<void>;\r\n\r\n public constructor(dataProvider: ITreeDataProvider, filter: string) {\r\n this._fullHierarchy = new FullTreeHierarchy(dataProvider);\r\n this._filter = filter;\r\n\r\n this._init = (async () => {\r\n await this.init();\r\n })();\r\n }\r\n\r\n private async init() {\r\n const hierarchy = await this._fullHierarchy.getHierarchy();\r\n if (this._filter === \"\") {\r\n this._filtered = hierarchy;\r\n return;\r\n }\r\n this.filterNodes(hierarchy);\r\n }\r\n\r\n /** Initializes `this._filtered` field. Returns a node if it matches a filter. */\r\n private filterNodes(hierarchy: Map<string | undefined, DelayLoadedTreeNodeItem[]>, current?: DelayLoadedTreeNodeItem): DelayLoadedTreeNodeItem | undefined {\r\n const matches = current ? this.matchesFilter(current) : false;\r\n const children = hierarchy.get(current?.id);\r\n if (!children)\r\n return matches ? current : undefined;\r\n\r\n const matchedChildren = new Array<DelayLoadedTreeNodeItem>();\r\n for (const child of children) {\r\n const matchedChild = this.filterNodes(hierarchy, child);\r\n matchedChild && matchedChildren.push(matchedChild);\r\n }\r\n\r\n const hasChildren = matchedChildren.length > 0;\r\n const included = matches || hasChildren;\r\n let filtered: DelayLoadedTreeNodeItem | undefined;\r\n if (included) {\r\n this._filtered.set(current?.id, matchedChildren);\r\n\r\n // Return a modified copy of current node (to persist initial hierarchy when filter is cleared).\r\n if (current) {\r\n filtered = {\r\n ...current,\r\n hasChildren,\r\n autoExpand: hasChildren ? true : current.autoExpand,\r\n };\r\n }\r\n }\r\n return filtered;\r\n }\r\n\r\n private matchesFilter(node: TreeNodeItem) {\r\n if (node.label.value.valueFormat !== PropertyValueFormat.Primitive)\r\n return false;\r\n\r\n const value = node.label.value.displayValue?.toLowerCase();\r\n if (!value)\r\n return false;\r\n return value.includes(this._filter.toLowerCase());\r\n }\r\n\r\n public async getHierarchy() {\r\n await this._init;\r\n return this._filtered;\r\n }\r\n}\r\n\r\nclass FilteredTreeDataProvider implements ITreeDataProvider {\r\n private _hierarchy: FilteredTreeHierarchy;\r\n\r\n public constructor(\r\n parentDataProvider: ITreeDataProvider,\r\n filter: string,\r\n ) {\r\n this._hierarchy = new FilteredTreeHierarchy(parentDataProvider, filter);\r\n }\r\n\r\n public async getNodes(parent?: TreeNodeItem) {\r\n const hierarchy = await this._hierarchy.getHierarchy();\r\n const nodes = hierarchy.get(parent?.id);\r\n return nodes || [];\r\n }\r\n\r\n public async getNodesCount(parent?: TreeNodeItem) {\r\n const hierarchy = await this._hierarchy.getHierarchy();\r\n const nodes = hierarchy.get(parent?.id);\r\n return nodes?.length || 0;\r\n }\r\n}\r\n"]}
@@ -61,4 +61,7 @@
61
61
 
62
62
  .map-manager-sublayer-tree-content {
63
63
  flex-grow: 1;
64
+ width: "100%";
65
+ height: "100%";
66
+ overflow: "hidden"
64
67
  }
@@ -41,24 +41,24 @@ export declare class MapLayerPreferences {
41
41
  * @param source source to be stored on the setting service
42
42
  * @param storeOnIModel if true store the settings object on the model, if false store it on the project
43
43
  */
44
- static storeSource(source: MapLayerSource, storeOnIModel: boolean, iTwinId: GuidString, iModelId: GuidString): Promise<boolean>;
44
+ static storeSource(source: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString, storeOnIModel?: boolean): Promise<boolean>;
45
45
  /** Replace the old map layer source with a new map layer source.
46
46
  *
47
47
  * The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)
48
48
  *
49
49
  * @param oldSource
50
50
  * @param newSource
51
- * @param projectId
51
+ * @param iTwinId
52
52
  * @param iModelId
53
53
  */
54
- static replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, projectId: GuidString, iModelId: GuidString): Promise<void>;
54
+ static replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString): Promise<void>;
55
55
  /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.
56
56
  *
57
57
  * @param source The source to delete. The name is used to identify the source.
58
58
  * @param iTwinId
59
59
  * @param iModelId
60
60
  */
61
- static deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId: GuidString): Promise<void>;
61
+ static deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString): Promise<void>;
62
62
  /** Deletes the current setting with the provided key if it is defined at the same preference level.
63
63
  *
64
64
  * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.
@@ -74,16 +74,16 @@ export declare class MapLayerPreferences {
74
74
  private static delete;
75
75
  /** Attempts to get a map layer based off a specific url.
76
76
  * @param url
77
- * @param projectId
77
+ * @param iTwinId
78
78
  * @param iModelId
79
79
  */
80
- static getByUrl(url: string, projectId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined>;
80
+ static getByUrl(url: string, iTwinId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined>;
81
81
  /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
82
- * @param projectId id of the project
82
+ * @param iTwinId id of the iTwin
83
83
  * @param iModelId id of the iModel
84
84
  * @throws if any of the calls to grab settings fail.
85
85
  */
86
- static getSources(projectId: GuidString, iModelId: GuidString): Promise<MapLayerSource[]>;
86
+ static getSources(iTwinId: GuidString, iModelId?: GuidString): Promise<MapLayerSource[]>;
87
87
  private static get _preferenceNamespace();
88
88
  }
89
89
  //# sourceMappingURL=MapLayerPreferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapLayerPreferences.d.ts","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG1D,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED,gBAAgB;AAChB,oBAAY,wBAAwB;IAClC,KAAK,IAAI;IACT,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,gBAAuB,oBAAoB,uBAA4B,wBAAwB,qFAA6D,IAAI,EAAI;IAEpK;;;;;;OAMG;WACiB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B5I;;;;;;;;OAQG;WACiB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CnJ;;;;;OAKG;WACiB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlH;;;;;;;;;;;OAWG;mBACkB,MAAM;IA+E3B;;;;OAIG;WACiB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IA0BhI;;;;OAIG;WACiB,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6CtG,OAAO,CAAC,MAAM,KAAK,oBAAoB,GAEtC;CACF"}
1
+ {"version":3,"file":"MapLayerPreferences.d.ts","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG1D,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED,gBAAgB;AAChB,oBAAY,wBAAwB;IAClC,KAAK,IAAI;IACT,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,gBAAuB,oBAAoB,uBAA4B,wBAAwB,qFAA6D,IAAI,EAAI;IAEpK;;;;;;OAMG;WACiB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B9I;;;;;;;;OAQG;WACiB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0ClJ;;;;;OAKG;WACiB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnH;;;;;;;;;;;OAWG;mBACkB,MAAM;IA+E3B;;;;OAIG;WACiB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IA0B9H;;;;OAIG;WACiB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6CrG,OAAO,CAAC,MAAM,KAAK,oBAAoB,GAEtC;CACF"}
@@ -26,7 +26,7 @@ export class MapLayerPreferences {
26
26
  * @param source source to be stored on the setting service
27
27
  * @param storeOnIModel if true store the settings object on the model, if false store it on the project
28
28
  */
29
- static async storeSource(source, storeOnIModel, iTwinId, iModelId) {
29
+ static async storeSource(source, iTwinId, iModelId, storeOnIModel) {
30
30
  if (!MapLayersUI.iTwinConfig)
31
31
  return false;
32
32
  const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
@@ -60,10 +60,10 @@ export class MapLayerPreferences {
60
60
  *
61
61
  * @param oldSource
62
62
  * @param newSource
63
- * @param projectId
63
+ * @param iTwinId
64
64
  * @param iModelId
65
65
  */
66
- static async replaceSource(oldSource, newSource, projectId, iModelId) {
66
+ static async replaceSource(oldSource, newSource, iTwinId, iModelId) {
67
67
  if (!MapLayersUI.iTwinConfig)
68
68
  return;
69
69
  const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
@@ -73,7 +73,7 @@ export class MapLayerPreferences {
73
73
  accessToken,
74
74
  namespace: MapLayerPreferences._preferenceNamespace,
75
75
  key: oldSource.name,
76
- iTwinId: projectId,
76
+ iTwinId,
77
77
  iModelId,
78
78
  });
79
79
  }
@@ -82,7 +82,7 @@ export class MapLayerPreferences {
82
82
  accessToken,
83
83
  namespace: MapLayerPreferences._preferenceNamespace,
84
84
  key: oldSource.name,
85
- iTwinId: projectId,
85
+ iTwinId,
86
86
  });
87
87
  storeOnIModel = true;
88
88
  }
@@ -95,7 +95,7 @@ export class MapLayerPreferences {
95
95
  await MapLayersUI.iTwinConfig.save({
96
96
  accessToken,
97
97
  key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,
98
- iTwinId: projectId,
98
+ iTwinId,
99
99
  iModelId: storeOnIModel ? iModelId : undefined,
100
100
  content: mapLayerSetting,
101
101
  });
@@ -221,10 +221,10 @@ export class MapLayerPreferences {
221
221
  }
222
222
  /** Attempts to get a map layer based off a specific url.
223
223
  * @param url
224
- * @param projectId
224
+ * @param iTwinId
225
225
  * @param iModelId
226
226
  */
227
- static async getByUrl(url, projectId, iModelId) {
227
+ static async getByUrl(url, iTwinId, iModelId) {
228
228
  var _a;
229
229
  if (!MapLayersUI.iTwinConfig)
230
230
  return undefined;
@@ -233,7 +233,7 @@ export class MapLayerPreferences {
233
233
  accessToken,
234
234
  namespace: MapLayerPreferences._preferenceNamespace,
235
235
  key: "",
236
- iTwinId: projectId,
236
+ iTwinId,
237
237
  iModelId,
238
238
  });
239
239
  if (undefined === settingResponse || 0 === settingResponse.length)
@@ -247,11 +247,11 @@ export class MapLayerPreferences {
247
247
  return savedMapLayer;
248
248
  }
249
249
  /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
250
- * @param projectId id of the project
250
+ * @param iTwinId id of the iTwin
251
251
  * @param iModelId id of the iModel
252
252
  * @throws if any of the calls to grab settings fail.
253
253
  */
254
- static async getSources(projectId, iModelId) {
254
+ static async getSources(iTwinId, iModelId) {
255
255
  if (!MapLayersUI.iTwinConfig)
256
256
  return [];
257
257
  const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
@@ -261,7 +261,7 @@ export class MapLayerPreferences {
261
261
  accessToken,
262
262
  namespace: MapLayerPreferences._preferenceNamespace,
263
263
  key: "",
264
- iTwinId: projectId,
264
+ iTwinId,
265
265
  });
266
266
  if (undefined !== userResultByProject)
267
267
  mapLayerList.push(userResultByProject);
@@ -274,7 +274,7 @@ export class MapLayerPreferences {
274
274
  accessToken,
275
275
  namespace: MapLayerPreferences._preferenceNamespace,
276
276
  key: "",
277
- iTwinId: projectId,
277
+ iTwinId,
278
278
  iModelId,
279
279
  });
280
280
  if (undefined !== userResultByIModel)
@@ -1 +1 @@
1
- {"version":3,"file":"MapLayerPreferences.js","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelApp, MapLayerSource, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { BeEvent, GuidString } from \"@itwin/core-bentley\";\r\nimport { MapLayersUI } from \"./mapLayers\";\r\n\r\n/** @internal */\r\nexport interface MapLayerPreferencesContent {\r\n url: string;\r\n name: string;\r\n formatId: string;\r\n transparentBackground: boolean | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport enum MapLayerSourceChangeType {\r\n Added = 0,\r\n Removed = 1,\r\n Replaced = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface MapLayerSourceArg {\r\n readonly source: MapLayerSource;\r\n readonly iTwinId: GuidString;\r\n readonly iModelId: GuidString;\r\n}\r\n\r\n/** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].\r\n *\r\n * Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.\r\n *\r\n * @internal\r\n */\r\nexport class MapLayerPreferences {\r\n /** Event raised whenever a source is added, replaced or removed:\r\n * changeType : Type of changed occurred.\r\n * oldSource : Source that was removed or replaced.\r\n * newSource : Source that was added or replacement of oldSource.\r\n *\r\n * @see [[MapLayerSourceChangeType]]\r\n */\r\n public static readonly onLayerSourceChanged = new BeEvent<(changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => void>(); // Used to notify the frontend that it needs to update its list of available layers\r\n\r\n /** Store the Map Layer source preference. If the same setting exists at a higher level, an error will be thrown and the setting will not be updated.\r\n *\r\n * Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when\r\n * a project setting exists with same name or map layer url.\r\n * @param source source to be stored on the setting service\r\n * @param storeOnIModel if true store the settings object on the model, if false store it on the project\r\n */\r\n public static async storeSource(source: MapLayerSource, storeOnIModel: boolean, iTwinId: GuidString, iModelId: GuidString): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return false;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const sourceJSON = source.toJSON();\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: sourceJSON.url,\r\n name: sourceJSON.name,\r\n formatId: sourceJSON.formatId,\r\n transparentBackground: sourceJSON.transparentBackground,\r\n };\r\n\r\n const result: boolean = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);\r\n if (result) {\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n content: mapLayerSetting,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: sourceJSON.name,\r\n iTwinId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n });\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, MapLayerSource.fromJSON(mapLayerSetting));\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Replace the old map layer source with a new map layer source.\r\n *\r\n * The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)\r\n *\r\n * @param oldSource\r\n * @param newSource\r\n * @param projectId\r\n * @param iModelId\r\n */\r\n public static async replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, projectId: GuidString, iModelId: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n let storeOnIModel = false;\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId: projectId,\r\n });\r\n storeOnIModel = true;\r\n }\r\n\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: newSource.url,\r\n name: newSource.name,\r\n formatId: newSource.formatId,\r\n transparentBackground: newSource.transparentBackground,\r\n };\r\n\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,\r\n iTwinId: projectId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n content: mapLayerSetting,\r\n });\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);\r\n }\r\n\r\n /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.\r\n *\r\n * @param source The source to delete. The name is used to identify the source.\r\n * @param iTwinId\r\n * @param iModelId\r\n */\r\n public static async deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n // failed to store based on iModelId, attempt using iTwinId\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);\r\n }\r\n\r\n /** Deletes the current setting with the provided key if it is defined at the same preference level.\r\n *\r\n * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.\r\n *\r\n * The two potential preference levels are iTwin and iModel.\r\n *\r\n * @param url\r\n * @param name\r\n * @param iTwinId\r\n * @param iModelId\r\n * @param storeOnIModel\r\n */\r\n private static async delete(url: string, name: string, iTwinId: GuidString, iModelId: GuidString, storeOnIModel: boolean): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return true;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const iTwinPreferenceByName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n });\r\n\r\n if (undefined !== iTwinPreferenceByName && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsAsProjectSetting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (iTwinPreferenceByName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: iTwinPreferenceByName.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n // check if setting with url already exists, if it does, delete it\r\n const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);\r\n if (settingFromUrl && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting\", { url: settingFromUrl.url, name: settingFromUrl.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (settingFromUrl) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrl.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n if (iModelId) { // delete any settings on model so user can update them if theres collisions\r\n const settingOnIModelFromName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);\r\n if (settingOnIModelFromName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: settingOnIModelFromName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingOnIModelFromName.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n if (settingFromUrlOnIModel) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrlOnIModel.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Attempts to get a map layer based off a specific url.\r\n * @param url\r\n * @param projectId\r\n * @param iModelId\r\n */\r\n public static async getByUrl(url: string, projectId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return undefined;\r\n\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const settingResponse = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n\r\n if (undefined === settingResponse || 0 === settingResponse.length)\r\n return undefined;\r\n\r\n let savedMapLayer;\r\n settingResponse.settingsMap?.forEach((savedLayer: any) => {\r\n if (savedLayer.url === url) {\r\n savedMapLayer = savedLayer;\r\n }\r\n });\r\n return savedMapLayer;\r\n }\r\n\r\n /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.\r\n * @param projectId id of the project\r\n * @param iModelId id of the iModel\r\n * @throws if any of the calls to grab settings fail.\r\n */\r\n public static async getSources(projectId: GuidString, iModelId: GuidString): Promise<MapLayerSource[]> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return [];\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const mapLayerList = [];\r\n\r\n try {\r\n const userResultByProject = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n });\r\n if (undefined !== userResultByProject)\r\n mapLayerList.push(userResultByProject);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n try {\r\n const userResultByIModel = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n if (undefined !== userResultByIModel)\r\n mapLayerList.push(userResultByIModel);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n const savedMapLayerSources: MapLayerSource[] = [];\r\n for (const mapLayer of mapLayerList) {\r\n mapLayer.forEach((savedLayer: any) => {\r\n const mapLayerSource = MapLayerSource.fromJSON(savedLayer as MapLayerPreferencesContent);\r\n if (mapLayerSource)\r\n savedMapLayerSources.push(mapLayerSource);\r\n });\r\n }\r\n return savedMapLayerSources;\r\n }\r\n\r\n private static get _preferenceNamespace() {\r\n return \"MapLayerSource-SettingsService\";\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MapLayerPreferences.js","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelApp, MapLayerSource, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { BeEvent, GuidString } from \"@itwin/core-bentley\";\r\nimport { MapLayersUI } from \"./mapLayers\";\r\n\r\n/** @internal */\r\nexport interface MapLayerPreferencesContent {\r\n url: string;\r\n name: string;\r\n formatId: string;\r\n transparentBackground: boolean | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport enum MapLayerSourceChangeType {\r\n Added = 0,\r\n Removed = 1,\r\n Replaced = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface MapLayerSourceArg {\r\n readonly source: MapLayerSource;\r\n readonly iTwinId: GuidString;\r\n readonly iModelId: GuidString;\r\n}\r\n\r\n/** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].\r\n *\r\n * Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.\r\n *\r\n * @internal\r\n */\r\nexport class MapLayerPreferences {\r\n /** Event raised whenever a source is added, replaced or removed:\r\n * changeType : Type of changed occurred.\r\n * oldSource : Source that was removed or replaced.\r\n * newSource : Source that was added or replacement of oldSource.\r\n *\r\n * @see [[MapLayerSourceChangeType]]\r\n */\r\n public static readonly onLayerSourceChanged = new BeEvent<(changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => void>(); // Used to notify the frontend that it needs to update its list of available layers\r\n\r\n /** Store the Map Layer source preference. If the same setting exists at a higher level, an error will be thrown and the setting will not be updated.\r\n *\r\n * Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when\r\n * a project setting exists with same name or map layer url.\r\n * @param source source to be stored on the setting service\r\n * @param storeOnIModel if true store the settings object on the model, if false store it on the project\r\n */\r\n public static async storeSource(source: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString, storeOnIModel?: boolean): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return false;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const sourceJSON = source.toJSON();\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: sourceJSON.url,\r\n name: sourceJSON.name,\r\n formatId: sourceJSON.formatId,\r\n transparentBackground: sourceJSON.transparentBackground,\r\n };\r\n\r\n const result: boolean = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);\r\n if (result) {\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n content: mapLayerSetting,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: sourceJSON.name,\r\n iTwinId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n });\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, MapLayerSource.fromJSON(mapLayerSetting));\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Replace the old map layer source with a new map layer source.\r\n *\r\n * The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)\r\n *\r\n * @param oldSource\r\n * @param newSource\r\n * @param iTwinId\r\n * @param iModelId\r\n */\r\n public static async replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n let storeOnIModel = false;\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId,\r\n });\r\n storeOnIModel = true;\r\n }\r\n\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: newSource.url,\r\n name: newSource.name,\r\n formatId: newSource.formatId,\r\n transparentBackground: newSource.transparentBackground,\r\n };\r\n\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,\r\n iTwinId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n content: mapLayerSetting,\r\n });\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);\r\n }\r\n\r\n /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.\r\n *\r\n * @param source The source to delete. The name is used to identify the source.\r\n * @param iTwinId\r\n * @param iModelId\r\n */\r\n public static async deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId?: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n // failed to store based on iModelId, attempt using iTwinId\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);\r\n }\r\n\r\n /** Deletes the current setting with the provided key if it is defined at the same preference level.\r\n *\r\n * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.\r\n *\r\n * The two potential preference levels are iTwin and iModel.\r\n *\r\n * @param url\r\n * @param name\r\n * @param iTwinId\r\n * @param iModelId\r\n * @param storeOnIModel\r\n */\r\n private static async delete(url: string, name: string, iTwinId: GuidString, iModelId?: GuidString, storeOnIModel?: boolean): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return true;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const iTwinPreferenceByName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n });\r\n\r\n if (undefined !== iTwinPreferenceByName && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsAsProjectSetting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (iTwinPreferenceByName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: iTwinPreferenceByName.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n // check if setting with url already exists, if it does, delete it\r\n const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);\r\n if (settingFromUrl && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting\", { url: settingFromUrl.url, name: settingFromUrl.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (settingFromUrl) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrl.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n if (iModelId) { // delete any settings on model so user can update them if theres collisions\r\n const settingOnIModelFromName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);\r\n if (settingOnIModelFromName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: settingOnIModelFromName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingOnIModelFromName.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n if (settingFromUrlOnIModel) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrlOnIModel.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Attempts to get a map layer based off a specific url.\r\n * @param url\r\n * @param iTwinId\r\n * @param iModelId\r\n */\r\n public static async getByUrl(url: string, iTwinId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return undefined;\r\n\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const settingResponse = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId,\r\n iModelId,\r\n });\r\n\r\n if (undefined === settingResponse || 0 === settingResponse.length)\r\n return undefined;\r\n\r\n let savedMapLayer;\r\n settingResponse.settingsMap?.forEach((savedLayer: any) => {\r\n if (savedLayer.url === url) {\r\n savedMapLayer = savedLayer;\r\n }\r\n });\r\n return savedMapLayer;\r\n }\r\n\r\n /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.\r\n * @param iTwinId id of the iTwin\r\n * @param iModelId id of the iModel\r\n * @throws if any of the calls to grab settings fail.\r\n */\r\n public static async getSources(iTwinId: GuidString, iModelId?: GuidString): Promise<MapLayerSource[]> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return [];\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const mapLayerList = [];\r\n\r\n try {\r\n const userResultByProject = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId,\r\n });\r\n if (undefined !== userResultByProject)\r\n mapLayerList.push(userResultByProject);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n try {\r\n const userResultByIModel = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId,\r\n iModelId,\r\n });\r\n if (undefined !== userResultByIModel)\r\n mapLayerList.push(userResultByIModel);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n const savedMapLayerSources: MapLayerSource[] = [];\r\n for (const mapLayer of mapLayerList) {\r\n mapLayer.forEach((savedLayer: any) => {\r\n const mapLayerSource = MapLayerSource.fromJSON(savedLayer as MapLayerPreferencesContent);\r\n if (mapLayerSource)\r\n savedMapLayerSources.push(mapLayerSource);\r\n });\r\n }\r\n return savedMapLayerSources;\r\n }\r\n\r\n private static get _preferenceNamespace() {\r\n return \"MapLayerSource-SettingsService\";\r\n }\r\n}\r\n"]}
@@ -1,5 +1,7 @@
1
1
  export * from "./mapLayers";
2
2
  export * from "./ui/Interfaces";
3
3
  export * from "./ui/MapLayersUiItemsProvider";
4
+ export * from "./ui/FeatureInfoUiItemsProvider";
5
+ export * from "./ui/MapFeatureInfoTool";
4
6
  export * from "./ui/widget/MapLayersWidget";
5
7
  //# sourceMappingURL=map-layers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-layers.d.ts","sourceRoot":"","sources":["../../src/map-layers.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"map-layers.d.ts","sourceRoot":"","sources":["../../src/map-layers.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC"}
@@ -5,5 +5,7 @@
5
5
  export * from "./mapLayers";
6
6
  export * from "./ui/Interfaces";
7
7
  export * from "./ui/MapLayersUiItemsProvider";
8
+ export * from "./ui/FeatureInfoUiItemsProvider";
9
+ export * from "./ui/MapFeatureInfoTool";
8
10
  export * from "./ui/widget/MapLayersWidget";
9
11
  //# sourceMappingURL=map-layers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"map-layers.js","sourceRoot":"","sources":["../../src/map-layers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./mapLayers\";\r\nexport * from \"./ui/Interfaces\";\r\nexport * from \"./ui/MapLayersUiItemsProvider\";\r\nexport * from \"./ui/widget/MapLayersWidget\";\r\n"]}
1
+ {"version":3,"file":"map-layers.js","sourceRoot":"","sources":["../../src/map-layers.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./mapLayers\";\r\nexport * from \"./ui/Interfaces\";\r\nexport * from \"./ui/MapLayersUiItemsProvider\";\r\nexport * from \"./ui/FeatureInfoUiItemsProvider\";\r\nexport * from \"./ui/MapFeatureInfoTool\";\r\nexport * from \"./ui/widget/MapLayersWidget\";\r\n"]}
@@ -1,30 +1,28 @@
1
+ import { Localization } from "@itwin/core-common";
1
2
  import { UserPreferencesAccess } from "@itwin/core-frontend";
3
+ import { MapFeatureInfoOptions, MapLayerOptions } from "./ui/Interfaces";
4
+ export interface MapLayersConfig {
5
+ localization?: Localization;
6
+ /** If an iTwinConfig is provided, it will be used to load the MapLayerSources that are stored. */
7
+ iTwinConfig?: UserPreferencesAccess;
8
+ mapLayerOptions?: MapLayerOptions;
9
+ featureInfoOpts?: MapFeatureInfoOptions;
10
+ }
2
11
  /** MapLayersUI is use when the package is used as a dependency to another app.
3
12
  * '''ts
4
- * await MapLayersUI.initialize(registerItemsProvider);
13
+ * await MapLayersUI.initialize({...MapLayersInitProps});
5
14
  * '''
6
15
  * @beta
7
16
  */
8
17
  export declare class MapLayersUI {
9
18
  private static _defaultNs;
10
- private static _uiItemsProvider;
11
- private static _itemsProviderRegistered?;
19
+ static localization: Localization;
20
+ private static _uiItemsProviders;
12
21
  private static _iTwinConfig?;
13
22
  static get iTwinConfig(): UserPreferencesAccess | undefined;
14
- /** Used to initialize the Map Layers.
15
- *
16
- * If `registerItemsProvider` is true, the UiItemsProvider will automatically insert the UI items into the host applications UI.
17
- * If it is false, explicitly add widget definition to a specific FrontStage definition using the following syntax.
18
- *
19
- * ```tsx
20
- * <Widget id={MapLayersWidgetControl.id} label={MapLayersWidgetControl.label} control={MapLayersWidgetControl}
21
- * iconSpec={MapLayersWidgetControl.iconSpec} />,
22
- * ```
23
- *
24
- * If an iTwinConfig is provided, it will be used to load the MapLayerSources that are stored.
25
- */
26
- static initialize(registerItemsProvider?: boolean, iTwinConfig?: UserPreferencesAccess): Promise<void>;
27
- /** Unregisters internationalization service namespace and UiItemManager / control */
23
+ /** Used to initialize the Map Layers */
24
+ static initialize(config?: MapLayersConfig): Promise<void>;
25
+ /** Unregisters internationalization service namespace and UiItemManager */
28
26
  static terminate(): void;
29
27
  /** The internationalization service namespace. */
30
28
  static get localizationNamespace(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"mapLayers.d.ts","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIxE;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAe;IACxC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAU;IAElD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAwB;IACpD,WAAkB,WAAW,IAAI,qBAAqB,GAAG,SAAS,CAA8B;IAEhG;;;;;;;;;;;OAWG;WACiB,UAAU,CAAC,qBAAqB,UAAO,EAAE,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAchH,qFAAqF;WACvE,SAAS;IAWvB,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;CACF"}
1
+ {"version":3,"file":"mapLayers.d.ts","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAa,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIxE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kGAAkG;IAClG,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAe;IACxC,OAAc,YAAY,EAAE,YAAY,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAyB;IAEzD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAwB;IAEpD,WAAkB,WAAW,IAAI,qBAAqB,GAAG,SAAS,CAEjE;IAED,wCAAwC;WACpB,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBvE,4EAA4E;WAC9D,SAAS;IAQvB,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;CACF"}