@igo2/geo 18.0.1 → 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 (205) 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/datasource.mjs +3 -2
  14. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
  15. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
  16. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  17. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  18. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  19. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +3 -3
  20. package/esm2022/lib/directions/directions.component.mjs +3 -3
  21. package/esm2022/lib/directions/directions.module.mjs +4 -4
  22. package/esm2022/lib/directions/shared/directions.service.mjs +3 -3
  23. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  24. package/esm2022/lib/download/download.module.mjs +4 -4
  25. package/esm2022/lib/download/shared/download.service.mjs +3 -3
  26. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
  27. package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
  28. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
  29. package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
  30. package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
  31. package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
  32. package/esm2022/lib/draw/shared/draw-icon.service.mjs +3 -3
  33. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  34. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
  35. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
  36. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  37. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
  38. package/esm2022/lib/feature/feature.module.mjs +4 -4
  39. package/esm2022/lib/filter/filter.module.mjs +4 -4
  40. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  41. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  42. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  43. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
  44. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
  45. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
  46. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
  47. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
  48. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  49. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
  50. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
  51. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
  52. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +3 -3
  53. package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
  54. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  55. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
  56. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  57. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  58. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
  59. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  60. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
  61. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  62. package/esm2022/lib/geo.module.mjs +4 -4
  63. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
  64. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  65. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
  66. package/esm2022/lib/geometry/geometry.module.mjs +4 -4
  67. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  68. package/esm2022/lib/import-export/import-export/import-export.component.mjs +3 -3
  69. package/esm2022/lib/import-export/import-export.module.mjs +4 -4
  70. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +3 -3
  71. package/esm2022/lib/import-export/shared/export.service.mjs +3 -3
  72. package/esm2022/lib/import-export/shared/import.service.mjs +3 -3
  73. package/esm2022/lib/import-export/shared/import.utils.mjs +2 -2
  74. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +3 -3
  75. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  76. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +6 -6
  77. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
  78. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +3 -3
  79. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
  80. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
  81. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  82. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
  83. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +3 -3
  84. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +3 -3
  85. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +3 -3
  86. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +3 -3
  87. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +3 -3
  88. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +3 -3
  89. package/esm2022/lib/layer/layer.module.mjs +4 -4
  90. package/esm2022/lib/layer/shared/layer.service.mjs +13 -17
  91. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  92. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +127 -217
  93. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  94. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  95. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  96. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  97. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
  98. package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
  99. package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
  100. package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
  101. package/esm2022/lib/map/map.module.mjs +4 -4
  102. package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
  103. package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
  104. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  105. package/esm2022/lib/map/shared/hover-feature.directive.mjs +3 -3
  106. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +3 -3
  107. package/esm2022/lib/map/shared/map.service.mjs +3 -3
  108. package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
  109. package/esm2022/lib/map/shared/projection.service.mjs +3 -3
  110. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  111. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +3 -3
  112. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
  113. package/esm2022/lib/measure/measure.module.mjs +4 -4
  114. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +3 -3
  115. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  116. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
  117. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  118. package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
  119. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
  120. package/esm2022/lib/metadata/metadata.module.mjs +4 -4
  121. package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
  122. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +20 -22
  123. package/esm2022/lib/offline/geoDB/geoDB.mjs +146 -0
  124. package/esm2022/lib/offline/geoDB/index.mjs +2 -2
  125. package/esm2022/lib/offline/layerDB/index.mjs +2 -2
  126. package/esm2022/lib/offline/layerDB/layerDB.mjs +64 -0
  127. package/esm2022/lib/offline/offline.provider.mjs +18 -41
  128. package/esm2022/lib/offline/shared/geo-network.service.mjs +10 -14
  129. package/esm2022/lib/offline/shared/indexed-db.interface.mjs +2 -0
  130. package/esm2022/lib/offline/shared/indexed-db.utils.mjs +20 -0
  131. package/esm2022/lib/print/print/print.component.mjs +3 -3
  132. package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
  133. package/esm2022/lib/print/print.module.mjs +4 -4
  134. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  135. package/esm2022/lib/query/query.module.mjs +4 -4
  136. package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
  137. package/esm2022/lib/query/shared/query.directive.mjs +3 -3
  138. package/esm2022/lib/query/shared/query.service.mjs +3 -3
  139. package/esm2022/lib/search/search-bar/search-bar.component.mjs +3 -3
  140. package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
  141. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
  142. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
  143. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  144. package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
  145. package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
  146. package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
  147. package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
  148. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  149. package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
  150. package/esm2022/lib/search/search.module.mjs +4 -4
  151. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +3 -3
  152. package/esm2022/lib/search/shared/search.service.mjs +3 -3
  153. package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
  154. package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
  155. package/esm2022/lib/search/shared/sources/icherche.mjs +9 -9
  156. package/esm2022/lib/search/shared/sources/ilayer.mjs +6 -6
  157. package/esm2022/lib/search/shared/sources/nominatim.mjs +3 -3
  158. package/esm2022/lib/search/shared/sources/storedqueries.mjs +6 -6
  159. package/esm2022/lib/search/shared/sources/workspace.mjs +3 -3
  160. package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
  161. package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
  162. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  163. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  164. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  165. package/esm2022/lib/style/style-service/draw-style.service.mjs +3 -3
  166. package/esm2022/lib/style/style-service/style.service.mjs +3 -3
  167. package/esm2022/lib/style/style.module.mjs +4 -4
  168. package/esm2022/lib/toast/toast.component.mjs +3 -3
  169. package/esm2022/lib/toast/toast.module.mjs +4 -4
  170. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
  171. package/esm2022/lib/wkt/shared/wkt.service.mjs +3 -3
  172. package/esm2022/lib/wkt/wkt.module.mjs +4 -4
  173. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
  174. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
  175. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +6 -6
  176. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -3
  177. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -3
  178. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +6 -6
  179. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -1
  180. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  181. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
  182. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
  183. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
  184. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
  185. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
  186. package/esm2022/lib/workspace/workspace.module.mjs +4 -4
  187. package/fesm2022/igo2-geo.mjs +1096 -1237
  188. package/fesm2022/igo2-geo.mjs.map +1 -1
  189. package/lib/datasource/shared/datasources/datasource.d.ts +2 -2
  190. package/lib/layer/shared/layer.service.d.ts +2 -4
  191. package/lib/layer/shared/layers/vector-layer.d.ts +4 -15
  192. package/lib/layer/shared/layers/vector-layer.interface.d.ts +3 -2
  193. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +2 -4
  194. package/lib/offline/geoDB/geoDB.d.ts +36 -0
  195. package/lib/offline/geoDB/index.d.ts +1 -1
  196. package/lib/offline/layerDB/index.d.ts +1 -1
  197. package/lib/offline/layerDB/{layerDB.service.d.ts → layerDB.d.ts} +9 -11
  198. package/lib/offline/offline.provider.d.ts +2 -0
  199. package/lib/offline/shared/geo-network.service.d.ts +2 -4
  200. package/lib/offline/shared/indexed-db.interface.d.ts +16 -0
  201. package/lib/offline/shared/indexed-db.utils.d.ts +4 -0
  202. package/package.json +6 -6
  203. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  204. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  205. package/lib/offline/geoDB/geoDB.service.d.ts +0 -36
