@igo2/geo 18.0.2 → 18.0.3

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 (203) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
  5. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
  6. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
  7. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +4 -4
  9. package/esm2022/lib/catalog/catalog.module.mjs +4 -4
  10. package/esm2022/lib/catalog/shared/catalog.service.mjs +3 -3
  11. package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
  12. package/esm2022/lib/datasource/shared/datasource.service.mjs +3 -3
  13. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
  14. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
  15. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  16. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  17. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  18. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +3 -3
  19. package/esm2022/lib/directions/directions.component.mjs +3 -3
  20. package/esm2022/lib/directions/directions.module.mjs +4 -4
  21. package/esm2022/lib/directions/shared/directions.service.mjs +3 -3
  22. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  23. package/esm2022/lib/download/download.module.mjs +4 -4
  24. package/esm2022/lib/download/shared/download.service.mjs +3 -3
  25. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
  26. package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
  27. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
  28. package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
  29. package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
  30. package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
  31. package/esm2022/lib/draw/shared/draw-icon.service.mjs +3 -3
  32. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  33. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
  34. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
  35. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  36. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
  37. package/esm2022/lib/feature/feature.module.mjs +4 -4
  38. package/esm2022/lib/filter/filter.module.mjs +4 -4
  39. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  40. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  41. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  42. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
  43. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
  44. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
  45. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
  46. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
  47. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  48. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
  49. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
  50. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
  51. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +3 -3
  52. package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
  53. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  54. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
  55. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  56. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  57. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
  58. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  59. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
  60. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  61. package/esm2022/lib/geo.module.mjs +4 -4
  62. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
  63. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  64. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
  65. package/esm2022/lib/geometry/geometry.module.mjs +4 -4
  66. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  67. package/esm2022/lib/import-export/import-export/import-export.component.mjs +3 -3
  68. package/esm2022/lib/import-export/import-export.module.mjs +4 -4
  69. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +3 -3
  70. package/esm2022/lib/import-export/shared/export.service.mjs +3 -3
  71. package/esm2022/lib/import-export/shared/import.service.mjs +3 -3
  72. package/esm2022/lib/import-export/shared/import.utils.mjs +2 -2
  73. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +3 -3
  74. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  75. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  76. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
  77. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +3 -3
  78. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
  79. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
  80. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  81. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
  82. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +3 -3
  83. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +3 -3
  84. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +3 -3
  85. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +3 -3
  86. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +3 -3
  87. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +3 -3
  88. package/esm2022/lib/layer/layer.module.mjs +4 -4
  89. package/esm2022/lib/layer/shared/layer.service.mjs +13 -17
  90. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  91. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +127 -217
  92. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  93. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  94. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  95. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  96. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
  97. package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
  98. package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
  99. package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
  100. package/esm2022/lib/map/map.module.mjs +4 -4
  101. package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
  102. package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
  103. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  104. package/esm2022/lib/map/shared/hover-feature.directive.mjs +3 -3
  105. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +3 -3
  106. package/esm2022/lib/map/shared/map.service.mjs +3 -3
  107. package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
  108. package/esm2022/lib/map/shared/projection.service.mjs +3 -3
  109. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  110. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +3 -3
  111. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
  112. package/esm2022/lib/measure/measure.module.mjs +4 -4
  113. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +3 -3
  114. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  115. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
  116. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  117. package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
  118. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
  119. package/esm2022/lib/metadata/metadata.module.mjs +4 -4
  120. package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
  121. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +20 -22
  122. package/esm2022/lib/offline/geoDB/geoDB.mjs +146 -0
  123. package/esm2022/lib/offline/geoDB/index.mjs +2 -2
  124. package/esm2022/lib/offline/layerDB/index.mjs +2 -2
  125. package/esm2022/lib/offline/layerDB/layerDB.mjs +64 -0
  126. package/esm2022/lib/offline/offline.provider.mjs +18 -41
  127. package/esm2022/lib/offline/shared/geo-network.service.mjs +10 -14
  128. package/esm2022/lib/offline/shared/indexed-db.interface.mjs +2 -0
  129. package/esm2022/lib/offline/shared/indexed-db.utils.mjs +20 -0
  130. package/esm2022/lib/print/print/print.component.mjs +3 -3
  131. package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
  132. package/esm2022/lib/print/print.module.mjs +4 -4
  133. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  134. package/esm2022/lib/query/query.module.mjs +4 -4
  135. package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
  136. package/esm2022/lib/query/shared/query.directive.mjs +3 -3
  137. package/esm2022/lib/query/shared/query.service.mjs +3 -3
  138. package/esm2022/lib/search/search-bar/search-bar.component.mjs +3 -3
  139. package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
  140. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
  141. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
  142. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  143. package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
  144. package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
  145. package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
  146. package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
  147. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  148. package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
  149. package/esm2022/lib/search/search.module.mjs +4 -4
  150. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +3 -3
  151. package/esm2022/lib/search/shared/search.service.mjs +3 -3
  152. package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
  153. package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
  154. package/esm2022/lib/search/shared/sources/icherche.mjs +9 -9
  155. package/esm2022/lib/search/shared/sources/ilayer.mjs +6 -6
  156. package/esm2022/lib/search/shared/sources/nominatim.mjs +3 -3
  157. package/esm2022/lib/search/shared/sources/storedqueries.mjs +6 -6
  158. package/esm2022/lib/search/shared/sources/workspace.mjs +3 -3
  159. package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
  160. package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
  161. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  162. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  163. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  164. package/esm2022/lib/style/style-service/draw-style.service.mjs +3 -3
  165. package/esm2022/lib/style/style-service/style.service.mjs +3 -3
  166. package/esm2022/lib/style/style.module.mjs +4 -4
  167. package/esm2022/lib/toast/toast.component.mjs +3 -3
  168. package/esm2022/lib/toast/toast.module.mjs +4 -4
  169. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
  170. package/esm2022/lib/wkt/shared/wkt.service.mjs +3 -3
  171. package/esm2022/lib/wkt/wkt.module.mjs +4 -4
  172. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
  173. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
  174. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +6 -6
  175. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -3
  176. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -3
  177. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +6 -6
  178. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -1
  179. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  180. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
  181. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
  182. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
  183. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
  184. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
  185. package/esm2022/lib/workspace/workspace.module.mjs +4 -4
  186. package/fesm2022/igo2-geo.mjs +1092 -1234
  187. package/fesm2022/igo2-geo.mjs.map +1 -1
  188. package/lib/layer/shared/layer.service.d.ts +2 -4
  189. package/lib/layer/shared/layers/vector-layer.d.ts +4 -15
  190. package/lib/layer/shared/layers/vector-layer.interface.d.ts +3 -2
  191. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +2 -4
  192. package/lib/offline/geoDB/geoDB.d.ts +36 -0
  193. package/lib/offline/geoDB/index.d.ts +1 -1
  194. package/lib/offline/layerDB/index.d.ts +1 -1
  195. package/lib/offline/layerDB/{layerDB.service.d.ts → layerDB.d.ts} +9 -11
  196. package/lib/offline/offline.provider.d.ts +2 -0
  197. package/lib/offline/shared/geo-network.service.d.ts +2 -4
  198. package/lib/offline/shared/indexed-db.interface.d.ts +16 -0
  199. package/lib/offline/shared/indexed-db.utils.d.ts +4 -0
  200. package/package.json +6 -6
  201. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  202. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  203. package/lib/offline/geoDB/geoDB.service.d.ts +0 -36
