@itwin/map-layers 3.6.0-dev.8 → 4.0.0-dev.10

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 (73) hide show
  1. package/CHANGELOG.md +26 -1
  2. package/lib/cjs/mapLayers.js +3 -3
  3. package/lib/cjs/mapLayers.js.map +1 -1
  4. package/lib/cjs/public/locales/en/mapLayers.json +2 -0
  5. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +2 -1
  6. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  7. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +8 -6
  8. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  9. package/lib/cjs/ui/Interfaces.d.ts +4 -1
  10. package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
  11. package/lib/cjs/ui/Interfaces.js.map +1 -1
  12. package/lib/cjs/ui/MapFeatureInfoTool.d.ts.map +1 -1
  13. package/lib/cjs/ui/MapFeatureInfoTool.js +3 -3
  14. package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -1
  15. package/lib/cjs/ui/MapLayersUiItemsProvider.js +1 -1
  16. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  17. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +8 -8
  18. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  19. package/lib/cjs/ui/widget/BasemapPanel.js +3 -3
  20. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  21. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  22. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  23. package/lib/cjs/ui/widget/MapLayerDroppable.js +4 -2
  24. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  25. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  26. package/lib/cjs/ui/widget/MapLayerManager.js +31 -3
  27. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  28. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  29. package/lib/cjs/ui/widget/MapLayersWidget.js +6 -1
  30. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  31. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  32. package/lib/cjs/ui/widget/MapUrlDialog.js +13 -8
  33. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  34. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  35. package/lib/cjs/ui/widget/SubLayersTree.js +9 -4
  36. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  37. package/lib/esm/mapLayers.js +3 -3
  38. package/lib/esm/mapLayers.js.map +1 -1
  39. package/lib/esm/public/locales/en/mapLayers.json +2 -0
  40. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +2 -1
  41. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  42. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +8 -6
  43. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  44. package/lib/esm/ui/Interfaces.d.ts +4 -1
  45. package/lib/esm/ui/Interfaces.d.ts.map +1 -1
  46. package/lib/esm/ui/Interfaces.js.map +1 -1
  47. package/lib/esm/ui/MapFeatureInfoTool.d.ts.map +1 -1
  48. package/lib/esm/ui/MapFeatureInfoTool.js +4 -4
  49. package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -1
  50. package/lib/esm/ui/MapLayersUiItemsProvider.js +1 -1
  51. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  52. package/lib/esm/ui/widget/AttachLayerPopupButton.js +9 -9
  53. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  54. package/lib/esm/ui/widget/BasemapPanel.js +4 -4
  55. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  56. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  57. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  58. package/lib/esm/ui/widget/MapLayerDroppable.js +6 -4
  59. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  60. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  61. package/lib/esm/ui/widget/MapLayerManager.js +31 -3
  62. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  63. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  64. package/lib/esm/ui/widget/MapLayersWidget.js +6 -1
  65. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  66. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  67. package/lib/esm/ui/widget/MapUrlDialog.js +15 -10
  68. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  69. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  70. package/lib/esm/ui/widget/SubLayersTree.js +9 -4
  71. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  72. package/lib/public/locales/en/mapLayers.json +2 -0
  73. package/package.json +27 -27
package/CHANGELOG.md CHANGED
@@ -1,6 +1,31 @@
1
1
  # Change Log - @itwin/map-layers
2
2
 
3
- This log was last generated on Wed, 07 Dec 2022 19:12:37 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 26 Jan 2023 22:53:28 GMT and should not be manually modified.
4
+
5
+ ## 3.5.5
6
+ Thu, 26 Jan 2023 22:53:28 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 3.5.4
11
+ Wed, 18 Jan 2023 15:27:15 GMT
12
+
13
+ _Version update only_
14
+
15
+ ## 3.5.3
16
+ Fri, 13 Jan 2023 17:23:07 GMT
17
+
18
+ _Version update only_
19
+
20
+ ## 3.5.2
21
+ Wed, 11 Jan 2023 16:46:30 GMT
22
+
23
+ _Version update only_
24
+
25
+ ## 3.5.1
26
+ Thu, 15 Dec 2022 16:38:29 GMT
27
+
28
+ _Version update only_
4
29
 
5
30
  ## 3.5.0
6
31
  Wed, 07 Dec 2022 19:12:37 GMT
@@ -37,20 +37,20 @@ class MapLayersUI {
37
37
  const mlProvider = new MapLayersUiItemsProvider_1.MapLayersUiItemsProvider({ ...MapLayersUI._mapLayerOptions });
38
38
  const mlProviderId = (_b = (_a = config === null || config === void 0 ? void 0 : config.mapLayerProviderOverrides) === null || _a === void 0 ? void 0 : _a.providerId) !== null && _b !== void 0 ? _b : mlProvider.id;
39
39
  MapLayersUI._uiItemsProvidersId.push(mlProviderId);
40
- appui_abstract_1.UiItemsManager.register(mlProvider, config === null || config === void 0 ? void 0 : config.mapLayerProviderOverrides);
40
+ appui_abstract_1.UiItemsManager.register(mlProvider, config === null || config === void 0 ? void 0 : config.mapLayerProviderOverrides); // eslint-disable-line deprecation/deprecation
41
41
  // Register the FeatureInfo widget only if MapHit was provided.
42
42
  if ((_c = MapLayersUI._featureInfoOpts) === null || _c === void 0 ? void 0 : _c.onMapHit) {
43
43
  const fiProvider = new FeatureInfoUiItemsProvider_1.FeatureInfoUiItemsProvider({ ...MapLayersUI._featureInfoOpts });
44
44
  const fiProviderId = (_e = (_d = config === null || config === void 0 ? void 0 : config.featureInfoProviderOverrides) === null || _d === void 0 ? void 0 : _d.providerId) !== null && _e !== void 0 ? _e : fiProvider.id;
45
45
  MapLayersUI._uiItemsProvidersId.push(fiProviderId);
46
- appui_abstract_1.UiItemsManager.register(fiProvider, config === null || config === void 0 ? void 0 : config.featureInfoProviderOverrides);
46
+ appui_abstract_1.UiItemsManager.register(fiProvider, config === null || config === void 0 ? void 0 : config.featureInfoProviderOverrides); // eslint-disable-line deprecation/deprecation
47
47
  }
48
48
  }
49
49
  /** Unregisters internationalization service namespace and UiItemManager */
50
50
  static terminate() {
51
51
  core_frontend_1.IModelApp.localization.unregisterNamespace(MapLayersUI.localizationNamespace);
52
52
  MapLayersUI._uiItemsProvidersId.forEach((uiProviderId) => {
53
- appui_abstract_1.UiItemsManager.unregister(uiProviderId);
53
+ appui_abstract_1.UiItemsManager.unregister(uiProviderId); // eslint-disable-line deprecation/deprecation
54
54
  });
55
55
  }
56
56
  /** The internationalization service namespace. */
