@itwin/map-layers 3.1.0-dev.6 → 3.2.0-dev.0
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.
- package/CHANGELOG.md +40 -4
- package/lib/cjs/MapLayerPreferences.d.ts +8 -8
- package/lib/cjs/MapLayerPreferences.d.ts.map +1 -1
- package/lib/cjs/MapLayerPreferences.js +13 -13
- package/lib/cjs/MapLayerPreferences.js.map +1 -1
- package/lib/cjs/map-layers.d.ts +2 -0
- package/lib/cjs/map-layers.d.ts.map +1 -1
- package/lib/cjs/map-layers.js +2 -0
- package/lib/cjs/map-layers.js.map +1 -1
- package/lib/cjs/mapLayers.d.ts +15 -17
- package/lib/cjs/mapLayers.d.ts.map +1 -1
- package/lib/cjs/mapLayers.js +25 -35
- package/lib/cjs/mapLayers.js.map +1 -1
- package/lib/cjs/public/locales/en/mapLayers.json +4 -0
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +11 -0
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -0
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +51 -0
- package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -0
- package/lib/cjs/ui/Interfaces.d.ts +19 -3
- package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
- package/lib/cjs/ui/Interfaces.js.map +1 -1
- package/lib/cjs/ui/MapFeatureInfoTool.d.ts +14 -0
- package/lib/cjs/ui/MapFeatureInfoTool.d.ts.map +1 -0
- package/lib/cjs/ui/MapFeatureInfoTool.js +51 -0
- package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -0
- package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +4 -18
- package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
- package/lib/cjs/ui/MapLayersUiItemsProvider.js +13 -29
- package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
- package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js +23 -15
- package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.js +13 -13
- package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/cjs/ui/widget/BasemapPanel.scss +5 -1
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +41 -0
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -0
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +140 -0
- package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -0
- package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +8 -0
- package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -0
- package/lib/cjs/ui/widget/FeatureInfoWidget.js +72 -0
- package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -0
- package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerDroppable.js +14 -11
- package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.d.ts +2 -2
- package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.js +25 -23
- package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +5 -5
- package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +2 -2
- package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapLayersWidget.js +2 -2
- package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
- package/lib/cjs/ui/widget/MapManagerSettings.js +16 -16
- package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts +3 -3
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.js +50 -44
- package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersPopupButton.js +3 -3
- package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.js +24 -18
- package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/esm/MapLayerPreferences.d.ts +8 -8
- package/lib/esm/MapLayerPreferences.d.ts.map +1 -1
- package/lib/esm/MapLayerPreferences.js +13 -13
- package/lib/esm/MapLayerPreferences.js.map +1 -1
- package/lib/esm/map-layers.d.ts +2 -0
- package/lib/esm/map-layers.d.ts.map +1 -1
- package/lib/esm/map-layers.js +2 -0
- package/lib/esm/map-layers.js.map +1 -1
- package/lib/esm/mapLayers.d.ts +15 -17
- package/lib/esm/mapLayers.d.ts.map +1 -1
- package/lib/esm/mapLayers.js +25 -35
- package/lib/esm/mapLayers.js.map +1 -1
- package/lib/esm/public/locales/en/mapLayers.json +4 -0
- package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +11 -0
- package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -0
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js +47 -0
- package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -0
- package/lib/esm/ui/Interfaces.d.ts +19 -3
- package/lib/esm/ui/Interfaces.d.ts.map +1 -1
- package/lib/esm/ui/Interfaces.js.map +1 -1
- package/lib/esm/ui/MapFeatureInfoTool.d.ts +14 -0
- package/lib/esm/ui/MapFeatureInfoTool.d.ts.map +1 -0
- package/lib/esm/ui/MapFeatureInfoTool.js +46 -0
- package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -0
- package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +4 -18
- package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
- package/lib/esm/ui/MapLayersUiItemsProvider.js +14 -29
- package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
- package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
- package/lib/esm/ui/widget/AttachLayerPopupButton.js +23 -15
- package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.js +14 -14
- package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
- package/lib/esm/ui/widget/BasemapPanel.scss +5 -1
- package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +41 -0
- package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -0
- package/lib/esm/ui/widget/FeatureInfoDataProvider.js +136 -0
- package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -0
- package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +8 -0
- package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -0
- package/lib/esm/ui/widget/FeatureInfoWidget.js +68 -0
- package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -0
- package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerDroppable.js +14 -11
- package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.d.ts +2 -2
- package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.js +25 -23
- package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsMenu.js +5 -5
- package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +2 -2
- package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
- package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapLayersWidget.js +2 -2
- package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
- package/lib/esm/ui/widget/MapManagerSettings.js +16 -16
- package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.d.ts +3 -3
- package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.js +50 -44
- package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersPopupButton.js +3 -3
- package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.js +24 -18
- package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/public/locales/en/mapLayers.json +4 -0
- package/package.json +30 -29
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FeatureInfoUiItemsProvider = void 0;
|
|
8
|
+
const React = require("react");
|
|
9
|
+
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
10
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
11
|
+
const FeatureInfoWidget_1 = require("./widget/FeatureInfoWidget");
|
|
12
|
+
const mapLayers_1 = require("../mapLayers");
|
|
13
|
+
const MapFeatureInfoTool_1 = require("./MapFeatureInfoTool");
|
|
14
|
+
class FeatureInfoUiItemsProvider {
|
|
15
|
+
constructor(_featureInfoOpts) {
|
|
16
|
+
this._featureInfoOpts = _featureInfoOpts;
|
|
17
|
+
this.id = "FeatureInfoUiItemsProvider";
|
|
18
|
+
}
|
|
19
|
+
provideToolbarButtonItems(_stageId, stageUsage, toolbarUsage, toolbarOrientation) {
|
|
20
|
+
var _a;
|
|
21
|
+
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) {
|
|
25
|
+
MapFeatureInfoTool_1.DefaultMapFeatureInfoTool.register(mapLayers_1.MapLayersUI.localizationNamespace);
|
|
26
|
+
return [
|
|
27
|
+
appui_react_1.ToolbarHelper.createToolbarItemFromItemDef(60, (0, MapFeatureInfoTool_1.getDefaultMapFeatureInfoToolItemDef)()),
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
33
|
+
provideWidgets(_stageId, stageUsage, location, section, zoneLocation) {
|
|
34
|
+
const widgets = [];
|
|
35
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
36
|
+
if ((undefined === section && stageUsage === appui_abstract_1.StageUsage.General && zoneLocation === appui_abstract_1.AbstractZoneLocation.BottomRight) ||
|
|
37
|
+
(stageUsage === appui_abstract_1.StageUsage.General && location === appui_abstract_1.StagePanelLocation.Right && section === appui_abstract_1.StagePanelSection.End && "1" !== appui_react_1.UiFramework.uiVersion)) {
|
|
38
|
+
widgets.push({
|
|
39
|
+
id: FeatureInfoUiItemsProvider.widgetId,
|
|
40
|
+
label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:FeatureInfoWidget.Label"),
|
|
41
|
+
icon: "icon-map",
|
|
42
|
+
getWidgetContent: () => React.createElement(FeatureInfoWidget_1.MapFeatureInfoWidget, { featureInfoOpts: this._featureInfoOpts }),
|
|
43
|
+
defaultState: appui_abstract_1.WidgetState.Closed,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return widgets;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.FeatureInfoUiItemsProvider = FeatureInfoUiItemsProvider;
|
|
50
|
+
FeatureInfoUiItemsProvider.widgetId = "map-layers:mapFeatureInfoWidget";
|
|
51
|
+
//# sourceMappingURL=FeatureInfoUiItemsProvider.js.map
|
|
@@ -0,0 +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;YACpJ,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)) {\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,10 +1,11 @@
|
|
|
1
|
+
import { BeEvent } from "@itwin/core-bentley";
|
|
1
2
|
import { MapSubLayerProps } from "@itwin/core-common";
|
|
2
|
-
import { MapLayerImageryProvider } from "@itwin/core-frontend";
|
|
3
|
+
import { HitDetail, MapLayerImageryProvider } from "@itwin/core-frontend";
|
|
3
4
|
export interface StyleMapLayerSettings {
|
|
4
5
|
/** Name */
|
|
5
6
|
name: string;
|
|
6
|
-
/** URL */
|
|
7
|
-
|
|
7
|
+
/** source (i.URL for ImageMapLayerSettings or modelId for ModelMapLayerSettings) */
|
|
8
|
+
source: string;
|
|
8
9
|
/** Controls visibility of layer */
|
|
9
10
|
visible: boolean;
|
|
10
11
|
/** 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. */
|
|
@@ -29,4 +30,19 @@ export interface MapLayerOptions {
|
|
|
29
30
|
fetchPublicMapLayerSources?: boolean;
|
|
30
31
|
mapTypeOptions?: MapTypesOptions;
|
|
31
32
|
}
|
|
33
|
+
export interface MapFeatureInfoPropertyGridOptions {
|
|
34
|
+
isPropertySelectionEnabled?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare type MapHitEvent = BeEvent<(hit: HitDetail) => void>;
|
|
37
|
+
export interface MapFeatureInfoOptions {
|
|
38
|
+
/**
|
|
39
|
+
* HitDetail Event whenever the map is clicked.
|
|
40
|
+
* Typically the HitDetail object is provided by ElementLocateManager.doLocate.
|
|
41
|
+
* Every time this event is raised, FeatureInfoWidget will attempt to retrieve data from MapLayerImageryProviders.
|
|
42
|
+
*/
|
|
43
|
+
onMapHit: MapHitEvent;
|
|
44
|
+
disableDefaultFeatureInfoTool?: boolean;
|
|
45
|
+
showLoadProgressAnimation?: boolean;
|
|
46
|
+
propertyGridOptions?: MapFeatureInfoPropertyGridOptions;
|
|
47
|
+
}
|
|
32
48
|
//# sourceMappingURL=Interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Interfaces.d.ts","sourceRoot":"","sources":["../../../src/ui/Interfaces.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
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 +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 { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapLayerImageryProvider } from \"@itwin/core-frontend\";\r\n\r\nexport interface StyleMapLayerSettings {\r\n /** Name */\r\n name: string;\r\n /** URL */\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 } 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"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BeButtonEvent, EventHandled, HitDetail, PrimitiveTool } from "@itwin/core-frontend";
|
|
2
|
+
import { ToolItemDef } from "@itwin/appui-react";
|
|
3
|
+
import { BeEvent } from "@itwin/core-bentley";
|
|
4
|
+
export declare const getDefaultMapFeatureInfoToolItemDef: () => ToolItemDef;
|
|
5
|
+
export declare class DefaultMapFeatureInfoTool extends PrimitiveTool {
|
|
6
|
+
static readonly onMapHit: BeEvent<(hit: HitDetail) => void>;
|
|
7
|
+
static toolId: string;
|
|
8
|
+
static iconSpec: string;
|
|
9
|
+
requireWriteableTarget(): boolean;
|
|
10
|
+
onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
|
|
11
|
+
onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
|
|
12
|
+
onRestartTool(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=MapFeatureInfoTool.d.ts.map
|
|
@@ -0,0 +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;CAI3B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DefaultMapFeatureInfoTool = exports.getDefaultMapFeatureInfoToolItemDef = void 0;
|
|
8
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
9
|
+
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
10
|
+
const appui_react_1 = require("@itwin/appui-react");
|
|
11
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
12
|
+
const FeatureInfoUiItemsProvider_1 = require("./FeatureInfoUiItemsProvider");
|
|
13
|
+
const getDefaultMapFeatureInfoToolItemDef = () => new appui_react_1.ToolItemDef({
|
|
14
|
+
toolId: DefaultMapFeatureInfoTool.toolId,
|
|
15
|
+
iconSpec: DefaultMapFeatureInfoTool.iconSpec,
|
|
16
|
+
label: () => DefaultMapFeatureInfoTool.flyover,
|
|
17
|
+
description: () => DefaultMapFeatureInfoTool.description,
|
|
18
|
+
execute: async () => { await core_frontend_1.IModelApp.tools.run(DefaultMapFeatureInfoTool.toolId); },
|
|
19
|
+
});
|
|
20
|
+
exports.getDefaultMapFeatureInfoToolItemDef = getDefaultMapFeatureInfoToolItemDef;
|
|
21
|
+
class DefaultMapFeatureInfoTool extends core_frontend_1.PrimitiveTool {
|
|
22
|
+
requireWriteableTarget() {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
async onDataButtonDown(ev) {
|
|
26
|
+
const hit = await core_frontend_1.IModelApp.locateManager.doLocate(new core_frontend_1.LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);
|
|
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);
|
|
31
|
+
DefaultMapFeatureInfoTool.onMapHit.raiseEvent(hit);
|
|
32
|
+
return core_frontend_1.EventHandled.Yes;
|
|
33
|
+
}
|
|
34
|
+
return core_frontend_1.EventHandled.No;
|
|
35
|
+
}
|
|
36
|
+
async onResetButtonUp(_ev) {
|
|
37
|
+
/* Common reset behavior for primitive tools is calling onReinitialize to restart or exitTool to terminate. */
|
|
38
|
+
await this.onReinitialize();
|
|
39
|
+
return core_frontend_1.EventHandled.No;
|
|
40
|
+
}
|
|
41
|
+
async onRestartTool() {
|
|
42
|
+
const tool = new DefaultMapFeatureInfoTool();
|
|
43
|
+
if (!(await tool.run()))
|
|
44
|
+
return this.exitTool();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.DefaultMapFeatureInfoTool = DefaultMapFeatureInfoTool;
|
|
48
|
+
DefaultMapFeatureInfoTool.onMapHit = new core_bentley_1.BeEvent();
|
|
49
|
+
DefaultMapFeatureInfoTool.toolId = "MapFeatureInfoTool";
|
|
50
|
+
DefaultMapFeatureInfoTool.iconSpec = "icon-map";
|
|
51
|
+
//# sourceMappingURL=MapFeatureInfoTool.js.map
|
|
@@ -0,0 +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;YAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClD,CAAC;;AA5CH,8DA6CC;AA5CwB,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())) return this.exitTool();\r\n }\r\n}\r\n"]}
|
|
@@ -1,23 +1,9 @@
|
|
|
1
|
-
import { AbstractWidgetProps, StagePanelLocation, StagePanelSection, UiItemsProvider } from "@itwin/appui-abstract";
|
|
2
|
-
import { Localization } from "@itwin/core-common";
|
|
3
|
-
import { ConfigurableCreateInfo, WidgetControl } from "@itwin/appui-react";
|
|
1
|
+
import { AbstractWidgetProps, AbstractZoneLocation, StagePanelLocation, StagePanelSection, UiItemsProvider } from "@itwin/appui-abstract";
|
|
4
2
|
import { MapLayerOptions } from "./Interfaces";
|
|
5
3
|
export declare class MapLayersUiItemsProvider implements UiItemsProvider {
|
|
6
4
|
readonly id = "MapLayersUiItemsProvider";
|
|
7
|
-
|
|
8
|
-
constructor(
|
|
9
|
-
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section: StagePanelSection | undefined): ReadonlyArray<AbstractWidgetProps>;
|
|
10
|
-
}
|
|
11
|
-
/** MapLayersWidgetControl provides a widget to attach and remove maps layers from the active view's display style.
|
|
12
|
-
* ``` tsx
|
|
13
|
-
* <Widget id={MapLayersWidgetControl.id} label={MapLayersWidgetControl.label} control={MapLayersWidgetControl}
|
|
14
|
-
* iconSpec={MapLayersWidgetControl.iconSpec} />,
|
|
15
|
-
* ```
|
|
16
|
-
*/
|
|
17
|
-
export declare class MapLayersWidgetControl extends WidgetControl {
|
|
18
|
-
static id: string;
|
|
19
|
-
static iconSpec: string;
|
|
20
|
-
static get label(): string;
|
|
21
|
-
constructor(info: ConfigurableCreateInfo, mapLayerOptions: MapLayerOptions | undefined);
|
|
5
|
+
private _mapLayerOptions?;
|
|
6
|
+
constructor(mapLayerOptions?: MapLayerOptions);
|
|
7
|
+
provideWidgets(_stageId: string, stageUsage: string, location: StagePanelLocation, section: StagePanelSection | undefined, zoneLocation?: AbstractZoneLocation): ReadonlyArray<AbstractWidgetProps>;
|
|
22
8
|
}
|
|
23
9
|
//# sourceMappingURL=MapLayersUiItemsProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapLayersUiItemsProvider.d.ts","sourceRoot":"","sources":["../../../src/ui/MapLayersUiItemsProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,iBAAiB,EAAc,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapLayersUiItemsProvider.d.ts","sourceRoot":"","sources":["../../../src/ui/MapLayersUiItemsProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAc,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGtJ,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,qBAAa,wBAAyB,YAAW,eAAe;IAC9D,SAAgB,EAAE,8BAA8B;IAChD,OAAO,CAAC,gBAAgB,CAAC,CAAkB;gBAExB,eAAe,CAAC,EAAE,eAAe;IAS7C,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EAAE,YAAY,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,mBAAmB,CAAC;CAgB3M"}
|
|
@@ -4,52 +4,36 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.MapLayersUiItemsProvider = void 0;
|
|
8
8
|
const React = require("react");
|
|
9
9
|
const appui_abstract_1 = require("@itwin/appui-abstract");
|
|
10
10
|
const MapLayersWidget_1 = require("./widget/MapLayersWidget");
|
|
11
11
|
const appui_react_1 = require("@itwin/appui-react");
|
|
12
|
-
const
|
|
12
|
+
const mapLayers_1 = require("../mapLayers");
|
|
13
13
|
class MapLayersUiItemsProvider {
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(mapLayerOptions) {
|
|
15
15
|
this.id = "MapLayersUiItemsProvider";
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
provideWidgets(_stageId, stageUsage, location, section) {
|
|
19
|
-
const widgets = [];
|
|
20
|
-
const mapLayerOptions = {
|
|
16
|
+
this._mapLayerOptions = mapLayerOptions !== null && mapLayerOptions !== void 0 ? mapLayerOptions : {
|
|
21
17
|
hideExternalMapLayers: false,
|
|
22
18
|
mapTypeOptions: { supportTileUrl: false, supportWmsAuthentication: true },
|
|
23
19
|
fetchPublicMapLayerSources: false,
|
|
24
20
|
};
|
|
25
|
-
|
|
21
|
+
}
|
|
22
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
23
|
+
provideWidgets(_stageId, stageUsage, location, section, zoneLocation) {
|
|
24
|
+
const widgets = [];
|
|
25
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
26
|
+
if ((undefined === section && stageUsage === appui_abstract_1.StageUsage.General && zoneLocation === appui_abstract_1.AbstractZoneLocation.CenterRight) ||
|
|
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)) {
|
|
26
28
|
widgets.push({
|
|
27
29
|
id: "map-layers:mapLayersWidget",
|
|
28
|
-
label:
|
|
30
|
+
label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Widget.Label"),
|
|
29
31
|
icon: "icon-map",
|
|
30
|
-
getWidgetContent: () => React.createElement(MapLayersWidget_1.MapLayersWidget, { mapLayerOptions:
|
|
32
|
+
getWidgetContent: () => React.createElement(MapLayersWidget_1.MapLayersWidget, { mapLayerOptions: this._mapLayerOptions }), // eslint-disable-line react/display-name
|
|
31
33
|
});
|
|
32
34
|
}
|
|
33
35
|
return widgets;
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
exports.MapLayersUiItemsProvider = MapLayersUiItemsProvider;
|
|
37
|
-
/** MapLayersWidgetControl provides a widget to attach and remove maps layers from the active view's display style.
|
|
38
|
-
* ``` tsx
|
|
39
|
-
* <Widget id={MapLayersWidgetControl.id} label={MapLayersWidgetControl.label} control={MapLayersWidgetControl}
|
|
40
|
-
* iconSpec={MapLayersWidgetControl.iconSpec} />,
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
43
|
-
class MapLayersWidgetControl extends appui_react_1.WidgetControl {
|
|
44
|
-
constructor(info, mapLayerOptions) {
|
|
45
|
-
super(info, mapLayerOptions);
|
|
46
|
-
this.reactNode = React.createElement(MapLayersWidget_1.MapLayersWidget, { mapLayerOptions: mapLayerOptions });
|
|
47
|
-
}
|
|
48
|
-
static get label() {
|
|
49
|
-
return core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:Widget.Label");
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.MapLayersWidgetControl = MapLayersWidgetControl;
|
|
53
|
-
MapLayersWidgetControl.id = "MapLayersWidget";
|
|
54
|
-
MapLayersWidgetControl.iconSpec = "icon-map";
|
|
55
39
|
//# sourceMappingURL=MapLayersUiItemsProvider.js.map
|
|
@@ -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,
|
|
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;YACtJ,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)) {\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AttachLayerPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/AttachLayerPopupButton.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"AttachLayerPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/AttachLayerPopupButton.tsx"],"names":[],"mappings":";AAgUA,gBAAgB;AAChB,oBAAY,qBAAqB;IAC/B,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,IAAI,IAAA;CACL;AACD,MAAM,WAAW,2BAA2B;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED,gBAAgB;AAEhB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,eA2HxE"}
|
|
@@ -12,22 +12,26 @@ const UiCore = require("@itwin/core-react");
|
|
|
12
12
|
const appui_react_1 = require("@itwin/appui-react");
|
|
13
13
|
const MapLayerManager_1 = require("./MapLayerManager");
|
|
14
14
|
const MapUrlDialog_1 = require("./MapUrlDialog");
|
|
15
|
-
const MapLayersUiItemsProvider_1 = require("../MapLayersUiItemsProvider");
|
|
16
15
|
const ConfirmMessageDialog_1 = require("./ConfirmMessageDialog");
|
|
17
16
|
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
18
17
|
const MapLayerPreferences_1 = require("../../MapLayerPreferences");
|
|
18
|
+
const mapLayers_1 = require("../../mapLayers");
|
|
19
19
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
20
20
|
function AttachLayerPanel({ isOverlay, onLayerAttached }) {
|
|
21
21
|
var _a, _b;
|
|
22
22
|
const [layerNameToAdd, setLayerNameToAdd] = React.useState();
|
|
23
23
|
const [sourceFilterString, setSourceFilterString] = React.useState();
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
const { placeholderLabel, addCustomLayerLabel, addCustomLayerToolTip, loadingMapSources, removeLayerDefButtonTitle, editLayerDefButtonTitle, removeLayerDefDialogTitle } = React.useMemo(() => {
|
|
25
|
+
return {
|
|
26
|
+
placeholderLabel: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.SearchPlaceholder"),
|
|
27
|
+
addCustomLayerLabel: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.Custom"),
|
|
28
|
+
addCustomLayerToolTip: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.AttachCustomLayer"),
|
|
29
|
+
loadingMapSources: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.LoadingMapSources"),
|
|
30
|
+
removeLayerDefButtonTitle: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefButtonTitle"),
|
|
31
|
+
editLayerDefButtonTitle: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.EditLayerDefButtonTitle"),
|
|
32
|
+
removeLayerDefDialogTitle: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefDialogTitle"),
|
|
33
|
+
};
|
|
34
|
+
}, []);
|
|
31
35
|
const [loading, setLoading] = React.useState(false);
|
|
32
36
|
const [layerNameUnderCursor, setLayerNameUnderCursor] = React.useState();
|
|
33
37
|
// 'isMounted' is used to prevent any async operation once the hook has been
|
|
@@ -166,11 +170,11 @@ function AttachLayerPanel({ isOverlay, onLayerAttached }) {
|
|
|
166
170
|
if (!!iTwinId && !!iModelId) {
|
|
167
171
|
try {
|
|
168
172
|
await MapLayerPreferences_1.MapLayerPreferences.deleteByName(source, iTwinId, iModelId);
|
|
169
|
-
const msg =
|
|
173
|
+
const msg = mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefSuccess", { layerName });
|
|
170
174
|
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, msg));
|
|
171
175
|
}
|
|
172
176
|
catch (err) {
|
|
173
|
-
const msg =
|
|
177
|
+
const msg = mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefError", { layerName });
|
|
174
178
|
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Error, msg));
|
|
175
179
|
}
|
|
176
180
|
}
|
|
@@ -182,7 +186,7 @@ function AttachLayerPanel({ isOverlay, onLayerAttached }) {
|
|
|
182
186
|
const onItemRemoveButtonClicked = React.useCallback((source, event) => {
|
|
183
187
|
event.stopPropagation(); // We don't want the owning ListBox to react on mouse click.
|
|
184
188
|
const layerName = source.name;
|
|
185
|
-
const msg =
|
|
189
|
+
const msg = mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.RemoveLayerDefDialogMessage", { layerName });
|
|
186
190
|
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) }));
|
|
187
191
|
}, [handleNoConfirmation, handleYesConfirmation, removeLayerDefDialogTitle]);
|
|
188
192
|
/*
|
|
@@ -225,9 +229,13 @@ var AttachLayerButtonType;
|
|
|
225
229
|
/** @internal */
|
|
226
230
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
227
231
|
function AttachLayerPopupButton(props) {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
232
|
+
const { showAttachLayerLabel, hideAttachLayerLabel, addCustomLayerButtonLabel } = React.useMemo(() => {
|
|
233
|
+
return {
|
|
234
|
+
showAttachLayerLabel: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:AttachLayerPopup.Attach"),
|
|
235
|
+
hideAttachLayerLabel: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:AttachLayerPopup.Close"),
|
|
236
|
+
addCustomLayerButtonLabel: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:CustomAttach.AddCustomLayerButtonLabel"),
|
|
237
|
+
};
|
|
238
|
+
}, []);
|
|
231
239
|
const [popupOpen, setPopupOpen] = React.useState(false);
|
|
232
240
|
const buttonRef = React.useRef(null);
|
|
233
241
|
const panelRef = React.useRef(null);
|
|
@@ -306,7 +314,7 @@ function AttachLayerPopupButton(props) {
|
|
|
306
314
|
}
|
|
307
315
|
return (React.createElement(React.Fragment, null,
|
|
308
316
|
renderButton(),
|
|
309
|
-
React.createElement(UiCore.Popup, { isOpen: popupOpen, position: appui_abstract_1.RelativePosition.BottomRight, onClose: handleClosePopup, onOutsideClick: handleOutsideClick, target: buttonRef.current, closeOnEnter: false },
|
|
317
|
+
React.createElement(UiCore.Popup, { isOpen: popupOpen, position: appui_abstract_1.RelativePosition.BottomRight, onClose: handleClosePopup, onOutsideClick: handleOutsideClick, target: buttonRef.current, closeOnEnter: false, closeOnContextMenu: false },
|
|
310
318
|
React.createElement("div", { ref: panelRef, className: "map-sources-popup-panel" },
|
|
311
319
|
React.createElement(AttachLayerPanel, { isOverlay: props.isOverlay, onLayerAttached: handleLayerAttached })))));
|
|
312
320
|
}
|
|
@@ -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 { MapLayersUiItemsProvider } from \"../MapLayersUiItemsProvider\";\r\nimport { ConfirmMessageDialog } from \"./ConfirmMessageDialog\";\r\nimport { Button, Input } from \"@itwin/itwinui-react\";\r\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\r\n\r\n// cSpell:ignore droppable Sublayer\r\n\r\ninterface AttachLayerPanelProps {\r\n isOverlay: boolean;\r\n onLayerAttached: () => void;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction AttachLayerPanel({ isOverlay, onLayerAttached }: AttachLayerPanelProps) {\r\n const [layerNameToAdd, setLayerNameToAdd] = React.useState<string | undefined>();\r\n const [sourceFilterString, setSourceFilterString] = React.useState<string | undefined>();\r\n const [placeholderLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.SearchPlaceholder\"));\r\n const [addCustomLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.Custom\"));\r\n const [addCustomLayerToolTip] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.AttachCustomLayer\"));\r\n const [loadingMapSources] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.LoadingMapSources\"));\r\n const [removeLayerDefButtonTitle] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefButtonTitle\"));\r\n const [editLayerDefButtonTitle] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.EditLayerDefButtonTitle\"));\r\n const [removeLayerDefDialogTitle] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.RemoveLayerDefDialogTitle\"));\r\n const [loading, setLoading] = React.useState(false);\r\n const [layerNameUnderCursor, setLayerNameUnderCursor] = React.useState<string | undefined>();\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, mapTypesOptions } = useSourceMapContext();\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(() => {\r\n // close popup and refresh UI\r\n onLayerAttached();\r\n }, [onLayerAttached]);\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 }, []);\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 layerSettings = mapLayerSettings.toLayerSettings(subLayers);\r\n\r\n if (layerSettings) {\r\n activeViewport.displayStyle.attachMapLayerSettings(layerSettings, isOverlay);\r\n\r\n activeViewport.invalidateRenderPlan();\r\n\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttached\", { sourceName: layerSettings.name, sourceUrl: layerSettings.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}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />\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]);\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 activeViewport={activeViewport} isOverlay={isOverlay} onOkResult={handleModalUrlDialogOk} mapTypesOptions={mapTypesOptions} />);\r\n return;\r\n }, [activeViewport, handleModalUrlDialogOk, isOverlay, mapTypesOptions]);\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 }, []);\r\n\r\n const handleYesConfirmation = React.useCallback(async (source: MapLayerSource) => {\r\n const layerName = source.name;\r\n if (!!iTwinId && !!iModelId) {\r\n try {\r\n await MapLayerPreferences.deleteByName(source, iTwinId, iModelId);\r\n const msg = MapLayersUiItemsProvider.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 = MapLayersUiItemsProvider.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 }, [iTwinId, iModelId]);\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 = MapLayersUiItemsProvider.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 }, [handleNoConfirmation, handleYesConfirmation, 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}\r\n mapTypesOptions={mapTypesOptions} />);\r\n }, [activeViewport, handleModalUrlDialogOk, isOverlay, mapTypesOptions, 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 && !!iModelId && layerNameUnderCursor && layerNameUnderCursor === source.name) &&\r\n <>\r\n <Button\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 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}\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] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Attach\"));\r\n const [hideAttachLayerLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:AttachLayerPopup.Close\"));\r\n const [addCustomLayerButtonLabel] = React.useState(MapLayersUiItemsProvider.localization.getLocalizedString(\"mapLayers:CustomAttach.AddCustomLayerButtonLabel\"));\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 isInsideCoreDialog = React.useCallback((element: HTMLElement) => {\r\n if (element.nodeName === \"DIV\") {\r\n if (element.classList && element.classList.contains(\"core-dialog\"))\r\n return true;\r\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\r\n return true;\r\n } else {\r\n // istanbul ignore else\r\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\r\n return true;\r\n }\r\n return false;\r\n }, []);\r\n\r\n const handleOutsideClick = React.useCallback((event: MouseEvent) => {\r\n if (isInsideCoreDialog(event.target as HTMLElement)) {\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 }, [isInsideCoreDialog]);\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 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 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={handleOutsideClick}\r\n target={buttonRef.current}\r\n closeOnEnter={false}\r\n >\r\n <div ref={panelRef} className=\"map-sources-popup-panel\" >\r\n <AttachLayerPanel isOverlay={props.isOverlay} onLayerAttached={handleLayerAttached} />\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 { 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\ninterface AttachLayerPanelProps {\r\n isOverlay: boolean;\r\n onLayerAttached: () => void;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nfunction AttachLayerPanel({ isOverlay, onLayerAttached }: 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 // '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, mapTypesOptions } = useSourceMapContext();\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(() => {\r\n // close popup and refresh UI\r\n onLayerAttached();\r\n }, [onLayerAttached]);\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 }, []);\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 layerSettings = mapLayerSettings.toLayerSettings(subLayers);\r\n\r\n if (layerSettings) {\r\n activeViewport.displayStyle.attachMapLayerSettings(layerSettings, isOverlay);\r\n\r\n activeViewport.invalidateRenderPlan();\r\n\r\n const msg = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttached\", { sourceName: layerSettings.name, sourceUrl: layerSettings.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}\r\n onCancelResult={handleModalUrlDialogCancel}\r\n mapTypesOptions={mapTypesOptions} />\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]);\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 activeViewport={activeViewport} isOverlay={isOverlay} onOkResult={handleModalUrlDialogOk} mapTypesOptions={mapTypesOptions} />);\r\n return;\r\n }, [activeViewport, handleModalUrlDialogOk, isOverlay, mapTypesOptions]);\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 }, []);\r\n\r\n const handleYesConfirmation = React.useCallback(async (source: MapLayerSource) => {\r\n const layerName = source.name;\r\n if (!!iTwinId && !!iModelId) {\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 }, [iTwinId, iModelId]);\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 }, [handleNoConfirmation, handleYesConfirmation, 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}\r\n mapTypesOptions={mapTypesOptions} />);\r\n }, [activeViewport, handleModalUrlDialogOk, isOverlay, mapTypesOptions, 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 && !!iModelId && layerNameUnderCursor && layerNameUnderCursor === source.name) &&\r\n <>\r\n <Button\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 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}\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 [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 isInsideCoreDialog = React.useCallback((element: HTMLElement) => {\r\n if (element.nodeName === \"DIV\") {\r\n if (element.classList && element.classList.contains(\"core-dialog\"))\r\n return true;\r\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\r\n return true;\r\n } else {\r\n // istanbul ignore else\r\n if (element.parentElement && isInsideCoreDialog(element.parentElement))\r\n return true;\r\n }\r\n return false;\r\n }, []);\r\n\r\n const handleOutsideClick = React.useCallback((event: MouseEvent) => {\r\n if (isInsideCoreDialog(event.target as HTMLElement)) {\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 }, [isInsideCoreDialog]);\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 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 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={handleOutsideClick}\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 isOverlay={props.isOverlay} onLayerAttached={handleLayerAttached} />\r\n </div>\r\n </UiCore.Popup >\r\n </>\r\n );\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasemapPanel.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"BasemapPanel.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/BasemapPanel.tsx"],"names":[],"mappings":";AAeA,OAAO,qBAAqB,CAAC;AAc7B,gBAAgB;AAEhB,wBAAgB,YAAY,gBAwI3B"}
|