@@ -4,7 +4,6 @@ import { MessageService } from '@igo2/core/message';
4
4
  import { Observable } from 'rxjs';
5
5
  import { DataSourceService } from '../../datasource/shared/datasource.service';
6
6
  import { AnyDataSourceOptions, AnyDataSourceOptionsWithParams, ArcGISRestDataSourceOptions, WMTSDataSourceOptions } from '../../datasource/shared/datasources';
7
- import { LayerDBService } from '../../offline/layerDB/layerDB.service';
8
7
  import { GeoNetworkService } from '../../offline/shared/geo-network.service';
9
8
  import { StyleService } from '../../style/style-service/style.service';
10
9
  import { AnyLayer, AnyLayerItemOptions, AnyLayerOptions, Layer, LayerGroupOptions } from './layers';
@@ -16,10 +15,9 @@ export declare class LayerService {
16
15
  private dataSourceService;
17
16
  private messageService;
18
17
  private geoNetworkService?;
19
- private layerDBService?;
20
18
  private authInterceptor?;
21
19
  unavailableLayers: AnyLayerItemOptions[];
22
- constructor(http: HttpClient, styleService: StyleService, dataSourceService: DataSourceService, messageService: MessageService, geoNetworkService?: GeoNetworkService, layerDBService?: LayerDBService, authInterceptor?: AuthInterceptor);
20
+ constructor(http: HttpClient, styleService: StyleService, dataSourceService: DataSourceService, messageService: MessageService, geoNetworkService?: GeoNetworkService, authInterceptor?: AuthInterceptor);
23
21
  createLayers(layersOption: AnyLayerOptions[], contextUri?: string): Observable<(AnyLayer | undefined)[]>;
24
22
  createLayer(layerOptions: AnyLayerItemOptions): Layer;
25
23
  createAsyncLayer(options: AnyLayerItemOptions, detailedContextUri?: string): Observable<Layer | undefined>;
@@ -37,6 +35,6 @@ export declare class LayerService {
37
35
  deleteUnavailableLayers(anyLayerOptions: AnyLayerItemOptions): void;
38
36
  sourceOptionsWithParams(sourceOptions: AnyDataSourceOptions): sourceOptions is AnyDataSourceOptionsWithParams;
39
37
  sourceOptionsWithLayer(sourceOptions: AnyDataSourceOptions): sourceOptions is ArcGISRestDataSourceOptions | WMTSDataSourceOptions;
40
- static ɵfac: i0.ɵɵFactoryDeclaration<LayerService, [null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayerService, [null, null, null, null, { optional: true; }, { optional: true; }]>;
41
39
  static ɵprov: i0.ɵɵInjectableDeclaration<LayerService>;
42
40
  }
@@ -13,8 +13,6 @@ import { WFSDataSource } from '../../../datasource/shared/datasources/wfs-dataso
13
13
  import { WFSDataSourceOptions } from '../../../datasource/shared/datasources/wfs-datasource.interface';
14
14
  import type { MapBase } from '../../../map/shared/map.abstract';
15
15
  import { MapExtent } from '../../../map/shared/map.interface';
16
- import { GeoDBService } from '../../../offline/geoDB/geoDB.service';
17
- import { LayerDBService } from '../../../offline/layerDB/layerDB.service';
18
16
  import { GeoNetworkService } from '../../../offline/shared/geo-network.service';
19
17
  import { Layer } from './layer';
20
18
  import { LayerType } from './layer.interface';
@@ -23,8 +21,6 @@ export declare class VectorLayer extends Layer {
23
21
  messageService?: MessageService;
24
22
  authInterceptor?: AuthInterceptor;
25
23
  private geoNetworkService?;
26
- geoDBService?: GeoDBService;
27
- layerDBService?: LayerDBService;
28
24
  type: LayerType;
29
25
  private previousLoadExtent;
30
26
  private previousLoadResolution;
@@ -37,8 +33,10 @@ export declare class VectorLayer extends Layer {
37
33
  private trackFeatureListenerId;
38
34
  get browsable(): boolean;
39
35
  get exportable(): boolean;
40
- constructor(options: VectorLayerOptions, messageService?: MessageService, authInterceptor?: AuthInterceptor, geoNetworkService?: GeoNetworkService, geoDBService?: GeoDBService, layerDBService?: LayerDBService);
36
+ constructor(options: VectorLayerOptions, messageService?: MessageService, authInterceptor?: AuthInterceptor, geoNetworkService?: GeoNetworkService);
41
37
  protected createOlLayer(): olLayerVector<olSourceVector>;
38
+ private handleIdbStorage;
39
+ private handlePreload;
42
40
  remove(): void;
43
41
  private removeLayerFromIDB;
44
42
  private maintainOptionsInIdb;
@@ -78,6 +76,7 @@ export declare class VectorLayer extends Layer {
78
76
  * @param failure failure callback
79
77
  */
80
78
  private getFeatures;
79
+ private handleOnLoad;
81
80
  /**
82
81
  * Custom loader for vector layer.
83
82
  * @internal
@@ -88,14 +87,4 @@ export declare class VectorLayer extends Layer {
88
87
  * @param projection the projection to retrieve the data
89
88
  */
90
89
  private customLoader;
91
- /**
92
- * Custom loader for vector layer.
93
- * @internal
94
- * @param vectorSource the vector source to be created
95
- * @param layerID the url string or function to retrieve the data
96
- * @param extent the extent of the requested data
97
- * @param resolution the current resolution
98
- * @param projection the projection to retrieve the data
99
- */
100
- private customIDBLoader;
101
90
  }
@@ -32,8 +32,9 @@ export interface VectorLayerOptions extends LayerOptions {
32
32
  }
33
33
  export interface IdbInfo {
34
34
  storeToIdb: boolean;
35
- contextUri: string;
36
- firstLoad: boolean;
35
+ contextUri?: string;
36
+ /** Interface restricted for system usage. You don't need to set a value */
37
+ firstLoad?: boolean;
37
38
  }
38
39
  export interface VectorAnimation {
39
40
  duration?: number;
@@ -1,13 +1,11 @@
1
1
  import { HttpClient } from '@angular/common/http';
2
2
  import { MessageService } from '@igo2/core/message';
3
- import { GeoDBService } from './geoDB.service';
4
3
  import * as i0 from "@angular/core";
5
4
  export declare class ConfigFileToGeoDBService {
6
5
  private http;
7
- private geoDBService;
8
6
  private messageService;
9
- constructor(http: HttpClient, geoDBService: GeoDBService, messageService: MessageService);
10
- load(url: string): void;
7
+ constructor(http: HttpClient, messageService: MessageService);
8
+ load(urlFile: string): void;
11
9
  private isZip;
12
10
  static ɵfac: i0.ɵɵFactoryDeclaration<ConfigFileToGeoDBService, never>;
13
11
  static ɵprov: i0.ɵɵInjectableDeclaration<ConfigFileToGeoDBService>;
@@ -0,0 +1,36 @@
1
+ import { Observable } from 'rxjs';
2
+ import { InsertSourceInsertDBEnum } from './geoDB.enums';
3
+ import { GeoDBData } from './geoDB.interface';
4
+ export declare class GeoDB {
5
+ private db$;
6
+ private compression;
7
+ collisionsMap: Map<string | number, string[]>;
8
+ _newData: number;
9
+ private revertObservablesSubscription;
10
+ constructor();
11
+ /**
12
+ * Only blob can be compressed
13
+ * @param url
14
+ * @param regionID
15
+ * @param object object to handle
16
+ * @param insertSource type of event user or system
17
+ * @param insertEvent Name of the event where the insert has been triggered
18
+ * @returns
19
+ */
20
+ update(url: string, regionID: number | string, object: object | Blob, insertSource: InsertSourceInsertDBEnum, insertEvent: string): Observable<GeoDBData>;
21
+ private customUpdate;
22
+ add(geoDBData: GeoDBData): Observable<GeoDBData>;
23
+ put(geoDBData: GeoDBData): Observable<GeoDBData>;
24
+ getGeoDBData(url: string): Observable<GeoDBData>;
25
+ get(url: string): Observable<object | Blob>;
26
+ delete(key: string): Observable<object>;
27
+ /** @deprecated Use delete method instead*/
28
+ deleteByKey(key: string): Observable<object>;
29
+ getRegionCountByID(id: number): Observable<number>;
30
+ getRegionByID(id: number): Observable<GeoDBData[]>;
31
+ deleteByRegionID(id: number): Observable<void[]>;
32
+ resetCounters(): void;
33
+ resetCollisionsMap(): void;
34
+ revertCollisions(): void;
35
+ get newData(): number;
36
+ }
@@ -1,4 +1,4 @@
1
1
  export * from './geoDB.enums';
2
2
  export * from './geoDB.interface';
3
- export * from './geoDB.service';
3
+ export * from './geoDB';
4
4
  export * from './configFileToGeoDB.service';
@@ -1,2 +1,2 @@
1
1
  export * from './layerDB.interface';
2
- export * from './layerDB.service';
2
+ export * from './layerDB';
@@ -1,18 +1,16 @@
1
- import { NgxIndexedDBService } from 'ngx-indexed-db';
2
1
  import { Observable } from 'rxjs';
3
2
  import { LayerDBData } from './layerDB.interface';
4
- import * as i0 from "@angular/core";
5
- export declare class LayerDBService {
6
- private ngxIndexedDBService;
7
- readonly dbName: string;
8
- constructor(ngxIndexedDBService: NgxIndexedDBService);
3
+ export declare class LayerDB {
4
+ private db$;
5
+ constructor();
9
6
  /**
10
7
  * This method allow to update the stored layer into the indexeddb (layerData)
11
8
  * @param layerDBData
12
9
  * @returns
13
10
  */
14
- update(layerDBData: LayerDBData): Observable<any>;
11
+ update(layerDBData: LayerDBData): Observable<LayerDBData>;
15
12
  private customUpdate;
13
+ add(layerDBData: LayerDBData): Observable<LayerDBData>;
16
14
  /**
17
15
  * This method retrieve an idb layer definition
18
16
  * @param layerId
@@ -21,16 +19,16 @@ export declare class LayerDBService {
21
19
  getByID(layerId: string): Observable<LayerDBData>;
22
20
  /**
23
21
  * This method delete an idb layer definition
24
- * @param layerId
22
+ * @param key
25
23
  * @returns
26
24
  */
27
- deleteByKey(layerId: string): Observable<boolean>;
25
+ delete(key: string): Observable<object>;
26
+ /** @deprecated Use delete method instead*/
27
+ deleteByKey(key: string): Observable<object>;
28
28
  /**
29
29
  * This method retrive all idb layer definition
30
30
  * @param layerId
31
31
  * @returns
32
32
  */
33
33
  getAll(): Observable<LayerDBData[]>;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<LayerDBService, [{ optional: true; }]>;
35
- static ɵprov: i0.ɵɵInjectableDeclaration<LayerDBService>;
36
34
  }
@@ -1,3 +1,5 @@
1
1
  import { EnvironmentProviders } from '@angular/core';
2
2
  import { IOfflineOptions } from './offline.interface';
3
+ /** Ensure to create the indexDB on app initialisation and provide
4
+ * GeoNetworkService, ConfigFileToGeoDBService */
3
5
  export declare function provideOffline(options: IOfflineOptions): EnvironmentProviders;
@@ -2,7 +2,6 @@ import { HttpClient } from '@angular/common/http';
2
2
  import { NetworkService } from '@igo2/core/network';
3
3
  import { Type } from 'ol/format/Feature';
4
4
  import { Observable } from 'rxjs';
5
- import { GeoDBService } from '../geoDB/geoDB.service';
6
5
  import * as i0 from "@angular/core";
7
6
  export declare enum ResponseType {
8
7
  Arraybuffer = "arraybuffer",
@@ -17,13 +16,12 @@ export interface SimpleGetOptions {
17
16
  export declare class GeoNetworkService {
18
17
  private http;
19
18
  private networkService;
20
- geoDBService?: GeoDBService;
21
19
  private networkOnline;
22
- constructor(http: HttpClient, networkService: NetworkService, geoDBService?: GeoDBService);
20
+ constructor(http: HttpClient, networkService: NetworkService);
23
21
  get(url: string, simpleGetOptions: SimpleGetOptions): Observable<any>;
24
22
  private getOnline;
25
23
  private getOffline;
26
24
  isOnline(): boolean;
27
- static ɵfac: i0.ɵɵFactoryDeclaration<GeoNetworkService, [null, null, { optional: true; }]>;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<GeoNetworkService, never>;
28
26
  static ɵprov: i0.ɵɵInjectableDeclaration<GeoNetworkService>;
29
27
  }
@@ -0,0 +1,16 @@
1
+ import { DBSchema } from 'idb';
2
+ import { GeoDBData } from '../geoDB/geoDB.interface';
3
+ import { LayerDBData } from '../layerDB/layerDB.interface';
4
+ export interface IgoDBSchema extends DBSchema {
5
+ geoData: {
6
+ value: GeoDBData;
7
+ key: string;
8
+ indexes: {
9
+ 'regionID-idx': string;
10
+ };
11
+ };
12
+ layerData: {
13
+ value: LayerDBData;
14
+ key: string;
15
+ };
16
+ }
@@ -0,0 +1,4 @@
1
+ import { IDBPDatabase } from 'idb';
2
+ import { Observable } from 'rxjs';
3
+ import { IgoDBSchema } from './indexed-db.interface';
4
+ export declare function createIndexedDb(): Observable<IDBPDatabase<IgoDBSchema>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@igo2/geo",
3
- "version": "18.0.2",
3
+ "version": "18.0.3",
4
4
  "description": "IGO Library",
5
5
  "author": "IGO Community",
6
6
  "keywords": [
@@ -50,19 +50,19 @@
50
50
  "@angular/material": "^18.0.0",
51
51
  "@angular/material-moment-adapter": "^18.0.0",
52
52
  "@angular/platform-browser": "^18.0.0",
53
- "@igo2/auth": "^18.0.2",
54
- "@igo2/common": "^18.0.2",
55
- "@igo2/core": "^18.0.2",
56
- "@igo2/utils": "^18.0.2",
53
+ "@igo2/auth": "^18.0.3",
54
+ "@igo2/common": "^18.0.3",
55
+ "@igo2/core": "^18.0.3",
56
+ "@igo2/utils": "^18.0.3",
57
57
  "@mat-datetimepicker/core": "~14.0.0",
58
58
  "file-saver": "^2.0.2",
59
59
  "flexsearch": "0.7.21",
60
60
  "html2canvas": "^1.4.1",
61
+ "idb": "^8.0.3",
61
62
  "jspdf": "^3.0.0",
62
63
  "jspdf-autotable": "^5.0.0",
63
64
  "jszip": "^3.10.1",
64
65
  "moment": "^2.30.0",
65
- "ngx-indexed-db": "^19.0.0",
66
66
  "ol": "9.1.0",
67
67
  "ol-mapbox-style": "^12.0.0",
68
68
  "proj4": "^2.12.0",
@@ -1,172 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { Compression } from '@igo2/utils';
3
- import { DBMode, NgxIndexedDBService } from 'ngx-indexed-db';
4
- import { Subject, of } from 'rxjs';
5
- import { concatMap, first, map, take } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "ngx-indexed-db";
8
- export class GeoDBService {
9
- ngxIndexedDBService;
10
- dbName = 'geoData';
11
- collisionsMap = new Map();
12
- _newData = 0;
13
- compression = new Compression();
14
- constructor(ngxIndexedDBService) {
15
- this.ngxIndexedDBService = ngxIndexedDBService;
16
- }
17
- /**
18
- * Only blob can be compressed
19
- * @param url
20
- * @param regionID
21
- * @param object object to handle
22
- * @param insertSource type of event user or system
23
- * @param insertEvent Name of the event where the insert has been triggered
24
- * @returns
25
- */
26
- update(url, regionID, object, insertSource, insertEvent) {
27
- if (!object) {
28
- return;
29
- }
30
- let compress = false;
31
- const subject = new Subject();
32
- let object$ = of(object);
33
- if (object instanceof Blob) {
34
- object$ = this.compression.compressBlob(object);
35
- compress = true;
36
- }
37
- let geoDBData;
38
- object$
39
- .pipe(first(), concatMap((object) => {
40
- geoDBData = {
41
- url,
42
- regionID,
43
- object: object,
44
- compressed: compress,
45
- insertSource,
46
- insertEvent
47
- };
48
- return this.ngxIndexedDBService?.getByID(this.dbName, url);
49
- }), concatMap((dbObject) => {
50
- if (!dbObject) {
51
- this._newData++;
52
- return this.ngxIndexedDBService?.add(this.dbName, geoDBData);
53
- }
54
- else {
55
- const currentRegionID = dbObject.regionID;
56
- if (currentRegionID !== regionID) {
57
- const collisions = this.collisionsMap.get(currentRegionID);
58
- if (collisions !== undefined) {
59
- collisions.push(dbObject.url);
60
- this.collisionsMap.set(currentRegionID, collisions);
61
- }
62
- else {
63
- this.collisionsMap.set(currentRegionID, [dbObject.url]);
64
- }
65
- }
66
- return this.customUpdate(geoDBData);
67
- }
68
- }))
69
- .subscribe((response) => {
70
- subject.next(response);
71
- subject.complete();
72
- });
73
- return subject;
74
- }
75
- customUpdate(geoDBData) {
76
- const subject = new Subject();
77
- const deleteRequest = this.ngxIndexedDBService?.deleteByKey(this.dbName, geoDBData.url);
78
- deleteRequest
79
- .pipe(concatMap((isDeleted) => isDeleted
80
- ? this.ngxIndexedDBService?.add(this.dbName, geoDBData)
81
- : of(undefined)))
82
- .subscribe((object) => {
83
- if (object) {
84
- subject.next(object);
85
- }
86
- subject.complete();
87
- });
88
- return subject;
89
- }
90
- get(url) {
91
- return this.ngxIndexedDBService?.getByID(this.dbName, url).pipe(map((data) => {
92
- if (data) {
93
- const object = data.object;
94
- if (!data.compressed) {
95
- return object;
96
- }
97
- return this.compression.decompressBlob(object);
98
- }
99
- }));
100
- }
101
- getByID(url) {
102
- return this.ngxIndexedDBService?.getByID(this.dbName, url);
103
- }
104
- deleteByKey(url) {
105
- return this.ngxIndexedDBService?.deleteByKey(this.dbName, url);
106
- }
107
- getRegionCountByID(id) {
108
- const subject = new Subject();
109
- this.getRegionByID(id).subscribe((datas) => {
110
- subject.next(datas.length);
111
- subject.complete();
112
- });
113
- return subject;
114
- }
115
- getRegionByID(id) {
116
- if (!id) {
117
- return;
118
- }
119
- const IDBKey = IDBKeyRange.only(id);
120
- const dbRequest = this.ngxIndexedDBService?.getAllByIndex(this.dbName, 'regionID', IDBKey);
121
- return dbRequest;
122
- }
123
- deleteByRegionID(id) {
124
- if (!id) {
125
- return;
126
- }
127
- const IDBKey = IDBKeyRange.only(id);
128
- const dbRequest = this.ngxIndexedDBService?.getAllByIndex(this.dbName, 'regionID', IDBKey);
129
- dbRequest.subscribe((datas) => {
130
- datas.forEach((data) => {
131
- this.ngxIndexedDBService?.deleteByKey(this.dbName, data.url);
132
- });
133
- });
134
- return dbRequest;
135
- }
136
- openCursor(keyRange = IDBKeyRange.lowerBound(0), mode = DBMode.readonly) {
137
- const request = this.ngxIndexedDBService?.openCursorByIndex(this.dbName, 'regionID', keyRange, undefined, mode);
138
- return request;
139
- }
140
- resetCounters() {
141
- this.resetCollisionsMap();
142
- this._newData = 0;
143
- }
144
- resetCollisionsMap() {
145
- this.collisionsMap = new Map();
146
- }
147
- revertCollisions() {
148
- for (const [regionID, collisions] of this.collisionsMap) {
149
- for (const url of collisions) {
150
- this.ngxIndexedDBService
151
- ?.getByKey(this.dbName, url)
152
- .pipe(take(1))
153
- .subscribe((dbObject) => {
154
- const updatedObject = dbObject;
155
- updatedObject.regionID = regionID;
156
- this.customUpdate(dbObject);
157
- });
158
- }
159
- }
160
- }
161
- get newData() {
162
- return this._newData;
163
- }
164
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoDBService, deps: [{ token: i1.NgxIndexedDBService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
165
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoDBService });
166
- }
167
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoDBService, decorators: [{
168
- type: Injectable
169
- }], ctorParameters: () => [{ type: i1.NgxIndexedDBService, decorators: [{
170
- type: Optional
171
- }] }] });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvREIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL29mZmxpbmUvZ2VvREIvZ2VvREIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RCxPQUFPLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU03RCxNQUFNLE9BQU8sWUFBWTtJQVFiO0lBUEQsTUFBTSxHQUFXLFNBQVMsQ0FBQztJQUM3QixhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7SUFDNUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNaLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBRXhDLFlBRVUsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFDL0MsQ0FBQztJQUVKOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUNKLEdBQVcsRUFDWCxRQUFhLEVBQ2IsTUFBVyxFQUNYLFlBQXNDLEVBQ3RDLFdBQW1CO1FBRW5CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFhLENBQUM7UUFDekMsSUFBSSxPQUFPLEdBQW9CLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJ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QUNSLFNBQVMsRUFDVCxJQUFJLENBQ0wsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELGdCQUFnQjtRQUNkLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLG1CQUFtQjtvQkFDdEIsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7cUJBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2IsU0FBUyxDQUFDLENBQUMsUUFBbUIsRUFBRSxFQUFFO29CQUNqQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO3dHQTlNVSxZQUFZOzRHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQVFOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDb21wcmVzc2lvbiB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgREJNb2RlLCBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZmlyc3QsIG1hcCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtIH0gZnJvbSAnLi9nZW9EQi5lbnVtcyc7XG5pbXBvcnQgeyBHZW9EQkRhdGEgfSBmcm9tICcuL2dlb0RCLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHZW9EQlNlcnZpY2Uge1xuICByZWFkb25seSBkYk5hbWU6IHN0cmluZyA9ICdnZW9EYXRhJztcbiAgcHVibGljIGNvbGxpc2lvbnNNYXAgPSBuZXcgTWFwPG51bWJlciwgc3RyaW5nW10+KCk7XG4gIHB1YmxpYyBfbmV3RGF0YSA9IDA7XG4gIHByaXZhdGUgY29tcHJlc3Npb24gPSBuZXcgQ29tcHJlc3Npb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKVxuICAgIHByaXZhdGUgbmd4SW5kZXhlZERCU2VydmljZTogTmd4SW5kZXhlZERCU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIE9ubHkgYmxvYiBjYW4gYmUgY29tcHJlc3NlZFxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSByZWdpb25JRFxuICAgKiBAcGFyYW0gb2JqZWN0IG9iamVjdCB0byBoYW5kbGVcbiAgICogQHBhcmFtIGluc2VydFNvdXJjZSB0eXBlIG9mIGV2ZW50IHVzZXIgb3Igc3lzdGVtXG4gICAqIEBwYXJhbSBpbnNlcnRFdmVudCBOYW1lIG9mIHRoZSBldmVudCB3aGVyZSB0aGUgaW5zZXJ0IGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHJlZ2lvbklEOiBhbnksXG4gICAgb2JqZWN0OiBhbnksXG4gICAgaW5zZXJ0U291cmNlOiBJbnNlcnRTb3VyY2VJbnNlcnREQkVudW0sXG4gICAgaW5zZXJ0RXZlbnQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb21wcmVzcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PEdlb0RCRGF0YT4oKTtcbiAgICBsZXQgb2JqZWN0JDogT2JzZXJ2YWJsZTxhbnk+ID0gb2Yob2JqZWN0KTtcbiAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgb2JqZWN0JCA9IHRoaXMuY29tcHJlc3Npb24uY29tcHJlc3NCbG9iKG9iamVjdCk7XG4gICAgICBjb21wcmVzcyA9IHRydWU7XG4gICAgfVxuICAgIGxldCBnZW9EQkRhdGE6IEdlb0RCRGF0YTtcbiAgICBvYmplY3QkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgY29uY2F0TWFwKChvYmplY3QpID0+IHtcbiAgICAgICAgICBnZW9EQkRhdGEgPSB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZWdpb25JRCxcbiAgICAgICAgICAgIG9iamVjdDogb2JqZWN0LFxuICAgICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3MsXG4gICAgICAgICAgICBpbnNlcnRTb3VyY2UsXG4gICAgICAgICAgICBpbnNlcnRFdmVudFxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZ2V0QnlJRCh0aGlzLmRiTmFtZSwgdXJsKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNvbmNhdE1hcCgoZGJPYmplY3Q6IEdlb0RCRGF0YSkgPT4ge1xuICAgICAgICAgIGlmICghZGJPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX25ld0RhdGErKztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5neEluZGV4ZWREQlNlcnZpY2U/LmFkZCh0aGlzLmRiTmFtZSwgZ2VvREJEYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFJlZ2lvbklEID0gZGJPYmplY3QucmVnaW9uSUQ7XG4gICAgICAgICAgICBpZiAoY3VycmVudFJlZ2lvbklEICE9PSByZWdpb25JRCkge1xuICAgICAgICAgICAgICBjb25zdCBjb2xsaXNpb25zID0gdGhpcy5jb2xsaXNpb25zTWFwLmdldChjdXJyZW50UmVnaW9uSUQpO1xuICAgICAgICAgICAgICBpZiAoY29sbGlzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29sbGlzaW9ucy5wdXNoKGRiT2JqZWN0LnVybCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsaXNpb25zTWFwLnNldChjdXJyZW50UmVnaW9uSUQsIGNvbGxpc2lvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uc01hcC5zZXQoY3VycmVudFJlZ2lvbklELCBbZGJPYmplY3QudXJsXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVVwZGF0ZShnZW9EQkRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHN1YmplY3QubmV4dChyZXNwb25zZSk7XG4gICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBjdXN0b21VcGRhdGUoZ2VvREJEYXRhOiBHZW9EQkRhdGEpOiBPYnNlcnZhYmxlPEdlb0RCRGF0YT4ge1xuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxHZW9EQkRhdGE+KCk7XG4gICAgY29uc3QgZGVsZXRlUmVxdWVzdCA9IHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZGVsZXRlQnlLZXkoXG4gICAgICB0aGlzLmRiTmFtZSxcbiAgICAgIGdlb0RCRGF0YS51cmxcbiAgICApO1xuICAgIGRlbGV0ZVJlcXVlc3RcbiAgICAgIC5waXBlKFxuICAgICAgICBjb25jYXRNYXAoKGlzRGVsZXRlZCkgPT5cbiAgICAgICAgICBpc0RlbGV0ZWRcbiAgICAgICAgICAgID8gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5hZGQodGhpcy5kYk5hbWUsIGdlb0RCRGF0YSlcbiAgICAgICAgICAgIDogb2YodW5kZWZpbmVkKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChvYmplY3QpID0+IHtcbiAgICAgICAgaWYgKG9iamVjdCkge1xuICAgICAgICAgIHN1YmplY3QubmV4dChvYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5nZXRCeUlEKHRoaXMuZGJOYW1lLCB1cmwpLnBpcGUoXG4gICAgICBtYXAoKGRhdGE6IEdlb0RCRGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGRhdGEub2JqZWN0O1xuICAgICAgICAgIGlmICghZGF0YS5jb21wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21wcmVzc2lvbi5kZWNvbXByZXNzQmxvYihvYmplY3QpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRCeUlEKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5nZXRCeUlEKHRoaXMuZGJOYW1lLCB1cmwpO1xuICB9XG5cbiAgZGVsZXRlQnlLZXkodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLm5neEluZGV4ZWREQlNlcnZpY2U/LmRlbGV0ZUJ5S2V5KHRoaXMuZGJOYW1lLCB1cmwpO1xuICB9XG5cbiAgZ2V0UmVnaW9uQ291bnRCeUlEKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gICAgdGhpcy5nZXRSZWdpb25CeUlEKGlkKS5zdWJzY3JpYmUoKGRhdGFzKSA9PiB7XG4gICAgICBzdWJqZWN0Lm5leHQoZGF0YXMubGVuZ3RoKTtcbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIGdldFJlZ2lvbkJ5SUQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgSURCS2V5OiBJREJLZXlSYW5nZSA9IElEQktleVJhbmdlLm9ubHkoaWQpO1xuICAgIGNvbnN0IGRiUmVxdWVzdCA9IHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZ2V0QWxsQnlJbmRleChcbiAgICAgIHRoaXMuZGJOYW1lLFxuICAgICAgJ3JlZ2lvbklEJyxcbiAgICAgIElEQktleVxuICAgICk7XG4gICAgcmV0dXJuIGRiUmVxdWVzdDtcbiAgfVxuXG4gIGRlbGV0ZUJ5UmVnaW9uSUQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IElEQktleTogSURCS2V5UmFuZ2UgPSBJREJLZXlSYW5nZS5vbmx5KGlkKTtcbiAgICBjb25zdCBkYlJlcXVlc3QgPSB0aGlzLm5neEluZGV4ZWREQlNlcnZpY2U/LmdldEFsbEJ5SW5kZXgoXG4gICAgICB0aGlzLmRiTmFtZSxcbiAgICAgICdyZWdpb25JRCcsXG4gICAgICBJREJLZXlcbiAgICApO1xuICAgIGRiUmVxdWVzdC5zdWJzY3JpYmUoKGRhdGFzOiBHZW9EQkRhdGFbXSkgPT4ge1xuICAgICAgZGF0YXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICB0aGlzLm5neEluZGV4ZWREQlNlcnZpY2U/LmRlbGV0ZUJ5S2V5KHRoaXMuZGJOYW1lLCBkYXRhLnVybCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGJSZXF1ZXN0O1xuICB9XG5cbiAgb3BlbkN1cnNvcihcbiAgICBrZXlSYW5nZTogSURCS2V5UmFuZ2UgPSBJREJLZXlSYW5nZS5sb3dlckJvdW5kKDApLFxuICAgIG1vZGU6IERCTW9kZSA9IERCTW9kZS5yZWFkb25seVxuICApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5vcGVuQ3Vyc29yQnlJbmRleChcbiAgICAgIHRoaXMuZGJOYW1lLFxuICAgICAgJ3JlZ2lvbklEJyxcbiAgICAgIGtleVJhbmdlLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgbW9kZVxuICAgICk7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICByZXNldENvdW50ZXJzKCkge1xuICAgIHRoaXMucmVzZXRDb2xsaXNpb25zTWFwKCk7XG4gICAgdGhpcy5fbmV3RGF0YSA9IDA7XG4gIH1cblxuICByZXNldENvbGxpc2lvbnNNYXAoKSB7XG4gICAgdGhpcy5jb2xsaXNpb25zTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmV2ZXJ0Q29sbGlzaW9ucygpIHtcbiAgICBmb3IgKGNvbnN0IFtyZWdpb25JRCwgY29sbGlzaW9uc10gb2YgdGhpcy5jb2xsaXNpb25zTWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IHVybCBvZiBjb2xsaXNpb25zKSB7XG4gICAgICAgIHRoaXMubmd4SW5kZXhlZERCU2VydmljZVxuICAgICAgICAgID8uZ2V0QnlLZXkodGhpcy5kYk5hbWUsIHVybClcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRiT2JqZWN0OiBHZW9EQkRhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRPYmplY3QgPSBkYk9iamVjdDtcbiAgICAgICAgICAgIHVwZGF0ZWRPYmplY3QucmVnaW9uSUQgPSByZWdpb25JRDtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVXBkYXRlKGRiT2JqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgbmV3RGF0YSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9uZXdEYXRhO1xuICB9XG59XG4iXX0=
@@ -1,83 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { NgxIndexedDBService } from 'ngx-indexed-db';
3
- import { Subject, of } from 'rxjs';
4
- import { concatMap, first } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "ngx-indexed-db";
7
- export class LayerDBService {
8
- ngxIndexedDBService;
9
- dbName = 'layerData';
10
- constructor(ngxIndexedDBService) {
11
- this.ngxIndexedDBService = ngxIndexedDBService;
12
- }
13
- /**
14
- * This method allow to update the stored layer into the indexeddb (layerData)
15
- * @param layerDBData
16
- * @returns
17
- */
18
- update(layerDBData) {
19
- const subject = new Subject();
20
- this.ngxIndexedDBService
21
- ?.getByID(this.dbName, layerDBData.layerId)
22
- .pipe(first(), concatMap((dbObject) => {
23
- if (!dbObject) {
24
- return this.ngxIndexedDBService?.add(this.dbName, layerDBData);
25
- }
26
- else {
27
- return this.customUpdate(layerDBData);
28
- }
29
- }))
30
- .subscribe((response) => {
31
- subject.next(response);
32
- subject.complete();
33
- });
34
- return subject;
35
- }
36
- customUpdate(layerDBData) {
37
- const subject = new Subject();
38
- const deleteRequest = this.ngxIndexedDBService?.deleteByKey(this.dbName, layerDBData.layerId);
39
- deleteRequest
40
- .pipe(concatMap((isDeleted) => isDeleted
41
- ? this.ngxIndexedDBService?.add(this.dbName, layerDBData)
42
- : of(undefined)))
43
- .subscribe((object) => {
44
- if (object) {
45
- subject.next(object);
46
- }
47
- subject.complete();
48
- });
49
- return subject;
50
- }
51
- /**
52
- * This method retrieve an idb layer definition
53
- * @param layerId
54
- * @returns
55
- */
56
- getByID(layerId) {
57
- return this.ngxIndexedDBService?.getByID(this.dbName, layerId);
58
- }
59
- /**
60
- * This method delete an idb layer definition
61
- * @param layerId
62
- * @returns
63
- */
64
- deleteByKey(layerId) {
65
- return this.ngxIndexedDBService?.deleteByKey(this.dbName, layerId);
66
- }
67
- /**
68
- * This method retrive all idb layer definition
69
- * @param layerId
70
- * @returns
71
- */
72
- getAll() {
73
- return this.ngxIndexedDBService?.getAll(this.dbName);
74
- }
75
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerDBService, deps: [{ token: i1.NgxIndexedDBService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
76
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerDBService });
77
- }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LayerDBService, decorators: [{
79
- type: Injectable
80
- }], ctorParameters: () => [{ type: i1.NgxIndexedDBService, decorators: [{
81
- type: Optional
82
- }] }] });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJEQi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvb2ZmbGluZS9sYXllckRCL2xheWVyREIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLbEQsTUFBTSxPQUFPLGNBQWM7SUFHTztJQUZ2QixNQUFNLEdBQVcsV0FBVyxDQUFDO0lBRXRDLFlBQWdDLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQUcsQ0FBQztJQUU1RTs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFdBQXdCO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFlLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQjtZQUN0QixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUM7YUFDMUMsSUFBSSxDQUNILEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxDQUFDLFFBQXFCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDakUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxZQUFZLENBQUMsV0FBd0I7UUFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWUsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUN6RCxJQUFJLENBQUMsTUFBTSxFQUNYLFdBQVcsQ0FBQyxPQUFPLENBQ3BCLENBQUM7UUFDRixhQUFhO2FBQ1YsSUFBSSxDQUNILFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ3RCLFNBQVM7WUFDUCxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztZQUN6RCxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUNsQixDQUNGO2FBQ0EsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDTCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE9BQWU7UUFDekIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxDQUFDO3dHQS9FVSxjQUFjOzRHQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQUlJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IExheWVyREJEYXRhIH0gZnJvbSAnLi9sYXllckRCLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMYXllckRCU2VydmljZSB7XG4gIHJlYWRvbmx5IGRiTmFtZTogc3RyaW5nID0gJ2xheWVyRGF0YSc7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBuZ3hJbmRleGVkREJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBhbGxvdyB0byB1cGRhdGUgdGhlIHN0b3JlZCBsYXllciBpbnRvIHRoZSBpbmRleGVkZGIgKGxheWVyRGF0YSlcbiAgICogQHBhcmFtIGxheWVyREJEYXRhXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB1cGRhdGUobGF5ZXJEQkRhdGE6IExheWVyREJEYXRhKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8TGF5ZXJEQkRhdGE+KCk7XG4gICAgdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlXG4gICAgICA/LmdldEJ5SUQodGhpcy5kYk5hbWUsIGxheWVyREJEYXRhLmxheWVySWQpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgY29uY2F0TWFwKChkYk9iamVjdDogTGF5ZXJEQkRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoIWRiT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5hZGQodGhpcy5kYk5hbWUsIGxheWVyREJEYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVXBkYXRlKGxheWVyREJEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBzdWJqZWN0Lm5leHQocmVzcG9uc2UpO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tVXBkYXRlKGxheWVyREJEYXRhOiBMYXllckRCRGF0YSk6IE9ic2VydmFibGU8TGF5ZXJEQkRhdGE+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8TGF5ZXJEQkRhdGE+KCk7XG4gICAgY29uc3QgZGVsZXRlUmVxdWVzdCA9IHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZGVsZXRlQnlLZXkoXG4gICAgICB0aGlzLmRiTmFtZSxcbiAgICAgIGxheWVyREJEYXRhLmxheWVySWRcbiAgICApO1xuICAgIGRlbGV0ZVJlcXVlc3RcbiAgICAgIC5waXBlKFxuICAgICAgICBjb25jYXRNYXAoKGlzRGVsZXRlZCkgPT5cbiAgICAgICAgICBpc0RlbGV0ZWRcbiAgICAgICAgICAgID8gdGhpcy5uZ3hJbmRleGVkREJTZXJ2aWNlPy5hZGQodGhpcy5kYk5hbWUsIGxheWVyREJEYXRhKVxuICAgICAgICAgICAgOiBvZih1bmRlZmluZWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG9iamVjdCkgPT4ge1xuICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgc3ViamVjdC5uZXh0KG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHN1YmplY3Q7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcmV0cmlldmUgYW4gaWRiIGxheWVyIGRlZmluaXRpb25cbiAgICogQHBhcmFtIGxheWVySWRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEJ5SUQobGF5ZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxMYXllckRCRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLm5neEluZGV4ZWREQlNlcnZpY2U/LmdldEJ5SUQodGhpcy5kYk5hbWUsIGxheWVySWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGRlbGV0ZSBhbiBpZGIgbGF5ZXIgZGVmaW5pdGlvblxuICAgKiBAcGFyYW0gbGF5ZXJJZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZGVsZXRlQnlLZXkobGF5ZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZGVsZXRlQnlLZXkodGhpcy5kYk5hbWUsIGxheWVySWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJldHJpdmUgYWxsIGlkYiBsYXllciBkZWZpbml0aW9uXG4gICAqIEBwYXJhbSBsYXllcklkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRBbGwoKTogT2JzZXJ2YWJsZTxMYXllckRCRGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMubmd4SW5kZXhlZERCU2VydmljZT8uZ2V0QWxsKHRoaXMuZGJOYW1lKTtcbiAgfVxufVxuIl19
@@ -1,36 +0,0 @@
1
- import { DBMode, NgxIndexedDBService } from 'ngx-indexed-db';
2
- import { Observable } from 'rxjs';
3
- import { InsertSourceInsertDBEnum } from './geoDB.enums';
4
- import * as i0 from "@angular/core";
5
- export declare class GeoDBService {
6
- private ngxIndexedDBService;
7
- readonly dbName: string;
8
- collisionsMap: Map<number, string[]>;
9
- _newData: number;
10
- private compression;
11
- constructor(ngxIndexedDBService: NgxIndexedDBService);
12
- /**
13
- * Only blob can be compressed
14
- * @param url
15
- * @param regionID
16
- * @param object object to handle
17
- * @param insertSource type of event user or system
18
- * @param insertEvent Name of the event where the insert has been triggered
19
- * @returns
20
- */
21
- update(url: string, regionID: any, object: any, insertSource: InsertSourceInsertDBEnum, insertEvent: string): Observable<any>;
22
- private customUpdate;
23
- get(url: string): Observable<any>;
24
- getByID(url: string): Observable<any>;
25
- deleteByKey(url: string): Observable<any>;
26
- getRegionCountByID(id: number): Observable<number>;
27
- getRegionByID(id: number): Observable<any[]>;
28
- deleteByRegionID(id: number): Observable<any>;
29
- openCursor(keyRange?: IDBKeyRange, mode?: DBMode): Observable<Event>;
30
- resetCounters(): void;
31
- resetCollisionsMap(): void;
32
- revertCollisions(): void;
33
- get newData(): number;
34
- static ɵfac: i0.ɵɵFactoryDeclaration<GeoDBService, [{ optional: true; }]>;
35
- static ɵprov: i0.ɵɵInjectableDeclaration<GeoDBService>;
36
- }