@itwin/map-layers 3.0.0-extension.0 → 3.1.0-dev.5
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 +82 -1
- package/README.md +1 -1
- package/lib/cjs/MapLayerPreferences.d.ts +89 -0
- package/lib/cjs/MapLayerPreferences.d.ts.map +1 -0
- package/lib/cjs/MapLayerPreferences.js +312 -0
- package/lib/cjs/MapLayerPreferences.js.map +1 -0
- package/lib/cjs/mapLayers.d.ts +18 -13
- package/lib/cjs/mapLayers.d.ts.map +1 -1
- package/lib/cjs/mapLayers.js +25 -17
- package/lib/cjs/mapLayers.js.map +1 -1
- package/lib/cjs/public/locales/en/mapLayers.json +5 -2
- package/lib/cjs/ui/MapLayersUiItemsProvider.js +1 -1
- 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 +5 -3
- 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 +5 -4
- package/lib/cjs/ui/widget/BasemapPanel.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 +24 -10
- package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/cjs/ui/widget/MapLayerManager.scss +0 -7
- package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapManagerSettings.js +51 -22
- package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/cjs/ui/widget/MapManagerSettings.scss +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/cjs/ui/widget/MapUrlDialog.js +231 -161
- package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.js +1 -1
- package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/cjs/ui/widget/TransparencyPopupButton.js +2 -2
- package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
- package/lib/esm/MapLayerPreferences.d.ts +89 -0
- package/lib/esm/MapLayerPreferences.d.ts.map +1 -0
- package/lib/esm/MapLayerPreferences.js +308 -0
- package/lib/esm/MapLayerPreferences.js.map +1 -0
- package/lib/esm/mapLayers.d.ts +18 -13
- package/lib/esm/mapLayers.d.ts.map +1 -1
- package/lib/esm/mapLayers.js +26 -18
- package/lib/esm/mapLayers.js.map +1 -1
- package/lib/esm/public/locales/en/mapLayers.json +5 -2
- package/lib/esm/ui/MapLayersUiItemsProvider.js +1 -1
- 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 +6 -4
- 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 +6 -5
- package/lib/esm/ui/widget/BasemapPanel.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 +21 -7
- package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
- package/lib/esm/ui/widget/MapLayerManager.scss +0 -7
- package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapManagerSettings.js +53 -24
- package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
- package/lib/esm/ui/widget/MapManagerSettings.scss +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
- package/lib/esm/ui/widget/MapUrlDialog.js +233 -163
- package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
- package/lib/esm/ui/widget/SubLayersTree.js +1 -1
- package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
- package/lib/esm/ui/widget/TransparencyPopupButton.js +2 -2
- package/lib/esm/ui/widget/TransparencyPopupButton.js.map +1 -1
- package/lib/public/locales/en/mapLayers.json +5 -2
- package/package.json +34 -39
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,87 @@
|
|
|
1
1
|
# Change Log - @itwin/map-layers
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 12 Jan 2022 14:52:38 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 2.19.28
|
|
6
|
+
Wed, 12 Jan 2022 14:52:38 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 2.19.27
|
|
11
|
+
Wed, 05 Jan 2022 20:07:20 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
14
|
+
|
|
15
|
+
## 2.19.26
|
|
16
|
+
Wed, 08 Dec 2021 20:54:53 GMT
|
|
17
|
+
|
|
18
|
+
_Version update only_
|
|
19
|
+
|
|
20
|
+
## 2.19.25
|
|
21
|
+
Fri, 03 Dec 2021 20:05:49 GMT
|
|
22
|
+
|
|
23
|
+
_Version update only_
|
|
24
|
+
|
|
25
|
+
## 2.19.24
|
|
26
|
+
Mon, 29 Nov 2021 18:44:31 GMT
|
|
27
|
+
|
|
28
|
+
### Updates
|
|
29
|
+
|
|
30
|
+
- Fixed UI spacing issues in map-layers widget.
|
|
31
|
+
|
|
32
|
+
## 2.19.23
|
|
33
|
+
Mon, 22 Nov 2021 20:41:40 GMT
|
|
34
|
+
|
|
35
|
+
_Version update only_
|
|
36
|
+
|
|
37
|
+
## 2.19.22
|
|
38
|
+
Wed, 17 Nov 2021 01:23:26 GMT
|
|
39
|
+
|
|
40
|
+
_Version update only_
|
|
41
|
+
|
|
42
|
+
## 2.19.21
|
|
43
|
+
Wed, 10 Nov 2021 10:58:24 GMT
|
|
44
|
+
|
|
45
|
+
_Version update only_
|
|
46
|
+
|
|
47
|
+
## 2.19.20
|
|
48
|
+
Fri, 29 Oct 2021 16:14:22 GMT
|
|
49
|
+
|
|
50
|
+
### Updates
|
|
51
|
+
|
|
52
|
+
- Added Mask transparency to map-layers widget.
|
|
53
|
+
|
|
54
|
+
## 2.19.19
|
|
55
|
+
Mon, 25 Oct 2021 16:16:25 GMT
|
|
56
|
+
|
|
57
|
+
### Updates
|
|
58
|
+
|
|
59
|
+
- Drop unnecessary dep on @bentley/react-scripts
|
|
60
|
+
|
|
61
|
+
## 2.19.18
|
|
62
|
+
Thu, 21 Oct 2021 20:59:44 GMT
|
|
63
|
+
|
|
64
|
+
_Version update only_
|
|
65
|
+
|
|
66
|
+
## 2.19.17
|
|
67
|
+
Thu, 14 Oct 2021 21:19:43 GMT
|
|
68
|
+
|
|
69
|
+
_Version update only_
|
|
70
|
+
|
|
71
|
+
## 2.19.16
|
|
72
|
+
Mon, 11 Oct 2021 17:37:46 GMT
|
|
73
|
+
|
|
74
|
+
_Version update only_
|
|
75
|
+
|
|
76
|
+
## 2.19.15
|
|
77
|
+
Fri, 08 Oct 2021 16:44:23 GMT
|
|
78
|
+
|
|
79
|
+
_Version update only_
|
|
80
|
+
|
|
81
|
+
## 2.19.14
|
|
82
|
+
Fri, 01 Oct 2021 13:07:03 GMT
|
|
83
|
+
|
|
84
|
+
_Version update only_
|
|
4
85
|
|
|
5
86
|
## 2.19.13
|
|
6
87
|
Tue, 21 Sep 2021 21:06:40 GMT
|
package/README.md
CHANGED
|
@@ -29,4 +29,4 @@ This package can also be installed into an application and the method MapLayersU
|
|
|
29
29
|
|
|
30
30
|
## Contributing
|
|
31
31
|
|
|
32
|
-
[Contributing to iTwin.js](https://github.com/
|
|
32
|
+
[Contributing to iTwin.js](https://github.com/iTwin/itwinjs-core/blob/master/CONTRIBUTING.md)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { MapLayerSource } from "@itwin/core-frontend";
|
|
2
|
+
import { BeEvent, GuidString } from "@itwin/core-bentley";
|
|
3
|
+
/** @internal */
|
|
4
|
+
export interface MapLayerPreferencesContent {
|
|
5
|
+
url: string;
|
|
6
|
+
name: string;
|
|
7
|
+
formatId: string;
|
|
8
|
+
transparentBackground: boolean | undefined;
|
|
9
|
+
}
|
|
10
|
+
/** @internal */
|
|
11
|
+
export declare enum MapLayerSourceChangeType {
|
|
12
|
+
Added = 0,
|
|
13
|
+
Removed = 1,
|
|
14
|
+
Replaced = 2
|
|
15
|
+
}
|
|
16
|
+
/** @internal */
|
|
17
|
+
export interface MapLayerSourceArg {
|
|
18
|
+
readonly source: MapLayerSource;
|
|
19
|
+
readonly iTwinId: GuidString;
|
|
20
|
+
readonly iModelId: GuidString;
|
|
21
|
+
}
|
|
22
|
+
/** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].
|
|
23
|
+
*
|
|
24
|
+
* Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export declare class MapLayerPreferences {
|
|
29
|
+
/** Event raised whenever a source is added, replaced or removed:
|
|
30
|
+
* changeType : Type of changed occurred.
|
|
31
|
+
* oldSource : Source that was removed or replaced.
|
|
32
|
+
* newSource : Source that was added or replacement of oldSource.
|
|
33
|
+
*
|
|
34
|
+
* @see [[MapLayerSourceChangeType]]
|
|
35
|
+
*/
|
|
36
|
+
static readonly onLayerSourceChanged: BeEvent<(changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource | undefined, newSource?: MapLayerSource | undefined) => void>;
|
|
37
|
+
/** Store the Map Layer source preference. If the same setting exists at a higher level, an error will be thrown and the setting will not be updated.
|
|
38
|
+
*
|
|
39
|
+
* Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when
|
|
40
|
+
* a project setting exists with same name or map layer url.
|
|
41
|
+
* @param source source to be stored on the setting service
|
|
42
|
+
* @param storeOnIModel if true store the settings object on the model, if false store it on the project
|
|
43
|
+
*/
|
|
44
|
+
static storeSource(source: MapLayerSource, storeOnIModel: boolean, iTwinId: GuidString, iModelId: GuidString): Promise<boolean>;
|
|
45
|
+
/** Replace the old map layer source with a new map layer source.
|
|
46
|
+
*
|
|
47
|
+
* The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)
|
|
48
|
+
*
|
|
49
|
+
* @param oldSource
|
|
50
|
+
* @param newSource
|
|
51
|
+
* @param projectId
|
|
52
|
+
* @param iModelId
|
|
53
|
+
*/
|
|
54
|
+
static replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, projectId: GuidString, iModelId: GuidString): Promise<void>;
|
|
55
|
+
/** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.
|
|
56
|
+
*
|
|
57
|
+
* @param source The source to delete. The name is used to identify the source.
|
|
58
|
+
* @param iTwinId
|
|
59
|
+
* @param iModelId
|
|
60
|
+
*/
|
|
61
|
+
static deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId: GuidString): Promise<void>;
|
|
62
|
+
/** Deletes the current setting with the provided key if it is defined at the same preference level.
|
|
63
|
+
*
|
|
64
|
+
* If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.
|
|
65
|
+
*
|
|
66
|
+
* The two potential preference levels are iTwin and iModel.
|
|
67
|
+
*
|
|
68
|
+
* @param url
|
|
69
|
+
* @param name
|
|
70
|
+
* @param iTwinId
|
|
71
|
+
* @param iModelId
|
|
72
|
+
* @param storeOnIModel
|
|
73
|
+
*/
|
|
74
|
+
private static delete;
|
|
75
|
+
/** Attempts to get a map layer based off a specific url.
|
|
76
|
+
* @param url
|
|
77
|
+
* @param projectId
|
|
78
|
+
* @param iModelId
|
|
79
|
+
*/
|
|
80
|
+
static getByUrl(url: string, projectId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined>;
|
|
81
|
+
/** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
|
|
82
|
+
* @param projectId id of the project
|
|
83
|
+
* @param iModelId id of the iModel
|
|
84
|
+
* @throws if any of the calls to grab settings fail.
|
|
85
|
+
*/
|
|
86
|
+
static getSources(projectId: GuidString, iModelId: GuidString): Promise<MapLayerSource[]>;
|
|
87
|
+
private static get _preferenceNamespace();
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=MapLayerPreferences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapLayerPreferences.d.ts","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,cAAc,EAA+C,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG1D,gBAAgB;AAChB,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5C;AAED,gBAAgB;AAChB,oBAAY,wBAAwB;IAClC,KAAK,IAAI;IACT,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;CAC/B;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,gBAAuB,oBAAoB,uBAA4B,wBAAwB,qFAA6D,IAAI,EAAI;IAEpK;;;;;;OAMG;WACiB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B5I;;;;;;;;OAQG;WACiB,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CnJ;;;;;OAKG;WACiB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlH;;;;;;;;;;;OAWG;mBACkB,MAAM;IA+E3B;;;;OAIG;WACiB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAAC;IA0BhI;;;;OAIG;WACiB,UAAU,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA6CtG,OAAO,CAAC,MAAM,KAAK,oBAAoB,GAEtC;CACF"}
|
|
@@ -0,0 +1,312 @@
|
|
|
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.MapLayerPreferences = exports.MapLayerSourceChangeType = void 0;
|
|
8
|
+
const core_frontend_1 = require("@itwin/core-frontend");
|
|
9
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
10
|
+
const mapLayers_1 = require("./mapLayers");
|
|
11
|
+
/** @internal */
|
|
12
|
+
var MapLayerSourceChangeType;
|
|
13
|
+
(function (MapLayerSourceChangeType) {
|
|
14
|
+
MapLayerSourceChangeType[MapLayerSourceChangeType["Added"] = 0] = "Added";
|
|
15
|
+
MapLayerSourceChangeType[MapLayerSourceChangeType["Removed"] = 1] = "Removed";
|
|
16
|
+
MapLayerSourceChangeType[MapLayerSourceChangeType["Replaced"] = 2] = "Replaced";
|
|
17
|
+
})(MapLayerSourceChangeType = exports.MapLayerSourceChangeType || (exports.MapLayerSourceChangeType = {}));
|
|
18
|
+
/** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].
|
|
19
|
+
*
|
|
20
|
+
* Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.
|
|
21
|
+
*
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
class MapLayerPreferences {
|
|
25
|
+
/** Store the Map Layer source preference. If the same setting exists at a higher level, an error will be thrown and the setting will not be updated.
|
|
26
|
+
*
|
|
27
|
+
* Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when
|
|
28
|
+
* a project setting exists with same name or map layer url.
|
|
29
|
+
* @param source source to be stored on the setting service
|
|
30
|
+
* @param storeOnIModel if true store the settings object on the model, if false store it on the project
|
|
31
|
+
*/
|
|
32
|
+
static async storeSource(source, storeOnIModel, iTwinId, iModelId) {
|
|
33
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
34
|
+
return false;
|
|
35
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
36
|
+
const sourceJSON = source.toJSON();
|
|
37
|
+
const mapLayerSetting = {
|
|
38
|
+
url: sourceJSON.url,
|
|
39
|
+
name: sourceJSON.name,
|
|
40
|
+
formatId: sourceJSON.formatId,
|
|
41
|
+
transparentBackground: sourceJSON.transparentBackground,
|
|
42
|
+
};
|
|
43
|
+
const result = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);
|
|
44
|
+
if (result) {
|
|
45
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.save({
|
|
46
|
+
accessToken,
|
|
47
|
+
content: mapLayerSetting,
|
|
48
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
49
|
+
key: sourceJSON.name,
|
|
50
|
+
iTwinId,
|
|
51
|
+
iModelId: storeOnIModel ? iModelId : undefined,
|
|
52
|
+
});
|
|
53
|
+
MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, core_frontend_1.MapLayerSource.fromJSON(mapLayerSetting));
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Replace the old map layer source with a new map layer source.
|
|
61
|
+
*
|
|
62
|
+
* The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)
|
|
63
|
+
*
|
|
64
|
+
* @param oldSource
|
|
65
|
+
* @param newSource
|
|
66
|
+
* @param projectId
|
|
67
|
+
* @param iModelId
|
|
68
|
+
*/
|
|
69
|
+
static async replaceSource(oldSource, newSource, projectId, iModelId) {
|
|
70
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
71
|
+
return;
|
|
72
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
73
|
+
let storeOnIModel = false;
|
|
74
|
+
try {
|
|
75
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
76
|
+
accessToken,
|
|
77
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
78
|
+
key: oldSource.name,
|
|
79
|
+
iTwinId: projectId,
|
|
80
|
+
iModelId,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (_err) {
|
|
84
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
85
|
+
accessToken,
|
|
86
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
87
|
+
key: oldSource.name,
|
|
88
|
+
iTwinId: projectId,
|
|
89
|
+
});
|
|
90
|
+
storeOnIModel = true;
|
|
91
|
+
}
|
|
92
|
+
const mapLayerSetting = {
|
|
93
|
+
url: newSource.url,
|
|
94
|
+
name: newSource.name,
|
|
95
|
+
formatId: newSource.formatId,
|
|
96
|
+
transparentBackground: newSource.transparentBackground,
|
|
97
|
+
};
|
|
98
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.save({
|
|
99
|
+
accessToken,
|
|
100
|
+
key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,
|
|
101
|
+
iTwinId: projectId,
|
|
102
|
+
iModelId: storeOnIModel ? iModelId : undefined,
|
|
103
|
+
content: mapLayerSetting,
|
|
104
|
+
});
|
|
105
|
+
MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);
|
|
106
|
+
}
|
|
107
|
+
/** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.
|
|
108
|
+
*
|
|
109
|
+
* @param source The source to delete. The name is used to identify the source.
|
|
110
|
+
* @param iTwinId
|
|
111
|
+
* @param iModelId
|
|
112
|
+
*/
|
|
113
|
+
static async deleteByName(source, iTwinId, iModelId) {
|
|
114
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
115
|
+
return;
|
|
116
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
117
|
+
try {
|
|
118
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
119
|
+
accessToken,
|
|
120
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
121
|
+
key: source.name,
|
|
122
|
+
iTwinId,
|
|
123
|
+
iModelId,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch (_err) {
|
|
127
|
+
// failed to store based on iModelId, attempt using iTwinId
|
|
128
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
129
|
+
accessToken,
|
|
130
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
131
|
+
key: source.name,
|
|
132
|
+
iTwinId,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);
|
|
136
|
+
}
|
|
137
|
+
/** Deletes the current setting with the provided key if it is defined at the same preference level.
|
|
138
|
+
*
|
|
139
|
+
* If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.
|
|
140
|
+
*
|
|
141
|
+
* The two potential preference levels are iTwin and iModel.
|
|
142
|
+
*
|
|
143
|
+
* @param url
|
|
144
|
+
* @param name
|
|
145
|
+
* @param iTwinId
|
|
146
|
+
* @param iModelId
|
|
147
|
+
* @param storeOnIModel
|
|
148
|
+
*/
|
|
149
|
+
static async delete(url, name, iTwinId, iModelId, storeOnIModel) {
|
|
150
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
151
|
+
return true;
|
|
152
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
153
|
+
const iTwinPreferenceByName = await mapLayers_1.MapLayersUI.iTwinConfig.get({
|
|
154
|
+
accessToken,
|
|
155
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
156
|
+
key: name,
|
|
157
|
+
iTwinId,
|
|
158
|
+
});
|
|
159
|
+
if (undefined !== iTwinPreferenceByName && storeOnIModel) {
|
|
160
|
+
const errorMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsAsProjectSetting", { layer: iTwinPreferenceByName.name });
|
|
161
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Error, errorMessage));
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
else if (iTwinPreferenceByName) {
|
|
165
|
+
const infoMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: iTwinPreferenceByName.name });
|
|
166
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, infoMessage));
|
|
167
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
168
|
+
accessToken,
|
|
169
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
170
|
+
key: iTwinPreferenceByName.name,
|
|
171
|
+
iTwinId,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// check if setting with url already exists, if it does, delete it
|
|
175
|
+
const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);
|
|
176
|
+
if (settingFromUrl && storeOnIModel) {
|
|
177
|
+
const errorMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting", { url: settingFromUrl.url, name: settingFromUrl.name });
|
|
178
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Error, errorMessage));
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
else if (settingFromUrl) {
|
|
182
|
+
const infoMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });
|
|
183
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, infoMessage));
|
|
184
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
185
|
+
accessToken,
|
|
186
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
187
|
+
key: settingFromUrl.name,
|
|
188
|
+
iTwinId,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
if (iModelId) { // delete any settings on model so user can update them if theres collisions
|
|
192
|
+
const settingOnIModelFromName = await mapLayers_1.MapLayersUI.iTwinConfig.get({
|
|
193
|
+
accessToken,
|
|
194
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
195
|
+
key: name,
|
|
196
|
+
iTwinId,
|
|
197
|
+
iModelId,
|
|
198
|
+
});
|
|
199
|
+
const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);
|
|
200
|
+
if (settingOnIModelFromName) {
|
|
201
|
+
const infoMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerExistsOverwriting", { layer: settingOnIModelFromName.name });
|
|
202
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, infoMessage));
|
|
203
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
204
|
+
accessToken,
|
|
205
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
206
|
+
key: settingOnIModelFromName.name,
|
|
207
|
+
iTwinId,
|
|
208
|
+
iModelId,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
if (settingFromUrlOnIModel) {
|
|
212
|
+
const infoMessage = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.LayerWithUrlExistsOverwriting", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });
|
|
213
|
+
core_frontend_1.IModelApp.notifications.outputMessage(new core_frontend_1.NotifyMessageDetails(core_frontend_1.OutputMessagePriority.Info, infoMessage));
|
|
214
|
+
await mapLayers_1.MapLayersUI.iTwinConfig.delete({
|
|
215
|
+
accessToken,
|
|
216
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
217
|
+
key: settingFromUrlOnIModel.name,
|
|
218
|
+
iTwinId,
|
|
219
|
+
iModelId,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
/** Attempts to get a map layer based off a specific url.
|
|
226
|
+
* @param url
|
|
227
|
+
* @param projectId
|
|
228
|
+
* @param iModelId
|
|
229
|
+
*/
|
|
230
|
+
static async getByUrl(url, projectId, iModelId) {
|
|
231
|
+
var _a;
|
|
232
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
233
|
+
return undefined;
|
|
234
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
235
|
+
const settingResponse = await mapLayers_1.MapLayersUI.iTwinConfig.get({
|
|
236
|
+
accessToken,
|
|
237
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
238
|
+
key: "",
|
|
239
|
+
iTwinId: projectId,
|
|
240
|
+
iModelId,
|
|
241
|
+
});
|
|
242
|
+
if (undefined === settingResponse || 0 === settingResponse.length)
|
|
243
|
+
return undefined;
|
|
244
|
+
let savedMapLayer;
|
|
245
|
+
(_a = settingResponse.settingsMap) === null || _a === void 0 ? void 0 : _a.forEach((savedLayer) => {
|
|
246
|
+
if (savedLayer.url === url) {
|
|
247
|
+
savedMapLayer = savedLayer;
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
return savedMapLayer;
|
|
251
|
+
}
|
|
252
|
+
/** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.
|
|
253
|
+
* @param projectId id of the project
|
|
254
|
+
* @param iModelId id of the iModel
|
|
255
|
+
* @throws if any of the calls to grab settings fail.
|
|
256
|
+
*/
|
|
257
|
+
static async getSources(projectId, iModelId) {
|
|
258
|
+
if (!mapLayers_1.MapLayersUI.iTwinConfig)
|
|
259
|
+
return [];
|
|
260
|
+
const accessToken = undefined !== core_frontend_1.IModelApp.authorizationClient ? (await core_frontend_1.IModelApp.authorizationClient.getAccessToken()) : undefined;
|
|
261
|
+
const mapLayerList = [];
|
|
262
|
+
try {
|
|
263
|
+
const userResultByProject = await mapLayers_1.MapLayersUI.iTwinConfig.get({
|
|
264
|
+
accessToken,
|
|
265
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
266
|
+
key: "",
|
|
267
|
+
iTwinId: projectId,
|
|
268
|
+
});
|
|
269
|
+
if (undefined !== userResultByProject)
|
|
270
|
+
mapLayerList.push(userResultByProject);
|
|
271
|
+
}
|
|
272
|
+
catch (err) {
|
|
273
|
+
throw new Error(core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const userResultByIModel = await mapLayers_1.MapLayersUI.iTwinConfig.get({
|
|
277
|
+
accessToken,
|
|
278
|
+
namespace: MapLayerPreferences._preferenceNamespace,
|
|
279
|
+
key: "",
|
|
280
|
+
iTwinId: projectId,
|
|
281
|
+
iModelId,
|
|
282
|
+
});
|
|
283
|
+
if (undefined !== userResultByIModel)
|
|
284
|
+
mapLayerList.push(userResultByIModel);
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
throw new Error(core_frontend_1.IModelApp.localization.getLocalizedString("mapLayers:CustomAttach.ErrorRetrieveUserProject", { errorMessage: err }));
|
|
288
|
+
}
|
|
289
|
+
const savedMapLayerSources = [];
|
|
290
|
+
for (const mapLayer of mapLayerList) {
|
|
291
|
+
mapLayer.forEach((savedLayer) => {
|
|
292
|
+
const mapLayerSource = core_frontend_1.MapLayerSource.fromJSON(savedLayer);
|
|
293
|
+
if (mapLayerSource)
|
|
294
|
+
savedMapLayerSources.push(mapLayerSource);
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return savedMapLayerSources;
|
|
298
|
+
}
|
|
299
|
+
static get _preferenceNamespace() {
|
|
300
|
+
return "MapLayerSource-SettingsService";
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
exports.MapLayerPreferences = MapLayerPreferences;
|
|
304
|
+
/** Event raised whenever a source is added, replaced or removed:
|
|
305
|
+
* changeType : Type of changed occurred.
|
|
306
|
+
* oldSource : Source that was removed or replaced.
|
|
307
|
+
* newSource : Source that was added or replacement of oldSource.
|
|
308
|
+
*
|
|
309
|
+
* @see [[MapLayerSourceChangeType]]
|
|
310
|
+
*/
|
|
311
|
+
MapLayerPreferences.onLayerSourceChanged = new core_bentley_1.BeEvent(); // Used to notify the frontend that it needs to update its list of available layers
|
|
312
|
+
//# sourceMappingURL=MapLayerPreferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapLayerPreferences.js","sourceRoot":"","sources":["../../src/MapLayerPreferences.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelApp, MapLayerSource, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\r\nimport { BeEvent, GuidString } from \"@itwin/core-bentley\";\r\nimport { MapLayersUI } from \"./mapLayers\";\r\n\r\n/** @internal */\r\nexport interface MapLayerPreferencesContent {\r\n url: string;\r\n name: string;\r\n formatId: string;\r\n transparentBackground: boolean | undefined;\r\n}\r\n\r\n/** @internal */\r\nexport enum MapLayerSourceChangeType {\r\n Added = 0,\r\n Removed = 1,\r\n Replaced = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface MapLayerSourceArg {\r\n readonly source: MapLayerSource;\r\n readonly iTwinId: GuidString;\r\n readonly iModelId: GuidString;\r\n}\r\n\r\n/** A wrapper around user preferences to provide a way to store [[MapLayerSettings]].\r\n *\r\n * Note: This is currently internal only and used directly by the MapLayersExtension. It makes use of the IModelApp.authorizationClient if it exists.\r\n *\r\n * @internal\r\n */\r\nexport class MapLayerPreferences {\r\n /** Event raised whenever a source is added, replaced or removed:\r\n * changeType : Type of changed occurred.\r\n * oldSource : Source that was removed or replaced.\r\n * newSource : Source that was added or replacement of oldSource.\r\n *\r\n * @see [[MapLayerSourceChangeType]]\r\n */\r\n public static readonly onLayerSourceChanged = new BeEvent<(changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => void>(); // Used to notify the frontend that it needs to update its list of available layers\r\n\r\n /** Store the Map Layer source preference. If the same setting exists at a higher level, an error will be thrown and the setting will not be updated.\r\n *\r\n * Returns false if the settings object would override some other settings object in a larger scope i.e. storing settings on model when\r\n * a project setting exists with same name or map layer url.\r\n * @param source source to be stored on the setting service\r\n * @param storeOnIModel if true store the settings object on the model, if false store it on the project\r\n */\r\n public static async storeSource(source: MapLayerSource, storeOnIModel: boolean, iTwinId: GuidString, iModelId: GuidString): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return false;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const sourceJSON = source.toJSON();\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: sourceJSON.url,\r\n name: sourceJSON.name,\r\n formatId: sourceJSON.formatId,\r\n transparentBackground: sourceJSON.transparentBackground,\r\n };\r\n\r\n const result: boolean = await MapLayerPreferences.delete(sourceJSON.url, sourceJSON.name, iTwinId, iModelId, storeOnIModel);\r\n if (result) {\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n content: mapLayerSetting,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: sourceJSON.name,\r\n iTwinId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n });\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Added, undefined, MapLayerSource.fromJSON(mapLayerSetting));\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /** Replace the old map layer source with a new map layer source.\r\n *\r\n * The source is replaced at the same level that the original source is defined. (i.e. if the old source is defined at a project level, the new source will also be defined there.)\r\n *\r\n * @param oldSource\r\n * @param newSource\r\n * @param projectId\r\n * @param iModelId\r\n */\r\n public static async replaceSource(oldSource: MapLayerSource, newSource: MapLayerSource, projectId: GuidString, iModelId: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n let storeOnIModel = false;\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: oldSource.name,\r\n iTwinId: projectId,\r\n });\r\n storeOnIModel = true;\r\n }\r\n\r\n const mapLayerSetting: MapLayerPreferencesContent = {\r\n url: newSource.url,\r\n name: newSource.name,\r\n formatId: newSource.formatId,\r\n transparentBackground: newSource.transparentBackground,\r\n };\r\n\r\n await MapLayersUI.iTwinConfig.save({\r\n accessToken,\r\n key: `${MapLayerPreferences._preferenceNamespace}.${newSource.name}`,\r\n iTwinId: projectId,\r\n iModelId: storeOnIModel ? iModelId : undefined,\r\n content: mapLayerSetting,\r\n });\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Replaced, oldSource, newSource);\r\n }\r\n\r\n /** Deletes the provided MapLayerSource by name from both the iTwin or iModel level.\r\n *\r\n * @param source The source to delete. The name is used to identify the source.\r\n * @param iTwinId\r\n * @param iModelId\r\n */\r\n public static async deleteByName(source: MapLayerSource, iTwinId: GuidString, iModelId: GuidString): Promise<void> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n try {\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n } catch (_err) {\r\n // failed to store based on iModelId, attempt using iTwinId\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: source.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n MapLayerPreferences.onLayerSourceChanged.raiseEvent(MapLayerSourceChangeType.Removed, source, undefined);\r\n }\r\n\r\n /** Deletes the current setting with the provided key if it is defined at the same preference level.\r\n *\r\n * If the preference is defined within a different level, false will be returned indicating the setting should not be overriden.\r\n *\r\n * The two potential preference levels are iTwin and iModel.\r\n *\r\n * @param url\r\n * @param name\r\n * @param iTwinId\r\n * @param iModelId\r\n * @param storeOnIModel\r\n */\r\n private static async delete(url: string, name: string, iTwinId: GuidString, iModelId: GuidString, storeOnIModel: boolean): Promise<boolean> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return true;\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const iTwinPreferenceByName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n });\r\n\r\n if (undefined !== iTwinPreferenceByName && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsAsProjectSetting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (iTwinPreferenceByName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: iTwinPreferenceByName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: iTwinPreferenceByName.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n // check if setting with url already exists, if it does, delete it\r\n const settingFromUrl = await MapLayerPreferences.getByUrl(url, iTwinId, undefined);\r\n if (settingFromUrl && storeOnIModel) {\r\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsAsProjectSetting\", { url: settingFromUrl.url, name: settingFromUrl.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\r\n return false;\r\n } else if (settingFromUrl) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrl.url, oldName: settingFromUrl.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrl.name,\r\n iTwinId,\r\n });\r\n }\r\n\r\n if (iModelId) { // delete any settings on model so user can update them if theres collisions\r\n const settingOnIModelFromName = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n const settingFromUrlOnIModel = await MapLayerPreferences.getByUrl(url, iTwinId, iModelId);\r\n if (settingOnIModelFromName) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerExistsOverwriting\", { layer: settingOnIModelFromName.name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingOnIModelFromName.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n if (settingFromUrlOnIModel) {\r\n const infoMessage = IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.LayerWithUrlExistsOverwriting\", { url: settingFromUrlOnIModel.url, oldName: settingFromUrlOnIModel.name, newName: name });\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Info, infoMessage));\r\n await MapLayersUI.iTwinConfig.delete({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: settingFromUrlOnIModel.name,\r\n iTwinId,\r\n iModelId,\r\n });\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /** Attempts to get a map layer based off a specific url.\r\n * @param url\r\n * @param projectId\r\n * @param iModelId\r\n */\r\n public static async getByUrl(url: string, projectId: string, iModelId?: string): Promise<MapLayerPreferencesContent | undefined> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return undefined;\r\n\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const settingResponse = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n\r\n if (undefined === settingResponse || 0 === settingResponse.length)\r\n return undefined;\r\n\r\n let savedMapLayer;\r\n settingResponse.settingsMap?.forEach((savedLayer: any) => {\r\n if (savedLayer.url === url) {\r\n savedMapLayer = savedLayer;\r\n }\r\n });\r\n return savedMapLayer;\r\n }\r\n\r\n /** Get all MapLayerSources from the user's preferences, iTwin setting and iModel settings.\r\n * @param projectId id of the project\r\n * @param iModelId id of the iModel\r\n * @throws if any of the calls to grab settings fail.\r\n */\r\n public static async getSources(projectId: GuidString, iModelId: GuidString): Promise<MapLayerSource[]> {\r\n if (!MapLayersUI.iTwinConfig)\r\n return [];\r\n const accessToken = undefined !== IModelApp.authorizationClient ? (await IModelApp.authorizationClient.getAccessToken()) : undefined;\r\n\r\n const mapLayerList = [];\r\n\r\n try {\r\n const userResultByProject = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n });\r\n if (undefined !== userResultByProject)\r\n mapLayerList.push(userResultByProject);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n try {\r\n const userResultByIModel = await MapLayersUI.iTwinConfig.get({\r\n accessToken,\r\n namespace: MapLayerPreferences._preferenceNamespace,\r\n key: \"\",\r\n iTwinId: projectId,\r\n iModelId,\r\n });\r\n if (undefined !== userResultByIModel)\r\n mapLayerList.push(userResultByIModel);\r\n } catch (err: any) {\r\n throw new Error(IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorRetrieveUserProject\", { errorMessage: err }));\r\n }\r\n\r\n const savedMapLayerSources: MapLayerSource[] = [];\r\n for (const mapLayer of mapLayerList) {\r\n mapLayer.forEach((savedLayer: any) => {\r\n const mapLayerSource = MapLayerSource.fromJSON(savedLayer as MapLayerPreferencesContent);\r\n if (mapLayerSource)\r\n savedMapLayerSources.push(mapLayerSource);\r\n });\r\n }\r\n return savedMapLayerSources;\r\n }\r\n\r\n private static get _preferenceNamespace() {\r\n return \"MapLayerSource-SettingsService\";\r\n }\r\n}\r\n"]}
|
package/lib/cjs/mapLayers.d.ts
CHANGED
|
@@ -1,25 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { UserPreferencesAccess } from "@itwin/core-frontend";
|
|
2
|
+
/** MapLayersUI is use when the package is used as a dependency to another app.
|
|
3
3
|
* '''ts
|
|
4
|
-
*
|
|
5
|
-
* // so it can be explicitly added to a stage via a FrontstageDef.
|
|
6
|
-
* await MapLayersUI.initialize (registerItemsProvider);
|
|
4
|
+
* await MapLayersUI.initialize(registerItemsProvider);
|
|
7
5
|
* '''
|
|
8
6
|
* @beta
|
|
9
7
|
*/
|
|
10
8
|
export declare class MapLayersUI {
|
|
11
9
|
private static _defaultNs;
|
|
12
10
|
private static _uiItemsProvider;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
11
|
+
private static _itemsProviderRegistered?;
|
|
12
|
+
private static _iTwinConfig?;
|
|
13
|
+
static get iTwinConfig(): UserPreferencesAccess | undefined;
|
|
14
|
+
/** Used to initialize the Map Layers.
|
|
15
|
+
*
|
|
16
|
+
* If `registerItemsProvider` is true, the UiItemsProvider will automatically insert the UI items into the host applications UI.
|
|
17
|
+
* If it is false, explicitly add widget definition to a specific FrontStage definition using the following syntax.
|
|
18
|
+
*
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Widget id={MapLayersWidgetControl.id} label={MapLayersWidgetControl.label} control={MapLayersWidgetControl}
|
|
18
21
|
* iconSpec={MapLayersWidgetControl.iconSpec} />,
|
|
19
|
-
*
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* If an iTwinConfig is provided, it will be used to load the MapLayerSources that are stored.
|
|
20
25
|
*/
|
|
21
|
-
static initialize(registerItemsProvider?: boolean): Promise<void>;
|
|
22
|
-
/** Unregisters
|
|
26
|
+
static initialize(registerItemsProvider?: boolean, iTwinConfig?: UserPreferencesAccess): Promise<void>;
|
|
27
|
+
/** Unregisters internationalization service namespace and UiItemManager / control */
|
|
23
28
|
static terminate(): void;
|
|
24
29
|
/** The internationalization service namespace. */
|
|
25
30
|
static get localizationNamespace(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapLayers.d.ts","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mapLayers.d.ts","sourceRoot":"","sources":["../../src/mapLayers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIxE;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAe;IACxC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAA2B;IAC1D,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAU;IAElD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAwB;IACpD,WAAkB,WAAW,IAAI,qBAAqB,GAAG,SAAS,CAA8B;IAEhG;;;;;;;;;;;OAWG;WACiB,UAAU,CAAC,qBAAqB,UAAO,EAAE,WAAW,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAchH,qFAAqF;WACvE,SAAS;IAWvB,kDAAkD;IAClD,WAAkB,qBAAqB,IAAI,MAAM,CAEhD;CACF"}
|