@geogirafe/lib-geoportal 1.2.0-dev.2872463389 → 1.2.0-dev.2889263072
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/api/apicontext.d.ts +12 -1
- package/api/apicontext.js +19 -111
- package/api/apisessionmanager.d.ts +1 -1
- package/api/apisessionmanager.js +1 -1
- package/base/GirafeDraggableElement.js +2 -2
- package/base/GirafeResizableElement.js +4 -4
- package/base/GirafeSingleton.d.ts +1 -1
- package/base/GirafeSingleton.js +1 -1
- package/components/basemap/component.js +1 -1
- package/components/cross-section/cross-section-settings/component.js +1 -1
- package/components/cross-section/scatterplot.js +1 -1
- package/components/drawing/component-mobile.js +1 -1
- package/components/drawing/component.js +4 -4
- package/components/drawing/fixed-dimension/component.js +1 -1
- package/components/edit/component.js +1 -1
- package/components/edit/editform/component.js +1 -1
- package/components/extlayers/component.js +1 -1
- package/components/map-2d/component.js +1 -1
- package/components/map-2d/tools/swipemanager.js +2 -2
- package/components/modals/component.js +1 -1
- package/components/navigation/component.d.ts +2 -2
- package/components/navigation/component.js +6 -6
- package/components/news/news-button/component.d.ts +0 -1
- package/components/news/news-button/component.js +0 -6
- package/components/news/news-panel/component.d.ts +2 -2
- package/components/news/news-panel/component.js +5 -5
- package/components/print/component.js +7 -7
- package/components/print/tools/MFPLegendEncoder.js +1 -1
- package/components/querybuilder/component.js +2 -2
- package/components/scale/component.js +1 -1
- package/components/selectionwindow/component.js +1 -1
- package/components/share/component.js +1 -1
- package/components/themes/component.d.ts +1 -1
- package/components/themes/component.js +4 -4
- package/components/themes-mobile/layer-selected/component.js +1 -1
- package/components/timerestriction/timepicker/component.js +1 -1
- package/components/timerestriction/timeslider/component.js +4 -4
- package/components/treeview/treeviewroot/component.js +1 -1
- package/components/userpreferences/component.d.ts +1 -1
- package/components/userpreferences/component.js +7 -7
- package/models/xmlTypes.js +1 -1
- package/package.json +1 -1
- package/templates/public/about.json +1 -1
- package/tools/app/lifecyclemanager.d.ts +1 -1
- package/tools/app/lifecyclemanager.js +1 -1
- package/tools/auth/abstractconnectmanager.js +2 -2
- package/tools/auth/authmanager.d.ts +1 -1
- package/tools/auth/authmanager.js +1 -1
- package/tools/auth/pluginmanager.d.ts +1 -1
- package/tools/auth/pluginmanager.js +1 -1
- package/tools/configuration/configmanager.d.ts +3 -2
- package/tools/configuration/configmanager.js +9 -5
- package/tools/configuration/girafeconfig.d.ts +6 -5
- package/tools/configuration/girafeconfig.js +3 -0
- package/tools/context/context.d.ts +1 -0
- package/tools/context/context.js +4 -112
- package/tools/context/contexthelper.d.ts +6 -0
- package/tools/context/contexthelper.js +102 -0
- package/tools/error/errormanager.d.ts +1 -1
- package/tools/error/errormanager.js +1 -1
- package/tools/feedback/feedbackmanager.d.ts +1 -2
- package/tools/feedback/feedbackmanager.js +6 -8
- package/tools/i18n/i18nmanager.d.ts +1 -1
- package/tools/i18n/i18nmanager.js +22 -20
- package/tools/layers/layermanager.d.ts +1 -1
- package/tools/layers/layermanager.js +1 -1
- package/tools/layers/snapmanager.d.ts +1 -1
- package/tools/layers/snapmanager.js +1 -1
- package/tools/localfile/localfilemanager.d.ts +1 -1
- package/tools/localfile/localfilemanager.js +1 -1
- package/tools/logging/defaultconsole.d.ts +8 -0
- package/tools/logging/defaultconsole.js +9 -0
- package/tools/logging/logmanager.d.ts +1 -7
- package/tools/logging/logmanager.js +8 -13
- package/tools/main.d.ts +3 -1
- package/tools/main.js +2 -0
- package/tools/offline/offlinemanager.d.ts +3 -3
- package/tools/offline/offlinemanager.js +6 -6
- package/tools/ogcapi/ogcapifeaturesmanager.d.ts +1 -1
- package/tools/ogcapi/ogcapifeaturesmanager.js +1 -1
- package/tools/onboarding/onboardingmanager.js +4 -4
- package/tools/ordering/orderingmanager.d.ts +1 -1
- package/tools/ordering/orderingmanager.js +1 -1
- package/tools/resizewindow.js +6 -6
- package/tools/search/abstractsearchclient.d.ts +1 -1
- package/tools/search/abstractsearchclient.js +2 -2
- package/tools/search/searchmanager.d.ts +1 -1
- package/tools/search/searchmanager.js +2 -2
- package/tools/selection/selectionmanager.d.ts +1 -1
- package/tools/selection/selectionmanager.js +1 -1
- package/tools/share/sessionmanager.d.ts +1 -1
- package/tools/share/sessionmanager.js +1 -1
- package/tools/share/sharemanager.d.ts +1 -1
- package/tools/share/sharemanager.js +1 -1
- package/tools/share/stateserializer.d.ts +1 -1
- package/tools/share/stateserializer.js +1 -1
- package/tools/state/statemanager.d.ts +1 -1
- package/tools/state/statemanager.js +1 -1
- package/tools/tests/mockconfig.d.ts +2 -3
- package/tools/tests/mockconfig.js +0 -1
- package/tools/tests/mockcontext.d.ts +13 -1
- package/tools/tests/mockcontext.js +27 -112
- package/tools/tests/mockhelper.d.ts +2 -2
- package/tools/tests/mockhelper.js +4 -5
- package/tools/themes/customthemesmanager.d.ts +3 -3
- package/tools/themes/customthemesmanager.js +9 -9
- package/tools/themes/themefavoritesmanager.d.ts +5 -5
- package/tools/themes/themefavoritesmanager.js +16 -16
- package/tools/themes/themeshelper.d.ts +1 -1
- package/tools/themes/themeshelper.js +1 -1
- package/tools/themes/themesmanager.d.ts +1 -1
- package/tools/themes/themesmanager.js +2 -2
- package/tools/time/layertimeformatter.js +1 -1
- package/tools/url/permalinkmanager.d.ts +1 -1
- package/tools/url/permalinkmanager.js +1 -1
- package/tools/userdata/userdatamanager.d.ts +18 -39
- package/tools/userdata/userdatamanager.js +111 -75
- package/tools/wfs/wfsmanager.d.ts +1 -1
- package/tools/wfs/wfsmanager.js +1 -1
- package/tools/wms/wmsmanager.d.ts +1 -1
- package/tools/wms/wmsmanager.js +1 -1
|
@@ -1,42 +1,6 @@
|
|
|
1
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
-
import ApplicationLifeCycleManager from '../app/lifecyclemanager';
|
|
3
|
-
import AuthManager from '../auth/authmanager';
|
|
4
|
-
import DragManager from '../../components/treeview/tools/dragmanager';
|
|
5
|
-
import PluginManager from '../auth/pluginmanager';
|
|
6
|
-
import ConfigManager from '../configuration/configmanager';
|
|
7
1
|
import GirafeConfig from '../configuration/girafeconfig';
|
|
8
|
-
import ErrorManager from '../error/errormanager';
|
|
9
|
-
import I18nManager from '../i18n/i18nmanager';
|
|
10
|
-
import LayerManager from '../layers/layermanager';
|
|
11
|
-
import SnapManager from '../layers/snapmanager';
|
|
12
|
-
import LocalFileManager from '../localfile/localfilemanager';
|
|
13
|
-
import LogManager from '../logging/logmanager';
|
|
14
|
-
import OfflineManager from '../offline/offlinemanager';
|
|
15
|
-
import OgcApiFeaturesManager from '../ogcapi/ogcapifeaturesmanager';
|
|
16
|
-
import OrderingManager from '../ordering/orderingmanager';
|
|
17
|
-
import SessionManager from '../share/sessionmanager';
|
|
18
|
-
import ShareManager from '../share/sharemanager';
|
|
19
|
-
import StateSerializer from '../share/stateserializer';
|
|
20
|
-
import ComponentManager from '../state/componentManager';
|
|
21
|
-
import MapManager from '../state/mapManager';
|
|
22
|
-
import StateManager from '../state/statemanager';
|
|
23
|
-
import UserInteractionManager from '../state/userInteractionManager';
|
|
24
|
-
import CustomThemesManager from '../themes/customthemesmanager';
|
|
25
|
-
import ThemesHelper from '../themes/themeshelper';
|
|
26
|
-
import ThemesManager from '../themes/themesmanager';
|
|
27
|
-
import UserLayerManager from '../themes/userlayermanager';
|
|
28
|
-
import PermalinkManager from '../url/permalinkmanager';
|
|
29
|
-
import UrlManager from '../url/urlmanager';
|
|
30
|
-
import UserDataManager from '../userdata/userdatamanager';
|
|
31
|
-
import WfsManager from '../wfs/wfsmanager';
|
|
32
|
-
import WmsManager from '../wms/wmsmanager';
|
|
33
|
-
import WmtsManager from '../wmts/wmtsmanager';
|
|
34
|
-
import SelectionManager from '../selection/selectionmanager';
|
|
35
2
|
import { MockConfig } from './mockconfig';
|
|
36
|
-
import
|
|
37
|
-
import ThemeFavoritesManager from '../themes/themefavoritesmanager';
|
|
38
|
-
import SearchManager from '../search/searchmanager';
|
|
39
|
-
import FeedbackManager from '../feedback/feedbackmanager';
|
|
3
|
+
import ContextInitializationHelper from '../context/contexthelper';
|
|
40
4
|
export default class MockGirafeContext {
|
|
41
5
|
userDataManager;
|
|
42
6
|
configManager;
|
|
@@ -48,8 +12,8 @@ export default class MockGirafeContext {
|
|
|
48
12
|
themesManager;
|
|
49
13
|
themesHelper;
|
|
50
14
|
permalinkManager;
|
|
51
|
-
urlManager;
|
|
52
15
|
dragManager;
|
|
16
|
+
urlManager;
|
|
53
17
|
layerManager;
|
|
54
18
|
sessionManager;
|
|
55
19
|
stateSerializer;
|
|
@@ -74,88 +38,39 @@ export default class MockGirafeContext {
|
|
|
74
38
|
themeFavoritesManager;
|
|
75
39
|
searchManager;
|
|
76
40
|
feedbackManager;
|
|
41
|
+
contextHelper = new ContextInitializationHelper();
|
|
77
42
|
constructor() {
|
|
78
|
-
this.
|
|
79
|
-
this.userDataManager = new UserDataManager(this);
|
|
80
|
-
this.configManager = new ConfigManager(this);
|
|
81
|
-
this.logManager = new LogManager(this);
|
|
82
|
-
this.stateManager = new StateManager(this);
|
|
83
|
-
this.orderingManager = new OrderingManager(this);
|
|
84
|
-
this.applicationLifeCycleManager = new ApplicationLifeCycleManager(this);
|
|
85
|
-
this.mapManager = new MapManager(this);
|
|
86
|
-
this.offlineManager = new OfflineManager(this);
|
|
87
|
-
this.snapManager = new SnapManager(this);
|
|
88
|
-
this.authManager = new AuthManager(this);
|
|
89
|
-
this.pluginManager = new PluginManager(this);
|
|
90
|
-
this.i18nManager = new I18nManager(this);
|
|
91
|
-
this.userInteractionManager = new UserInteractionManager(this);
|
|
92
|
-
this.dragManager = new DragManager(this);
|
|
93
|
-
this.urlManager = new UrlManager(this);
|
|
94
|
-
this.permalinkManager = new PermalinkManager(this);
|
|
95
|
-
this.layerManager = new LayerManager(this);
|
|
96
|
-
this.userLayerManager = new UserLayerManager(this);
|
|
97
|
-
this.themesHelper = new ThemesHelper(this);
|
|
98
|
-
this.stateSerializer = new StateSerializer(this);
|
|
99
|
-
this.sessionManager = new SessionManager(this);
|
|
100
|
-
this.shareManager = new ShareManager(this);
|
|
101
|
-
this.wfsManager = new WfsManager(this);
|
|
102
|
-
this.errorManager = new ErrorManager(this);
|
|
103
|
-
this.customThemesManager = new CustomThemesManager(this);
|
|
104
|
-
this.themesManager = new ThemesManager(this);
|
|
105
|
-
this.wmsManager = new WmsManager(this);
|
|
106
|
-
this.wmtsManager = new WmtsManager(this);
|
|
107
|
-
this.selectionManager = new SelectionManager(this);
|
|
108
|
-
this.localFileManager = new LocalFileManager(this);
|
|
109
|
-
this.ogcApiFeaturesManager = new OgcApiFeaturesManager(this);
|
|
110
|
-
this.onBoardingManager = new OnBoardingManager(this);
|
|
111
|
-
this.themeFavoritesManager = new ThemeFavoritesManager(this);
|
|
112
|
-
this.searchManager = new SearchManager(this);
|
|
113
|
-
this.feedbackManager = new FeedbackManager(this);
|
|
43
|
+
this.contextHelper.constructContext(this);
|
|
114
44
|
}
|
|
115
45
|
async initialize() {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
46
|
+
await this.contextHelper.initializeContext(this);
|
|
47
|
+
}
|
|
48
|
+
/** The context can contains hook methods that will be called after each manager initialization.
|
|
49
|
+
* The hook method must be named with the property name + the "Hook" suffix.
|
|
50
|
+
* The hook method must be async and will be awaited
|
|
51
|
+
* For example, the methods themesManagerHook() will be called immediately after
|
|
52
|
+
* the call of themesManager.initializeSingleton().
|
|
53
|
+
* This allows specific initialization methods when defining custom contexts
|
|
54
|
+
* (for example for the apiContext, the mockContext, or any customContext)
|
|
55
|
+
*/
|
|
56
|
+
async userDataManagerHook() {
|
|
57
|
+
await this.userDataManager.initializeSingleton();
|
|
58
|
+
this.userDataManager.initializeFromConfig(MockConfig.userdata);
|
|
59
|
+
await this.userDataManager.deleteAllUserData();
|
|
60
|
+
}
|
|
61
|
+
async configManagerHook() {
|
|
62
|
+
// Do not call the initializeSingleton methode
|
|
63
|
+
// But set hardcoded mock config
|
|
121
64
|
// @ts-ignore
|
|
122
65
|
this.configManager['config'] = new GirafeConfig(MockConfig);
|
|
123
66
|
// @ts-ignore
|
|
124
67
|
this.configManager['defaultConfig'] = new GirafeConfig(MockConfig);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
this.
|
|
130
|
-
this.offlineManager.initializeSingleton();
|
|
131
|
-
this.snapManager.initializeSingleton();
|
|
132
|
-
this.authManager.initializeSingleton();
|
|
133
|
-
this.pluginManager.initializeSingleton();
|
|
134
|
-
this.i18nManager.initializeSingleton();
|
|
68
|
+
}
|
|
69
|
+
async i18nManagerHook() {
|
|
70
|
+
// Do not load translation files
|
|
71
|
+
// Bu set hardcoded mock translations
|
|
72
|
+
await this.i18nManager.initializeSingleton();
|
|
135
73
|
// @ts-expect-error: private property
|
|
136
74
|
this.i18nManager.translations = { fr: { a: 'translated_a', b: 'translated_b' } };
|
|
137
|
-
this.userInteractionManager.initializeSingleton();
|
|
138
|
-
this.dragManager.initializeSingleton();
|
|
139
|
-
this.urlManager.initializeSingleton();
|
|
140
|
-
this.permalinkManager.initializeSingleton();
|
|
141
|
-
this.layerManager.initializeSingleton();
|
|
142
|
-
this.userLayerManager.initializeSingleton();
|
|
143
|
-
this.themesHelper.initializeSingleton();
|
|
144
|
-
this.stateSerializer.initializeSingleton();
|
|
145
|
-
this.sessionManager.initializeSingleton();
|
|
146
|
-
this.shareManager.initializeSingleton();
|
|
147
|
-
this.wfsManager.initializeSingleton();
|
|
148
|
-
this.errorManager.initializeSingleton();
|
|
149
|
-
this.customThemesManager.initializeSingleton();
|
|
150
|
-
this.themesManager.initializeSingleton();
|
|
151
|
-
this.wmsManager.initializeSingleton();
|
|
152
|
-
this.wmtsManager.initializeSingleton();
|
|
153
|
-
this.localFileManager.initializeSingleton();
|
|
154
|
-
this.selectionManager.initializeSingleton();
|
|
155
|
-
this.ogcApiFeaturesManager.initializeSingleton();
|
|
156
|
-
this.onBoardingManager.initializeSingleton();
|
|
157
|
-
this.themeFavoritesManager.initializeSingleton();
|
|
158
|
-
this.searchManager.initializeSingleton();
|
|
159
|
-
this.feedbackManager.initializeSingleton();
|
|
160
75
|
}
|
|
161
76
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import IGirafeContext from '../context/icontext';
|
|
2
2
|
declare class MockHelper {
|
|
3
|
-
static startMocking(): IGirafeContext
|
|
4
|
-
static stopMocking(context: IGirafeContext): void
|
|
3
|
+
static startMocking(): Promise<IGirafeContext>;
|
|
4
|
+
static stopMocking(context: IGirafeContext): Promise<void>;
|
|
5
5
|
}
|
|
6
6
|
export default MockHelper;
|
|
@@ -3,21 +3,20 @@ import proj4 from 'proj4';
|
|
|
3
3
|
import { register } from 'ol/proj/proj4';
|
|
4
4
|
import MockGirafeContext from './mockcontext';
|
|
5
5
|
import { MockConfig } from './mockconfig';
|
|
6
|
-
import { noop } from '../utils/async';
|
|
7
6
|
class MockHelper {
|
|
8
|
-
static startMocking() {
|
|
7
|
+
static async startMocking() {
|
|
9
8
|
const context = new MockGirafeContext();
|
|
10
|
-
context.initialize()
|
|
9
|
+
await context.initialize();
|
|
11
10
|
for (const crs of MockConfig.crs) {
|
|
12
11
|
proj4.defs(crs.code, crs.definition);
|
|
13
12
|
}
|
|
14
13
|
register(proj4);
|
|
15
14
|
return context;
|
|
16
15
|
}
|
|
17
|
-
static stopMocking(context) {
|
|
16
|
+
static async stopMocking(context) {
|
|
17
|
+
await context.userDataManager.deleteAllUserData();
|
|
18
18
|
// @ts-ignore
|
|
19
19
|
context.configManager.config = null;
|
|
20
|
-
context.userDataManager.deleteAllUserData();
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
export default MockHelper;
|
|
@@ -5,10 +5,10 @@ declare class CustomThemesManager extends GirafeSingleton {
|
|
|
5
5
|
customThemes: CustomTheme[];
|
|
6
6
|
private readonly storagePath;
|
|
7
7
|
private readonly serializer;
|
|
8
|
-
addTheme(themeName: string, layersList: BaseLayer[]): void
|
|
8
|
+
addTheme(themeName: string, layersList: BaseLayer[]): Promise<void>;
|
|
9
9
|
private manageActiveStateForClonedObject;
|
|
10
|
-
deleteTheme(theme: CustomTheme): void
|
|
10
|
+
deleteTheme(theme: CustomTheme): Promise<void>;
|
|
11
11
|
private saveCustomThemes;
|
|
12
|
-
loadCustomThemes(): void
|
|
12
|
+
loadCustomThemes(): Promise<void>;
|
|
13
13
|
}
|
|
14
14
|
export default CustomThemesManager;
|
|
@@ -9,7 +9,7 @@ class CustomThemesManager extends GirafeSingleton {
|
|
|
9
9
|
customThemes = [];
|
|
10
10
|
storagePath = 'customThemes';
|
|
11
11
|
serializer = new CustomLayersSerializer(this.context);
|
|
12
|
-
addTheme(themeName, layersList) {
|
|
12
|
+
async addTheme(themeName, layersList) {
|
|
13
13
|
const theme = new CustomTheme(themeName);
|
|
14
14
|
for (const layerBase of layersList) {
|
|
15
15
|
const layer = layerBase.clone();
|
|
@@ -17,7 +17,7 @@ class CustomThemesManager extends GirafeSingleton {
|
|
|
17
17
|
theme.layers.push(layer);
|
|
18
18
|
}
|
|
19
19
|
this.customThemes.push(theme);
|
|
20
|
-
this.saveCustomThemes();
|
|
20
|
+
await this.saveCustomThemes();
|
|
21
21
|
}
|
|
22
22
|
manageActiveStateForClonedObject(layer) {
|
|
23
23
|
/** Manage the current active state and default active state
|
|
@@ -35,25 +35,25 @@ class CustomThemesManager extends GirafeSingleton {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
deleteTheme(theme) {
|
|
39
|
-
const index = this.customThemes.
|
|
38
|
+
async deleteTheme(theme) {
|
|
39
|
+
const index = this.customThemes.indexOf(theme);
|
|
40
40
|
if (index >= 0) {
|
|
41
41
|
this.customThemes.splice(index, 1);
|
|
42
|
-
this.saveCustomThemes();
|
|
42
|
+
await this.saveCustomThemes();
|
|
43
43
|
}
|
|
44
44
|
else {
|
|
45
45
|
throw new Error('The custom theme to be removed cannot be found in the list of custom themes');
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
saveCustomThemes() {
|
|
48
|
+
async saveCustomThemes() {
|
|
49
49
|
const serializedObject = {};
|
|
50
50
|
for (const customTheme of this.customThemes) {
|
|
51
51
|
serializedObject[customTheme.name] = this.serializer.customThemeSerialize(customTheme);
|
|
52
52
|
}
|
|
53
|
-
this.context.userDataManager.saveUserData(this.storagePath, serializedObject);
|
|
53
|
+
await this.context.userDataManager.saveUserData(this.storagePath, serializedObject);
|
|
54
54
|
}
|
|
55
|
-
loadCustomThemes() {
|
|
56
|
-
const customThemes = this.context.userDataManager.getUserData(this.storagePath);
|
|
55
|
+
async loadCustomThemes() {
|
|
56
|
+
const customThemes = (await this.context.userDataManager.getUserData(this.storagePath));
|
|
57
57
|
if (customThemes) {
|
|
58
58
|
for (const customThemeName of Object.keys(customThemes)) {
|
|
59
59
|
try {
|
|
@@ -4,13 +4,13 @@ import ThemeLayer from '../../models/layers/themelayer.js';
|
|
|
4
4
|
declare class ThemeFavoritesManager extends GirafeSingleton {
|
|
5
5
|
private themeFavorites;
|
|
6
6
|
private readonly storagePath;
|
|
7
|
-
initializeSingleton(): void
|
|
7
|
+
initializeSingleton(): Promise<void>;
|
|
8
8
|
private saveThemeFavorites;
|
|
9
9
|
private loadThemeFavorites;
|
|
10
|
-
addThemeToFavorites(theme: ThemeLayer | CustomTheme): void
|
|
11
|
-
removeThemeFromFavorites(theme: ThemeLayer | CustomTheme): void
|
|
12
|
-
addOrRemoveThemeFromFavorites(theme: ThemeLayer | CustomTheme): void
|
|
13
|
-
clearThemeFavorites(): void
|
|
10
|
+
addThemeToFavorites(theme: ThemeLayer | CustomTheme): Promise<void>;
|
|
11
|
+
removeThemeFromFavorites(theme: ThemeLayer | CustomTheme): Promise<void>;
|
|
12
|
+
addOrRemoveThemeFromFavorites(theme: ThemeLayer | CustomTheme): Promise<void>;
|
|
13
|
+
clearThemeFavorites(): Promise<void>;
|
|
14
14
|
isThemeInFavorites(theme: ThemeLayer | CustomTheme): boolean;
|
|
15
15
|
getThemeFavorites(): Array<number | string>;
|
|
16
16
|
}
|
|
@@ -4,45 +4,45 @@ import ThemeLayer from '../../models/layers/themelayer.js';
|
|
|
4
4
|
class ThemeFavoritesManager extends GirafeSingleton {
|
|
5
5
|
themeFavorites = [];
|
|
6
6
|
storagePath = 'themeFavorites';
|
|
7
|
-
initializeSingleton() {
|
|
8
|
-
super.initializeSingleton();
|
|
9
|
-
this.loadThemeFavorites();
|
|
7
|
+
async initializeSingleton() {
|
|
8
|
+
await super.initializeSingleton();
|
|
9
|
+
await this.loadThemeFavorites();
|
|
10
10
|
}
|
|
11
|
-
saveThemeFavorites() {
|
|
11
|
+
async saveThemeFavorites() {
|
|
12
12
|
const serializedThemeFavorites = JSON.stringify(this.themeFavorites);
|
|
13
|
-
this.context.userDataManager.saveUserData(this.storagePath, serializedThemeFavorites);
|
|
13
|
+
await this.context.userDataManager.saveUserData(this.storagePath, serializedThemeFavorites);
|
|
14
14
|
}
|
|
15
|
-
loadThemeFavorites() {
|
|
16
|
-
const serializedThemeFavorites = this.context.userDataManager.getUserData(this.storagePath);
|
|
15
|
+
async loadThemeFavorites() {
|
|
16
|
+
const serializedThemeFavorites = (await this.context.userDataManager.getUserData(this.storagePath));
|
|
17
17
|
if (serializedThemeFavorites) {
|
|
18
18
|
this.themeFavorites = JSON.parse(serializedThemeFavorites);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
addThemeToFavorites(theme) {
|
|
21
|
+
async addThemeToFavorites(theme) {
|
|
22
22
|
this.themeFavorites.push(theme instanceof ThemeLayer ? theme.id : theme.name);
|
|
23
|
-
this.saveThemeFavorites();
|
|
23
|
+
await this.saveThemeFavorites();
|
|
24
24
|
}
|
|
25
|
-
removeThemeFromFavorites(theme) {
|
|
25
|
+
async removeThemeFromFavorites(theme) {
|
|
26
26
|
const index = this.themeFavorites.findIndex((themeIdOrName) => theme instanceof ThemeLayer ? themeIdOrName === theme.id : themeIdOrName === theme.name);
|
|
27
27
|
if (index >= 0) {
|
|
28
28
|
this.themeFavorites.splice(index, 1);
|
|
29
|
-
this.saveThemeFavorites();
|
|
29
|
+
await this.saveThemeFavorites();
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
32
|
throw new Error('The theme to be removed cannot be found in the list of favorites');
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
addOrRemoveThemeFromFavorites(theme) {
|
|
35
|
+
async addOrRemoveThemeFromFavorites(theme) {
|
|
36
36
|
if (this.isThemeInFavorites(theme)) {
|
|
37
|
-
this.removeThemeFromFavorites(theme);
|
|
37
|
+
await this.removeThemeFromFavorites(theme);
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
|
-
this.addThemeToFavorites(theme);
|
|
40
|
+
await this.addThemeToFavorites(theme);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
clearThemeFavorites() {
|
|
43
|
+
async clearThemeFavorites() {
|
|
44
44
|
this.themeFavorites = [];
|
|
45
|
-
this.saveThemeFavorites();
|
|
45
|
+
await this.saveThemeFavorites();
|
|
46
46
|
}
|
|
47
47
|
isThemeInFavorites(theme) {
|
|
48
48
|
return this.themeFavorites.includes(theme instanceof ThemeLayer ? theme.id : theme.name);
|
|
@@ -9,7 +9,7 @@ export type LayerTreeChanges = {
|
|
|
9
9
|
activatedLayers: BaseLayer[];
|
|
10
10
|
};
|
|
11
11
|
export default class ThemesHelper extends GirafeSingleton {
|
|
12
|
-
initializeSingleton(): void
|
|
12
|
+
initializeSingleton(): Promise<void>;
|
|
13
13
|
private get state();
|
|
14
14
|
findBaseLayerById(layerId: LayerId): BaseLayer;
|
|
15
15
|
findBaseLayerRecursiveById(layers: BaseLayer[], layerId: LayerId): BaseLayer | null;
|
|
@@ -10,7 +10,7 @@ import WfsFilterCondition, { isWfsOperator } from '../wfs/wfsfiltercondition.js'
|
|
|
10
10
|
import { KNOWN_FUNCTIONALITIES } from '../functionalities.js';
|
|
11
11
|
import WfsFilter from '../wfs/wfsfilter.js';
|
|
12
12
|
export default class ThemesHelper extends GirafeSingleton {
|
|
13
|
-
initializeSingleton() {
|
|
13
|
+
async initializeSingleton() {
|
|
14
14
|
this.context.stateManager.subscribe('themes.lastSelectedTheme', (_oldTheme, newTheme) => this.onSelectedThemeChanged(newTheme));
|
|
15
15
|
}
|
|
16
16
|
get state() {
|
|
@@ -25,7 +25,7 @@ class ThemesManager extends GirafeSingleton {
|
|
|
25
25
|
get state() {
|
|
26
26
|
return this.context.stateManager.state;
|
|
27
27
|
}
|
|
28
|
-
initializeSingleton() {
|
|
28
|
+
async initializeSingleton() {
|
|
29
29
|
// We have to wait the authentication to be able to load the themes with the right user-rights
|
|
30
30
|
this.context.stateManager.subscribe('application.isReadyToLoadThemes', async () => {
|
|
31
31
|
if (this.state.application.isReadyToLoadThemes) {
|
|
@@ -104,7 +104,7 @@ class ThemesManager extends GirafeSingleton {
|
|
|
104
104
|
const themesAndFunctionalities = await this.prepareThemes(content['themes']);
|
|
105
105
|
this.state.themes._allThemes = themesAndFunctionalities.themes;
|
|
106
106
|
this.state.themes._allFunctionalities = themesAndFunctionalities.themesFunctionalities;
|
|
107
|
-
this.context.customThemesManager.loadCustomThemes();
|
|
107
|
+
await this.context.customThemesManager.loadCustomThemes();
|
|
108
108
|
this.state.themes.isLoaded = true;
|
|
109
109
|
if (this.context.configManager.Config.themes.showErrorsOnStart) {
|
|
110
110
|
// Display themes errors only if configured so.
|
|
@@ -152,7 +152,7 @@ class LayerTimeFormatter {
|
|
|
152
152
|
return temporalFilter;
|
|
153
153
|
}
|
|
154
154
|
isValidDateString(dateString) {
|
|
155
|
-
return !isNaN(Date.parse(dateString));
|
|
155
|
+
return !Number.isNaN(Date.parse(dateString));
|
|
156
156
|
}
|
|
157
157
|
isWithinRange(date) {
|
|
158
158
|
return date >= this.minValue && date <= this.maxValue;
|
|
@@ -5,7 +5,7 @@ export default class PermalinkManager extends GirafeSingleton {
|
|
|
5
5
|
private readonly urlParamKeys;
|
|
6
6
|
private readonly urlParamKeysWithPrefix;
|
|
7
7
|
private params;
|
|
8
|
-
initializeSingleton(): void
|
|
8
|
+
initializeSingleton(): Promise<void>;
|
|
9
9
|
private get state();
|
|
10
10
|
private getPermalinkParamsFromUrl;
|
|
11
11
|
private removePermalinkParamsFromUrl;
|
|
@@ -26,7 +26,7 @@ export default class PermalinkManager extends GirafeSingleton {
|
|
|
26
26
|
];
|
|
27
27
|
urlParamKeysWithPrefix = ['wfs_'];
|
|
28
28
|
params = {};
|
|
29
|
-
initializeSingleton() {
|
|
29
|
+
async initializeSingleton() {
|
|
30
30
|
this.getPermalinkParamsFromUrl();
|
|
31
31
|
this.removePermalinkParamsFromUrl();
|
|
32
32
|
this.setStateFromParams();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import GirafeSingleton from '../../base/GirafeSingleton.js';
|
|
2
|
+
import { UserDataConfig } from '../configuration/girafeconfig.js';
|
|
2
3
|
/**
|
|
3
4
|
* Manages user data storage and retrieval across different storage sources.
|
|
4
5
|
* The class supports localStorage and server as storage options (server-side implementation currently not available).
|
|
@@ -7,51 +8,29 @@ import GirafeSingleton from '../../base/GirafeSingleton.js';
|
|
|
7
8
|
*/
|
|
8
9
|
declare class UserDataManager extends GirafeSingleton {
|
|
9
10
|
private readonly storageKey;
|
|
10
|
-
private
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
private config;
|
|
12
|
+
private allowSaveUserPreferences;
|
|
13
|
+
initializeFromConfig(config: UserDataConfig): void;
|
|
14
|
+
private userData?;
|
|
15
|
+
private userDataPromise?;
|
|
14
16
|
/**
|
|
15
17
|
* Retrieves a specific part of the user data defined by the storage path.
|
|
16
18
|
* @param storagePath path in the user data object to the requested value.
|
|
17
|
-
* @param forceLocalStorage if true, reads user data from the local storage, ignoring the source.
|
|
18
19
|
* @returns the partial user data object.
|
|
19
20
|
*/
|
|
20
|
-
getUserData(storagePath: string
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* @param storagePath path in the user data object where the value is saved to.
|
|
24
|
-
* @param newValue user data value to save.
|
|
25
|
-
* @param forceLocalStorage if true, saves user data to the local storage, ignoring the source.
|
|
26
|
-
*/
|
|
27
|
-
saveUserData(storagePath: string, newValue: unknown, forceLocalStorage?: boolean): void;
|
|
28
|
-
/**
|
|
29
|
-
* Delete a specific part of the user data defined by the storage path.
|
|
30
|
-
* @param storagePath path in the user data object that will be deleted.
|
|
31
|
-
* @param forceLocalStorage if true, deletes user data in the local storage, ignoring the source.
|
|
32
|
-
*/
|
|
33
|
-
deleteUserData(storagePath: string, forceLocalStorage?: boolean): void;
|
|
34
|
-
/**
|
|
35
|
-
* Deletes all user data in storage.
|
|
36
|
-
* @param forceLocalStorage Force deletion from local storage regardless of the currently set data source.
|
|
37
|
-
*/
|
|
38
|
-
deleteAllUserData(forceLocalStorage?: boolean): void;
|
|
39
|
-
/**
|
|
40
|
-
* Helper: Load data from the user data storage.
|
|
41
|
-
* @param forceLocalStorage forces loading data from local storage, independent of the specified source.
|
|
42
|
-
* @returns the full user data object in the storage.
|
|
43
|
-
*/
|
|
21
|
+
getUserData(storagePath: string): Promise<unknown>;
|
|
22
|
+
getFromLocalStorage(storagePath: string): any;
|
|
23
|
+
private extractValue;
|
|
44
24
|
private load;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* @private
|
|
50
|
-
*/
|
|
25
|
+
private loadFromLocalStorage;
|
|
26
|
+
private loadFromServer;
|
|
27
|
+
saveUserData(storagePath: string, newValue: unknown): Promise<void>;
|
|
28
|
+
saveToLocalStorage(storagePath: string, newValue: unknown): void;
|
|
51
29
|
private save;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
30
|
+
private writeToLocalStorage;
|
|
31
|
+
private writeToServer;
|
|
32
|
+
deleteUserData(storagePath: string): Promise<void>;
|
|
33
|
+
deleteAllUserData(): Promise<void>;
|
|
34
|
+
private deleteFromServer;
|
|
56
35
|
}
|
|
57
36
|
export default UserDataManager;
|