@@ -1,7 +1,7 @@
1
1
  import olClusterSource from 'ol/source/Cluster';
2
2
  import olSource from 'ol/source/Source';
3
3
  import olVectorSource from 'ol/source/Vector';
4
- import { LegendOptions } from '../../../layer/shared/layers/legend.interface';
4
+ import { LegendMapViewOptions, LegendOptions } from '../../../layer/shared/layers/legend.interface';
5
5
  import { DataService } from './data.service';
6
6
  import { DataSourceOptions, Legend } from './datasource.interface';
7
7
  export declare abstract class DataSource {
@@ -14,7 +14,7 @@ export declare abstract class DataSource {
14
14
  constructor(options?: DataSourceOptions, dataService?: DataService);
15
15
  protected abstract createOlSource(): olSource;
16
16
  protected generateId(): string;
17
- getLegend(): Legend[];
17
+ getLegend(_style?: string, _view?: LegendMapViewOptions): Legend[];
18
18
  setLegend(options: LegendOptions): Legend[];
19
19
  protected abstract onUnwatch(): any;
20
20
  }
@@ -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.1",
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.1",
54
- "@igo2/common": "^18.0.1",
55
- "@igo2/core": "^18.0.1",
56
- "@igo2/utils": "^18.0.1",
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
- }