@vcmap/core 6.0.0-rc.3 → 6.0.0-rc.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/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/category/category.d.ts +3 -3
- package/dist/src/category/category.js.map +1 -1
- package/dist/src/classRegistry.d.ts +3 -2
- package/dist/src/classRegistry.js +2 -0
- package/dist/src/classRegistry.js.map +1 -1
- package/dist/src/map/obliqueMap.d.ts +3 -0
- package/dist/src/map/obliqueMap.js +27 -6
- package/dist/src/map/obliqueMap.js.map +1 -1
- package/dist/src/map/vcsMap.d.ts +8 -0
- package/dist/src/map/vcsMap.js +11 -0
- package/dist/src/map/vcsMap.js.map +1 -1
- package/dist/src/overrideClassRegistry.d.ts +2 -2
- package/dist/src/overrideClassRegistry.js +5 -3
- package/dist/src/overrideClassRegistry.js.map +1 -1
- package/dist/src/util/hiddenObjects.js.map +1 -1
- package/dist/src/util/mapCollection.js +8 -0
- package/dist/src/util/mapCollection.js.map +1 -1
- package/dist/src/util/overrideCollection.d.ts +7 -7
- package/dist/src/util/overrideCollection.js +4 -6
- package/dist/src/util/overrideCollection.js.map +1 -1
- package/dist/src/vcsModuleHelpers.d.ts +1 -0
- package/dist/src/vcsModuleHelpers.js +16 -2
- package/dist/src/vcsModuleHelpers.js.map +1 -1
- package/index.ts +1 -0
- package/package.json +1 -1
- package/src/category/category.ts +8 -7
- package/src/classRegistry.ts +6 -3
- package/src/map/obliqueMap.ts +46 -6
- package/src/map/vcsMap.ts +20 -2
- package/src/overrideClassRegistry.ts +13 -7
- package/src/util/hiddenObjects.ts +4 -4
- package/src/util/mapCollection.ts +8 -0
- package/src/util/overrideCollection.ts +27 -20
- package/src/vcsModuleHelpers.ts +25 -2
|
@@ -22,7 +22,7 @@ export type OverrideCollectionItem = {
|
|
|
22
22
|
* removed current item. 2) replaced is called for items which where replaced. 3) added can be called more the once for the same unique id.
|
|
23
23
|
* Replaced is called before added has been called for the item.
|
|
24
24
|
*/
|
|
25
|
-
export type OverrideCollectionInterface<T> = {
|
|
25
|
+
export type OverrideCollectionInterface<T, S> = {
|
|
26
26
|
/**
|
|
27
27
|
* replaced is called before added
|
|
28
28
|
*/
|
|
@@ -32,23 +32,23 @@ export type OverrideCollectionInterface<T> = {
|
|
|
32
32
|
* Returns the replaced item or null if the item could not be inserted
|
|
33
33
|
*/
|
|
34
34
|
replace: (item: T) => T | null;
|
|
35
|
-
shadowMap: Map<string, (
|
|
35
|
+
shadowMap: Map<string, (S & {
|
|
36
36
|
[moduleIdSymbol]?: string;
|
|
37
37
|
})[]>;
|
|
38
38
|
/**
|
|
39
39
|
* returns the overriden item or null if the item could not be inserted (this would be the result of a race condition)
|
|
40
40
|
*/
|
|
41
41
|
override: (item: T) => T | null;
|
|
42
|
-
parseItems: (items: (
|
|
42
|
+
parseItems: (items: (S & {
|
|
43
43
|
type?: string;
|
|
44
44
|
})[] | undefined, moduleId: string) => Promise<void>;
|
|
45
|
-
getSerializedByKey: (key: string) =>
|
|
45
|
+
getSerializedByKey: (key: string) => S | undefined;
|
|
46
46
|
removeModule: (moduleId: string) => void;
|
|
47
47
|
serializeModule: (moduleId: string) => object[];
|
|
48
48
|
[isOverrideCollection]: boolean;
|
|
49
49
|
uniqueKey: keyof T;
|
|
50
50
|
};
|
|
51
|
-
export type OverrideCollection<T extends OverrideCollectionItem, C extends Collection<T> = Collection<T
|
|
51
|
+
export type OverrideCollection<T extends OverrideCollectionItem, C extends Collection<T> = Collection<T>, S extends object = T['toJSON'] extends () => object ? ReturnType<T['toJSON']> : T> = C & OverrideCollectionInterface<T, S>;
|
|
52
52
|
/**
|
|
53
53
|
* @param collection
|
|
54
54
|
* @param getDynamicModuleId - function to get the current dynamic module id
|
|
@@ -57,7 +57,7 @@ export type OverrideCollection<T extends OverrideCollectionItem, C extends Colle
|
|
|
57
57
|
* @param ctor - optional constructor to validate deserialized items against. if passed, deserializeItem must be an instance of ctor.
|
|
58
58
|
* @param determineShadowIndex - return the index where a shadow should be inserted. only has relevance, if the collection is indexed. previous and current index may be null.
|
|
59
59
|
*/
|
|
60
|
-
declare function makeOverrideCollection<T extends OverrideCollectionItem, C extends Collection<T
|
|
60
|
+
declare function makeOverrideCollection<T extends OverrideCollectionItem, C extends Collection<T> = Collection<T>, S extends object = T['toJSON'] extends () => object ? ReturnType<T['toJSON']> : T>(collection: C, getDynamicModuleId: () => string, serializeItem?: (item: T) => S & {
|
|
61
61
|
[moduleIdSymbol]?: string;
|
|
62
|
-
}, deserializeItem?: (item:
|
|
62
|
+
}, deserializeItem?: (item: S) => T | Promise<T> | null, ctor?: new (...args: any[]) => T, determineShadowIndex?: (item: T, shadow?: T, index?: number) => number | null | undefined): OverrideCollection<T, C, S>;
|
|
63
63
|
export default makeOverrideCollection;
|
|
@@ -10,6 +10,9 @@ function getLogger() {
|
|
|
10
10
|
* A symbol added to override collections.
|
|
11
11
|
*/
|
|
12
12
|
export const isOverrideCollection = Symbol('OverrideCollection');
|
|
13
|
+
function defaulSerialization(i) {
|
|
14
|
+
return i.toJSON ? i.toJSON() : structuredClone(i);
|
|
15
|
+
}
|
|
13
16
|
/**
|
|
14
17
|
* @param collection
|
|
15
18
|
* @param getDynamicModuleId - function to get the current dynamic module id
|
|
@@ -26,8 +29,7 @@ function makeOverrideCollection(collection, getDynamicModuleId, serializeItem, d
|
|
|
26
29
|
}
|
|
27
30
|
overrideCollection[isOverrideCollection] = true;
|
|
28
31
|
const deserialize = deserializeItem || ((i) => i);
|
|
29
|
-
const serialize = serializeItem ||
|
|
30
|
-
((i) => i.toJSON ? i.toJSON() : structuredClone(i));
|
|
32
|
+
const serialize = (serializeItem || defaulSerialization);
|
|
31
33
|
const getShadowIndex = determineShadowIndex ||
|
|
32
34
|
((_item, _shadow, currentIndex) => currentIndex);
|
|
33
35
|
overrideCollection.shadowMap = new Map();
|
|
@@ -162,10 +164,6 @@ function makeOverrideCollection(collection, getDynamicModuleId, serializeItem, d
|
|
|
162
164
|
});
|
|
163
165
|
};
|
|
164
166
|
overrideCollection.replaced = new VcsEvent();
|
|
165
|
-
/**
|
|
166
|
-
* @param {string} moduleId
|
|
167
|
-
* @returns {Object[]}
|
|
168
|
-
*/
|
|
169
167
|
overrideCollection.serializeModule = function serializeModule(moduleId) {
|
|
170
168
|
return [...overrideCollection]
|
|
171
169
|
.map((item) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overrideCollection.js","sourceRoot":"","sources":["../../../src/util/overrideCollection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,IAAI,eAAe,EAAe,MAAM,iBAAiB,CAAC;AAC5E,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,SAAS,SAAS;IAChB,OAAO,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAC/C,CAAC;AAOD;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"overrideCollection.js","sourceRoot":"","sources":["../../../src/util/overrideCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import type { AbstractFeatureProviderOptions } from './featureProvider/abstractF
|
|
|
7
7
|
import type VcsApp from './vcsApp.js';
|
|
8
8
|
export type ModuleLayerOptions = LayerOptions & {
|
|
9
9
|
style?: string | StyleItemOptions;
|
|
10
|
+
highlightStyle?: string | StyleItemOptions;
|
|
10
11
|
tileProvider?: TileProviderOptions;
|
|
11
12
|
featureProvider?: AbstractFeatureProviderOptions;
|
|
12
13
|
};
|
|
@@ -28,7 +28,16 @@ export function deserializeLayer(vcsApp, layerConfig) {
|
|
|
28
28
|
else {
|
|
29
29
|
style = getObjectFromClassRegistry(vcsApp.styleClassRegistry, layerConfig.style);
|
|
30
30
|
}
|
|
31
|
-
}
|
|
31
|
+
}
|
|
32
|
+
let highlightStyle;
|
|
33
|
+
if (layerConfig.highlightStyle) {
|
|
34
|
+
if (typeof layerConfig.highlightStyle === 'string') {
|
|
35
|
+
highlightStyle = vcsApp.styles.getByKey(layerConfig.highlightStyle);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
highlightStyle = getObjectFromClassRegistry(vcsApp.styleClassRegistry, layerConfig.highlightStyle);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
32
41
|
let tileProvider;
|
|
33
42
|
if (layerConfig.tileProvider) {
|
|
34
43
|
tileProvider = getObjectFromClassRegistry(vcsApp.tileProviderClassRegistry, layerConfig.tileProvider);
|
|
@@ -40,6 +49,7 @@ export function deserializeLayer(vcsApp, layerConfig) {
|
|
|
40
49
|
return getObjectFromClassRegistry(vcsApp.layerClassRegistry, {
|
|
41
50
|
...layerConfig,
|
|
42
51
|
style,
|
|
52
|
+
highlightStyle,
|
|
43
53
|
tileProvider,
|
|
44
54
|
featureProvider,
|
|
45
55
|
});
|
|
@@ -52,7 +62,11 @@ export function serializeLayer(vcsApp, layer) {
|
|
|
52
62
|
if (serializedLayer?.style?.name &&
|
|
53
63
|
vcsApp.styles.hasKey(serializedLayer.style.name)) {
|
|
54
64
|
serializedLayer.style = serializedLayer.style.name;
|
|
55
|
-
}
|
|
65
|
+
}
|
|
66
|
+
if (serializedLayer?.highlightStyle?.name &&
|
|
67
|
+
vcsApp.styles.hasKey(serializedLayer.highlightStyle.name)) {
|
|
68
|
+
serializedLayer.highlightStyle = serializedLayer.highlightStyle.name;
|
|
69
|
+
}
|
|
56
70
|
return serializedLayer;
|
|
57
71
|
}
|
|
58
72
|
export function getLayerIndex(current, previous, currentIndex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vcsModuleHelpers.js","sourceRoot":"","sources":["../../src/vcsModuleHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAe,MAAM,iBAAiB,CAAC;AAC5E,OAAO,SAAoC,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAchE,SAAS,SAAS;IAChB,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"vcsModuleHelpers.js","sourceRoot":"","sources":["../../src/vcsModuleHelpers.ts"],"names":[],"mappings":"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"}
|
package/index.ts
CHANGED
|
@@ -489,6 +489,7 @@ export {
|
|
|
489
489
|
default as DisplayQuality,
|
|
490
490
|
DisplayQualityLevel,
|
|
491
491
|
DisplayQualityOptions,
|
|
492
|
+
DisplayQualityViewModelOptions,
|
|
492
493
|
} from './src/util/displayQuality/displayQuality.js';
|
|
493
494
|
export { default as Collection } from './src/util/collection.js';
|
|
494
495
|
export {
|
package/package.json
CHANGED
package/src/category/category.ts
CHANGED
|
@@ -77,6 +77,7 @@ function checkMergeOptionOverride<
|
|
|
77
77
|
*/
|
|
78
78
|
class Category<
|
|
79
79
|
T extends VcsObject | object = VcsObject | object,
|
|
80
|
+
S extends object = object,
|
|
80
81
|
> extends VcsObject {
|
|
81
82
|
static get className(): string {
|
|
82
83
|
return 'Category';
|
|
@@ -113,7 +114,7 @@ class Category<
|
|
|
113
114
|
|
|
114
115
|
private _collectionListeners: (() => void)[] = [];
|
|
115
116
|
|
|
116
|
-
private _collection
|
|
117
|
+
private _collection = makeOverrideCollection<T, Collection<T>, S>(
|
|
117
118
|
new IndexedCollection(),
|
|
118
119
|
this._getDynamicModuleId.bind(this),
|
|
119
120
|
this._serializeItem.bind(this),
|
|
@@ -151,7 +152,7 @@ class Category<
|
|
|
151
152
|
return this._classRegistryName;
|
|
152
153
|
}
|
|
153
154
|
|
|
154
|
-
get collection(): OverrideCollection<T> {
|
|
155
|
+
get collection(): OverrideCollection<T, Collection<T>, S> {
|
|
155
156
|
return this._collection;
|
|
156
157
|
}
|
|
157
158
|
|
|
@@ -275,11 +276,11 @@ class Category<
|
|
|
275
276
|
this._layer.removeAllFeatures(); // XXX should we call `itemRemoved` instead?
|
|
276
277
|
}
|
|
277
278
|
|
|
278
|
-
this._collection = (collection as OverrideCollection<T>)[
|
|
279
|
+
this._collection = (collection as OverrideCollection<T, Collection<T>, S>)[
|
|
279
280
|
isOverrideCollection
|
|
280
281
|
]
|
|
281
|
-
? (collection as OverrideCollection<T>)
|
|
282
|
-
: makeOverrideCollection(
|
|
282
|
+
? (collection as OverrideCollection<T, Collection<T>, S>)
|
|
283
|
+
: makeOverrideCollection<T, Collection<T>, S>(
|
|
283
284
|
collection,
|
|
284
285
|
this._getDynamicModuleId.bind(this),
|
|
285
286
|
this._serializeItem.bind(this),
|
|
@@ -343,7 +344,7 @@ class Category<
|
|
|
343
344
|
return Promise.resolve((item ?? config) as T);
|
|
344
345
|
}
|
|
345
346
|
|
|
346
|
-
protected _serializeItem(item: T):
|
|
347
|
+
protected _serializeItem(item: T): S {
|
|
347
348
|
const config = JSON.parse(JSON.stringify(item)) as Record<keyof T, unknown>;
|
|
348
349
|
if (this._featureProperty && this._layer) {
|
|
349
350
|
const feature = this._layer.getFeatureById(
|
|
@@ -353,7 +354,7 @@ class Category<
|
|
|
353
354
|
config[this._featureProperty] = writeGeoJSONFeature(feature);
|
|
354
355
|
}
|
|
355
356
|
}
|
|
356
|
-
return config;
|
|
357
|
+
return config as S;
|
|
357
358
|
}
|
|
358
359
|
|
|
359
360
|
serializeModule(moduleId: string): { name: string; items: object[] } | null {
|
package/src/classRegistry.ts
CHANGED
|
@@ -12,7 +12,9 @@ function logger(): Logger {
|
|
|
12
12
|
return getLogger('ClassRegistry');
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export type
|
|
15
|
+
export type AbstractCtor = new (...args: any) => any;
|
|
16
|
+
|
|
17
|
+
export type Ctor<T extends AbstractCtor> = new (
|
|
16
18
|
...params: any
|
|
17
19
|
) => InstanceType<T>;
|
|
18
20
|
|
|
@@ -21,7 +23,7 @@ export type TypedConstructorOptions = { type?: string } & Record<
|
|
|
21
23
|
unknown
|
|
22
24
|
>;
|
|
23
25
|
|
|
24
|
-
class ClassRegistry<T extends
|
|
26
|
+
class ClassRegistry<T extends AbstractCtor> {
|
|
25
27
|
private _classMap: Map<string, Ctor<T>>;
|
|
26
28
|
|
|
27
29
|
constructor() {
|
|
@@ -76,6 +78,7 @@ class ClassRegistry<T extends Ctor<T>> {
|
|
|
76
78
|
logger().error(`could not find constructor ${className}`);
|
|
77
79
|
return undefined;
|
|
78
80
|
}
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
79
82
|
return new Ctor(...args);
|
|
80
83
|
}
|
|
81
84
|
|
|
@@ -84,7 +87,7 @@ class ClassRegistry<T extends Ctor<T>> {
|
|
|
84
87
|
...args: unknown[]
|
|
85
88
|
): InstanceType<T> | undefined {
|
|
86
89
|
check(options, { type: String });
|
|
87
|
-
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
88
91
|
return this.create(options.type as string, options, ...args);
|
|
89
92
|
}
|
|
90
93
|
}
|
package/src/map/obliqueMap.ts
CHANGED
|
@@ -32,6 +32,7 @@ export type ObliqueOptions = VcsMapOptions & {
|
|
|
32
32
|
changeOnMoveEnd?: boolean;
|
|
33
33
|
switchThreshold?: number;
|
|
34
34
|
switchOnEdge?: boolean;
|
|
35
|
+
maintainViewpointOnCollectionChange?: boolean;
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
const defaultHeadings: Record<ViewDirection, number> = {
|
|
@@ -90,6 +91,10 @@ class ObliqueMap extends BaseOLMap {
|
|
|
90
91
|
*/
|
|
91
92
|
collectionChanged: VcsEvent<ObliqueCollection>;
|
|
92
93
|
|
|
94
|
+
failedToSetCollection = new VcsEvent<ObliqueCollection>();
|
|
95
|
+
|
|
96
|
+
maintainViewpointOnCollectionChange: boolean;
|
|
97
|
+
|
|
93
98
|
private _activeCollectionDestroyedListener: () => void;
|
|
94
99
|
|
|
95
100
|
private _obliqueProvider: ObliqueProvider | null = null;
|
|
@@ -102,6 +107,7 @@ class ObliqueMap extends BaseOLMap {
|
|
|
102
107
|
changeOnMoveEnd: false,
|
|
103
108
|
switchThreshold: 0,
|
|
104
109
|
switchOnEdge: true,
|
|
110
|
+
maintainViewpointOnCollectionChange: false,
|
|
105
111
|
};
|
|
106
112
|
}
|
|
107
113
|
|
|
@@ -129,6 +135,11 @@ class ObliqueMap extends BaseOLMap {
|
|
|
129
135
|
|
|
130
136
|
this.collectionChanged = new VcsEvent();
|
|
131
137
|
|
|
138
|
+
this.maintainViewpointOnCollectionChange = parseBoolean(
|
|
139
|
+
options.maintainViewpointOnCollectionChange,
|
|
140
|
+
defaultOptions.maintainViewpointOnCollectionChange,
|
|
141
|
+
);
|
|
142
|
+
|
|
132
143
|
this._activeCollectionDestroyedListener = (): void => {};
|
|
133
144
|
}
|
|
134
145
|
|
|
@@ -293,6 +304,7 @@ class ObliqueMap extends BaseOLMap {
|
|
|
293
304
|
if (this._loadingCollection !== obliqueCollection) {
|
|
294
305
|
return;
|
|
295
306
|
}
|
|
307
|
+
|
|
296
308
|
await this._setCollection(obliqueCollection, viewpoint);
|
|
297
309
|
}
|
|
298
310
|
|
|
@@ -304,18 +316,37 @@ class ObliqueMap extends BaseOLMap {
|
|
|
304
316
|
viewpoint?: Viewpoint,
|
|
305
317
|
): Promise<void> {
|
|
306
318
|
this._loadingCollection = obliqueCollection;
|
|
307
|
-
this._activeCollectionDestroyedListener();
|
|
308
|
-
this._activeCollectionDestroyedListener =
|
|
309
|
-
obliqueCollection.destroyed.addEventListener(() => {
|
|
310
|
-
// eslint-disable-next-line no-void
|
|
311
|
-
void this._setCollection(defaultCollection);
|
|
312
|
-
});
|
|
313
319
|
await obliqueCollection.load();
|
|
314
320
|
const vp = viewpoint || (await this.getViewpoint());
|
|
315
321
|
if (this._loadingCollection !== obliqueCollection) {
|
|
316
322
|
return;
|
|
317
323
|
}
|
|
324
|
+
|
|
325
|
+
if (
|
|
326
|
+
viewpoint &&
|
|
327
|
+
this.maintainViewpointOnCollectionChange &&
|
|
328
|
+
this.collection
|
|
329
|
+
) {
|
|
330
|
+
const viewDirection = getViewDirectionFromViewpoint(viewpoint);
|
|
331
|
+
const mercatorCoordinates = getMercatorViewpointCenter(viewpoint);
|
|
332
|
+
const canShow = await obliqueCollection.hasImageAtCoordinate(
|
|
333
|
+
mercatorCoordinates,
|
|
334
|
+
viewDirection,
|
|
335
|
+
);
|
|
336
|
+
if (!canShow) {
|
|
337
|
+
this.failedToSetCollection.raiseEvent(obliqueCollection);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
318
342
|
this._obliqueProvider?.setCollection(obliqueCollection);
|
|
343
|
+
this._activeCollectionDestroyedListener();
|
|
344
|
+
this._activeCollectionDestroyedListener =
|
|
345
|
+
obliqueCollection.destroyed.addEventListener(() => {
|
|
346
|
+
// eslint-disable-next-line no-void
|
|
347
|
+
void this._setCollection(defaultCollection);
|
|
348
|
+
});
|
|
349
|
+
|
|
319
350
|
this.collectionChanged.raiseEvent(obliqueCollection);
|
|
320
351
|
if (vp) {
|
|
321
352
|
await this.gotoViewpoint(vp);
|
|
@@ -470,6 +501,14 @@ class ObliqueMap extends BaseOLMap {
|
|
|
470
501
|
config.switchOnEdge = this.switchEnabled;
|
|
471
502
|
}
|
|
472
503
|
|
|
504
|
+
if (
|
|
505
|
+
this.maintainViewpointOnCollectionChange !==
|
|
506
|
+
defaultOptions.maintainViewpointOnCollectionChange
|
|
507
|
+
) {
|
|
508
|
+
config.maintainViewpointOnCollectionChange =
|
|
509
|
+
this.maintainViewpointOnCollectionChange;
|
|
510
|
+
}
|
|
511
|
+
|
|
473
512
|
return config;
|
|
474
513
|
}
|
|
475
514
|
|
|
@@ -478,6 +517,7 @@ class ObliqueMap extends BaseOLMap {
|
|
|
478
517
|
this._obliqueProvider.destroy();
|
|
479
518
|
}
|
|
480
519
|
this.collectionChanged.destroy();
|
|
520
|
+
this.failedToSetCollection.destroy();
|
|
481
521
|
this._activeCollectionDestroyedListener();
|
|
482
522
|
super.destroy();
|
|
483
523
|
}
|
package/src/map/vcsMap.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getLogger as getLoggerByName, Logger } from '@vcsuite/logger';
|
|
2
|
+
import { parseBoolean } from '@vcsuite/parsers';
|
|
2
3
|
import { v4 as uuidv4 } from 'uuid';
|
|
3
4
|
import type { MapEvent as OLMapEvent } from 'ol';
|
|
4
5
|
import type { Layer as OLLayer } from 'ol/layer.js';
|
|
@@ -23,6 +24,10 @@ function getLogger(): Logger {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export type VcsMapOptions = VcsObjectOptions & {
|
|
27
|
+
/**
|
|
28
|
+
* instead of using a fallback map, this map will fail to activate if another map is active and the current viewpoint cannot be shown
|
|
29
|
+
*/
|
|
30
|
+
fallbackToCurrentMap?: boolean;
|
|
26
31
|
/**
|
|
27
32
|
* the name of the fallback map to use, e.g. in case there is no oblique image at the activation viewpoint
|
|
28
33
|
*/
|
|
@@ -58,6 +63,7 @@ class VcsMap<
|
|
|
58
63
|
static getDefaultOptions(): VcsMapOptions {
|
|
59
64
|
return {
|
|
60
65
|
fallbackMap: undefined,
|
|
66
|
+
fallbackToCurrentMap: false,
|
|
61
67
|
};
|
|
62
68
|
}
|
|
63
69
|
|
|
@@ -93,9 +99,13 @@ class VcsMap<
|
|
|
93
99
|
/**
|
|
94
100
|
* The name of a map to fall back on, if this map cant show a viewpoint
|
|
95
101
|
*/
|
|
96
|
-
|
|
97
102
|
fallbackMap: string | null;
|
|
98
103
|
|
|
104
|
+
/**
|
|
105
|
+
* instead of using a fallback map, this map will fail to activate if another map is active and the current viewpoint cannot be shown
|
|
106
|
+
*/
|
|
107
|
+
fallbackToCurrentMap: boolean;
|
|
108
|
+
|
|
99
109
|
private _visualizations: Map<string, Set<V>>;
|
|
100
110
|
|
|
101
111
|
private _state: MapState;
|
|
@@ -122,7 +132,7 @@ class VcsMap<
|
|
|
122
132
|
*/
|
|
123
133
|
constructor(options: VcsMapOptions) {
|
|
124
134
|
super(options);
|
|
125
|
-
|
|
135
|
+
const defaultOptions = VcsMap.getDefaultOptions();
|
|
126
136
|
this.mapElement = document.createElement('div');
|
|
127
137
|
this.mapElement.setAttribute('id', uuidv4());
|
|
128
138
|
this.mapElement.classList.add('mapElement');
|
|
@@ -147,6 +157,11 @@ class VcsMap<
|
|
|
147
157
|
|
|
148
158
|
this.fallbackMap = options.fallbackMap || null;
|
|
149
159
|
|
|
160
|
+
this.fallbackToCurrentMap = parseBoolean(
|
|
161
|
+
options.fallbackToCurrentMap,
|
|
162
|
+
defaultOptions.fallbackToCurrentMap,
|
|
163
|
+
);
|
|
164
|
+
|
|
150
165
|
this._visualizations = new Map();
|
|
151
166
|
|
|
152
167
|
this._state = MapState.INACTIVE;
|
|
@@ -516,6 +531,9 @@ class VcsMap<
|
|
|
516
531
|
if (this.fallbackMap) {
|
|
517
532
|
config.fallbackMap = this.fallbackMap;
|
|
518
533
|
}
|
|
534
|
+
if (this.fallbackToCurrentMap) {
|
|
535
|
+
config.fallbackToCurrentMap = this.fallbackToCurrentMap;
|
|
536
|
+
}
|
|
519
537
|
return config;
|
|
520
538
|
}
|
|
521
539
|
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { check } from '@vcsuite/check';
|
|
2
2
|
import { getLogger, type Logger } from '@vcsuite/logger';
|
|
3
3
|
import VcsEvent from './vcsEvent.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
// eslint-disable-next-line import/no-named-default
|
|
6
|
+
default as ClassRegistry,
|
|
7
|
+
Ctor,
|
|
8
|
+
AbstractCtor,
|
|
9
|
+
} from './classRegistry.js';
|
|
6
10
|
|
|
7
11
|
function logger(): Logger {
|
|
8
12
|
return getLogger('OverrideClassRegistry');
|
|
9
13
|
}
|
|
10
14
|
|
|
11
|
-
type ModuleEntry<T extends
|
|
15
|
+
type ModuleEntry<T extends AbstractCtor> = { moduleId: string; ctor: Ctor<T> };
|
|
12
16
|
|
|
13
|
-
class OverrideClassRegistry<T extends
|
|
17
|
+
class OverrideClassRegistry<T extends AbstractCtor> {
|
|
14
18
|
private _coreClassRegistry: ClassRegistry<T>;
|
|
15
19
|
|
|
16
20
|
private _classMap: Map<string, ModuleEntry<T>> = new Map();
|
|
@@ -142,12 +146,13 @@ class OverrideClassRegistry<T extends Ctor<T>> {
|
|
|
142
146
|
create(className: string, ...args: unknown[]): InstanceType<T> | undefined {
|
|
143
147
|
check(className, String);
|
|
144
148
|
|
|
145
|
-
const
|
|
146
|
-
if (!
|
|
149
|
+
const Constructor = this.getClass(className);
|
|
150
|
+
if (!Constructor) {
|
|
147
151
|
logger().error(`could not find constructor ${className}`);
|
|
148
152
|
return undefined;
|
|
149
153
|
}
|
|
150
|
-
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
155
|
+
return new Constructor(...args);
|
|
151
156
|
}
|
|
152
157
|
|
|
153
158
|
/**
|
|
@@ -161,6 +166,7 @@ class OverrideClassRegistry<T extends Ctor<T>> {
|
|
|
161
166
|
): InstanceType<T> | undefined {
|
|
162
167
|
check(options, { type: String });
|
|
163
168
|
|
|
169
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
164
170
|
return this.create(options.type as string, options, ...args);
|
|
165
171
|
}
|
|
166
172
|
|
|
@@ -14,10 +14,10 @@ export function createHiddenObjectsCollection(
|
|
|
14
14
|
getDynamicModuleId: () => string,
|
|
15
15
|
globalHider: GlobalHider,
|
|
16
16
|
): OverrideCollection<HiddenObject> {
|
|
17
|
-
const collection = makeOverrideCollection<
|
|
18
|
-
HiddenObject,
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const collection = makeOverrideCollection<HiddenObject>(
|
|
18
|
+
new Collection<HiddenObject>('id'),
|
|
19
|
+
getDynamicModuleId,
|
|
20
|
+
);
|
|
21
21
|
|
|
22
22
|
collection.added.addEventListener(({ id }) => {
|
|
23
23
|
globalHider.hideObjects([id]);
|
|
@@ -317,6 +317,10 @@ class MapCollection extends Collection<VcsMap> {
|
|
|
317
317
|
map,
|
|
318
318
|
error: error as Error,
|
|
319
319
|
});
|
|
320
|
+
if (!map.fallbackMap && map.fallbackToCurrentMap && this._activeMap) {
|
|
321
|
+
this.fallbackMapActivated.raiseEvent(map);
|
|
322
|
+
return Promise.resolve();
|
|
323
|
+
}
|
|
320
324
|
if (fallbackMap) {
|
|
321
325
|
this.fallbackMapActivated.raiseEvent(map);
|
|
322
326
|
return this.setActiveMap(fallbackMap.name);
|
|
@@ -341,6 +345,10 @@ class MapCollection extends Collection<VcsMap> {
|
|
|
341
345
|
this.fallbackMapActivated.raiseEvent(map);
|
|
342
346
|
return this.setActiveMap(fallbackMap.name);
|
|
343
347
|
}
|
|
348
|
+
if (map.fallbackToCurrentMap && this._activeMap) {
|
|
349
|
+
this.fallbackMapActivated.raiseEvent(map);
|
|
350
|
+
return Promise.resolve();
|
|
351
|
+
}
|
|
344
352
|
}
|
|
345
353
|
this._cachedViewpoint = null;
|
|
346
354
|
if (this._activeMap) {
|