@@ -1 +1 @@
1
- {"version":3,"file":"mapLayers.js","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":";;;AAKA,wDAAwE;AACxE,4EAAyE;AACzE,0DAAgF;AAChF,gFAA6E;AAiB7E;;;;;GAKG;AACH,MAAa,WAAW;IAQf,MAAM,KAAK,WAAW;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,wCAAwC;IACjC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAwB;;QACrD,mEAAmE;QACnE,WAAW,CAAC,YAAY,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,mCAAI,yBAAS,CAAC,YAAY,CAAC;QAC1E,MAAM,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAC9C,WAAW,CAAC,qBAAqB,CAClC,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC;QAC/C,WAAW,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAC;QACvD,WAAW,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAC;QAEvD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,0BAA0B,CAAA;YACrC,WAAW,CAAC,wBAAwB,EAAE,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,wBAAwB,CAAC,MAAkC;;QACvE,MAAM,UAAU,GAAG,IAAI,mDAAwB,CAAC,EAAE,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,yBAAyB,0CAAE,UAAU,mCAAI,UAAU,CAAC,EAAE,CAAC;QACpF,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,+BAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,yBAAyB,CAAC,CAAC;QAEvE,+DAA+D;QAC/D,IAAI,MAAA,WAAW,CAAC,gBAAgB,0CAAE,QAAQ,EAAE;YAC1C,MAAM,UAAU,GAAG,IAAI,uDAA0B,CAAC,EAAE,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACvF,MAAM,YAAY,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,4BAA4B,0CAAE,UAAU,mCAAI,UAAU,CAAC,EAAE,CAAC;YACvF,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,+BAAc,CAAC,QAAQ,CAAC,UAAU,EAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,4BAA4B,CAAC,CAAC;SAC5E;IACH,CAAC;IAED,4EAA4E;IACrE,MAAM,CAAC,SAAS;QACrB,yBAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE9E,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;YACvD,+BAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;;AA5DH,kCA6DC;AA5DgB,sBAAU,GAAG,WAAW,CAAC;AAEzB,+BAAmB,GAAa,EAAE,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\nimport { Localization } from \"@itwin/core-common\";\r\nimport { IModelApp, UserPreferencesAccess } from \"@itwin/core-frontend\";\r\nimport { MapLayersUiItemsProvider } from \"./ui/MapLayersUiItemsProvider\";\r\nimport { UiItemProviderOverrides, UiItemsManager } from \"@itwin/appui-abstract\";\r\nimport { FeatureInfoUiItemsProvider } from \"./ui/FeatureInfoUiItemsProvider\";\r\nimport { MapFeatureInfoOptions, MapLayerOptions } from \"./ui/Interfaces\";\r\n\r\nexport interface MapLayersConfig {\r\n localization?: Localization;\r\n /** If an iTwinConfig is provided, it will be used to load the MapLayerSources that are stored. */\r\n iTwinConfig?: UserPreferencesAccess;\r\n mapLayerOptions?: MapLayerOptions;\r\n featureInfoOpts?: MapFeatureInfoOptions;\r\n delayItemsProviderRegister?: boolean;\r\n}\r\n/** Configuration for registering UiItemsProviders for the MapLayers package */\r\nexport interface MapLayersUiProviderConfig {\r\n mapLayerProviderOverrides?: UiItemProviderOverrides;\r\n featureInfoProviderOverrides?: UiItemProviderOverrides;\r\n}\r\n\r\n/** MapLayersUI is use when the package is used as a dependency to another app.\r\n * '''ts\r\n * await MapLayersUI.initialize({...MapLayersInitProps});\r\n * '''\r\n * @beta\r\n */\r\nexport class MapLayersUI {\r\n private static _defaultNs = \"mapLayers\";\r\n public static localization: Localization;\r\n private static _uiItemsProvidersId: string[] = [];\r\n private static _iTwinConfig?: UserPreferencesAccess;\r\n private static _featureInfoOpts?: MapFeatureInfoOptions;\r\n private static _mapLayerOptions?: MapLayerOptions;\r\n\r\n public static get iTwinConfig(): UserPreferencesAccess | undefined {\r\n return this._iTwinConfig;\r\n }\r\n\r\n /** Used to initialize the Map Layers */\r\n public static async initialize(config?: MapLayersConfig): Promise<void> {\r\n // register namespace containing localized strings for this package\r\n MapLayersUI.localization = config?.localization ?? IModelApp.localization;\r\n await MapLayersUI.localization.registerNamespace(\r\n MapLayersUI.localizationNamespace\r\n );\r\n\r\n MapLayersUI._iTwinConfig = config?.iTwinConfig;\r\n MapLayersUI._featureInfoOpts = config?.featureInfoOpts;\r\n MapLayersUI._mapLayerOptions = config?.mapLayerOptions;\r\n\r\n if (!config?.delayItemsProviderRegister)\r\n MapLayersUI.registerUiItemsProviders();\r\n }\r\n\r\n /** Registers the UiItemsProviders for MapLayers with optional overrides\r\n * This is useful for an app that wants to defer UiItemsProvider registration so that it\r\n * may limit the MapLayers widgets to a specific workflow\r\n * @beta\r\n */\r\n public static registerUiItemsProviders(config?: MapLayersUiProviderConfig) {\r\n const mlProvider = new MapLayersUiItemsProvider({ ...MapLayersUI._mapLayerOptions });\r\n const mlProviderId = config?.mapLayerProviderOverrides?.providerId ?? mlProvider.id;\r\n MapLayersUI._uiItemsProvidersId.push(mlProviderId);\r\n UiItemsManager.register(mlProvider, config?.mapLayerProviderOverrides);\r\n\r\n // Register the FeatureInfo widget only if MapHit was provided.\r\n if (MapLayersUI._featureInfoOpts?.onMapHit) {\r\n const fiProvider = new FeatureInfoUiItemsProvider({ ...MapLayersUI._featureInfoOpts });\r\n const fiProviderId = config?.featureInfoProviderOverrides?.providerId ?? fiProvider.id;\r\n MapLayersUI._uiItemsProvidersId.push(fiProviderId);\r\n UiItemsManager.register(fiProvider, config?.featureInfoProviderOverrides);\r\n }\r\n }\r\n\r\n /** Unregisters internationalization service namespace and UiItemManager */\r\n public static terminate() {\r\n IModelApp.localization.unregisterNamespace(MapLayersUI.localizationNamespace);\r\n\r\n MapLayersUI._uiItemsProvidersId.forEach((uiProviderId) => {\r\n UiItemsManager.unregister(uiProviderId);\r\n });\r\n }\r\n\r\n /** The internationalization service namespace. */\r\n public static get localizationNamespace(): string {\r\n return MapLayersUI._defaultNs;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"mapLayers.js","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":";;;AAKA,wDAAwE;AACxE,4EAAyE;AACzE,0DAAgF;AAChF,gFAA6E;AAiB7E;;;;;GAKG;AACH,MAAa,WAAW;IAQf,MAAM,KAAK,WAAW;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,wCAAwC;IACjC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAwB;;QACrD,mEAAmE;QACnE,WAAW,CAAC,YAAY,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,mCAAI,yBAAS,CAAC,YAAY,CAAC;QAC1E,MAAM,WAAW,CAAC,YAAY,CAAC,iBAAiB,CAC9C,WAAW,CAAC,qBAAqB,CAClC,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,CAAC;QAC/C,WAAW,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAC;QACvD,WAAW,CAAC,gBAAgB,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe,CAAC;QAEvD,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,0BAA0B,CAAA;YACrC,WAAW,CAAC,wBAAwB,EAAE,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,wBAAwB,CAAC,MAAkC;;QACvE,MAAM,UAAU,GAAG,IAAI,mDAAwB,CAAC,EAAE,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,yBAAyB,0CAAE,UAAU,mCAAI,UAAU,CAAC,EAAE,CAAC;QACpF,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACnD,+BAAc,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,yBAAyB,CAAC,CAAC,CAAC,8CAA8C;QAEtH,+DAA+D;QAC/D,IAAI,MAAA,WAAW,CAAC,gBAAgB,0CAAE,QAAQ,EAAE;YAC1C,MAAM,UAAU,GAAG,IAAI,uDAA0B,CAAC,EAAE,GAAG,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACvF,MAAM,YAAY,GAAG,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,4BAA4B,0CAAE,UAAU,mCAAI,UAAU,CAAC,EAAE,CAAC;YACvF,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,+BAAc,CAAC,QAAQ,CAAC,UAAU,EAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,4BAA4B,CAAC,CAAC,CAAC,8CAA8C;SAC3H;IACH,CAAC;IAED,4EAA4E;IACrE,MAAM,CAAC,SAAS;QACrB,yBAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAE9E,WAAW,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;YACvD,+BAAc,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,8CAA8C;QACzF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kDAAkD;IAC3C,MAAM,KAAK,qBAAqB;QACrC,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;;AA5DH,kCA6DC;AA5DgB,sBAAU,GAAG,WAAW,CAAC;AAEzB,+BAAmB,GAAa,EAAE,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\nimport { Localization } from \"@itwin/core-common\";\r\nimport { IModelApp, UserPreferencesAccess } from \"@itwin/core-frontend\";\r\nimport { MapLayersUiItemsProvider } from \"./ui/MapLayersUiItemsProvider\";\r\nimport { UiItemProviderOverrides, UiItemsManager } from \"@itwin/appui-abstract\";\r\nimport { FeatureInfoUiItemsProvider } from \"./ui/FeatureInfoUiItemsProvider\";\r\nimport { MapFeatureInfoOptions, MapLayerOptions } from \"./ui/Interfaces\";\r\n\r\nexport interface MapLayersConfig {\r\n localization?: Localization;\r\n /** If an iTwinConfig is provided, it will be used to load the MapLayerSources that are stored. */\r\n iTwinConfig?: UserPreferencesAccess;\r\n mapLayerOptions?: MapLayerOptions;\r\n featureInfoOpts?: MapFeatureInfoOptions;\r\n delayItemsProviderRegister?: boolean;\r\n}\r\n/** Configuration for registering UiItemsProviders for the MapLayers package */\r\nexport interface MapLayersUiProviderConfig {\r\n mapLayerProviderOverrides?: UiItemProviderOverrides; // eslint-disable-line deprecation/deprecation\r\n featureInfoProviderOverrides?: UiItemProviderOverrides; // eslint-disable-line deprecation/deprecation\r\n}\r\n\r\n/** MapLayersUI is use when the package is used as a dependency to another app.\r\n * '''ts\r\n * await MapLayersUI.initialize({...MapLayersInitProps});\r\n * '''\r\n * @beta\r\n */\r\nexport class MapLayersUI {\r\n private static _defaultNs = \"mapLayers\";\r\n public static localization: Localization;\r\n private static _uiItemsProvidersId: string[] = [];\r\n private static _iTwinConfig?: UserPreferencesAccess;\r\n private static _featureInfoOpts?: MapFeatureInfoOptions;\r\n private static _mapLayerOptions?: MapLayerOptions;\r\n\r\n public static get iTwinConfig(): UserPreferencesAccess | undefined {\r\n return this._iTwinConfig;\r\n }\r\n\r\n /** Used to initialize the Map Layers */\r\n public static async initialize(config?: MapLayersConfig): Promise<void> {\r\n // register namespace containing localized strings for this package\r\n MapLayersUI.localization = config?.localization ?? IModelApp.localization;\r\n await MapLayersUI.localization.registerNamespace(\r\n MapLayersUI.localizationNamespace\r\n );\r\n\r\n MapLayersUI._iTwinConfig = config?.iTwinConfig;\r\n MapLayersUI._featureInfoOpts = config?.featureInfoOpts;\r\n MapLayersUI._mapLayerOptions = config?.mapLayerOptions;\r\n\r\n if (!config?.delayItemsProviderRegister)\r\n MapLayersUI.registerUiItemsProviders();\r\n }\r\n\r\n /** Registers the UiItemsProviders for MapLayers with optional overrides\r\n * This is useful for an app that wants to defer UiItemsProvider registration so that it\r\n * may limit the MapLayers widgets to a specific workflow\r\n * @beta\r\n */\r\n public static registerUiItemsProviders(config?: MapLayersUiProviderConfig) {\r\n const mlProvider = new MapLayersUiItemsProvider({ ...MapLayersUI._mapLayerOptions });\r\n const mlProviderId = config?.mapLayerProviderOverrides?.providerId ?? mlProvider.id;\r\n MapLayersUI._uiItemsProvidersId.push(mlProviderId);\r\n UiItemsManager.register(mlProvider, config?.mapLayerProviderOverrides); // eslint-disable-line deprecation/deprecation\r\n\r\n // Register the FeatureInfo widget only if MapHit was provided.\r\n if (MapLayersUI._featureInfoOpts?.onMapHit) {\r\n const fiProvider = new FeatureInfoUiItemsProvider({ ...MapLayersUI._featureInfoOpts });\r\n const fiProviderId = config?.featureInfoProviderOverrides?.providerId ?? fiProvider.id;\r\n MapLayersUI._uiItemsProvidersId.push(fiProviderId);\r\n UiItemsManager.register(fiProvider, config?.featureInfoProviderOverrides); // eslint-disable-line deprecation/deprecation\r\n }\r\n }\r\n\r\n /** Unregisters internationalization service namespace and UiItemManager */\r\n public static terminate() {\r\n IModelApp.localization.unregisterNamespace(MapLayersUI.localizationNamespace);\r\n\r\n MapLayersUI._uiItemsProvidersId.forEach((uiProviderId) => {\r\n UiItemsManager.unregister(uiProviderId); // eslint-disable-line deprecation/deprecation\r\n });\r\n }\r\n\r\n /** The internationalization service namespace. */\r\n public static get localizationNamespace(): string {\r\n return MapLayersUI._defaultNs;\r\n }\r\n}\r\n"]}
@@ -35,6 +35,7 @@
35
35
  "ExternalLoginTryAgain": "Try Again",
36
36
  "ExternalLoginWaiting": "Waiting for external login process to complete...",
37
37
  "InvalidCredentials": "Invalid credentials provided",
38
+ "InvalidCoordinateSystem": "Map layer geographic coordinate system is not supported",
38
39
  "MissingCredentials": "This layer requires credentials to be provided",
39
40
  "Name": "Name",
40
41
  "NameInputPlaceHolder": "Enter Map Name",
@@ -77,6 +78,7 @@
77
78
  "BackgroundLayers": "Background",
78
79
  "DropLayerLabel": "Drop layer here",
79
80
  "Label": "Map Layers",
81
+ "layerOutOfRange": "Invisible at current scale",
80
82
  "NoOverlayLayers": "No Overlay layers specified",
81
83
  "NoBackgroundLayers": "No Background layers specified",
82
84
  "OverlayLayers": "Overlay",
@@ -5,7 +5,8 @@ export declare class FeatureInfoUiItemsProvider implements UiItemsProvider {
5
5
  readonly id = "FeatureInfoUiItemsProvider";
6
6
  static readonly widgetId = "map-layers:mapFeatureInfoWidget";
7
7
  constructor(_featureInfoOpts: MapFeatureInfoOptions);
8
- provideToolbarButtonItems(_stageId: string, stageUsage: string, toolbarUsage: ToolbarUsage, toolbarOrientation: ToolbarOrientation): CommonToolbarItem[];
8
+ provideToolbarButtonItems(_stageId: string, stageUsage: string, toolbarUsage: ToolbarUsage, // eslint-disable-line deprecation/deprecation
9
+ toolbarOrientation: ToolbarOrientation): CommonToolbarItem[];
9
10
  provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps>;
10
11
  }
11
12
  //# sourceMappingURL=FeatureInfoUiItemsProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureInfoUiItemsProvider.d.ts","sourceRoot":"","sources":["../../../src/ui/FeatureInfoUiItemsProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAc,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAC;AAGxN,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAIrD,qBAAa,0BAA2B,YAAW,eAAe;IAI7C,OAAO,CAAC,gBAAgB;IAH3C,SAAgB,EAAE,gCAAgC;IAClD,gBAAuB,QAAQ,qCAAqC;gBAEzC,gBAAgB,EAAE,qBAAqB;IAE3D,yBAAyB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,GACrC,iBAAiB,EAAE;IAiBf,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,mBAAmB,CAAC;CAiBhM"}
