@itwin/map-layers 4.0.0-dev.8 → 5.0.0-dev.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 (203) hide show
  1. package/CHANGELOG.md +746 -848
  2. package/README.md +32 -32
  3. package/lib/cjs/MapLayerPreferences.d.ts +88 -88
  4. package/lib/cjs/MapLayerPreferences.js +311 -312
  5. package/lib/cjs/MapLayerPreferences.js.map +1 -1
  6. package/lib/cjs/map-layers.d.ts +6 -6
  7. package/lib/cjs/map-layers.js +22 -22
  8. package/lib/cjs/mapLayers.d.ts +26 -44
  9. package/lib/cjs/mapLayers.d.ts.map +1 -1
  10. package/lib/cjs/mapLayers.js +33 -63
  11. package/lib/cjs/mapLayers.js.map +1 -1
  12. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +16 -11
  13. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  14. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +46 -52
  15. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  16. package/lib/cjs/ui/Interfaces.d.ts +50 -50
  17. package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
  18. package/lib/cjs/ui/Interfaces.js +2 -2
  19. package/lib/cjs/ui/Interfaces.js.map +1 -1
  20. package/lib/cjs/ui/MapFeatureInfoTool.d.ts +13 -13
  21. package/lib/cjs/ui/MapFeatureInfoTool.d.ts.map +1 -1
  22. package/lib/cjs/ui/MapFeatureInfoTool.js +50 -50
  23. package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -1
  24. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +8 -8
  25. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  26. package/lib/cjs/ui/MapLayersUiItemsProvider.js +35 -38
  27. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  28. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  29. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  30. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +334 -338
  31. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  32. package/lib/cjs/ui/widget/BasemapPanel.d.ts +7 -8
  33. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  34. package/lib/cjs/ui/widget/BasemapPanel.js +151 -156
  35. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  36. package/lib/cjs/ui/widget/BasemapPanel.scss +87 -87
  37. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  38. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  39. package/lib/cjs/ui/widget/ConfirmMessageDialog.js +22 -25
  40. package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
  41. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +35 -40
  42. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  43. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +139 -139
  44. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  45. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +6 -7
  46. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  47. package/lib/cjs/ui/widget/FeatureInfoWidget.js +70 -71
  48. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  49. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +18 -19
  50. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  51. package/lib/cjs/ui/widget/MapLayerDroppable.js +85 -88
  52. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  53. package/lib/cjs/ui/widget/MapLayerManager.d.ts +26 -26
  54. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  55. package/lib/cjs/ui/widget/MapLayerManager.js +399 -403
  56. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  57. package/lib/cjs/ui/widget/MapLayerManager.scss +409 -409
  58. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  59. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  60. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +79 -83
  61. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  62. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  63. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  64. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +65 -65
  65. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  66. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  67. package/lib/cjs/ui/widget/MapLayersWidget.d.ts +10 -11
  68. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  69. package/lib/cjs/ui/widget/MapLayersWidget.js +31 -31
  70. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  71. package/lib/cjs/ui/widget/MapManagerSettings.d.ts +2 -3
  72. package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
  73. package/lib/cjs/ui/widget/MapManagerSettings.js +195 -200
  74. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  75. package/lib/cjs/ui/widget/MapManagerSettings.scss +29 -29
  76. package/lib/cjs/ui/widget/MapUrlDialog.d.ts +22 -23
  77. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  78. package/lib/cjs/ui/widget/MapUrlDialog.js +528 -527
  79. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  80. package/lib/cjs/ui/widget/MapUrlDialog.scss +99 -100
  81. package/lib/cjs/ui/widget/SelectMapFormat.d.ts +17 -18
  82. package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
  83. package/lib/cjs/ui/widget/SelectMapFormat.js +54 -59
  84. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  85. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts +18 -20
  86. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  87. package/lib/cjs/ui/widget/SubLayersDataProvider.js +74 -76
  88. package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
  89. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts +9 -10
  90. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  91. package/lib/cjs/ui/widget/SubLayersPopupButton.js +40 -40
  92. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  93. package/lib/cjs/ui/widget/SubLayersTree.d.ts +14 -15
  94. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  95. package/lib/cjs/ui/widget/SubLayersTree.js +408 -419
  96. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  97. package/lib/cjs/ui/widget/SubLayersTree.scss +70 -69
  98. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts +13 -14
  99. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  100. package/lib/cjs/ui/widget/TransparencyPopupButton.js +47 -47
  101. package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
  102. package/lib/cjs/ui/widget/TransparencyPopupButton.scss +35 -36
  103. package/lib/esm/MapLayerPreferences.d.ts +88 -88
  104. package/lib/esm/MapLayerPreferences.js +307 -308
  105. package/lib/esm/MapLayerPreferences.js.map +1 -1
  106. package/lib/esm/map-layers.d.ts +6 -6
  107. package/lib/esm/map-layers.js +10 -10
  108. package/lib/esm/mapLayers.d.ts +26 -44
  109. package/lib/esm/mapLayers.d.ts.map +1 -1
  110. package/lib/esm/mapLayers.js +29 -59
  111. package/lib/esm/mapLayers.js.map +1 -1
  112. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +16 -11
  113. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  114. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +42 -48
  115. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  116. package/lib/esm/ui/Interfaces.d.ts +50 -50
  117. package/lib/esm/ui/Interfaces.d.ts.map +1 -1
  118. package/lib/esm/ui/Interfaces.js +1 -1
  119. package/lib/esm/ui/Interfaces.js.map +1 -1
  120. package/lib/esm/ui/MapFeatureInfoTool.d.ts +13 -13
  121. package/lib/esm/ui/MapFeatureInfoTool.d.ts.map +1 -1
  122. package/lib/esm/ui/MapFeatureInfoTool.js +45 -45
  123. package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -1
  124. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +8 -8
  125. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  126. package/lib/esm/ui/MapLayersUiItemsProvider.js +31 -34
  127. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  128. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  129. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  130. package/lib/esm/ui/widget/AttachLayerPopupButton.js +330 -334
  131. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  132. package/lib/esm/ui/widget/BasemapPanel.d.ts +7 -8
  133. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  134. package/lib/esm/ui/widget/BasemapPanel.js +147 -152
  135. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  136. package/lib/esm/ui/widget/BasemapPanel.scss +87 -87
  137. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  138. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  139. package/lib/esm/ui/widget/ConfirmMessageDialog.js +18 -21
  140. package/lib/esm/ui/widget/ConfirmMessageDialog.js.map +1 -1
  141. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +35 -40
  142. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  143. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +135 -135
  144. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  145. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +6 -7
  146. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  147. package/lib/esm/ui/widget/FeatureInfoWidget.js +66 -67
  148. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  149. package/lib/esm/ui/widget/MapLayerDroppable.d.ts +18 -19
  150. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  151. package/lib/esm/ui/widget/MapLayerDroppable.js +81 -84
  152. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  153. package/lib/esm/ui/widget/MapLayerManager.d.ts +26 -26
  154. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  155. package/lib/esm/ui/widget/MapLayerManager.js +394 -398
  156. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  157. package/lib/esm/ui/widget/MapLayerManager.scss +409 -409
  158. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  159. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  160. package/lib/esm/ui/widget/MapLayerSettingsMenu.js +75 -79
  161. package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  162. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  163. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  164. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +61 -61
  165. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  166. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  167. package/lib/esm/ui/widget/MapLayersWidget.d.ts +10 -11
  168. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  169. package/lib/esm/ui/widget/MapLayersWidget.js +27 -27
  170. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  171. package/lib/esm/ui/widget/MapManagerSettings.d.ts +2 -3
  172. package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
  173. package/lib/esm/ui/widget/MapManagerSettings.js +191 -196
  174. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  175. package/lib/esm/ui/widget/MapManagerSettings.scss +29 -29
  176. package/lib/esm/ui/widget/MapUrlDialog.d.ts +22 -23
  177. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  178. package/lib/esm/ui/widget/MapUrlDialog.js +524 -523
  179. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  180. package/lib/esm/ui/widget/MapUrlDialog.scss +99 -100
  181. package/lib/esm/ui/widget/SelectMapFormat.d.ts +17 -18
  182. package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
  183. package/lib/esm/ui/widget/SelectMapFormat.js +50 -55
  184. package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
  185. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts +18 -20
  186. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  187. package/lib/esm/ui/widget/SubLayersDataProvider.js +70 -72
  188. package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
  189. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts +9 -10
  190. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  191. package/lib/esm/ui/widget/SubLayersPopupButton.js +36 -36
  192. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  193. package/lib/esm/ui/widget/SubLayersTree.d.ts +14 -15
  194. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  195. package/lib/esm/ui/widget/SubLayersTree.js +403 -414
  196. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  197. package/lib/esm/ui/widget/SubLayersTree.scss +70 -69
  198. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts +13 -14
  199. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  200. package/lib/esm/ui/widget/TransparencyPopupButton.js +43 -43
  201. package/lib/esm/ui/widget/TransparencyPopupButton.js.map +1 -1
  202. package/lib/esm/ui/widget/TransparencyPopupButton.scss +35 -36
  203. package/package.json +39 -38
