@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.
Files changed (121) hide show
  1. package/api/apicontext.d.ts +12 -1
  2. package/api/apicontext.js +19 -111
  3. package/api/apisessionmanager.d.ts +1 -1
  4. package/api/apisessionmanager.js +1 -1
  5. package/base/GirafeDraggableElement.js +2 -2
  6. package/base/GirafeResizableElement.js +4 -4
  7. package/base/GirafeSingleton.d.ts +1 -1
  8. package/base/GirafeSingleton.js +1 -1
  9. package/components/basemap/component.js +1 -1
  10. package/components/cross-section/cross-section-settings/component.js +1 -1
  11. package/components/cross-section/scatterplot.js +1 -1
  12. package/components/drawing/component-mobile.js +1 -1
  13. package/components/drawing/component.js +4 -4
  14. package/components/drawing/fixed-dimension/component.js +1 -1
  15. package/components/edit/component.js +1 -1
  16. package/components/edit/editform/component.js +1 -1
  17. package/components/extlayers/component.js +1 -1
  18. package/components/map-2d/component.js +1 -1
  19. package/components/map-2d/tools/swipemanager.js +2 -2
  20. package/components/modals/component.js +1 -1
  21. package/components/navigation/component.d.ts +2 -2
  22. package/components/navigation/component.js +6 -6
  23. package/components/news/news-button/component.d.ts +0 -1
  24. package/components/news/news-button/component.js +0 -6
  25. package/components/news/news-panel/component.d.ts +2 -2
  26. package/components/news/news-panel/component.js +5 -5
  27. package/components/print/component.js +7 -7
  28. package/components/print/tools/MFPLegendEncoder.js +1 -1
  29. package/components/querybuilder/component.js +2 -2
  30. package/components/scale/component.js +1 -1
  31. package/components/selectionwindow/component.js +1 -1
  32. package/components/share/component.js +1 -1
  33. package/components/themes/component.d.ts +1 -1
  34. package/components/themes/component.js +4 -4
  35. package/components/themes-mobile/layer-selected/component.js +1 -1
  36. package/components/timerestriction/timepicker/component.js +1 -1
  37. package/components/timerestriction/timeslider/component.js +4 -4
  38. package/components/treeview/treeviewroot/component.js +1 -1
  39. package/components/userpreferences/component.d.ts +1 -1
  40. package/components/userpreferences/component.js +7 -7
  41. package/models/xmlTypes.js +1 -1
  42. package/package.json +1 -1
  43. package/templates/public/about.json +1 -1
  44. package/tools/app/lifecyclemanager.d.ts +1 -1
  45. package/tools/app/lifecyclemanager.js +1 -1
  46. package/tools/auth/abstractconnectmanager.js +2 -2
  47. package/tools/auth/authmanager.d.ts +1 -1
  48. package/tools/auth/authmanager.js +1 -1
  49. package/tools/auth/pluginmanager.d.ts +1 -1
  50. package/tools/auth/pluginmanager.js +1 -1
  51. package/tools/configuration/configmanager.d.ts +3 -2
  52. package/tools/configuration/configmanager.js +9 -5
  53. package/tools/configuration/girafeconfig.d.ts +6 -5
  54. package/tools/configuration/girafeconfig.js +3 -0
  55. package/tools/context/context.d.ts +1 -0
  56. package/tools/context/context.js +4 -112
  57. package/tools/context/contexthelper.d.ts +6 -0
  58. package/tools/context/contexthelper.js +102 -0
  59. package/tools/error/errormanager.d.ts +1 -1
  60. package/tools/error/errormanager.js +1 -1
  61. package/tools/feedback/feedbackmanager.d.ts +1 -2
  62. package/tools/feedback/feedbackmanager.js +6 -8
  63. package/tools/i18n/i18nmanager.d.ts +1 -1
  64. package/tools/i18n/i18nmanager.js +22 -20
  65. package/tools/layers/layermanager.d.ts +1 -1
  66. package/tools/layers/layermanager.js +1 -1
  67. package/tools/layers/snapmanager.d.ts +1 -1
  68. package/tools/layers/snapmanager.js +1 -1
  69. package/tools/localfile/localfilemanager.d.ts +1 -1
  70. package/tools/localfile/localfilemanager.js +1 -1
  71. package/tools/logging/defaultconsole.d.ts +8 -0
  72. package/tools/logging/defaultconsole.js +9 -0
  73. package/tools/logging/logmanager.d.ts +1 -7
  74. package/tools/logging/logmanager.js +8 -13
  75. package/tools/main.d.ts +3 -1
  76. package/tools/main.js +2 -0
  77. package/tools/offline/offlinemanager.d.ts +3 -3
  78. package/tools/offline/offlinemanager.js +6 -6
  79. package/tools/ogcapi/ogcapifeaturesmanager.d.ts +1 -1
  80. package/tools/ogcapi/ogcapifeaturesmanager.js +1 -1
  81. package/tools/onboarding/onboardingmanager.js +4 -4
  82. package/tools/ordering/orderingmanager.d.ts +1 -1
  83. package/tools/ordering/orderingmanager.js +1 -1
  84. package/tools/resizewindow.js +6 -6
  85. package/tools/search/abstractsearchclient.d.ts +1 -1
  86. package/tools/search/abstractsearchclient.js +2 -2
  87. package/tools/search/searchmanager.d.ts +1 -1
  88. package/tools/search/searchmanager.js +2 -2
  89. package/tools/selection/selectionmanager.d.ts +1 -1
  90. package/tools/selection/selectionmanager.js +1 -1
  91. package/tools/share/sessionmanager.d.ts +1 -1
  92. package/tools/share/sessionmanager.js +1 -1
  93. package/tools/share/sharemanager.d.ts +1 -1
  94. package/tools/share/sharemanager.js +1 -1
  95. package/tools/share/stateserializer.d.ts +1 -1
  96. package/tools/share/stateserializer.js +1 -1
  97. package/tools/state/statemanager.d.ts +1 -1
  98. package/tools/state/statemanager.js +1 -1
  99. package/tools/tests/mockconfig.d.ts +2 -3
  100. package/tools/tests/mockconfig.js +0 -1
  101. package/tools/tests/mockcontext.d.ts +13 -1
  102. package/tools/tests/mockcontext.js +27 -112
  103. package/tools/tests/mockhelper.d.ts +2 -2
  104. package/tools/tests/mockhelper.js +4 -5
  105. package/tools/themes/customthemesmanager.d.ts +3 -3
  106. package/tools/themes/customthemesmanager.js +9 -9
  107. package/tools/themes/themefavoritesmanager.d.ts +5 -5
  108. package/tools/themes/themefavoritesmanager.js +16 -16
  109. package/tools/themes/themeshelper.d.ts +1 -1
  110. package/tools/themes/themeshelper.js +1 -1
  111. package/tools/themes/themesmanager.d.ts +1 -1
  112. package/tools/themes/themesmanager.js +2 -2
  113. package/tools/time/layertimeformatter.js +1 -1
  114. package/tools/url/permalinkmanager.d.ts +1 -1
  115. package/tools/url/permalinkmanager.js +1 -1
  116. package/tools/userdata/userdatamanager.d.ts +18 -39
  117. package/tools/userdata/userdatamanager.js +111 -75
  118. package/tools/wfs/wfsmanager.d.ts +1 -1
  119. package/tools/wfs/wfsmanager.js +1 -1
  120. package/tools/wms/wmsmanager.d.ts +1 -1
  121. 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 OnBoardingManager from '../onboarding/onboardingmanager';
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.componentManager = new ComponentManager(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
- // NOTE: This initialization order is important, because some singleton will need other ones!
117
- this.componentManager.initializeSingleton();
118
- this.userDataManager.initializeSingleton();
119
- this.userDataManager.setSource(MockConfig.userdata.source);
120
- this.userDataManager.deleteAllUserData();
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
- this.logManager.initializeSingleton();
126
- this.stateManager.initializeSingleton();
127
- this.orderingManager.initializeSingleton();
128
- this.applicationLifeCycleManager.initializeSingleton();
129
- this.mapManager.initializeSingleton();
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().then(noop);
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.findIndex((item) => item === theme);
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() {
@@ -4,7 +4,7 @@ declare class ThemesManager extends GirafeSingleton {
4
4
  u: string;
5
5
  };
6
6
  private get state();
7
- initializeSingleton(): void;
7
+ initializeSingleton(): Promise<void>;
8
8
  private initialize;
9
9
  private restoreState;
10
10
  private addBasemapFromUrl;
@@ -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 source?;
11
- private readonly WARNING_UNKNOWN_SOURCE;
12
- private readonly WARNING_NOT_IMPLEMENTED;
13
- setSource(source: string): void;
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, forceLocalStorage?: boolean): unknown;
21
- /**
22
- * Saves user data to a specific path in the storage.
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
- * Helper: Save user data to storage.
47
- * @param fullUserDataObject full user data object that is saved.
48
- * @param forceLocalStorage forces saving data to local storage, independent of the specified source.
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
- * Helper: Determines if a particular operation should use the local browser storage.
54
- */
55
- private isInLocalStorage;
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;