1
+ {"version":3,"file":"FeatureInfoUiItemsProvider.d.ts","sourceRoot":"","sources":["../../../src/ui/FeatureInfoUiItemsProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAc,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAC;AAGxN,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAIrD,qBAAa,0BAA2B,YAAW,eAAe;IAI7C,OAAO,CAAC,gBAAgB;IAH3C,SAAgB,EAAE,gCAAgC;IAClD,gBAAuB,QAAQ,qCAAqC;gBAEzC,gBAAgB,EAAE,qBAAqB;IAE3D,yBAAyB,CAC9B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,YAAY,EAAE,8CAA8C;IAC1E,kBAAkB,EAAE,kBAAkB,GACrC,iBAAiB,EAAE;IAiBf,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,mBAAmB,CAAC;CAiBhM"}
@@ -16,12 +16,14 @@ class FeatureInfoUiItemsProvider {
16
16
  this._featureInfoOpts = _featureInfoOpts;
17
17
  this.id = "FeatureInfoUiItemsProvider";
18
18
  }
19
- provideToolbarButtonItems(_stageId, stageUsage, toolbarUsage, toolbarOrientation) {
19
+ provideToolbarButtonItems(_stageId, stageUsage, toolbarUsage, // eslint-disable-line deprecation/deprecation
20
+ toolbarOrientation) {
20
21
  var _a;
21
22
  if (!((_a = this._featureInfoOpts) === null || _a === void 0 ? void 0 : _a.disableDefaultFeatureInfoTool) &&
22
- stageUsage === appui_abstract_1.StageUsage.General &&
23
- toolbarUsage === appui_abstract_1.ToolbarUsage.ContentManipulation &&
24
- toolbarOrientation === appui_abstract_1.ToolbarOrientation.Vertical) {
23
+ stageUsage === appui_abstract_1.StageUsage.General && // eslint-disable-line deprecation/deprecation
24
+ toolbarUsage === appui_abstract_1.ToolbarUsage.ContentManipulation && // eslint-disable-line deprecation/deprecation
25
+ toolbarOrientation === appui_abstract_1.ToolbarOrientation.Vertical // eslint-disable-line deprecation/deprecation
26
+ ) {
25
27
  MapFeatureInfoTool_1.DefaultMapFeatureInfoTool.register(mapLayers_1.MapLayersUI.localizationNamespace);
26
28
  return [
27
29
  appui_react_1.ToolbarHelper.createToolbarItemFromItemDef(60, (0, MapFeatureInfoTool_1.getDefaultMapFeatureInfoToolItemDef)()),
@@ -31,7 +33,7 @@ class FeatureInfoUiItemsProvider {
31
33
  }
32
34
  // eslint-disable-next-line deprecation/deprecation
33
35
  provideWidgets(_stageId, stageUsage, location, section, zoneLocation) {
34
- const widgets = [];
36
+ const widgets = []; // eslint-disable-line deprecation/deprecation
35
37
  // eslint-disable-next-line deprecation/deprecation
36
38
  if ((undefined === section && stageUsage === appui_abstract_1.StageUsage.General && zoneLocation === appui_abstract_1.AbstractZoneLocation.BottomRight) ||
37
39
  (stageUsage === appui_abstract_1.StageUsage.General && location === appui_abstract_1.StagePanelLocation.Right && section === appui_abstract_1.StagePanelSection.End && "1" !== appui_react_1.UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation
@@ -40,7 +42,7 @@ class FeatureInfoUiItemsProvider {
40
42
  label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:FeatureInfoWidget.Label"),
41
43
  icon: "icon-map",
42
44
  getWidgetContent: () => React.createElement(FeatureInfoWidget_1.MapFeatureInfoWidget, { featureInfoOpts: this._featureInfoOpts }),
43
- defaultState: appui_abstract_1.WidgetState.Closed,
45
+ defaultState: appui_abstract_1.WidgetState.Closed, // eslint-disable-line deprecation/deprecation
44
46
  });
45
47
  }
46
48
  return widgets;
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureInfoUiItemsProvider.js","sourceRoot":"","sources":["../../../src/ui/FeatureInfoUiItemsProvider.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,+BAA+B;AAC/B,0DAAwN;AACxN,oDAAgE;AAChE,kEAAkE;AAElE,4CAA2C;AAC3C,6DAAsG;AAEtG,MAAa,0BAA0B;IAIrC,YAA2B,gBAAuC;QAAvC,qBAAgB,GAAhB,gBAAgB,CAAuB;QAHlD,OAAE,GAAG,4BAA4B,CAAC;IAGoB,CAAC;IAEhE,yBAAyB,CAC9B,QAAgB,EAChB,UAAkB,EAClB,YAA0B,EAC1B,kBAAsC;;QAEtC,IACE,CAAC,CAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,6BAA6B,CAAA;YACrD,UAAU,KAAK,2BAAU,CAAC,OAAO;YACjC,YAAY,KAAK,6BAAY,CAAC,mBAAmB;YACjD,kBAAkB,KAAK,mCAAkB,CAAC,QAAQ,EAClD;YACA,8CAAyB,CAAC,QAAQ,CAAC,uBAAW,CAAC,qBAAqB,CAAC,CAAC;YACtE,OAAO;gBACL,2BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,IAAA,wDAAmC,GAAE,CAAC;aACtF,CAAC;SACH;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mDAAmD;IAC5C,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAA4B,EAAE,OAA2B,EAAE,YAAmC;QACxJ,MAAM,OAAO,GAA0B,EAAE,CAAC;QAE1C,mDAAmD;QACnD,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,YAAY,KAAK,qCAAoB,CAAC,WAAW,CAAC;YACnH,CAAC,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,QAAQ,KAAK,mCAAkB,CAAC,KAAK,IAAI,OAAO,KAAK,kCAAiB,CAAC,GAAG,IAAI,GAAG,KAAK,yBAAW,CAAC,SAAS,CAAC,EAAE,EAAE,8CAA8C;YACpM,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,0BAA0B,CAAC,QAAQ;gBACvC,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC;gBACvF,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAC,wCAAoB,IAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,GAAI;gBACxF,YAAY,EAAE,4BAAW,CAAC,MAAM;aACjC,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AA5CH,gEA6CC;AA3CwB,mCAAQ,GAAG,iCAAiC,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\n\r\nimport * as React from \"react\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, CommonToolbarItem, StagePanelLocation, StagePanelSection, StageUsage, ToolbarOrientation, ToolbarUsage, UiItemsProvider, WidgetState } from \"@itwin/appui-abstract\";\r\nimport { ToolbarHelper, UiFramework } from \"@itwin/appui-react\";\r\nimport { MapFeatureInfoWidget } from \"./widget/FeatureInfoWidget\";\r\nimport { MapFeatureInfoOptions } from \"./Interfaces\";\r\nimport { MapLayersUI } from \"../mapLayers\";\r\nimport { DefaultMapFeatureInfoTool, getDefaultMapFeatureInfoToolItemDef } from \"./MapFeatureInfoTool\";\r\n\r\nexport class FeatureInfoUiItemsProvider implements UiItemsProvider {\r\n public readonly id = \"FeatureInfoUiItemsProvider\";\r\n public static readonly widgetId = \"map-layers:mapFeatureInfoWidget\";\r\n\r\n public constructor(private _featureInfoOpts: MapFeatureInfoOptions) { }\r\n\r\n public provideToolbarButtonItems(\r\n _stageId: string,\r\n stageUsage: string,\r\n toolbarUsage: ToolbarUsage,\r\n toolbarOrientation: ToolbarOrientation,\r\n ): CommonToolbarItem[] {\r\n if (\r\n !this._featureInfoOpts?.disableDefaultFeatureInfoTool &&\r\n stageUsage === StageUsage.General &&\r\n toolbarUsage === ToolbarUsage.ContentManipulation &&\r\n toolbarOrientation === ToolbarOrientation.Vertical\r\n ) {\r\n DefaultMapFeatureInfoTool.register(MapLayersUI.localizationNamespace);\r\n return [\r\n ToolbarHelper.createToolbarItemFromItemDef(60, getDefaultMapFeatureInfoToolItemDef()),\r\n ];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps> {\r\n const widgets: AbstractWidgetProps[] = [];\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if ((undefined === section && stageUsage === StageUsage.General && zoneLocation === AbstractZoneLocation.BottomRight) ||\r\n (stageUsage === StageUsage.General && location === StagePanelLocation.Right && section === StagePanelSection.End && \"1\" !== UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation\r\n widgets.push({\r\n id: FeatureInfoUiItemsProvider.widgetId,\r\n label: MapLayersUI.localization.getLocalizedString(\"mapLayers:FeatureInfoWidget.Label\"),\r\n icon: \"icon-map\",\r\n getWidgetContent: () => <MapFeatureInfoWidget featureInfoOpts={this._featureInfoOpts} />, // eslint-disable-line react/display-name\r\n defaultState: WidgetState.Closed,\r\n });\r\n }\r\n\r\n return widgets;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FeatureInfoUiItemsProvider.js","sourceRoot":"","sources":["../../../src/ui/FeatureInfoUiItemsProvider.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,+BAA+B;AAC/B,0DAAwN;AACxN,oDAAgE;AAChE,kEAAkE;AAElE,4CAA2C;AAC3C,6DAAsG;AAEtG,MAAa,0BAA0B;IAIrC,YAA2B,gBAAuC;QAAvC,qBAAgB,GAAhB,gBAAgB,CAAuB;QAHlD,OAAE,GAAG,4BAA4B,CAAC;IAGoB,CAAC;IAEhE,yBAAyB,CAC9B,QAAgB,EAChB,UAAkB,EAClB,YAA0B,EAAE,8CAA8C;IAC1E,kBAAsC;;QAEtC,IACE,CAAC,CAAA,MAAA,IAAI,CAAC,gBAAgB,0CAAE,6BAA6B,CAAA;YACrD,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,8CAA8C;YACnF,YAAY,KAAK,6BAAY,CAAC,mBAAmB,IAAI,8CAA8C;YACnG,kBAAkB,KAAK,mCAAkB,CAAC,QAAQ,CAAC,8CAA8C;UACjG;YACA,8CAAyB,CAAC,QAAQ,CAAC,uBAAW,CAAC,qBAAqB,CAAC,CAAC;YACtE,OAAO;gBACL,2BAAa,CAAC,4BAA4B,CAAC,EAAE,EAAE,IAAA,wDAAmC,GAAE,CAAC;aACtF,CAAC;SACH;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mDAAmD;IAC5C,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAA4B,EAAE,OAA2B,EAAE,YAAmC;QACxJ,MAAM,OAAO,GAA0B,EAAE,CAAC,CAAC,8CAA8C;QAEzF,mDAAmD;QACnD,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,YAAY,KAAK,qCAAoB,CAAC,WAAW,CAAC;YACnH,CAAC,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,QAAQ,KAAK,mCAAkB,CAAC,KAAK,IAAI,OAAO,KAAK,kCAAiB,CAAC,GAAG,IAAI,GAAG,KAAK,yBAAW,CAAC,SAAS,CAAC,EAAE,EAAE,8CAA8C;YACpM,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,0BAA0B,CAAC,QAAQ;gBACvC,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC;gBACvF,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAC,wCAAoB,IAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,GAAI;gBACxF,YAAY,EAAE,4BAAW,CAAC,MAAM,EAAE,8CAA8C;aACjF,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;;AA5CH,gEA6CC;AA3CwB,mCAAQ,GAAG,iCAAiC,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\n\r\nimport * as React from \"react\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, CommonToolbarItem, StagePanelLocation, StagePanelSection, StageUsage, ToolbarOrientation, ToolbarUsage, UiItemsProvider, WidgetState } from \"@itwin/appui-abstract\";\r\nimport { ToolbarHelper, UiFramework } from \"@itwin/appui-react\";\r\nimport { MapFeatureInfoWidget } from \"./widget/FeatureInfoWidget\";\r\nimport { MapFeatureInfoOptions } from \"./Interfaces\";\r\nimport { MapLayersUI } from \"../mapLayers\";\r\nimport { DefaultMapFeatureInfoTool, getDefaultMapFeatureInfoToolItemDef } from \"./MapFeatureInfoTool\";\r\n\r\nexport class FeatureInfoUiItemsProvider implements UiItemsProvider { // eslint-disable-line deprecation/deprecation\r\n public readonly id = \"FeatureInfoUiItemsProvider\";\r\n public static readonly widgetId = \"map-layers:mapFeatureInfoWidget\";\r\n\r\n public constructor(private _featureInfoOpts: MapFeatureInfoOptions) { }\r\n\r\n public provideToolbarButtonItems(\r\n _stageId: string,\r\n stageUsage: string,\r\n toolbarUsage: ToolbarUsage, // eslint-disable-line deprecation/deprecation\r\n toolbarOrientation: ToolbarOrientation, // eslint-disable-line deprecation/deprecation\r\n ): CommonToolbarItem[] {\r\n if (\r\n !this._featureInfoOpts?.disableDefaultFeatureInfoTool &&\r\n stageUsage === StageUsage.General && // eslint-disable-line deprecation/deprecation\r\n toolbarUsage === ToolbarUsage.ContentManipulation && // eslint-disable-line deprecation/deprecation\r\n toolbarOrientation === ToolbarOrientation.Vertical // eslint-disable-line deprecation/deprecation\r\n ) {\r\n DefaultMapFeatureInfoTool.register(MapLayersUI.localizationNamespace);\r\n return [\r\n ToolbarHelper.createToolbarItemFromItemDef(60, getDefaultMapFeatureInfoToolItemDef()),\r\n ];\r\n }\r\n\r\n return [];\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section?: StagePanelSection, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps> {\r\n const widgets: AbstractWidgetProps[] = []; // eslint-disable-line deprecation/deprecation\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if ((undefined === section && stageUsage === StageUsage.General && zoneLocation === AbstractZoneLocation.BottomRight) ||\r\n (stageUsage === StageUsage.General && location === StagePanelLocation.Right && section === StagePanelSection.End && \"1\" !== UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation\r\n widgets.push({\r\n id: FeatureInfoUiItemsProvider.widgetId,\r\n label: MapLayersUI.localization.getLocalizedString(\"mapLayers:FeatureInfoWidget.Label\"),\r\n icon: \"icon-map\",\r\n getWidgetContent: () => <MapFeatureInfoWidget featureInfoOpts={this._featureInfoOpts} />, // eslint-disable-line react/display-name\r\n defaultState: WidgetState.Closed, // eslint-disable-line deprecation/deprecation\r\n });\r\n }\r\n\r\n return widgets;\r\n }\r\n}\r\n"]}
@@ -1,6 +1,6 @@
1
1
  import { BeEvent } from "@itwin/core-bentley";
2
2
  import { MapSubLayerProps } from "@itwin/core-common";
3
- import { HitDetail, MapLayerImageryProvider } from "@itwin/core-frontend";
3
+ import { HitDetail, MapLayerImageryProvider, MapTileTreeScaleRangeVisibility } from "@itwin/core-frontend";
4
4
  export interface StyleMapLayerSettings {
5
5
  /** Name */
6
6
  name: string;
@@ -8,12 +8,15 @@ export interface StyleMapLayerSettings {
8
8
  source: string;
9
9
  /** Controls visibility of layer */
10
10
  visible: boolean;
11
+ treeVisibility: MapTileTreeScaleRangeVisibility;
11
12
  /** A transparency value from 0.0 (fully opaque) to 1.0 (fully transparent) to apply to map graphics when drawing, or false to indicate the transparency should not be overridden. Default value: false. */
12
13
  transparency: number;
13
14
  /** Transparent background */
14
15
  transparentBackground: boolean;
15
16
  /** set map as underlay or overlay */
16
17
  isOverlay: boolean;
18
+ /** layer index in the viewport */
19
+ layerIndex: number;
17
20
  /** Available map sub-layer */
18
21
  subLayers?: MapSubLayerProps[];
19
22
  /** sub-layer panel displayed. */
@@ -1 +1 @@
1
- {"version":3,"file":"Interfaces.d.ts","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,2MAA2M;IAC3M,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,iCAAiC;IAChD,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,oBAAY,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,EAAE,WAAW,CAAC;IACtB,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,mBAAmB,CAAC,EAAE,iCAAiC,CAAC;CACzD"}
1
+ {"version":3,"file":"Interfaces.d.ts","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAG,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAG,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAE5G,MAAM,WAAW,qBAAqB;IACpC,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,+BAA+B,CAAC;IAChD,2MAA2M;IAC3M,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,iCAAiC;IACjC,aAAa,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,eAAe;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,iCAAiC;IAChD,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,oBAAY,WAAW,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,QAAQ,EAAE,WAAW,CAAC;IACtB,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,mBAAmB,CAAC,EAAE,iCAAiC,CAAC;CACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Interfaces.js","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"","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 { BeEvent } from \"@itwin/core-bentley\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { HitDetail, MapLayerImageryProvider } from \"@itwin/core-frontend\";\r\n\r\nexport interface StyleMapLayerSettings {\r\n /** Name */\r\n name: string;\r\n /** source (i.URL for ImageMapLayerSettings or modelId for ModelMapLayerSettings) */\r\n source: string;\r\n /** Controls visibility of layer */\r\n visible: boolean;\r\n /** A transparency value from 0.0 (fully opaque) to 1.0 (fully transparent) to apply to map graphics when drawing, or false to indicate the transparency should not be overridden. Default value: false. */\r\n transparency: number;\r\n /** Transparent background */\r\n transparentBackground: boolean;\r\n /** set map as underlay or overlay */\r\n isOverlay: boolean;\r\n /** Available map sub-layer */\r\n subLayers?: MapSubLayerProps[];\r\n /** sub-layer panel displayed. */\r\n showSubLayers: boolean;\r\n /** Some format can publish only a single layer at a time (i.e WMTS) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\nexport interface MapTypesOptions {\r\n readonly supportTileUrl: boolean;\r\n readonly supportWmsAuthentication: boolean;\r\n}\r\n\r\nexport interface MapLayerOptions {\r\n hideExternalMapLayers?: boolean;\r\n fetchPublicMapLayerSources?: boolean;\r\n mapTypeOptions?: MapTypesOptions;\r\n}\r\n\r\nexport interface MapFeatureInfoPropertyGridOptions {\r\n isPropertySelectionEnabled?: boolean;\r\n}\r\n\r\nexport type MapHitEvent = BeEvent<(hit: HitDetail) => void>;\r\n\r\nexport interface MapFeatureInfoOptions {\r\n /**\r\n * HitDetail Event whenever the map is clicked.\r\n * Typically the HitDetail object is provided by ElementLocateManager.doLocate.\r\n * Every time this event is raised, FeatureInfoWidget will attempt to retrieve data from MapLayerImageryProviders.\r\n */\r\n onMapHit: MapHitEvent;\r\n disableDefaultFeatureInfoTool?: boolean;\r\n showLoadProgressAnimation?: boolean;\r\n propertyGridOptions?: MapFeatureInfoPropertyGridOptions;\r\n}\r\n"]}
1
+ {"version":3,"file":"Interfaces.js","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"","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 { BeEvent } from \"@itwin/core-bentley\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { HitDetail, MapLayerImageryProvider, MapTileTreeScaleRangeVisibility } from \"@itwin/core-frontend\";\r\n\r\nexport interface StyleMapLayerSettings {\r\n /** Name */\r\n name: string;\r\n /** source (i.URL for ImageMapLayerSettings or modelId for ModelMapLayerSettings) */\r\n source: string;\r\n /** Controls visibility of layer */\r\n visible: boolean;\r\n treeVisibility: MapTileTreeScaleRangeVisibility;\r\n /** A transparency value from 0.0 (fully opaque) to 1.0 (fully transparent) to apply to map graphics when drawing, or false to indicate the transparency should not be overridden. Default value: false. */\r\n transparency: number;\r\n /** Transparent background */\r\n transparentBackground: boolean;\r\n /** set map as underlay or overlay */\r\n isOverlay: boolean;\r\n /** layer index in the viewport */\r\n layerIndex: number;\r\n /** Available map sub-layer */\r\n subLayers?: MapSubLayerProps[];\r\n /** sub-layer panel displayed. */\r\n showSubLayers: boolean;\r\n /** Some format can publish only a single layer at a time (i.e WMTS) */\r\n provider?: MapLayerImageryProvider;\r\n}\r\n\r\nexport interface MapTypesOptions {\r\n readonly supportTileUrl: boolean;\r\n readonly supportWmsAuthentication: boolean;\r\n}\r\n\r\nexport interface MapLayerOptions {\r\n hideExternalMapLayers?: boolean;\r\n fetchPublicMapLayerSources?: boolean;\r\n mapTypeOptions?: MapTypesOptions;\r\n}\r\n\r\nexport interface MapFeatureInfoPropertyGridOptions {\r\n isPropertySelectionEnabled?: boolean;\r\n}\r\n\r\nexport type MapHitEvent = BeEvent<(hit: HitDetail) => void>;\r\n\r\nexport interface MapFeatureInfoOptions {\r\n /**\r\n * HitDetail Event whenever the map is clicked.\r\n * Typically the HitDetail object is provided by ElementLocateManager.doLocate.\r\n * Every time this event is raised, FeatureInfoWidget will attempt to retrieve data from MapLayerImageryProviders.\r\n */\r\n onMapHit: MapHitEvent;\r\n disableDefaultFeatureInfoTool?: boolean;\r\n showLoadProgressAnimation?: boolean;\r\n propertyGridOptions?: MapFeatureInfoPropertyGridOptions;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"MapFeatureInfoTool.d.ts","sourceRoot":"","sources":["../../../src/ui/MapFeatureInfoTool.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EAGT,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAqB,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,eAAO,MAAM,mCAAmC,QAAO,WAOnD,CAAC;AAEL,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,gBAAuB,QAAQ,gBAAqB,SAAS,KAAK,IAAI,EAAI;IAC1E,OAAuB,MAAM,SAAwB;IACrD,OAAuB,QAAQ,SAAc;IAE7B,sBAAsB,IAAI,OAAO;IAI3B,gBAAgB,CACpC,EAAE,EAAE,aAAa,GAChB,OAAO,CAAC,YAAY,CAAC;IAsBF,eAAe,CACnC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,CAAC;IAMX,aAAa;CAK3B"}
1
+ {"version":3,"file":"MapFeatureInfoTool.d.ts","sourceRoot":"","sources":["../../../src/ui/MapFeatureInfoTool.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EAGT,aAAa,EACd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,eAAO,MAAM,mCAAmC,QAAO,WAOnD,CAAC;AAEL,qBAAa,yBAA0B,SAAQ,aAAa;IAC1D,gBAAuB,QAAQ,gBAAqB,SAAS,KAAK,IAAI,EAAI;IAC1E,OAAuB,MAAM,SAAwB;IACrD,OAAuB,QAAQ,SAAc;IAE7B,sBAAsB,IAAI,OAAO;IAI3B,gBAAgB,CACpC,EAAE,EAAE,aAAa,GAChB,OAAO,CAAC,YAAY,CAAC;IAsBF,eAAe,CACnC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,CAAC;IAMX,aAAa;CAK3B"}
@@ -25,9 +25,9 @@ class DefaultMapFeatureInfoTool extends core_frontend_1.PrimitiveTool {
25
25
  async onDataButtonDown(ev) {
26
26
  const hit = await core_frontend_1.IModelApp.locateManager.doLocate(new core_frontend_1.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
27
27
  if (hit !== undefined) {
28
- const widgetDef = appui_react_1.FrontstageManager.findWidget(FeatureInfoUiItemsProvider_1.FeatureInfoUiItemsProvider.widgetId);
29
- if (widgetDef && widgetDef.state !== appui_abstract_1.WidgetState.Open)
30
- widgetDef.setWidgetState(appui_abstract_1.WidgetState.Open);
28
+ const widgetDef = appui_react_1.UiFramework.frontstages.findWidget(FeatureInfoUiItemsProvider_1.FeatureInfoUiItemsProvider.widgetId);
29
+ if (widgetDef && widgetDef.state !== appui_abstract_1.WidgetState.Open) // eslint-disable-line deprecation/deprecation
30
+ widgetDef.setWidgetState(appui_abstract_1.WidgetState.Open); // eslint-disable-line deprecation/deprecation
31
31
  DefaultMapFeatureInfoTool.onMapHit.raiseEvent(hit);
32
32
  return core_frontend_1.EventHandled.Yes;
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MapFeatureInfoTool.js","sourceRoot":"","sources":["../../../src/ui/MapFeatureInfoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,wDAO8B;AAC9B,0DAAoD;AACpD,oDAAoE;AACpE,sDAA8C;AAC9C,6EAA0E;AAEnE,MAAM,mCAAmC,GAAG,GAAgB,EAAE,CACnE,IAAI,yBAAW,CAAC;IACd,MAAM,EAAE,yBAAyB,CAAC,MAAM;IACxC,QAAQ,EAAE,yBAAyB,CAAC,QAAQ;IAC5C,KAAK,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,OAAO;IAC9C,WAAW,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,WAAW;IACxD,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,yBAAS,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACtF,CAAC,CAAC;AAPQ,QAAA,mCAAmC,uCAO3C;AAEL,MAAa,yBAA0B,SAAQ,6BAAa;IAK1C,sBAAsB;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,KAAK,CAAC,gBAAgB,CACpC,EAAiB;QAEjB,MAAM,GAAG,GAAG,MAAM,yBAAS,CAAC,aAAa,CAAC,QAAQ,CAChD,IAAI,8BAAc,EAAE,EACpB,IAAI,EACJ,EAAE,CAAC,KAAK,EACR,EAAE,CAAC,QAAQ,EACX,EAAE,CAAC,WAAW,CACf,CAAC;QACF,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,MAAM,SAAS,GAAG,+BAAiB,CAAC,UAAU,CAC5C,uDAA0B,CAAC,QAAQ,CACpC,CAAC;YACF,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,4BAAW,CAAC,IAAI;gBACnD,SAAS,CAAC,cAAc,CAAC,4BAAW,CAAC,IAAI,CAAC,CAAC;YAE7C,yBAAyB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,4BAAY,CAAC,GAAG,CAAC;SACzB;QAED,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,GAAkB;QAElB,8GAA8G;QAC9G,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AA7CH,8DA8CC;AA7CwB,kCAAQ,GAAG,IAAI,sBAAO,EAA4B,CAAC;AACnD,gCAAM,GAAG,oBAAoB,CAAC;AAC9B,kCAAQ,GAAG,UAAU,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\n\r\nimport {\r\n BeButtonEvent,\r\n EventHandled,\r\n HitDetail,\r\n IModelApp,\r\n LocateResponse,\r\n PrimitiveTool,\r\n} from \"@itwin/core-frontend\";\r\nimport { WidgetState } from \"@itwin/appui-abstract\";\r\nimport { FrontstageManager, ToolItemDef } from \"@itwin/appui-react\";\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { FeatureInfoUiItemsProvider } from \"./FeatureInfoUiItemsProvider\";\r\n\r\nexport const getDefaultMapFeatureInfoToolItemDef = (): ToolItemDef =>\r\n new ToolItemDef({\r\n toolId: DefaultMapFeatureInfoTool.toolId,\r\n iconSpec: DefaultMapFeatureInfoTool.iconSpec,\r\n label: () => DefaultMapFeatureInfoTool.flyover,\r\n description: () => DefaultMapFeatureInfoTool.description,\r\n execute: async () => { await IModelApp.tools.run(DefaultMapFeatureInfoTool.toolId); },\r\n });\r\n\r\nexport class DefaultMapFeatureInfoTool extends PrimitiveTool {\r\n public static readonly onMapHit = new BeEvent<(hit: HitDetail) => void>();\r\n public static override toolId = \"MapFeatureInfoTool\";\r\n public static override iconSpec = \"icon-map\";\r\n\r\n public override requireWriteableTarget(): boolean {\r\n return false;\r\n }\r\n\r\n public override async onDataButtonDown(\r\n ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n const hit = await IModelApp.locateManager.doLocate(\r\n new LocateResponse(),\r\n true,\r\n ev.point,\r\n ev.viewport,\r\n ev.inputSource\r\n );\r\n if (hit !== undefined) {\r\n const widgetDef = FrontstageManager.findWidget(\r\n FeatureInfoUiItemsProvider.widgetId\r\n );\r\n if (widgetDef && widgetDef.state !== WidgetState.Open)\r\n widgetDef.setWidgetState(WidgetState.Open);\r\n\r\n DefaultMapFeatureInfoTool.onMapHit.raiseEvent(hit);\r\n return EventHandled.Yes;\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onResetButtonUp(\r\n _ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n /* Common reset behavior for primitive tools is calling onReinitialize to restart or exitTool to terminate. */\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n public async onRestartTool() {\r\n const tool = new DefaultMapFeatureInfoTool();\r\n if (!(await tool.run()))\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MapFeatureInfoTool.js","sourceRoot":"","sources":["../../../src/ui/MapFeatureInfoTool.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,wDAO8B;AAC9B,0DAAoD;AACpD,oDAA8D;AAC9D,sDAA8C;AAC9C,6EAA0E;AAEnE,MAAM,mCAAmC,GAAG,GAAgB,EAAE,CACnE,IAAI,yBAAW,CAAC;IACd,MAAM,EAAE,yBAAyB,CAAC,MAAM;IACxC,QAAQ,EAAE,yBAAyB,CAAC,QAAQ;IAC5C,KAAK,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,OAAO;IAC9C,WAAW,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,WAAW;IACxD,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,yBAAS,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACtF,CAAC,CAAC;AAPQ,QAAA,mCAAmC,uCAO3C;AAEL,MAAa,yBAA0B,SAAQ,6BAAa;IAK1C,sBAAsB;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,KAAK,CAAC,gBAAgB,CACpC,EAAiB;QAEjB,MAAM,GAAG,GAAG,MAAM,yBAAS,CAAC,aAAa,CAAC,QAAQ,CAChD,IAAI,8BAAc,EAAE,EACpB,IAAI,EACJ,EAAE,CAAC,KAAK,EACR,EAAE,CAAC,QAAQ,EACX,EAAE,CAAC,WAAW,CACf,CAAC;QACF,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,MAAM,SAAS,GAAG,yBAAW,CAAC,WAAW,CAAC,UAAU,CAClD,uDAA0B,CAAC,QAAQ,CACpC,CAAC;YACF,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,KAAK,4BAAW,CAAC,IAAI,EAAE,8CAA8C;gBACnG,SAAS,CAAC,cAAc,CAAC,4BAAW,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C;YAE5F,yBAAyB,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,4BAAY,CAAC,GAAG,CAAC;SACzB;QAED,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEe,KAAK,CAAC,eAAe,CACnC,GAAkB;QAElB,8GAA8G;QAC9G,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,OAAO,4BAAY,CAAC,EAAE,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC7C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;;AA7CH,8DA8CC;AA7CwB,kCAAQ,GAAG,IAAI,sBAAO,EAA4B,CAAC;AACnD,gCAAM,GAAG,oBAAoB,CAAC;AAC9B,kCAAQ,GAAG,UAAU,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\n\r\nimport {\r\n BeButtonEvent,\r\n EventHandled,\r\n HitDetail,\r\n IModelApp,\r\n LocateResponse,\r\n PrimitiveTool,\r\n} from \"@itwin/core-frontend\";\r\nimport { WidgetState } from \"@itwin/appui-abstract\";\r\nimport { ToolItemDef, UiFramework } from \"@itwin/appui-react\";\r\nimport { BeEvent } from \"@itwin/core-bentley\";\r\nimport { FeatureInfoUiItemsProvider } from \"./FeatureInfoUiItemsProvider\";\r\n\r\nexport const getDefaultMapFeatureInfoToolItemDef = (): ToolItemDef =>\r\n new ToolItemDef({\r\n toolId: DefaultMapFeatureInfoTool.toolId,\r\n iconSpec: DefaultMapFeatureInfoTool.iconSpec,\r\n label: () => DefaultMapFeatureInfoTool.flyover,\r\n description: () => DefaultMapFeatureInfoTool.description,\r\n execute: async () => { await IModelApp.tools.run(DefaultMapFeatureInfoTool.toolId); },\r\n });\r\n\r\nexport class DefaultMapFeatureInfoTool extends PrimitiveTool {\r\n public static readonly onMapHit = new BeEvent<(hit: HitDetail) => void>();\r\n public static override toolId = \"MapFeatureInfoTool\";\r\n public static override iconSpec = \"icon-map\";\r\n\r\n public override requireWriteableTarget(): boolean {\r\n return false;\r\n }\r\n\r\n public override async onDataButtonDown(\r\n ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n const hit = await IModelApp.locateManager.doLocate(\r\n new LocateResponse(),\r\n true,\r\n ev.point,\r\n ev.viewport,\r\n ev.inputSource\r\n );\r\n if (hit !== undefined) {\r\n const widgetDef = UiFramework.frontstages.findWidget(\r\n FeatureInfoUiItemsProvider.widgetId\r\n );\r\n if (widgetDef && widgetDef.state !== WidgetState.Open) // eslint-disable-line deprecation/deprecation\r\n widgetDef.setWidgetState(WidgetState.Open); // eslint-disable-line deprecation/deprecation\r\n\r\n DefaultMapFeatureInfoTool.onMapHit.raiseEvent(hit);\r\n return EventHandled.Yes;\r\n }\r\n\r\n return EventHandled.No;\r\n }\r\n\r\n public override async onResetButtonUp(\r\n _ev: BeButtonEvent\r\n ): Promise<EventHandled> {\r\n /* Common reset behavior for primitive tools is calling onReinitialize to restart or exitTool to terminate. */\r\n await this.onReinitialize();\r\n return EventHandled.No;\r\n }\r\n\r\n public async onRestartTool() {\r\n const tool = new DefaultMapFeatureInfoTool();\r\n if (!(await tool.run()))\r\n return this.exitTool();\r\n }\r\n}\r\n"]}
@@ -21,7 +21,7 @@ class MapLayersUiItemsProvider {
21
21
  }
22
22
  // eslint-disable-next-line deprecation/deprecation
23
23
  provideWidgets(_stageId, stageUsage, location, section, zoneLocation) {
24
- const widgets = [];
24
+ const widgets = []; // eslint-disable-line deprecation/deprecation
25
25
  // eslint-disable-next-line deprecation/deprecation
26
26
  if ((undefined === section && stageUsage === appui_abstract_1.StageUsage.General && zoneLocation === appui_abstract_1.AbstractZoneLocation.CenterRight) ||
27
27
  (stageUsage === appui_abstract_1.StageUsage.General && location === appui_abstract_1.StagePanelLocation.Right && section === appui_abstract_1.StagePanelSection.Start && "1" !== appui_react_1.UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation
@@ -1 +1 @@
1
- {"version":3,"file":"MapLayersUiItemsProvider.js","sourceRoot":"","sources":["../../../src/ui/MapLayersUiItemsProvider.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,+BAA+B;AAC/B,0DAAsJ;AACtJ,8DAA2D;AAC3D,oDAAiD;AAEjD,4CAA2C;AAE3C,MAAa,wBAAwB;IAInC,YAAmB,eAAiC;QAHpC,OAAE,GAAG,0BAA0B,CAAC;QAI9C,IAAI,CAAC,gBAAgB,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI;YACzC,qBAAqB,EAAE,KAAK;YAC5B,cAAc,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE;YACzE,0BAA0B,EAAE,KAAK;SAClC,CAAC;IACJ,CAAC;IAED,mDAAmD;IAC5C,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAA4B,EAAE,OAAsC,EAAE,YAAmC;QACnK,MAAM,OAAO,GAA0B,EAAE,CAAC;QAE1C,mDAAmD;QACnD,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,YAAY,KAAK,qCAAoB,CAAC,WAAW,CAAC;YACnH,CAAC,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,QAAQ,KAAK,mCAAkB,CAAC,KAAK,IAAI,OAAO,KAAK,kCAAiB,CAAC,KAAK,IAAI,GAAG,KAAK,yBAAW,CAAC,SAAS,CAAC,EAAE,EAAE,8CAA8C;YACtM,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,4BAA4B;gBAChC,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;gBAC5E,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAC,iCAAe,IAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,GAAI,EAAE,yCAAyC;aAC/H,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA7BD,4DA6BC","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 * as React from \"react\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, StagePanelLocation, StagePanelSection, StageUsage, UiItemsProvider } from \"@itwin/appui-abstract\";\r\nimport { MapLayersWidget } from \"./widget/MapLayersWidget\";\r\nimport { UiFramework } from \"@itwin/appui-react\";\r\nimport { MapLayerOptions } from \"./Interfaces\";\r\nimport { MapLayersUI } from \"../mapLayers\";\r\n\r\nexport class MapLayersUiItemsProvider implements UiItemsProvider {\r\n public readonly id = \"MapLayersUiItemsProvider\";\r\n private _mapLayerOptions?: MapLayerOptions;\r\n\r\n public constructor(mapLayerOptions?: MapLayerOptions) {\r\n this._mapLayerOptions = mapLayerOptions ?? {\r\n hideExternalMapLayers: false,\r\n mapTypeOptions: { supportTileUrl: false, supportWmsAuthentication: true },\r\n fetchPublicMapLayerSources: false,\r\n };\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section: StagePanelSection | undefined, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps> {\r\n const widgets: AbstractWidgetProps[] = [];\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if ((undefined === section && stageUsage === StageUsage.General && zoneLocation === AbstractZoneLocation.CenterRight) ||\r\n (stageUsage === StageUsage.General && location === StagePanelLocation.Right && section === StagePanelSection.Start && \"1\" !== UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation\r\n widgets.push({\r\n id: \"map-layers:mapLayersWidget\",\r\n label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.Label\"),\r\n icon: \"icon-map\",\r\n getWidgetContent: () => <MapLayersWidget mapLayerOptions={this._mapLayerOptions} />, // eslint-disable-line react/display-name\r\n });\r\n }\r\n\r\n return widgets;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MapLayersUiItemsProvider.js","sourceRoot":"","sources":["../../../src/ui/MapLayersUiItemsProvider.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,+BAA+B;AAC/B,0DAAsJ;AACtJ,8DAA2D;AAC3D,oDAAiD;AAEjD,4CAA2C;AAE3C,MAAa,wBAAwB;IAInC,YAAmB,eAAiC;QAHpC,OAAE,GAAG,0BAA0B,CAAC;QAI9C,IAAI,CAAC,gBAAgB,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI;YACzC,qBAAqB,EAAE,KAAK;YAC5B,cAAc,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE;YACzE,0BAA0B,EAAE,KAAK;SAClC,CAAC;IACJ,CAAC;IAED,mDAAmD;IAC5C,cAAc,CAAC,QAAgB,EAAE,UAAkB,EAAE,QAA4B,EAAE,OAAsC,EAAE,YAAmC;QACnK,MAAM,OAAO,GAA0B,EAAE,CAAC,CAAC,8CAA8C;QAEzF,mDAAmD;QACnD,IAAI,CAAC,SAAS,KAAK,OAAO,IAAI,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,YAAY,KAAK,qCAAoB,CAAC,WAAW,CAAC;YACnH,CAAC,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,QAAQ,KAAK,mCAAkB,CAAC,KAAK,IAAI,OAAO,KAAK,kCAAiB,CAAC,KAAK,IAAI,GAAG,KAAK,yBAAW,CAAC,SAAS,CAAC,EAAE,EAAE,8CAA8C;YACtM,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,4BAA4B;gBAChC,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;gBAC5E,IAAI,EAAE,UAAU;gBAChB,gBAAgB,EAAE,GAAG,EAAE,CAAC,oBAAC,iCAAe,IAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,GAAI,EAAE,yCAAyC;aAC/H,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA7BD,4DA6BC","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 * as React from \"react\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, StagePanelLocation, StagePanelSection, StageUsage, UiItemsProvider } from \"@itwin/appui-abstract\";\r\nimport { MapLayersWidget } from \"./widget/MapLayersWidget\";\r\nimport { UiFramework } from \"@itwin/appui-react\";\r\nimport { MapLayerOptions } from \"./Interfaces\";\r\nimport { MapLayersUI } from \"../mapLayers\";\r\n\r\nexport class MapLayersUiItemsProvider implements UiItemsProvider { // eslint-disable-line deprecation/deprecation\r\n public readonly id = \"MapLayersUiItemsProvider\";\r\n private _mapLayerOptions?: MapLayerOptions;\r\n\r\n public constructor(mapLayerOptions?: MapLayerOptions) {\r\n this._mapLayerOptions = mapLayerOptions ?? {\r\n hideExternalMapLayers: false,\r\n mapTypeOptions: { supportTileUrl: false, supportWmsAuthentication: true },\r\n fetchPublicMapLayerSources: false,\r\n };\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n public provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section: StagePanelSection | undefined, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps> {\r\n const widgets: AbstractWidgetProps[] = []; // eslint-disable-line deprecation/deprecation\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n if ((undefined === section && stageUsage === StageUsage.General && zoneLocation === AbstractZoneLocation.CenterRight) ||\r\n (stageUsage === StageUsage.General && location === StagePanelLocation.Right && section === StagePanelSection.Start && \"1\" !== UiFramework.uiVersion)) { // eslint-disable-line deprecation/deprecation\r\n widgets.push({\r\n id: \"map-layers:mapLayersWidget\",\r\n label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.Label\"),\r\n icon: \"icon-map\",\r\n getWidgetContent: () => <MapLayersWidget mapLayerOptions={this._mapLayerOptions} />, // eslint-disable-line react/display-name\r\n });\r\n }\r\n\r\n return widgets;\r\n }\r\n}\r\n"]}
@@ -54,7 +54,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
54
54
  isMounted.current = false;
55
55
  // We close any open dialogs that we might have opened
56
56
  // This was added because the modal dialog remained remained displayed after the session expired.
57
- appui_react_1.ModalDialogManager.closeDialog();
57
+ appui_react_1.UiFramework.dialogs.modal.close();
58
58
  };
59
59
  }, []);
60
60
  const handleFilterTextChanged = React.useCallback((event) => {
@@ -85,7 +85,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
85
85
  const handleModalUrlDialogCancel = React.useCallback(() => {
86
86
  // close popup and refresh UI
87
87
  setLoading(false);
88
- appui_react_1.ModalDialogManager.closeDialog();
88
+ appui_react_1.UiFramework.dialogs.modal.close();
89
89
  resumeOutsideClick();
90
90
  }, [resumeOutsideClick]);
91
91
  React.useEffect(() => {
@@ -119,7 +119,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
119
119
  }
120
120
  }
121
121
  else if (status === core_frontend_1.MapLayerSourceStatus.RequireAuth && isMounted.current) {
122
- appui_react_1.ModalDialogManager.openDialog(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, layerRequiringCredentials: mapLayerSettings.toJSON(), onOkResult: () => handleModalUrlDialogOk(LayerAction.Attached), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
122
+ appui_react_1.UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, layerRequiringCredentials: mapLayerSettings.toJSON(), onOkResult: () => handleModalUrlDialogOk(LayerAction.Attached), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
123
123
  if (onHandleOutsideClick) {
124
124
  onHandleOutsideClick(false);
125
125
  }
@@ -161,7 +161,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
161
161
  }
162
162
  }, [options, sourceFilterString]);
163
163
  const handleAddNewMapSource = React.useCallback(() => {
164
- appui_react_1.ModalDialogManager.openDialog(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, onOkResult: () => handleModalUrlDialogOk(LayerAction.Attached), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
164
+ appui_react_1.UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, onOkResult: () => handleModalUrlDialogOk(LayerAction.Attached), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
165
165
  if (onHandleOutsideClick) {
166
166
  onHandleOutsideClick(false);
167
167
  }
@@ -185,7 +185,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
185
185
  setLayerNameToAdd(mapName);
186
186
  }, []);
187
187
  const handleNoConfirmation = React.useCallback((_layerName) => {
188
- appui_react_1.ModalDialogManager.closeDialog();
188
+ appui_react_1.UiFramework.dialogs.modal.close();
189
189
  resumeOutsideClick();
190
190
  }, [resumeOutsideClick]);
191
191
  const handleYesConfirmation = React.useCallback(async (source) => {
@@ -201,7 +201,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
201
201
  core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Error, msg));
202
202
  }
203
203
  }
204
- appui_react_1.ModalDialogManager.closeDialog();
204
+ appui_react_1.UiFramework.dialogs.modal.close();
205
205
  resumeOutsideClick();
206
206
  }, [iTwinId, iModelId, resumeOutsideClick]);
207
207
  /*
@@ -211,7 +211,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
211
211
  event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.
212
212
  const layerName = source.name;
213
213
  const msg = mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefDialogMessage", { layerName });
214
- appui_react_1.ModalDialogManager.openDialog(React.createElement(ConfirmMessageDialog_1.ConfirmMessageDialog, { className: "map-sources-delete-confirmation", title: removeLayerDefDialogTitle, message: msg, maxWidth: 400, onClose: () => handleNoConfirmation(layerName), onEscape: () => handleNoConfirmation(layerName), onYesResult: async () => handleYesConfirmation(source), onNoResult: () => handleNoConfirmation(layerName) }));
214
+ appui_react_1.UiFramework.dialogs.modal.open(React.createElement(ConfirmMessageDialog_1.ConfirmMessageDialog, { className: "map-sources-delete-confirmation", title: removeLayerDefDialogTitle, message: msg, maxWidth: 400, onClose: () => handleNoConfirmation(layerName), onEscape: () => handleNoConfirmation(layerName), onYesResult: async () => handleYesConfirmation(source), onNoResult: () => handleNoConfirmation(layerName) }));
215
215
  if (onHandleOutsideClick) {
216
216
  onHandleOutsideClick(false);
217
217
  }
@@ -228,7 +228,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick })
228
228
  if (matchingSource === undefined) {
229
229
  return;
230
230
  }
231
- appui_react_1.ModalDialogManager.openDialog(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, mapLayerSourceToEdit: matchingSource, onOkResult: () => handleModalUrlDialogOk(LayerAction.Edited), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
231
+ appui_react_1.UiFramework.dialogs.modal.open(React.createElement(MapUrlDialog_1.MapUrlDialog, { activeViewport: activeViewport, isOverlay: isOverlay, mapLayerSourceToEdit: matchingSource, onOkResult: () => handleModalUrlDialogOk(LayerAction.Edited), onCancelResult: handleModalUrlDialogCancel, mapTypesOptions: mapTypesOptions }));
232
232
  if (onHandleOutsideClick) {
233
233
  onHandleOutsideClick(false);
234
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AttachLayerPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/AttachLayerPopupButton.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 { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { RelativePosition } from \"@itwin/appui-abstract\";\r\nimport * as UiCore from \"@itwin/core-react\";\r\nimport { ModalDialogManager } from \"@itwin/appui-react\";\r\nimport { useSourceMapContext } from \"./MapLayerManager\";\r\nimport { MapUrlDialog } from \"./MapUrlDialog\";\r\nimport { ConfirmMessageDialog } from \"./ConfirmMessageDialog\";\r\nimport { Button, Input } from \"@itwin/itwinui-react\";\r\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\r\nimport { MapLayersUI } from \"../../mapLayers\";\r\n\r\n// cSpell:ignore droppable Sublayer\r\n\r\nenum LayerAction {\r\n Attached,\r\n Edited\r\n}\r\n\r\ninterface AttachLayerPanelProps {\r\n isOverlay: boolean;\r\n onLayerAttached: () => void;\r\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick }: AttachLayerPanelProps) {\r\n const [layerNameToAdd, setLayerNameToAdd] = React.useState<string | undefined>();\r\n const [sourceFilterString, setSourceFilterString] = React.useState<string | undefined>();\r\n\r\n const { placeholderLabel, addCustomLayerLabel, addCustomLayerToolTip, loadingMapSources, removeLayerDefButtonTitle, editLayerDefButtonTitle, removeLayerDefDialogTitle } = React.useMemo(() => {\r\n return {\r\n placeholderLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.SearchPlaceholder\"),\r\n addCustomLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Custom\"),\r\n addCustomLayerToolTip: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.AttachCustomLayer\"),\r\n loadingMapSources: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.LoadingMapSources\"),\r\n removeLayerDefButtonTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefButtonTitle\"),\r\n editLayerDefButtonTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.EditLayerDefButtonTitle\"),\r\n removeLayerDefDialogTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefDialogTitle\"),\r\n };\r\n }, []);\r\n\r\n const [loading, setLoading] = React.useState(false);\r\n const [layerNameUnderCursor, setLayerNameUnderCursor] = React.useState<string | undefined>();\r\n\r\n const resumeOutsideClick = React.useCallback(() => {\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(true);\r\n }\r\n }, [onHandleOutsideClick]);\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n\r\n // We close any open dialogs that we might have opened\r\n // This was added because the modal dialog remained remained displayed after the session expired.\r\n ModalDialogManager.closeDialog();\r\n };\r\n }, []);\r\n\r\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSourceFilterString(event.target.value);\r\n }, []);\r\n\r\n const { loadingSources, sources, activeViewport, backgroundLayers, overlayLayers, mapLayerOptions } = useSourceMapContext();\r\n const mapTypesOptions = mapLayerOptions?.mapTypeOptions;\r\n const iTwinId = activeViewport?.iModel?.iTwinId;\r\n const iModelId = activeViewport?.iModel?.iModelId;\r\n\r\n const styleContainsLayer = React.useCallback((name: string) => {\r\n if (backgroundLayers) {\r\n if (-1 !== backgroundLayers.findIndex((layer) => layer.name === name))\r\n return true;\r\n }\r\n if (overlayLayers) {\r\n if (-1 !== overlayLayers.findIndex((layer) => layer.name === name))\r\n return true;\r\n }\r\n return false;\r\n }, [backgroundLayers, overlayLayers]);\r\n\r\n const handleModalUrlDialogOk = React.useCallback((action: LayerAction) => {\r\n if (LayerAction.Attached === action) {\r\n // close popup and refresh UI\r\n onLayerAttached();\r\n }\r\n\r\n resumeOutsideClick();\r\n }, [onLayerAttached, resumeOutsideClick]);\r\n\r\n const handleModalUrlDialogCancel = React.useCallback(() => {\r\n // close popup and refresh UI\r\n setLoading(false);\r\n ModalDialogManager.closeDialog();\r\n resumeOutsideClick();\r\n }, [resumeOutsideClick]);\r\n\r\n React.useEffect(() => {\r\n async function attemptToAddLayer(layerName: string) {\r\n if (layerName && activeViewport) {\r\n // if the layer is not in the style add it now.\r\n if (undefined === backgroundLayers?.find((layer) => layerName === layer.name) && undefined === overlayLayers?.find((layer) => layerName === layer.name)) {\r\n const mapLayerSettings = sources?.find((source) => source.name === layerName);\r\n if (mapLayerSettings === undefined) {\r\n return;\r\n }\r\n\r\n try {\r\n if (isMounted.current) {\r\n setLoading(true);\r\n }\r\n\r\n const { status, subLayers } = await mapLayerSettings.validateSource();\r\n if (status === MapLayerSourceStatus.Valid || status === MapLayerSourceStatus.RequireAuth) {\r\n\r\n if (status === MapLayerSourceStatus.Valid) {\r\n const settings = mapLayerSettings.toLayerSettings(subLayers);\r\n\r\n if (settings) {\r\n activeViewport.displayStyle.attachMapLayer({settings, isOverlay});\r\n\r\n activeViewport.invalidateRenderPlan();\r\n\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttached\", { sourceName: settings.name, sourceUrl: settings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg));\r\n }\r\n\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n if (onLayerAttached) {\r\n onLayerAttached();\r\n }\r\n\r\n } else if (status === MapLayerSourceStatus.RequireAuth && isMounted.current) {\r\n ModalDialogManager.openDialog(\r\n <MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n layerRequiringCredentials={mapLayerSettings.toJSON()}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Attached)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />\r\n );\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }\r\n\r\n } else {\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerValidationFailed\", { sourceUrl: mapLayerSettings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n }\r\n } catch (err) {\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: err, sourceUrl: mapLayerSettings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n }\r\n }\r\n\r\n }\r\n return;\r\n }\r\n\r\n if (layerNameToAdd) {\r\n attemptToAddLayer(layerNameToAdd); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n if (isMounted.current) {\r\n setLayerNameToAdd(undefined);\r\n }\r\n }\r\n }, [setLayerNameToAdd, layerNameToAdd, activeViewport, sources, backgroundLayers, isOverlay, overlayLayers, onLayerAttached, handleModalUrlDialogOk, mapTypesOptions, handleModalUrlDialogCancel, onHandleOutsideClick]);\r\n\r\n const options = React.useMemo(() => sources?.filter((source) => !styleContainsLayer(source.name)), [sources, styleContainsLayer]);\r\n const filteredOptions = React.useMemo(() => {\r\n if (undefined === sourceFilterString || 0 === sourceFilterString.length) {\r\n return options;\r\n } else {\r\n return options?.filter((option) => option.name.toLowerCase().includes(sourceFilterString?.toLowerCase()));\r\n }\r\n }, [options, sourceFilterString]);\r\n\r\n const handleAddNewMapSource = React.useCallback(() => {\r\n ModalDialogManager.openDialog(<MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Attached)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />);\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n return;\r\n }, [activeViewport, handleModalUrlDialogCancel, handleModalUrlDialogOk, isOverlay, mapTypesOptions, onHandleOutsideClick]);\r\n\r\n const handleAttach = React.useCallback((mapName: string) => {\r\n setLayerNameToAdd(mapName);\r\n }, []);\r\n\r\n const handleKeypressOnSourceList = React.useCallback((event: React.KeyboardEvent<HTMLUListElement>) => {\r\n const key = event.key;\r\n if (key === \"Enter\") {\r\n event.preventDefault();\r\n const mapName = event.currentTarget?.dataset?.value;\r\n if (mapName && mapName.length) {\r\n handleAttach(mapName);\r\n }\r\n }\r\n }, [handleAttach]);\r\n\r\n const onListboxValueChange = React.useCallback((mapName: string) => {\r\n setLayerNameToAdd(mapName);\r\n }, []);\r\n\r\n const handleNoConfirmation = React.useCallback((_layerName: string) => {\r\n ModalDialogManager.closeDialog();\r\n resumeOutsideClick();\r\n }, [resumeOutsideClick]);\r\n\r\n const handleYesConfirmation = React.useCallback(async (source: MapLayerSource) => {\r\n const layerName = source.name;\r\n if (!!iTwinId) {\r\n try {\r\n await MapLayerPreferences.deleteByName(source, iTwinId, iModelId);\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefSuccess\", { layerName });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg));\r\n } catch (err: any) {\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefError\", { layerName });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n }\r\n }\r\n\r\n ModalDialogManager.closeDialog();\r\n resumeOutsideClick();\r\n }, [iTwinId, iModelId, resumeOutsideClick]);\r\n\r\n /*\r\n Handle Remove layer button clicked\r\n */\r\n const onItemRemoveButtonClicked = React.useCallback((source, event) => {\r\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\r\n\r\n const layerName = source.name;\r\n\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefDialogMessage\", { layerName });\r\n ModalDialogManager.openDialog(\r\n <ConfirmMessageDialog\r\n className=\"map-sources-delete-confirmation\"\r\n title={removeLayerDefDialogTitle}\r\n message={msg}\r\n maxWidth={400}\r\n onClose={() => handleNoConfirmation(layerName)}\r\n onEscape={() => handleNoConfirmation(layerName)}\r\n onYesResult={async () => handleYesConfirmation(source)}\r\n onNoResult={() => handleNoConfirmation(layerName)}\r\n />\r\n );\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }, [handleNoConfirmation, handleYesConfirmation, onHandleOutsideClick, removeLayerDefDialogTitle]);\r\n\r\n /*\r\n Handle Edit layer button clicked\r\n */\r\n const onItemEditButtonClicked = React.useCallback((event) => {\r\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\r\n\r\n const targetLayerName = event?.currentTarget?.parentNode?.dataset?.value;\r\n const matchingSource = sources.find((layerSource) => layerSource.name === targetLayerName);\r\n\r\n // we expect a single layer source matching this name\r\n if (matchingSource === undefined) {\r\n return;\r\n }\r\n ModalDialogManager.openDialog(<MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n mapLayerSourceToEdit={matchingSource}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Edited)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />);\r\n\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }, [activeViewport, handleModalUrlDialogCancel, handleModalUrlDialogOk, isOverlay, mapTypesOptions, onHandleOutsideClick, sources]);\r\n\r\n return (\r\n <div className=\"map-manager-header\">\r\n {(loading || loadingSources) && <UiCore.LoadingSpinner message={loadingMapSources} />}\r\n <div className=\"map-manager-source-listbox-header\">\r\n <Input type=\"text\" className=\"map-manager-source-list-filter\"\r\n placeholder={placeholderLabel}\r\n value={sourceFilterString}\r\n onChange={handleFilterTextChanged}\r\n size=\"small\" />\r\n <Button className=\"map-manager-add-source-button\" title={addCustomLayerToolTip} onClick={handleAddNewMapSource}>\r\n {addCustomLayerLabel}</Button>\r\n </div>\r\n <div className=\"map-manager-sources\">\r\n <UiCore.Listbox\r\n id=\"map-sources\"\r\n selectedValue={layerNameToAdd}\r\n className=\"map-manager-source-list\"\r\n onKeyPress={handleKeypressOnSourceList}\r\n onListboxValueChange={onListboxValueChange} >\r\n {\r\n filteredOptions?.map((source) =>\r\n <UiCore.ListboxItem\r\n key={source.name}\r\n className=\"map-source-list-entry\"\r\n value={source.name}\r\n onMouseEnter={() => setLayerNameUnderCursor(source.name)}\r\n onMouseLeave={() => setLayerNameUnderCursor(undefined)}>\r\n <span className=\"map-source-list-entry-name\" title={source.name}>{source.name}</span>\r\n\r\n { // Display the delete icon only when the mouse over a specific item\r\n // otherwise list feels cluttered.\r\n (!!iTwinId && layerNameUnderCursor && layerNameUnderCursor === source.name) &&\r\n <>\r\n <Button\r\n size=\"small\"\r\n styleType=\"borderless\"\r\n className=\"map-source-list-entry-button\"\r\n title={editLayerDefButtonTitle}\r\n onClick={onItemEditButtonClicked}>\r\n <UiCore.Icon iconSpec=\"icon-edit\" />\r\n </Button>\r\n <Button\r\n size=\"small\"\r\n styleType=\"borderless\"\r\n className=\"map-source-list-entry-button\"\r\n title={removeLayerDefButtonTitle}\r\n onClick={(event: React.MouseEvent) => { onItemRemoveButtonClicked(source, event); }}>\r\n <UiCore.Icon iconSpec=\"icon-delete\" />\r\n </Button>\r\n </>}\r\n\r\n </UiCore.ListboxItem>\r\n )\r\n }\r\n </UiCore.Listbox>\r\n </div>\r\n </div>\r\n\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport enum AttachLayerButtonType {\r\n Primary,\r\n Blue,\r\n Icon\r\n}\r\nexport interface AttachLayerPopupButtonProps {\r\n isOverlay: boolean;\r\n buttonType?: AttachLayerButtonType;\r\n disabled?: boolean;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function AttachLayerPopupButton(props: AttachLayerPopupButtonProps) {\r\n const { showAttachLayerLabel, hideAttachLayerLabel, addCustomLayerButtonLabel } = React.useMemo(() => {\r\n return {\r\n showAttachLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Attach\"),\r\n hideAttachLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Close\"),\r\n addCustomLayerButtonLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.AddCustomLayerButtonLabel\"),\r\n };\r\n }, []);\r\n\r\n const [handleOutsideClick, setHandleOutsideClick] = React.useState(true);\r\n const [popupOpen, setPopupOpen] = React.useState(false);\r\n const buttonRef = React.useRef<HTMLButtonElement>(null);\r\n const panelRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, []);\r\n\r\n const togglePopup = React.useCallback(() => {\r\n setPopupOpen(!popupOpen);\r\n }, [popupOpen]);\r\n\r\n const handleClosePopup = React.useCallback(() => {\r\n setPopupOpen(false);\r\n }, []);\r\n\r\n const onHandleOutsideClick = React.useCallback((event: MouseEvent) => {\r\n if (!handleOutsideClick) {\r\n return;\r\n }\r\n\r\n // If clicking on button that open panel - don't trigger outside click processing\r\n if (buttonRef?.current && buttonRef?.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n // If clicking the panel, this is not an outside clicked\r\n if (panelRef.current && panelRef?.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n // If we reach this point, we got an outside clicked, no close the popup\r\n setPopupOpen(false);\r\n\r\n }, [handleOutsideClick]);\r\n\r\n const { refreshFromStyle } = useSourceMapContext();\r\n\r\n const handleLayerAttached = React.useCallback(() => {\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n setPopupOpen(false);\r\n refreshFromStyle();\r\n }, [refreshFromStyle]);\r\n\r\n function renderButton(): React.ReactNode {\r\n let button: React.ReactNode;\r\n\r\n if (props.buttonType === undefined || props.buttonType === AttachLayerButtonType.Icon) {\r\n button = (\r\n <Button disabled={props.disabled} size=\"small\" styleType=\"borderless\" ref={buttonRef} className=\"map-manager-attach-layer-button\" title={popupOpen ? hideAttachLayerLabel : showAttachLayerLabel}\r\n onClick={togglePopup}>\r\n <UiCore.WebFontIcon iconName=\"icon-add\" />\r\n </Button>\r\n );\r\n } else {\r\n const determineStyleType = () => {\r\n switch (props.buttonType) {\r\n case AttachLayerButtonType.Blue:\r\n return \"high-visibility\";\r\n case AttachLayerButtonType.Primary:\r\n default:\r\n return \"cta\";\r\n }\r\n };\r\n const styleType = determineStyleType();\r\n button = (\r\n <Button disabled={props.disabled} ref={buttonRef} styleType={styleType} title={popupOpen ? hideAttachLayerLabel : showAttachLayerLabel}\r\n onClick={togglePopup}>{addCustomLayerButtonLabel}</Button>\r\n );\r\n }\r\n\r\n return button;\r\n }\r\n\r\n return (\r\n <>\r\n {renderButton()}\r\n <UiCore.Popup\r\n isOpen={popupOpen}\r\n position={RelativePosition.BottomRight}\r\n onClose={handleClosePopup}\r\n onOutsideClick={onHandleOutsideClick}\r\n target={buttonRef.current}\r\n closeOnEnter={false}\r\n closeOnContextMenu={false}\r\n >\r\n <div ref={panelRef} className=\"map-sources-popup-panel\" >\r\n <AttachLayerPanel\r\n isOverlay={props.isOverlay}\r\n onLayerAttached={handleLayerAttached}\r\n onHandleOutsideClick={setHandleOutsideClick}/>\r\n </div>\r\n </UiCore.Popup >\r\n </>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"AttachLayerPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/AttachLayerPopupButton.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 { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { RelativePosition } from \"@itwin/appui-abstract\";\r\nimport * as UiCore from \"@itwin/core-react\";\r\nimport { UiFramework } from \"@itwin/appui-react\";\r\nimport { useSourceMapContext } from \"./MapLayerManager\";\r\nimport { MapUrlDialog } from \"./MapUrlDialog\";\r\nimport { ConfirmMessageDialog } from \"./ConfirmMessageDialog\";\r\nimport { Button, Input } from \"@itwin/itwinui-react\";\r\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\r\nimport { MapLayersUI } from \"../../mapLayers\";\r\n\r\n// cSpell:ignore droppable Sublayer\r\n\r\nenum LayerAction {\r\n Attached,\r\n Edited\r\n}\r\n\r\ninterface AttachLayerPanelProps {\r\n isOverlay: boolean;\r\n onLayerAttached: () => void;\r\n onHandleOutsideClick?: (shouldHandle: boolean) => void;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction AttachLayerPanel({ isOverlay, onLayerAttached, onHandleOutsideClick }: AttachLayerPanelProps) {\r\n const [layerNameToAdd, setLayerNameToAdd] = React.useState<string | undefined>();\r\n const [sourceFilterString, setSourceFilterString] = React.useState<string | undefined>();\r\n\r\n const { placeholderLabel, addCustomLayerLabel, addCustomLayerToolTip, loadingMapSources, removeLayerDefButtonTitle, editLayerDefButtonTitle, removeLayerDefDialogTitle } = React.useMemo(() => {\r\n return {\r\n placeholderLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.SearchPlaceholder\"),\r\n addCustomLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Custom\"),\r\n addCustomLayerToolTip: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.AttachCustomLayer\"),\r\n loadingMapSources: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.LoadingMapSources\"),\r\n removeLayerDefButtonTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefButtonTitle\"),\r\n editLayerDefButtonTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.EditLayerDefButtonTitle\"),\r\n removeLayerDefDialogTitle: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefDialogTitle\"),\r\n };\r\n }, []);\r\n\r\n const [loading, setLoading] = React.useState(false);\r\n const [layerNameUnderCursor, setLayerNameUnderCursor] = React.useState<string | undefined>();\r\n\r\n const resumeOutsideClick = React.useCallback(() => {\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(true);\r\n }\r\n }, [onHandleOutsideClick]);\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n\r\n // We close any open dialogs that we might have opened\r\n // This was added because the modal dialog remained remained displayed after the session expired.\r\n UiFramework.dialogs.modal.close();\r\n };\r\n }, []);\r\n\r\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\r\n setSourceFilterString(event.target.value);\r\n }, []);\r\n\r\n const { loadingSources, sources, activeViewport, backgroundLayers, overlayLayers, mapLayerOptions } = useSourceMapContext();\r\n const mapTypesOptions = mapLayerOptions?.mapTypeOptions;\r\n const iTwinId = activeViewport?.iModel?.iTwinId;\r\n const iModelId = activeViewport?.iModel?.iModelId;\r\n\r\n const styleContainsLayer = React.useCallback((name: string) => {\r\n if (backgroundLayers) {\r\n if (-1 !== backgroundLayers.findIndex((layer) => layer.name === name))\r\n return true;\r\n }\r\n if (overlayLayers) {\r\n if (-1 !== overlayLayers.findIndex((layer) => layer.name === name))\r\n return true;\r\n }\r\n return false;\r\n }, [backgroundLayers, overlayLayers]);\r\n\r\n const handleModalUrlDialogOk = React.useCallback((action: LayerAction) => {\r\n if (LayerAction.Attached === action) {\r\n // close popup and refresh UI\r\n onLayerAttached();\r\n }\r\n\r\n resumeOutsideClick();\r\n }, [onLayerAttached, resumeOutsideClick]);\r\n\r\n const handleModalUrlDialogCancel = React.useCallback(() => {\r\n // close popup and refresh UI\r\n setLoading(false);\r\n UiFramework.dialogs.modal.close();\r\n resumeOutsideClick();\r\n }, [resumeOutsideClick]);\r\n\r\n React.useEffect(() => {\r\n async function attemptToAddLayer(layerName: string) {\r\n if (layerName && activeViewport) {\r\n // if the layer is not in the style add it now.\r\n if (undefined === backgroundLayers?.find((layer) => layerName === layer.name) && undefined === overlayLayers?.find((layer) => layerName === layer.name)) {\r\n const mapLayerSettings = sources?.find((source) => source.name === layerName);\r\n if (mapLayerSettings === undefined) {\r\n return;\r\n }\r\n\r\n try {\r\n if (isMounted.current) {\r\n setLoading(true);\r\n }\r\n\r\n const { status, subLayers } = await mapLayerSettings.validateSource();\r\n if (status === MapLayerSourceStatus.Valid || status === MapLayerSourceStatus.RequireAuth) {\r\n\r\n if (status === MapLayerSourceStatus.Valid) {\r\n const settings = mapLayerSettings.toLayerSettings(subLayers);\r\n\r\n if (settings) {\r\n activeViewport.displayStyle.attachMapLayer({settings, isOverlay});\r\n\r\n activeViewport.invalidateRenderPlan();\r\n\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttached\", { sourceName: settings.name, sourceUrl: settings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg));\r\n }\r\n\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n if (onLayerAttached) {\r\n onLayerAttached();\r\n }\r\n\r\n } else if (status === MapLayerSourceStatus.RequireAuth && isMounted.current) {\r\n UiFramework.dialogs.modal.open(\r\n <MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n layerRequiringCredentials={mapLayerSettings.toJSON()}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Attached)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />\r\n );\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }\r\n\r\n } else {\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerValidationFailed\", { sourceUrl: mapLayerSettings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n }\r\n } catch (err) {\r\n if (isMounted.current) {\r\n setLoading(false);\r\n }\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: err, sourceUrl: mapLayerSettings.url });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n }\r\n }\r\n\r\n }\r\n return;\r\n }\r\n\r\n if (layerNameToAdd) {\r\n attemptToAddLayer(layerNameToAdd); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n\r\n if (isMounted.current) {\r\n setLayerNameToAdd(undefined);\r\n }\r\n }\r\n }, [setLayerNameToAdd, layerNameToAdd, activeViewport, sources, backgroundLayers, isOverlay, overlayLayers, onLayerAttached, handleModalUrlDialogOk, mapTypesOptions, handleModalUrlDialogCancel, onHandleOutsideClick]);\r\n\r\n const options = React.useMemo(() => sources?.filter((source) => !styleContainsLayer(source.name)), [sources, styleContainsLayer]);\r\n const filteredOptions = React.useMemo(() => {\r\n if (undefined === sourceFilterString || 0 === sourceFilterString.length) {\r\n return options;\r\n } else {\r\n return options?.filter((option) => option.name.toLowerCase().includes(sourceFilterString?.toLowerCase()));\r\n }\r\n }, [options, sourceFilterString]);\r\n\r\n const handleAddNewMapSource = React.useCallback(() => {\r\n UiFramework.dialogs.modal.open(<MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Attached)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />);\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n return;\r\n }, [activeViewport, handleModalUrlDialogCancel, handleModalUrlDialogOk, isOverlay, mapTypesOptions, onHandleOutsideClick]);\r\n\r\n const handleAttach = React.useCallback((mapName: string) => {\r\n setLayerNameToAdd(mapName);\r\n }, []);\r\n\r\n const handleKeypressOnSourceList = React.useCallback((event: React.KeyboardEvent<HTMLUListElement>) => {\r\n const key = event.key;\r\n if (key === \"Enter\") {\r\n event.preventDefault();\r\n const mapName = event.currentTarget?.dataset?.value;\r\n if (mapName && mapName.length) {\r\n handleAttach(mapName);\r\n }\r\n }\r\n }, [handleAttach]);\r\n\r\n const onListboxValueChange = React.useCallback((mapName: string) => {\r\n setLayerNameToAdd(mapName);\r\n }, []);\r\n\r\n const handleNoConfirmation = React.useCallback((_layerName: string) => {\r\n UiFramework.dialogs.modal.close();\r\n resumeOutsideClick();\r\n }, [resumeOutsideClick]);\r\n\r\n const handleYesConfirmation = React.useCallback(async (source: MapLayerSource) => {\r\n const layerName = source.name;\r\n if (!!iTwinId) {\r\n try {\r\n await MapLayerPreferences.deleteByName(source, iTwinId, iModelId);\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefSuccess\", { layerName });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, msg));\r\n } catch (err: any) {\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefError\", { layerName });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\r\n }\r\n }\r\n\r\n UiFramework.dialogs.modal.close();\r\n resumeOutsideClick();\r\n }, [iTwinId, iModelId, resumeOutsideClick]);\r\n\r\n /*\r\n Handle Remove layer button clicked\r\n */\r\n const onItemRemoveButtonClicked = React.useCallback((source, event) => {\r\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\r\n\r\n const layerName = source.name;\r\n\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefDialogMessage\", { layerName });\r\n UiFramework.dialogs.modal.open(\r\n <ConfirmMessageDialog\r\n className=\"map-sources-delete-confirmation\"\r\n title={removeLayerDefDialogTitle}\r\n message={msg}\r\n maxWidth={400}\r\n onClose={() => handleNoConfirmation(layerName)}\r\n onEscape={() => handleNoConfirmation(layerName)}\r\n onYesResult={async () => handleYesConfirmation(source)}\r\n onNoResult={() => handleNoConfirmation(layerName)}\r\n />\r\n );\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }, [handleNoConfirmation, handleYesConfirmation, onHandleOutsideClick, removeLayerDefDialogTitle]);\r\n\r\n /*\r\n Handle Edit layer button clicked\r\n */\r\n const onItemEditButtonClicked = React.useCallback((event) => {\r\n event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.\r\n\r\n const targetLayerName = event?.currentTarget?.parentNode?.dataset?.value;\r\n const matchingSource = sources.find((layerSource) => layerSource.name === targetLayerName);\r\n\r\n // we expect a single layer source matching this name\r\n if (matchingSource === undefined) {\r\n return;\r\n }\r\n UiFramework.dialogs.modal.open(<MapUrlDialog\r\n activeViewport={activeViewport}\r\n isOverlay={isOverlay}\r\n mapLayerSourceToEdit={matchingSource}\r\n onOkResult={()=>handleModalUrlDialogOk(LayerAction.Edited)}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />);\r\n\r\n if (onHandleOutsideClick) {\r\n onHandleOutsideClick(false);\r\n }\r\n }, [activeViewport, handleModalUrlDialogCancel, handleModalUrlDialogOk, isOverlay, mapTypesOptions, onHandleOutsideClick, sources]);\r\n\r\n return (\r\n <div className=\"map-manager-header\">\r\n {(loading || loadingSources) && <UiCore.LoadingSpinner message={loadingMapSources} />}\r\n <div className=\"map-manager-source-listbox-header\">\r\n <Input type=\"text\" className=\"map-manager-source-list-filter\"\r\n placeholder={placeholderLabel}\r\n value={sourceFilterString}\r\n onChange={handleFilterTextChanged}\r\n size=\"small\" />\r\n <Button className=\"map-manager-add-source-button\" title={addCustomLayerToolTip} onClick={handleAddNewMapSource}>\r\n {addCustomLayerLabel}</Button>\r\n </div>\r\n <div className=\"map-manager-sources\">\r\n <UiCore.Listbox\r\n id=\"map-sources\"\r\n selectedValue={layerNameToAdd}\r\n className=\"map-manager-source-list\"\r\n onKeyPress={handleKeypressOnSourceList}\r\n onListboxValueChange={onListboxValueChange} >\r\n {\r\n filteredOptions?.map((source) =>\r\n <UiCore.ListboxItem\r\n key={source.name}\r\n className=\"map-source-list-entry\"\r\n value={source.name}\r\n onMouseEnter={() => setLayerNameUnderCursor(source.name)}\r\n onMouseLeave={() => setLayerNameUnderCursor(undefined)}>\r\n <span className=\"map-source-list-entry-name\" title={source.name}>{source.name}</span>\r\n\r\n { // Display the delete icon only when the mouse over a specific item\r\n // otherwise list feels cluttered.\r\n (!!iTwinId && layerNameUnderCursor && layerNameUnderCursor === source.name) &&\r\n <>\r\n <Button\r\n size=\"small\"\r\n styleType=\"borderless\"\r\n className=\"map-source-list-entry-button\"\r\n title={editLayerDefButtonTitle}\r\n onClick={onItemEditButtonClicked}>\r\n <UiCore.Icon iconSpec=\"icon-edit\" />\r\n </Button>\r\n <Button\r\n size=\"small\"\r\n styleType=\"borderless\"\r\n className=\"map-source-list-entry-button\"\r\n title={removeLayerDefButtonTitle}\r\n onClick={(event: React.MouseEvent) => { onItemRemoveButtonClicked(source, event); }}>\r\n <UiCore.Icon iconSpec=\"icon-delete\" />\r\n </Button>\r\n </>}\r\n\r\n </UiCore.ListboxItem>\r\n )\r\n }\r\n </UiCore.Listbox>\r\n </div>\r\n </div>\r\n\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport enum AttachLayerButtonType {\r\n Primary,\r\n Blue,\r\n Icon\r\n}\r\nexport interface AttachLayerPopupButtonProps {\r\n isOverlay: boolean;\r\n buttonType?: AttachLayerButtonType;\r\n disabled?: boolean;\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function AttachLayerPopupButton(props: AttachLayerPopupButtonProps) {\r\n const { showAttachLayerLabel, hideAttachLayerLabel, addCustomLayerButtonLabel } = React.useMemo(() => {\r\n return {\r\n showAttachLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Attach\"),\r\n hideAttachLayerLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Close\"),\r\n addCustomLayerButtonLabel: MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.AddCustomLayerButtonLabel\"),\r\n };\r\n }, []);\r\n\r\n const [handleOutsideClick, setHandleOutsideClick] = React.useState(true);\r\n const [popupOpen, setPopupOpen] = React.useState(false);\r\n const buttonRef = React.useRef<HTMLButtonElement>(null);\r\n const panelRef = React.useRef<HTMLDivElement>(null);\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n }, []);\r\n\r\n const togglePopup = React.useCallback(() => {\r\n setPopupOpen(!popupOpen);\r\n }, [popupOpen]);\r\n\r\n const handleClosePopup = React.useCallback(() => {\r\n setPopupOpen(false);\r\n }, []);\r\n\r\n const onHandleOutsideClick = React.useCallback((event: MouseEvent) => {\r\n if (!handleOutsideClick) {\r\n return;\r\n }\r\n\r\n // If clicking on button that open panel - don't trigger outside click processing\r\n if (buttonRef?.current && buttonRef?.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n // If clicking the panel, this is not an outside clicked\r\n if (panelRef.current && panelRef?.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n // If we reach this point, we got an outside clicked, no close the popup\r\n setPopupOpen(false);\r\n\r\n }, [handleOutsideClick]);\r\n\r\n const { refreshFromStyle } = useSourceMapContext();\r\n\r\n const handleLayerAttached = React.useCallback(() => {\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n setPopupOpen(false);\r\n refreshFromStyle();\r\n }, [refreshFromStyle]);\r\n\r\n function renderButton(): React.ReactNode {\r\n let button: React.ReactNode;\r\n\r\n if (props.buttonType === undefined || props.buttonType === AttachLayerButtonType.Icon) {\r\n button = (\r\n <Button disabled={props.disabled} size=\"small\" styleType=\"borderless\" ref={buttonRef} className=\"map-manager-attach-layer-button\" title={popupOpen ? hideAttachLayerLabel : showAttachLayerLabel}\r\n onClick={togglePopup}>\r\n <UiCore.WebFontIcon iconName=\"icon-add\" />\r\n </Button>\r\n );\r\n } else {\r\n const determineStyleType = () => {\r\n switch (props.buttonType) {\r\n case AttachLayerButtonType.Blue:\r\n return \"high-visibility\";\r\n case AttachLayerButtonType.Primary:\r\n default:\r\n return \"cta\";\r\n }\r\n };\r\n const styleType = determineStyleType();\r\n button = (\r\n <Button disabled={props.disabled} ref={buttonRef} styleType={styleType} title={popupOpen ? hideAttachLayerLabel : showAttachLayerLabel}\r\n onClick={togglePopup}>{addCustomLayerButtonLabel}</Button>\r\n );\r\n }\r\n\r\n return button;\r\n }\r\n\r\n return (\r\n <>\r\n {renderButton()}\r\n <UiCore.Popup\r\n isOpen={popupOpen}\r\n position={RelativePosition.BottomRight}\r\n onClose={handleClosePopup}\r\n onOutsideClick={onHandleOutsideClick}\r\n target={buttonRef.current}\r\n closeOnEnter={false}\r\n closeOnContextMenu={false}\r\n >\r\n <div ref={panelRef} className=\"map-sources-popup-panel\" >\r\n <AttachLayerPanel\r\n isOverlay={props.isOverlay}\r\n onLayerAttached={handleLayerAttached}\r\n onHandleOutsideClick={setHandleOutsideClick}/>\r\n </div>\r\n </UiCore.Popup >\r\n </>\r\n );\r\n}\r\n"]}