@@ -1,309 +1,308 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- import { IModelApp, MapLayerSource, NotifyMessageDetails, OutputMessagePriority } from "@itwin/core-frontend";
6
- import { BeEvent } from "@itwin/core-bentley";
7
- import { MapLayersUI } from "./mapLayers";
8
- /** @internal */
9
- export var MapLayerSourceChangeType;
10
- (function (MapLayerSourceChangeType) {
11
- MapLayerSourceChangeType[MapLayerSourceChangeType["Added"] = 0] = "Added";
12
- MapLayerSourceChangeType[MapLayerSourceChangeType["Removed"] = 1] = "Removed";
13
- MapLayerSourceChangeType[MapLayerSourceChangeType["Replaced"] = 2] = "Replaced";
14
- })(MapLayerSourceChangeType || (MapLayerSourceChangeType = {}));
15
- /** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].
16
- *
17
- * Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.
18
- *
19
- * @internal
20
- */
21
- export class MapLayerPreferences {
22
- /** 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.
23
- *
24
- * Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when
25
- * a project setting exists with same name or map layer url.
26
- * @param source source to be stored on the setting service
27
- * @param storeOnIModel if true store the settings object on the model, if false store it on the project
28
- */
29
- static async storeSource(source, iTwinId, iModelId, storeOnIModel) {
30
- if (!MapLayersUI.iTwinConfig)
31
- return false;
32
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
33
- const sourceJSON = source.toJSON();
34
- const mapLayerSetting = {
35
- url: sourceJSON.url,
36
- name: sourceJSON.name,
37
- formatId: sourceJSON.formatId,
38
- transparentBackground: sourceJSON.transparentBackground,
39
- };
40
- const result = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);
41
- if (result) {
42
- await MapLayersUI.iTwinConfig.save({
43
- accessToken,
44
- content: mapLayerSetting,
45
- namespace: MapLayerPreferences._preferenceNamespace,
46
- key: sourceJSON.name,
47
- iTwinId,
48
- iModelId: storeOnIModel ? iModelId : undefined,
49
- });
50
- MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, MapLayerSource.fromJSON(mapLayerSetting));
51
- return true;
52
- }
53
- else {
54
- return false;
55
- }
56
- }
57
- /** Replace the old map layer source with a new map layer source.
58
- *
59
- * 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.)
60
- *
61
- * @param oldSource
62
- * @param newSource
63
- * @param iTwinId
64
- * @param iModelId
65
- */
66
- static async replaceSource(oldSource, newSource, iTwinId, iModelId) {
67
- if (!MapLayersUI.iTwinConfig)
68
- return;
69
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
70
- let storeOnIModel = false;
71
- try {
72
- await MapLayersUI.iTwinConfig.delete({
73
- accessToken,
74
- namespace: MapLayerPreferences._preferenceNamespace,
75
- key: oldSource.name,
76
- iTwinId,
77
- iModelId,
78
- });
79
- }
80
- catch (_err) {
81
- await MapLayersUI.iTwinConfig.delete({
82
- accessToken,
83
- namespace: MapLayerPreferences._preferenceNamespace,
84
- key: oldSource.name,
85
- iTwinId,
86
- });
87
- storeOnIModel = true;
88
- }
89
- const mapLayerSetting = {
90
- url: newSource.url,
91
- name: newSource.name,
92
- formatId: newSource.formatId,
93
- transparentBackground: newSource.transparentBackground,
94
- };
95
- await MapLayersUI.iTwinConfig.save({
96
- accessToken,
97
- namespace: MapLayerPreferences._preferenceNamespace,
98
- key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,
99
- iTwinId,
100
- iModelId: storeOnIModel ? iModelId : undefined,
101
- content: mapLayerSetting,
102
- });
103
- MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);
104
- }
105
- /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.
106
- *
107
- * @param source The source to delete. The name is used to identify the source.
108
- * @param iTwinId
109
- * @param iModelId
110
- */
111
- static async deleteByName(source, iTwinId, iModelId) {
112
- if (!MapLayersUI.iTwinConfig)
113
- return;
114
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
115
- try {
116
- await MapLayersUI.iTwinConfig.delete({
117
- accessToken,
118
- namespace: MapLayerPreferences._preferenceNamespace,
119
- key: source.name,
120
- iTwinId,
121
- iModelId,
122
- });
123
- }
124
- catch (_err) {
125
- // failed to store based on iModelId, attempt using iTwinId
126
- await MapLayersUI.iTwinConfig.delete({
127
- accessToken,
128
- namespace: MapLayerPreferences._preferenceNamespace,
129
- key: source.name,
130
- iTwinId,
131
- });
132
- }
133
- MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);
134
- }
135
- /** Deletes the current setting with the provided key if it is defined at the same preference level.
136
- *
137
- * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.
138
- *
139
- * The two potential preference levels are iTwin and iModel.
140
- *
141
- * @param url
142
- * @param name
143
- * @param iTwinId
144
- * @param iModelId
145
- * @param storeOnIModel
146
- */
147
- static async delete(url, name, iTwinId, iModelId, storeOnIModel) {
148
- if (!MapLayersUI.iTwinConfig)
149
- return true;
150
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
151
- const iTwinPreferenceByName = await MapLayersUI.iTwinConfig.get({
152
- accessToken,
153
- namespace: MapLayerPreferences._preferenceNamespace,
154
- key: name,
155
- iTwinId,
156
- });
157
- if (undefined !== iTwinPreferenceByName && storeOnIModel) {
158
- const errorMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsAsProjectSetting", { layer: iTwinPreferenceByName.name });
159
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));
160
- return false;
161
- }
162
- else if (iTwinPreferenceByName) {
163
- const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: iTwinPreferenceByName.name });
164
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
165
- await MapLayersUI.iTwinConfig.delete({
166
- accessToken,
167
- namespace: MapLayerPreferences._preferenceNamespace,
168
- key: iTwinPreferenceByName.name,
169
- iTwinId,
170
- });
171
- }
172
- // check if setting with url already exists, if it does, delete it
173
- const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);
174
- if (settingFromUrl && storeOnIModel) {
175
- const errorMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting", { url: settingFromUrl.url, name: settingFromUrl.name });
176
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));
177
- return false;
178
- }
179
- else if (settingFromUrl) {
180
- const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });
181
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
182
- await MapLayersUI.iTwinConfig.delete({
183
- accessToken,
184
- namespace: MapLayerPreferences._preferenceNamespace,
185
- key: settingFromUrl.name,
186
- iTwinId,
187
- });
188
- }
189
- if (iModelId) { // delete any settings on model so user can update them if theres collisions
190
- const settingOnIModelFromName = await MapLayersUI.iTwinConfig.get({
191
- accessToken,
192
- namespace: MapLayerPreferences._preferenceNamespace,
193
- key: name,
194
- iTwinId,
195
- iModelId,
196
- });
197
- const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);
198
- if (settingOnIModelFromName) {
199
- const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: settingOnIModelFromName.name });
200
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
201
- await MapLayersUI.iTwinConfig.delete({
202
- accessToken,
203
- namespace: MapLayerPreferences._preferenceNamespace,
204
- key: settingOnIModelFromName.name,
205
- iTwinId,
206
- iModelId,
207
- });
208
- }
209
- if (settingFromUrlOnIModel) {
210
- const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });
211
- IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
212
- await MapLayersUI.iTwinConfig.delete({
213
- accessToken,
214
- namespace: MapLayerPreferences._preferenceNamespace,
215
- key: settingFromUrlOnIModel.name,
216
- iTwinId,
217
- iModelId,
218
- });
219
- }
220
- }
221
- return true;
222
- }
223
- /** Attempts to get a map layer based off a specific url.
224
- * @param url
225
- * @param iTwinId
226
- * @param iModelId
227
- */
228
- static async getByUrl(url, iTwinId, iModelId) {
229
- var _a;
230
- if (!MapLayersUI.iTwinConfig)
231
- return undefined;
232
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
233
- const settingResponse = await MapLayersUI.iTwinConfig.get({
234
- accessToken,
235
- namespace: MapLayerPreferences._preferenceNamespace,
236
- key: "",
237
- iTwinId,
238
- iModelId,
239
- });
240
- if (undefined === settingResponse || 0 === settingResponse.length)
241
- return undefined;
242
- let savedMapLayer;
243
- (_a = settingResponse.settingsMap) === null || _a === void 0 ? void 0 : _a.forEach((savedLayer) => {
244
- if (savedLayer.url === url) {
245
- savedMapLayer = savedLayer;
246
- }
247
- });
248
- return savedMapLayer;
249
- }
250
- /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
251
- * @param iTwinId id of the iTwin
252
- * @param iModelId id of the iModel
253
- * @throws if any of the calls to grab settings fail.
254
- */
255
- static async getSources(iTwinId, iModelId) {
256
- if (!MapLayersUI.iTwinConfig)
257
- return [];
258
- const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
259
- const mapLayerList = [];
260
- try {
261
- const userResultByProject = await MapLayersUI.iTwinConfig.get({
262
- accessToken,
263
- namespace: MapLayerPreferences._preferenceNamespace,
264
- key: "",
265
- iTwinId,
266
- });
267
- if (undefined !== userResultByProject)
268
- mapLayerList.push(userResultByProject);
269
- }
270
- catch (err) {
271
- throw new Error(IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
272
- }
273
- try {
274
- const userResultByIModel = await MapLayersUI.iTwinConfig.get({
275
- accessToken,
276
- namespace: MapLayerPreferences._preferenceNamespace,
277
- key: "",
278
- iTwinId,
279
- iModelId,
280
- });
281
- if (undefined !== userResultByIModel)
282
- mapLayerList.push(userResultByIModel);
283
- }
284
- catch (err) {
285
- throw new Error(IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
286
- }
287
- const savedMapLayerSources = [];
288
- for (const mapLayer of mapLayerList) {
289
- mapLayer.forEach((savedLayer) => {
290
- const mapLayerSource = MapLayerSource.fromJSON(savedLayer);
291
- if (mapLayerSource)
292
- savedMapLayerSources.push(mapLayerSource);
293
- });
294
- }
295
- return savedMapLayerSources;
296
- }
297
- static get _preferenceNamespace() {
298
- return "MapLayerSource-SettingsService";
299
- }
300
- }
301
- /** Event raised whenever a source is added, replaced or removed:
302
- * changeType : Type of changed occurred.
303
- * oldSource : Source that was removed or replaced.
304
- * newSource : Source that was added or replacement of oldSource.
305
- *
306
- * @see [[MapLayerSourceChangeType]]
307
- */
308
- MapLayerPreferences.onLayerSourceChanged = new BeEvent(); // Used to notify the frontend that it needs to update its list of available layers
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ import { IModelApp, MapLayerSource, NotifyMessageDetails, OutputMessagePriority } from "@itwin/core-frontend";
6
+ import { BeEvent } from "@itwin/core-bentley";
7
+ import { MapLayersUI } from "./mapLayers";
8
+ /** @internal */
9
+ export var MapLayerSourceChangeType;
10
+ (function (MapLayerSourceChangeType) {
11
+ MapLayerSourceChangeType[MapLayerSourceChangeType["Added"] = 0] = "Added";
12
+ MapLayerSourceChangeType[MapLayerSourceChangeType["Removed"] = 1] = "Removed";
13
+ MapLayerSourceChangeType[MapLayerSourceChangeType["Replaced"] = 2] = "Replaced";
14
+ })(MapLayerSourceChangeType || (MapLayerSourceChangeType = {}));
15
+ /** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].
16
+ *
17
+ * Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.
18
+ *
19
+ * @internal
20
+ */
21
+ export class MapLayerPreferences {
22
+ /** 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.
23
+ *
24
+ * Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when
25
+ * a project setting exists with same name or map layer url.
26
+ * @param source source to be stored on the setting service
27
+ * @param storeOnIModel if true store the settings object on the model, if false store it on the project
28
+ */
29
+ static async storeSource(source, iTwinId, iModelId, storeOnIModel) {
30
+ if (!MapLayersUI.iTwinConfig)
31
+ return false;
32
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
33
+ const sourceJSON = source.toJSON();
34
+ const mapLayerSetting = {
35
+ url: sourceJSON.url,
36
+ name: sourceJSON.name,
37
+ formatId: sourceJSON.formatId,
38
+ transparentBackground: sourceJSON.transparentBackground,
39
+ };
40
+ const result = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);
41
+ if (result) {
42
+ await MapLayersUI.iTwinConfig.save({
43
+ accessToken,
44
+ content: mapLayerSetting,
45
+ namespace: MapLayerPreferences._preferenceNamespace,
46
+ key: sourceJSON.name,
47
+ iTwinId,
48
+ iModelId: storeOnIModel ? iModelId : undefined,
49
+ });
50
+ MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, MapLayerSource.fromJSON(mapLayerSetting));
51
+ return true;
52
+ }
53
+ else {
54
+ return false;
55
+ }
56
+ }
57
+ /** Replace the old map layer source with a new map layer source.
58
+ *
59
+ * 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.)
60
+ *
61
+ * @param oldSource
62
+ * @param newSource
63
+ * @param iTwinId
64
+ * @param iModelId
65
+ */
66
+ static async replaceSource(oldSource, newSource, iTwinId, iModelId) {
67
+ if (!MapLayersUI.iTwinConfig)
68
+ return;
69
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
70
+ let storeOnIModel = false;
71
+ try {
72
+ await MapLayersUI.iTwinConfig.delete({
73
+ accessToken,
74
+ namespace: MapLayerPreferences._preferenceNamespace,
75
+ key: oldSource.name,
76
+ iTwinId,
77
+ iModelId,
78
+ });
79
+ }
80
+ catch (_err) {
81
+ await MapLayersUI.iTwinConfig.delete({
82
+ accessToken,
83
+ namespace: MapLayerPreferences._preferenceNamespace,
84
+ key: oldSource.name,
85
+ iTwinId,
86
+ });
87
+ storeOnIModel = true;
88
+ }
89
+ const mapLayerSetting = {
90
+ url: newSource.url,
91
+ name: newSource.name,
92
+ formatId: newSource.formatId,
93
+ transparentBackground: newSource.transparentBackground,
94
+ };
95
+ await MapLayersUI.iTwinConfig.save({
96
+ accessToken,
97
+ namespace: MapLayerPreferences._preferenceNamespace,
98
+ key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,
99
+ iTwinId,
100
+ iModelId: storeOnIModel ? iModelId : undefined,
101
+ content: mapLayerSetting,
102
+ });
103
+ MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);
104
+ }
105
+ /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.
106
+ *
107
+ * @param source The source to delete. The name is used to identify the source.
108
+ * @param iTwinId
109
+ * @param iModelId
110
+ */
111
+ static async deleteByName(source, iTwinId, iModelId) {
112
+ if (!MapLayersUI.iTwinConfig)
113
+ return;
114
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
115
+ try {
116
+ await MapLayersUI.iTwinConfig.delete({
117
+ accessToken,
118
+ namespace: MapLayerPreferences._preferenceNamespace,
119
+ key: source.name,
120
+ iTwinId,
121
+ iModelId,
122
+ });
123
+ }
124
+ catch (_err) {
125
+ // failed to store based on iModelId, attempt using iTwinId
126
+ await MapLayersUI.iTwinConfig.delete({
127
+ accessToken,
128
+ namespace: MapLayerPreferences._preferenceNamespace,
129
+ key: source.name,
130
+ iTwinId,
131
+ });
132
+ }
133
+ MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);
134
+ }
135
+ /** Deletes the current setting with the provided key if it is defined at the same preference level.
136
+ *
137
+ * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.
138
+ *
139
+ * The two potential preference levels are iTwin and iModel.
140
+ *
141
+ * @param url
142
+ * @param name
143
+ * @param iTwinId
144
+ * @param iModelId
145
+ * @param storeOnIModel
146
+ */
147
+ static async delete(url, name, iTwinId, iModelId, storeOnIModel) {
148
+ if (!MapLayersUI.iTwinConfig)
149
+ return true;
150
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
151
+ const iTwinPreferenceByName = await MapLayersUI.iTwinConfig.get({
152
+ accessToken,
153
+ namespace: MapLayerPreferences._preferenceNamespace,
154
+ key: name,
155
+ iTwinId,
156
+ });
157
+ if (undefined !== iTwinPreferenceByName && storeOnIModel) {
158
+ const errorMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsAsProjectSetting", { layer: iTwinPreferenceByName.name });
159
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));
160
+ return false;
161
+ }
162
+ else if (iTwinPreferenceByName) {
163
+ const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: iTwinPreferenceByName.name });
164
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
165
+ await MapLayersUI.iTwinConfig.delete({
166
+ accessToken,
167
+ namespace: MapLayerPreferences._preferenceNamespace,
168
+ key: iTwinPreferenceByName.name,
169
+ iTwinId,
170
+ });
171
+ }
172
+ // check if setting with url already exists, if it does, delete it
173
+ const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);
174
+ if (settingFromUrl && storeOnIModel) {
175
+ const errorMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting", { url: settingFromUrl.url, name: settingFromUrl.name });
176
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));
177
+ return false;
178
+ }
179
+ else if (settingFromUrl) {
180
+ const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });
181
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
182
+ await MapLayersUI.iTwinConfig.delete({
183
+ accessToken,
184
+ namespace: MapLayerPreferences._preferenceNamespace,
185
+ key: settingFromUrl.name,
186
+ iTwinId,
187
+ });
188
+ }
189
+ if (iModelId) { // delete any settings on model so user can update them if theres collisions
190
+ const settingOnIModelFromName = await MapLayersUI.iTwinConfig.get({
191
+ accessToken,
192
+ namespace: MapLayerPreferences._preferenceNamespace,
193
+ key: name,
194
+ iTwinId,
195
+ iModelId,
196
+ });
197
+ const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);
198
+ if (settingOnIModelFromName) {
199
+ const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: settingOnIModelFromName.name });
200
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
201
+ await MapLayersUI.iTwinConfig.delete({
202
+ accessToken,
203
+ namespace: MapLayerPreferences._preferenceNamespace,
204
+ key: settingOnIModelFromName.name,
205
+ iTwinId,
206
+ iModelId,
207
+ });
208
+ }
209
+ if (settingFromUrlOnIModel) {
210
+ const infoMessage = IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });
211
+ IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));
212
+ await MapLayersUI.iTwinConfig.delete({
213
+ accessToken,
214
+ namespace: MapLayerPreferences._preferenceNamespace,
215
+ key: settingFromUrlOnIModel.name,
216
+ iTwinId,
217
+ iModelId,
218
+ });
219
+ }
220
+ }
221
+ return true;
222
+ }
223
+ /** Attempts to get a map layer based off a specific url.
224
+ * @param url
225
+ * @param iTwinId
226
+ * @param iModelId
227
+ */
228
+ static async getByUrl(url, iTwinId, iModelId) {
229
+ if (!MapLayersUI.iTwinConfig)
230
+ return undefined;
231
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
232
+ const settingResponse = await MapLayersUI.iTwinConfig.get({
233
+ accessToken,
234
+ namespace: MapLayerPreferences._preferenceNamespace,
235
+ key: "",
236
+ iTwinId,
237
+ iModelId,
238
+ });
239
+ if (undefined === settingResponse || 0 === settingResponse.length)
240
+ return undefined;
241
+ let savedMapLayer;
242
+ settingResponse.settingsMap?.forEach((savedLayer) => {
243
+ if (savedLayer.url === url) {
244
+ savedMapLayer = savedLayer;
245
+ }
246
+ });
247
+ return savedMapLayer;
248
+ }
249
+ /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
250
+ * @param iTwinId id of the iTwin
251
+ * @param iModelId id of the iModel
252
+ * @throws if any of the calls to grab settings fail.
253
+ */
254
+ static async getSources(iTwinId, iModelId) {
255
+ if (!MapLayersUI.iTwinConfig)
256
+ return [];
257
+ const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;
258
+ const mapLayerList = [];
259
+ try {
260
+ const userResultByProject = await MapLayersUI.iTwinConfig.get({
261
+ accessToken,
262
+ namespace: MapLayerPreferences._preferenceNamespace,
263
+ key: "",
264
+ iTwinId,
265
+ });
266
+ if (undefined !== userResultByProject)
267
+ mapLayerList.push(userResultByProject);
268
+ }
269
+ catch (err) {
270
+ throw new Error(IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
271
+ }
272
+ try {
273
+ const userResultByIModel = await MapLayersUI.iTwinConfig.get({
274
+ accessToken,
275
+ namespace: MapLayerPreferences._preferenceNamespace,
276
+ key: "",
277
+ iTwinId,
278
+ iModelId,
279
+ });
280
+ if (undefined !== userResultByIModel)
281
+ mapLayerList.push(userResultByIModel);
282
+ }
283
+ catch (err) {
284
+ throw new Error(IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
285
+ }
286
+ const savedMapLayerSources = [];
287
+ for (const mapLayer of mapLayerList) {
288
+ mapLayer.forEach((savedLayer) => {
289
+ const mapLayerSource = MapLayerSource.fromJSON(savedLayer);
290
+ if (mapLayerSource)
291
+ savedMapLayerSources.push(mapLayerSource);
292
+ });
293
+ }
294
+ return savedMapLayerSources;
295
+ }
296
+ static get _preferenceNamespace() {
297
+ return "MapLayerSource-SettingsService";
298
+ }
299
+ }
300
+ /** Event raised whenever a source is added, replaced or removed:
301
+ * changeType : Type of changed occurred.
302
+ * oldSource : Source that was removed or replaced.
303
+ * newSource : Source that was added or replacement of oldSource.
304
+ *
305
+ * @see [[MapLayerSourceChangeType]]
306
+ */
307
+ MapLayerPreferences.onLayerSourceChanged = new BeEvent(); // Used to notify the frontend that it needs to update its list of available layers
309
308
  //# sourceMappingURL=MapLayerPreferences.js.map