@igo2/context 1.15.4 → 1.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/esm2020/igo2-context.mjs +4 -4
  2. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +228 -228
  3. package/esm2020/lib/context-import-export/context-import-export.module.mjs +85 -85
  4. package/esm2020/lib/context-import-export/index.mjs +3 -3
  5. package/esm2020/lib/context-import-export/shared/context-export.errors.mjs +15 -15
  6. package/esm2020/lib/context-import-export/shared/context-export.interface.mjs +2 -2
  7. package/esm2020/lib/context-import-export/shared/context-export.service.mjs +38 -38
  8. package/esm2020/lib/context-import-export/shared/context-export.utils.mjs +15 -15
  9. package/esm2020/lib/context-import-export/shared/context-import.errors.mjs +33 -33
  10. package/esm2020/lib/context-import-export/shared/context-import.service.mjs +79 -79
  11. package/esm2020/lib/context-import-export/shared/context-import.utils.mjs +133 -133
  12. package/esm2020/lib/context-import-export/shared/index.mjs +8 -8
  13. package/esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs +50 -50
  14. package/esm2020/lib/context-manager/context-edit/context-edit.component.mjs +46 -46
  15. package/esm2020/lib/context-manager/context-edit/index.mjs +3 -3
  16. package/esm2020/lib/context-manager/context-form/context-form.component.mjs +143 -143
  17. package/esm2020/lib/context-manager/context-form/index.mjs +2 -2
  18. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +245 -245
  19. package/esm2020/lib/context-manager/context-item/index.mjs +2 -2
  20. package/esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs +240 -240
  21. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +592 -592
  22. package/esm2020/lib/context-manager/context-list/context-list.enum.mjs +7 -7
  23. package/esm2020/lib/context-manager/context-list/index.mjs +3 -3
  24. package/esm2020/lib/context-manager/context-manager.module.mjs +162 -162
  25. package/esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +99 -99
  26. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +306 -306
  27. package/esm2020/lib/context-manager/context-permissions/index.mjs +3 -3
  28. package/esm2020/lib/context-manager/index.mjs +7 -7
  29. package/esm2020/lib/context-manager/shared/context.enum.mjs +13 -13
  30. package/esm2020/lib/context-manager/shared/context.interface.mjs +2 -2
  31. package/esm2020/lib/context-manager/shared/context.service.mjs +632 -632
  32. package/esm2020/lib/context-manager/shared/index.mjs +6 -6
  33. package/esm2020/lib/context-manager/shared/layer-context.directive.mjs +162 -162
  34. package/esm2020/lib/context-manager/shared/map-context.directive.mjs +70 -70
  35. package/esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +66 -66
  36. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +50 -50
  37. package/esm2020/lib/context-map-button/bookmark-button/index.mjs +3 -3
  38. package/esm2020/lib/context-map-button/context-map-button.module.mjs +96 -96
  39. package/esm2020/lib/context-map-button/index.mjs +4 -4
  40. package/esm2020/lib/context-map-button/poi-button/index.mjs +4 -4
  41. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +161 -161
  42. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +50 -50
  43. package/esm2020/lib/context-map-button/poi-button/shared/index.mjs +3 -3
  44. package/esm2020/lib/context-map-button/poi-button/shared/poi.interface.mjs +2 -2
  45. package/esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs +33 -33
  46. package/esm2020/lib/context-map-button/user-button/index.mjs +3 -3
  47. package/esm2020/lib/context-map-button/user-button/user-button.animation.mjs +17 -17
  48. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +104 -104
  49. package/esm2020/lib/context-map-button/user-button/user-dialog.component.mjs +66 -66
  50. package/esm2020/lib/context.module.mjs +45 -45
  51. package/esm2020/lib/share-map/index.mjs +5 -5
  52. package/esm2020/lib/share-map/share-map/share-map-api.component.mjs +170 -170
  53. package/esm2020/lib/share-map/share-map/share-map-url.component.mjs +243 -243
  54. package/esm2020/lib/share-map/share-map/share-map.component.mjs +57 -57
  55. package/esm2020/lib/share-map/share-map.module.mjs +67 -67
  56. package/esm2020/lib/share-map/shared/index.mjs +2 -2
  57. package/esm2020/lib/share-map/shared/share-map.service.mjs +210 -210
  58. package/esm2020/lib/sidenav/index.mjs +2 -2
  59. package/esm2020/lib/sidenav/sidenav.component.mjs +170 -170
  60. package/esm2020/lib/sidenav/sidenav.module.mjs +61 -61
  61. package/esm2020/public_api.mjs +15 -15
  62. package/fesm2015/igo2-context.mjs +4948 -4948
  63. package/fesm2015/igo2-context.mjs.map +1 -1
  64. package/fesm2020/igo2-context.mjs +4597 -4597
  65. package/fesm2020/igo2-context.mjs.map +1 -1
  66. package/index.d.ts +5 -5
  67. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +44 -44
  68. package/lib/context-import-export/context-import-export.module.d.ts +23 -23
  69. package/lib/context-import-export/index.d.ts +2 -2
  70. package/lib/context-import-export/shared/context-export.errors.d.ts +8 -8
  71. package/lib/context-import-export/shared/context-export.interface.d.ts +5 -5
  72. package/lib/context-import-export/shared/context-export.service.d.ts +10 -10
  73. package/lib/context-import-export/shared/context-export.utils.d.ts +4 -4
  74. package/lib/context-import-export/shared/context-import.errors.d.ts +17 -17
  75. package/lib/context-import-export/shared/context-import.service.d.ts +18 -18
  76. package/lib/context-import-export/shared/context-import.utils.d.ts +17 -17
  77. package/lib/context-import-export/shared/index.d.ts +7 -7
  78. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +20 -20
  79. package/lib/context-manager/context-edit/context-edit.component.d.ts +14 -14
  80. package/lib/context-manager/context-edit/index.d.ts +2 -2
  81. package/lib/context-manager/context-form/context-form.component.d.ts +30 -30
  82. package/lib/context-manager/context-form/index.d.ts +1 -1
  83. package/lib/context-manager/context-item/context-item.component.d.ts +32 -32
  84. package/lib/context-manager/context-item/index.d.ts +1 -1
  85. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +46 -46
  86. package/lib/context-manager/context-list/context-list.component.d.ts +93 -93
  87. package/lib/context-manager/context-list/context-list.enum.d.ts +5 -5
  88. package/lib/context-manager/context-list/index.d.ts +2 -2
  89. package/lib/context-manager/context-manager.module.d.ts +37 -37
  90. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +23 -23
  91. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +40 -40
  92. package/lib/context-manager/context-permissions/index.d.ts +2 -2
  93. package/lib/context-manager/index.d.ts +6 -6
  94. package/lib/context-manager/shared/context.enum.d.ts +10 -10
  95. package/lib/context-manager/shared/context.interface.d.ts +75 -75
  96. package/lib/context-manager/shared/context.service.d.ts +75 -75
  97. package/lib/context-manager/shared/index.d.ts +5 -5
  98. package/lib/context-manager/shared/layer-context.directive.d.ts +28 -28
  99. package/lib/context-manager/shared/map-context.directive.d.ts +19 -19
  100. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +20 -20
  101. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +9 -9
  102. package/lib/context-map-button/bookmark-button/index.d.ts +2 -2
  103. package/lib/context-map-button/context-map-button.module.d.ts +27 -27
  104. package/lib/context-map-button/index.d.ts +3 -3
  105. package/lib/context-map-button/poi-button/index.d.ts +3 -3
  106. package/lib/context-map-button/poi-button/poi-button.component.d.ts +34 -34
  107. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +9 -9
  108. package/lib/context-map-button/poi-button/shared/index.d.ts +2 -2
  109. package/lib/context-map-button/poi-button/shared/poi.interface.d.ts +7 -7
  110. package/lib/context-map-button/poi-button/shared/poi.service.d.ts +16 -16
  111. package/lib/context-map-button/user-button/index.d.ts +2 -2
  112. package/lib/context-map-button/user-button/user-button.animation.d.ts +2 -2
  113. package/lib/context-map-button/user-button/user-button.component.d.ts +25 -25
  114. package/lib/context-map-button/user-button/user-dialog.component.d.ts +15 -15
  115. package/lib/context.module.d.ts +16 -16
  116. package/lib/share-map/index.d.ts +4 -4
  117. package/lib/share-map/share-map/share-map-api.component.d.ts +27 -27
  118. package/lib/share-map/share-map/share-map-url.component.d.ts +26 -26
  119. package/lib/share-map/share-map/share-map.component.d.ts +11 -11
  120. package/lib/share-map/share-map.module.d.ts +21 -21
  121. package/lib/share-map/shared/index.d.ts +1 -1
  122. package/lib/share-map/shared/share-map.service.d.ts +17 -17
  123. package/lib/sidenav/index.d.ts +1 -1
  124. package/lib/sidenav/sidenav.component.d.ts +35 -35
  125. package/lib/sidenav/sidenav.module.d.ts +18 -18
  126. package/ngcc.config.js +3 -3
  127. package/package.json +6 -6
  128. package/public_api.d.ts +11 -11
@@ -1,6 +1,6 @@
1
- export * from './context.service';
2
- export * from './context.enum';
3
- export * from './context.interface';
4
- export * from './layer-context.directive';
5
- export * from './map-context.directive';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC5lbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGF5ZXItY29udGV4dC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XHJcbiJdfQ==
1
+ export * from './context.service';
2
+ export * from './context.enum';
3
+ export * from './context.interface';
4
+ export * from './layer-context.directive';
5
+ export * from './map-context.directive';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuZW51bSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRleHQuaW50ZXJmYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGF5ZXItY29udGV4dC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9tYXAtY29udGV4dC5kaXJlY3RpdmUnO1xuIl19
@@ -1,162 +1,162 @@
1
- import { Directive, Optional, Input } from '@angular/core';
2
- import { merge } from 'rxjs';
3
- import { buffer, debounceTime, filter } from 'rxjs/operators';
4
- import { addImportedFeaturesToMap, addImportedFeaturesStyledToMap } from '../../context-import-export/shared/context-import.utils';
5
- import GeoJSON from 'ol/format/GeoJSON';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@igo2/geo";
8
- import * as i2 from "./context.service";
9
- import * as i3 from "@igo2/core";
10
- export class LayerContextDirective {
11
- constructor(component, contextService, layerService, configService, styleListService, styleService, route) {
12
- this.component = component;
13
- this.contextService = contextService;
14
- this.layerService = layerService;
15
- this.configService = configService;
16
- this.styleListService = styleListService;
17
- this.styleService = styleService;
18
- this.route = route;
19
- this.contextLayers = [];
20
- this.removeLayersOnContextChange = true;
21
- }
22
- get map() {
23
- return this.component.map;
24
- }
25
- ngOnInit() {
26
- this.context$$ = this.contextService.context$
27
- .pipe(filter((context) => context !== undefined))
28
- .subscribe((context) => this.handleContextChange(context));
29
- if (this.route &&
30
- this.route.options.visibleOnLayersKey &&
31
- this.route.options.visibleOffLayersKey &&
32
- this.route.options.contextKey) {
33
- const queryParams$$ = this.route.queryParams.subscribe((params) => {
34
- if (Object.keys(params).length > 0) {
35
- this.queryParams = params;
36
- queryParams$$.unsubscribe();
37
- }
38
- });
39
- }
40
- }
41
- ngOnDestroy() {
42
- this.context$$.unsubscribe();
43
- }
44
- handleContextChange(context) {
45
- if (context.layers === undefined) {
46
- return;
47
- }
48
- if (this.removeLayersOnContextChange === true) {
49
- this.map.removeAllLayers();
50
- }
51
- else {
52
- this.map.removeLayers(this.contextLayers);
53
- }
54
- this.contextLayers = [];
55
- const layersAndIndex$ = merge(...context.layers.map((layerOptions, index) => {
56
- return this.layerService.createAsyncLayer(layerOptions, context.uri);
57
- }));
58
- layersAndIndex$
59
- .pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
60
- .subscribe((layers) => {
61
- this.handleAddLayers(layers);
62
- if (context.extraFeatures) {
63
- context.extraFeatures.forEach((featureCollection) => {
64
- const format = new GeoJSON();
65
- const title = featureCollection.name;
66
- featureCollection = JSON.stringify(featureCollection);
67
- featureCollection = format.readFeatures(featureCollection, {
68
- dataProjection: 'EPSG:4326',
69
- featureProjection: 'EPSG:3857'
70
- });
71
- const importExportOptions = this.configService.getConfig('importExport');
72
- const importWithStyle = importExportOptions?.importWithStyle || this.configService.getConfig('importWithStyle');
73
- if (this.configService.getConfig('importWithStyle')) {
74
- console.warn(`
75
- The location of this config importWithStyle is deprecated.
76
- Please move this property within importExport configuration.
77
- Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
78
- Refer to environnement.ts OR config/config.json
79
- This legacy conversion will be deleted in 2024.
80
- `);
81
- }
82
- if (!importWithStyle) {
83
- addImportedFeaturesToMap(featureCollection, this.map, title);
84
- }
85
- else {
86
- addImportedFeaturesStyledToMap(featureCollection, this.map, title, this.styleListService, this.styleService);
87
- }
88
- });
89
- }
90
- });
91
- this.layerService.createAsyncIdbLayers(context.uri).pipe(debounceTime(500))
92
- .subscribe((layers) => this.handleAddLayers(layers));
93
- }
94
- handleAddLayers(layers) {
95
- layers = layers
96
- .filter((layer) => layer !== undefined)
97
- .map((layer) => {
98
- layer.visible = this.computeLayerVisibilityFromUrl(layer);
99
- layer.zIndex = layer.zIndex;
100
- return layer;
101
- });
102
- this.contextLayers.concat(layers);
103
- this.map.addLayers(layers);
104
- }
105
- computeLayerVisibilityFromUrl(layer) {
106
- const params = this.queryParams;
107
- const currentContext = this.contextService.context$.value.uri;
108
- const currentLayerid = layer.id;
109
- let visible = layer.visible;
110
- if (!params || !currentLayerid) {
111
- return visible;
112
- }
113
- const contextParams = params[this.route.options.contextKey];
114
- if (contextParams === currentContext || !contextParams) {
115
- let visibleOnLayersParams = '';
116
- let visibleOffLayersParams = '';
117
- let visiblelayers = [];
118
- let invisiblelayers = [];
119
- if (this.route.options.visibleOnLayersKey &&
120
- params[this.route.options.visibleOnLayersKey]) {
121
- visibleOnLayersParams =
122
- params[this.route.options.visibleOnLayersKey];
123
- }
124
- if (this.route.options.visibleOffLayersKey &&
125
- params[this.route.options.visibleOffLayersKey]) {
126
- visibleOffLayersParams =
127
- params[this.route.options.visibleOffLayersKey];
128
- }
129
- /* This order is important because to control whichever
130
- the order of * param. First whe open and close everything.*/
131
- if (visibleOnLayersParams === '*') {
132
- visible = true;
133
- }
134
- if (visibleOffLayersParams === '*') {
135
- visible = false;
136
- }
137
- // After, managing named layer by id (context.json OR id from datasource)
138
- visiblelayers = visibleOnLayersParams.split(',');
139
- invisiblelayers = visibleOffLayersParams.split(',');
140
- if (visiblelayers.indexOf(currentLayerid) > -1 || visiblelayers.indexOf(currentLayerid.toString()) > -1) {
141
- visible = true;
142
- }
143
- if (invisiblelayers.indexOf(currentLayerid) > -1 || invisiblelayers.indexOf(currentLayerid.toString()) > -1) {
144
- visible = false;
145
- }
146
- }
147
- return visible;
148
- }
149
- }
150
- LayerContextDirective.ɵfac = function LayerContextDirective_Factory(t) { return new (t || LayerContextDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent), i0.ɵɵdirectiveInject(i2.ContextService), i0.ɵɵdirectiveInject(i1.LayerService), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i1.StyleListService), i0.ɵɵdirectiveInject(i1.StyleService), i0.ɵɵdirectiveInject(i3.RouteService, 8)); };
151
- LayerContextDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: LayerContextDirective, selectors: [["", "igoLayerContext", ""]], inputs: { removeLayersOnContextChange: "removeLayersOnContextChange" } });
152
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LayerContextDirective, [{
153
- type: Directive,
154
- args: [{
155
- selector: '[igoLayerContext]'
156
- }]
157
- }], function () { return [{ type: i1.MapBrowserComponent }, { type: i2.ContextService }, { type: i1.LayerService }, { type: i3.ConfigService }, { type: i1.StyleListService }, { type: i1.StyleService }, { type: i3.RouteService, decorators: [{
158
- type: Optional
159
- }] }]; }, { removeLayersOnContextChange: [{
160
- type: Input
161
- }] }); })();
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItY29udGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9sYXllci1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBZTlELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQy9CLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBS3hDLE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFDVSxTQUE4QixFQUM5QixjQUE4QixFQUM5QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDZCxLQUFtQjtRQU4vQixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNkLFVBQUssR0FBTCxLQUFLLENBQWM7UUFmakMsa0JBQWEsR0FBWSxFQUFFLENBQUM7UUFFM0IsZ0NBQTJCLEdBQVksSUFBSSxDQUFDO0lBY2xELENBQUM7SUFaSixJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFZRCxR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RGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIG1lcmdlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGJ1ZmZlciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBSb3V0ZVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuaW1wb3J0IHtcclxuICBNYXBCcm93c2VyQ29tcG9uZW50LFxyXG4gIExheWVyLFxyXG4gIExheWVyU2VydmljZSxcclxuICBMYXllck9wdGlvbnMsXHJcbiAgU3R5bGVMaXN0U2VydmljZSxcclxuICBTdHlsZVNlcnZpY2VcclxufSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcblxyXG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7XHJcbiAgYWRkSW1wb3J0ZWRGZWF0dXJlc1RvTWFwLFxyXG4gIGFkZEltcG9ydGVkRmVhdHVyZXNTdHlsZWRUb01hcFxyXG59IGZyb20gJy4uLy4uL2NvbnRleHQtaW1wb3J0LWV4cG9ydC9zaGFyZWQvY29udGV4dC1pbXBvcnQudXRpbHMnO1xyXG5pbXBvcnQgR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tpZ29MYXllckNvbnRleHRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5ZXJDb250ZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgY29udGV4dCQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtczogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbnRleHRMYXllcnM6IExheWVyW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgcmVtb3ZlTGF5ZXJzT25Db250ZXh0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm1hcDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ6IE1hcEJyb3dzZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0eWxlTGlzdFNlcnZpY2U6IFN0eWxlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0eWxlU2VydmljZTogU3R5bGVTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZTogUm91dGVTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY29udGV4dCQkID0gdGhpcy5jb250ZXh0U2VydmljZS5jb250ZXh0JFxyXG4gICAgICAucGlwZShmaWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQgIT09IHVuZGVmaW5lZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRleHQpID0+IHRoaXMuaGFuZGxlQ29udGV4dENoYW5nZShjb250ZXh0KSk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnJvdXRlICYmXHJcbiAgICAgIHRoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT25MYXllcnNLZXkgJiZcclxuICAgICAgdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPZmZMYXllcnNLZXkgJiZcclxuICAgICAgdGhpcy5yb3V0ZS5vcHRpb25zLmNvbnRleHRLZXlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyQkID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jb250ZXh0JCQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ29udGV4dENoYW5nZShjb250ZXh0OiBEZXRhaWxlZENvbnRleHQpIHtcclxuICAgIGlmIChjb250ZXh0LmxheWVycyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlbW92ZUxheWVyc09uQ29udGV4dENoYW5nZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLm1hcC5yZW1vdmVBbGxMYXllcnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVycyh0aGlzLmNvbnRleHRMYXllcnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZXh0TGF5ZXJzID0gW107XHJcblxyXG4gICAgY29uc3QgbGF5ZXJzQW5kSW5kZXgkID0gbWVyZ2UoXHJcbiAgICAgIC4uLmNvbnRleHQubGF5ZXJzLm1hcCgobGF5ZXJPcHRpb25zOiBMYXllck9wdGlvbnMsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYXllclNlcnZpY2UuY3JlYXRlQXN5bmNMYXllcihsYXllck9wdGlvbnMsIGNvbnRleHQudXJpKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgbGF5ZXJzQW5kSW5kZXgkXHJcbiAgICAgIC5waXBlKGJ1ZmZlcihsYXllcnNBbmRJbmRleCQucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsYXllcnM6IExheWVyW10pID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZUFkZExheWVycyhsYXllcnMpO1xyXG5cclxuICAgICAgICBpZiAoY29udGV4dC5leHRyYUZlYXR1cmVzKSB7XHJcbiAgICAgICAgICBjb250ZXh0LmV4dHJhRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZUNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0ID0gbmV3IEdlb0pTT04oKTtcclxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBmZWF0dXJlQ29sbGVjdGlvbi5uYW1lO1xyXG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbiA9IEpTT04uc3RyaW5naWZ5KGZlYXR1cmVDb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb24gPSBmb3JtYXQucmVhZEZlYXR1cmVzKGZlYXR1cmVDb2xsZWN0aW9uLCB7XHJcbiAgICAgICAgICAgICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxyXG4gICAgICAgICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3J1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgaW1wb3J0RXhwb3J0T3B0aW9ucyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbXBvcnRXaXRoU3R5bGUgPWltcG9ydEV4cG9ydE9wdGlvbnM/LmltcG9ydFdpdGhTdHlsZSB8fCB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2ltcG9ydFdpdGhTdHlsZScpKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBcclxuICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhpcyBjb25maWcgaW1wb3J0V2l0aFN0eWxlIGlzIGRlcHJlY2F0ZWQuXHJcbiAgICAgICAgICAgICAgUGxlYXNlIG1vdmUgdGhpcyBwcm9wZXJ0eSB3aXRoaW4gaW1wb3J0RXhwb3J0IGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgICAgICAgICAgRXg6IGltcG9ydFdpdGhTdHlsZTogdHJ1ZS9mYWxzZSBtdXN0IGJlIHRyYW5zZmVyZWQgdG8gaW1wb3J0RXhwb3J0OiB7IGltcG9ydFdpdGhTdHlsZTogdHJ1ZS9mYWxzZSB9XHJcbiAgICAgICAgICAgICAgUmVmZXIgdG8gZW52aXJvbm5lbWVudC50cyBPUiBjb25maWcvY29uZmlnLmpzb25cclxuICAgICAgICAgICAgICBUaGlzIGxlZ2FjeSBjb252ZXJzaW9uIHdpbGwgYmUgZGVsZXRlZCBpbiAyMDI0LlxyXG4gICAgICAgICAgICAgIGApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghaW1wb3J0V2l0aFN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgYWRkSW1wb3J0ZWRGZWF0dXJlc1RvTWFwKGZlYXR1cmVDb2xsZWN0aW9uLCB0aGlzLm1hcCwgdGl0bGUpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGFkZEltcG9ydGVkRmVhdHVyZXNTdHlsZWRUb01hcChcclxuICAgICAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVMaXN0U2VydmljZSxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMubGF5ZXJTZXJ2aWNlLmNyZWF0ZUFzeW5jSWRiTGF5ZXJzKGNvbnRleHQudXJpKS5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChsYXllcnM6IExheWVyW10pID0+IHRoaXMuaGFuZGxlQWRkTGF5ZXJzKGxheWVycykpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQWRkTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xyXG4gICAgbGF5ZXJzID0gbGF5ZXJzXHJcbiAgICAgIC5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIgIT09IHVuZGVmaW5lZClcclxuICAgICAgLm1hcCgobGF5ZXIpID0+IHtcclxuICAgICAgICBsYXllci52aXNpYmxlID0gdGhpcy5jb21wdXRlTGF5ZXJWaXNpYmlsaXR5RnJvbVVybChsYXllcik7XHJcbiAgICAgICAgbGF5ZXIuekluZGV4ID0gbGF5ZXIuekluZGV4O1xyXG5cclxuICAgICAgICByZXR1cm4gbGF5ZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5jb250ZXh0TGF5ZXJzLmNvbmNhdChsYXllcnMpO1xyXG4gICAgdGhpcy5tYXAuYWRkTGF5ZXJzKGxheWVycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVMYXllclZpc2liaWxpdHlGcm9tVXJsKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtcztcclxuICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5jb250ZXh0JC52YWx1ZS51cmk7XHJcbiAgICBjb25zdCBjdXJyZW50TGF5ZXJpZDogc3RyaW5nID0gbGF5ZXIuaWQ7XHJcblxyXG4gICAgbGV0IHZpc2libGUgPSBsYXllci52aXNpYmxlO1xyXG4gICAgaWYgKCFwYXJhbXMgfHwgIWN1cnJlbnRMYXllcmlkKSB7XHJcbiAgICAgIHJldHVybiB2aXNpYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRleHRQYXJhbXMgPSBwYXJhbXNbdGhpcy5yb3V0ZS5vcHRpb25zLmNvbnRleHRLZXkgYXMgc3RyaW5nXTtcclxuICAgIGlmIChjb250ZXh0UGFyYW1zID09PSBjdXJyZW50Q29udGV4dCB8fCAhY29udGV4dFBhcmFtcykge1xyXG4gICAgICBsZXQgdmlzaWJsZU9uTGF5ZXJzUGFyYW1zID0gJyc7XHJcbiAgICAgIGxldCB2aXNpYmxlT2ZmTGF5ZXJzUGFyYW1zID0gJyc7XHJcbiAgICAgIGxldCB2aXNpYmxlbGF5ZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICBsZXQgaW52aXNpYmxlbGF5ZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT25MYXllcnNLZXkgJiZcclxuICAgICAgICBwYXJhbXNbdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPbkxheWVyc0tleSBhcyBzdHJpbmddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZpc2libGVPbkxheWVyc1BhcmFtcyA9XHJcbiAgICAgICAgICBwYXJhbXNbdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPbkxheWVyc0tleSBhcyBzdHJpbmddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9mZkxheWVyc0tleSAmJlxyXG4gICAgICAgIHBhcmFtc1t0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9mZkxheWVyc0tleSBhcyBzdHJpbmddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHZpc2libGVPZmZMYXllcnNQYXJhbXMgPVxyXG4gICAgICAgICAgcGFyYW1zW3RoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT2ZmTGF5ZXJzS2V5IGFzIHN0cmluZ107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFRoaXMgb3JkZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgdG8gY29udHJvbCB3aGljaGV2ZXJcclxuICAgICAgIHRoZSBvcmRlciBvZiAqIHBhcmFtLiBGaXJzdCB3aGUgb3BlbiBhbmQgY2xvc2UgZXZlcnl0aGluZy4qL1xyXG4gICAgICBpZiAodmlzaWJsZU9uTGF5ZXJzUGFyYW1zID09PSAnKicpIHtcclxuICAgICAgICB2aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodmlzaWJsZU9mZkxheWVyc1BhcmFtcyA9PT0gJyonKSB7XHJcbiAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZnRlciwgbWFuYWdpbmcgbmFtZWQgbGF5ZXIgYnkgaWQgKGNvbnRleHQuanNvbiBPUiBpZCBmcm9tIGRhdGFzb3VyY2UpXHJcbiAgICAgIHZpc2libGVsYXllcnMgPSB2aXNpYmxlT25MYXllcnNQYXJhbXMuc3BsaXQoJywnKTtcclxuICAgICAgaW52aXNpYmxlbGF5ZXJzID0gdmlzaWJsZU9mZkxheWVyc1BhcmFtcy5zcGxpdCgnLCcpO1xyXG4gICAgICBpZiAodmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkKSA+IC0xIHx8IHZpc2libGVsYXllcnMuaW5kZXhPZihjdXJyZW50TGF5ZXJpZC50b1N0cmluZygpKSA+IC0xKSB7XHJcbiAgICAgICAgdmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGludmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkKSA+IC0xIHx8IGludmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkLnRvU3RyaW5nKCkpID4gLTEpIHtcclxuICAgICAgICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { Directive, Optional, Input } from '@angular/core';
2
+ import { merge } from 'rxjs';
3
+ import { buffer, debounceTime, filter } from 'rxjs/operators';
4
+ import { addImportedFeaturesToMap, addImportedFeaturesStyledToMap } from '../../context-import-export/shared/context-import.utils';
5
+ import GeoJSON from 'ol/format/GeoJSON';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@igo2/geo";
8
+ import * as i2 from "./context.service";
9
+ import * as i3 from "@igo2/core";
10
+ export class LayerContextDirective {
11
+ constructor(component, contextService, layerService, configService, styleListService, styleService, route) {
12
+ this.component = component;
13
+ this.contextService = contextService;
14
+ this.layerService = layerService;
15
+ this.configService = configService;
16
+ this.styleListService = styleListService;
17
+ this.styleService = styleService;
18
+ this.route = route;
19
+ this.contextLayers = [];
20
+ this.removeLayersOnContextChange = true;
21
+ }
22
+ get map() {
23
+ return this.component.map;
24
+ }
25
+ ngOnInit() {
26
+ this.context$$ = this.contextService.context$
27
+ .pipe(filter((context) => context !== undefined))
28
+ .subscribe((context) => this.handleContextChange(context));
29
+ if (this.route &&
30
+ this.route.options.visibleOnLayersKey &&
31
+ this.route.options.visibleOffLayersKey &&
32
+ this.route.options.contextKey) {
33
+ const queryParams$$ = this.route.queryParams.subscribe((params) => {
34
+ if (Object.keys(params).length > 0) {
35
+ this.queryParams = params;
36
+ queryParams$$.unsubscribe();
37
+ }
38
+ });
39
+ }
40
+ }
41
+ ngOnDestroy() {
42
+ this.context$$.unsubscribe();
43
+ }
44
+ handleContextChange(context) {
45
+ if (context.layers === undefined) {
46
+ return;
47
+ }
48
+ if (this.removeLayersOnContextChange === true) {
49
+ this.map.removeAllLayers();
50
+ }
51
+ else {
52
+ this.map.removeLayers(this.contextLayers);
53
+ }
54
+ this.contextLayers = [];
55
+ const layersAndIndex$ = merge(...context.layers.map((layerOptions, index) => {
56
+ return this.layerService.createAsyncLayer(layerOptions, context.uri);
57
+ }));
58
+ layersAndIndex$
59
+ .pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
60
+ .subscribe((layers) => {
61
+ this.handleAddLayers(layers);
62
+ if (context.extraFeatures) {
63
+ context.extraFeatures.forEach((featureCollection) => {
64
+ const format = new GeoJSON();
65
+ const title = featureCollection.name;
66
+ featureCollection = JSON.stringify(featureCollection);
67
+ featureCollection = format.readFeatures(featureCollection, {
68
+ dataProjection: 'EPSG:4326',
69
+ featureProjection: 'EPSG:3857'
70
+ });
71
+ const importExportOptions = this.configService.getConfig('importExport');
72
+ const importWithStyle = importExportOptions?.importWithStyle || this.configService.getConfig('importWithStyle');
73
+ if (this.configService.getConfig('importWithStyle')) {
74
+ console.warn(`
75
+ The location of this config importWithStyle is deprecated.
76
+ Please move this property within importExport configuration.
77
+ Ex: importWithStyle: true/false must be transfered to importExport: { importWithStyle: true/false }
78
+ Refer to environnement.ts OR config/config.json
79
+ This legacy conversion will be deleted in 2024.
80
+ `);
81
+ }
82
+ if (!importWithStyle) {
83
+ addImportedFeaturesToMap(featureCollection, this.map, title);
84
+ }
85
+ else {
86
+ addImportedFeaturesStyledToMap(featureCollection, this.map, title, this.styleListService, this.styleService);
87
+ }
88
+ });
89
+ }
90
+ });
91
+ this.layerService.createAsyncIdbLayers(context.uri).pipe(debounceTime(500))
92
+ .subscribe((layers) => this.handleAddLayers(layers));
93
+ }
94
+ handleAddLayers(layers) {
95
+ layers = layers
96
+ .filter((layer) => layer !== undefined)
97
+ .map((layer) => {
98
+ layer.visible = this.computeLayerVisibilityFromUrl(layer);
99
+ layer.zIndex = layer.zIndex;
100
+ return layer;
101
+ });
102
+ this.contextLayers.concat(layers);
103
+ this.map.addLayers(layers);
104
+ }
105
+ computeLayerVisibilityFromUrl(layer) {
106
+ const params = this.queryParams;
107
+ const currentContext = this.contextService.context$.value.uri;
108
+ const currentLayerid = layer.id;
109
+ let visible = layer.visible;
110
+ if (!params || !currentLayerid) {
111
+ return visible;
112
+ }
113
+ const contextParams = params[this.route.options.contextKey];
114
+ if (contextParams === currentContext || !contextParams) {
115
+ let visibleOnLayersParams = '';
116
+ let visibleOffLayersParams = '';
117
+ let visiblelayers = [];
118
+ let invisiblelayers = [];
119
+ if (this.route.options.visibleOnLayersKey &&
120
+ params[this.route.options.visibleOnLayersKey]) {
121
+ visibleOnLayersParams =
122
+ params[this.route.options.visibleOnLayersKey];
123
+ }
124
+ if (this.route.options.visibleOffLayersKey &&
125
+ params[this.route.options.visibleOffLayersKey]) {
126
+ visibleOffLayersParams =
127
+ params[this.route.options.visibleOffLayersKey];
128
+ }
129
+ /* This order is important because to control whichever
130
+ the order of * param. First whe open and close everything.*/
131
+ if (visibleOnLayersParams === '*') {
132
+ visible = true;
133
+ }
134
+ if (visibleOffLayersParams === '*') {
135
+ visible = false;
136
+ }
137
+ // After, managing named layer by id (context.json OR id from datasource)
138
+ visiblelayers = visibleOnLayersParams.split(',');
139
+ invisiblelayers = visibleOffLayersParams.split(',');
140
+ if (visiblelayers.indexOf(currentLayerid) > -1 || visiblelayers.indexOf(currentLayerid.toString()) > -1) {
141
+ visible = true;
142
+ }
143
+ if (invisiblelayers.indexOf(currentLayerid) > -1 || invisiblelayers.indexOf(currentLayerid.toString()) > -1) {
144
+ visible = false;
145
+ }
146
+ }
147
+ return visible;
148
+ }
149
+ }
150
+ LayerContextDirective.ɵfac = function LayerContextDirective_Factory(t) { return new (t || LayerContextDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent), i0.ɵɵdirectiveInject(i2.ContextService), i0.ɵɵdirectiveInject(i1.LayerService), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i1.StyleListService), i0.ɵɵdirectiveInject(i1.StyleService), i0.ɵɵdirectiveInject(i3.RouteService, 8)); };
151
+ LayerContextDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: LayerContextDirective, selectors: [["", "igoLayerContext", ""]], inputs: { removeLayersOnContextChange: "removeLayersOnContextChange" } });
152
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LayerContextDirective, [{
153
+ type: Directive,
154
+ args: [{
155
+ selector: '[igoLayerContext]'
156
+ }]
157
+ }], function () { return [{ type: i1.MapBrowserComponent }, { type: i2.ContextService }, { type: i1.LayerService }, { type: i3.ConfigService }, { type: i1.StyleListService }, { type: i1.StyleService }, { type: i3.RouteService, decorators: [{
158
+ type: Optional
159
+ }] }]; }, { removeLayersOnContextChange: [{
160
+ type: Input
161
+ }] }); })();
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItY29udGV4dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9sYXllci1jb250ZXh0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBZTlELE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQy9CLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBS3hDLE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFDVSxTQUE4QixFQUM5QixjQUE4QixFQUM5QixZQUEwQixFQUMxQixhQUE0QixFQUM1QixnQkFBa0MsRUFDbEMsWUFBMEIsRUFDZCxLQUFtQjtRQU4vQixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNkLFVBQUssR0FBTCxLQUFLLENBQWM7UUFmakMsa0JBQWEsR0FBWSxFQUFFLENBQUM7UUFFM0IsZ0NBQTJCLEdBQVksSUFBSSxDQUFDO0lBY2xELENBQUM7SUFaSixJQUFJLEdBQUc7UUFDTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFZRCxR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RGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGJ1ZmZlciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJvdXRlU2VydmljZSwgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWFwQnJvd3NlckNvbXBvbmVudCxcbiAgTGF5ZXIsXG4gIExheWVyU2VydmljZSxcbiAgTGF5ZXJPcHRpb25zLFxuICBTdHlsZUxpc3RTZXJ2aWNlLFxuICBTdHlsZVNlcnZpY2Vcbn0gZnJvbSAnQGlnbzIvZ2VvJztcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHsgQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL2NvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBEZXRhaWxlZENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIGFkZEltcG9ydGVkRmVhdHVyZXNUb01hcCxcbiAgYWRkSW1wb3J0ZWRGZWF0dXJlc1N0eWxlZFRvTWFwXG59IGZyb20gJy4uLy4uL2NvbnRleHQtaW1wb3J0LWV4cG9ydC9zaGFyZWQvY29udGV4dC1pbXBvcnQudXRpbHMnO1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbaWdvTGF5ZXJDb250ZXh0XSdcbn0pXG5leHBvcnQgY2xhc3MgTGF5ZXJDb250ZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNvbnRleHQkJDogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiBhbnk7XG5cbiAgcHJpdmF0ZSBjb250ZXh0TGF5ZXJzOiBMYXllcltdID0gW107XG5cbiAgQElucHV0KCkgcmVtb3ZlTGF5ZXJzT25Db250ZXh0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm1hcDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29tcG9uZW50OiBNYXBCcm93c2VyQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3R5bGVMaXN0U2VydmljZTogU3R5bGVMaXN0U2VydmljZSxcbiAgICBwcml2YXRlIHN0eWxlU2VydmljZTogU3R5bGVTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGU6IFJvdXRlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZXh0JCQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkXG4gICAgICAucGlwZShmaWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQgIT09IHVuZGVmaW5lZCkpXG4gICAgICAuc3Vic2NyaWJlKChjb250ZXh0KSA9PiB0aGlzLmhhbmRsZUNvbnRleHRDaGFuZ2UoY29udGV4dCkpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yb3V0ZSAmJlxuICAgICAgdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPbkxheWVyc0tleSAmJlxuICAgICAgdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPZmZMYXllcnNLZXkgJiZcbiAgICAgIHRoaXMucm91dGUub3B0aW9ucy5jb250ZXh0S2V5XG4gICAgKSB7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyQkID0gdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICBxdWVyeVBhcmFtcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY29udGV4dCQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRleHRDaGFuZ2UoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQubGF5ZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVtb3ZlTGF5ZXJzT25Db250ZXh0Q2hhbmdlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLm1hcC5yZW1vdmVBbGxMYXllcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXJzKHRoaXMuY29udGV4dExheWVycyk7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dExheWVycyA9IFtdO1xuXG4gICAgY29uc3QgbGF5ZXJzQW5kSW5kZXgkID0gbWVyZ2UoXG4gICAgICAuLi5jb250ZXh0LmxheWVycy5tYXAoKGxheWVyT3B0aW9uczogTGF5ZXJPcHRpb25zLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVBc3luY0xheWVyKGxheWVyT3B0aW9ucywgY29udGV4dC51cmkpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgbGF5ZXJzQW5kSW5kZXgkXG4gICAgICAucGlwZShidWZmZXIobGF5ZXJzQW5kSW5kZXgkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVyczogTGF5ZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZUFkZExheWVycyhsYXllcnMpO1xuXG4gICAgICAgIGlmIChjb250ZXh0LmV4dHJhRmVhdHVyZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmV4dHJhRmVhdHVyZXMuZm9yRWFjaCgoZmVhdHVyZUNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IG5ldyBHZW9KU09OKCk7XG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IGZlYXR1cmVDb2xsZWN0aW9uLm5hbWU7XG4gICAgICAgICAgICBmZWF0dXJlQ29sbGVjdGlvbiA9IEpTT04uc3RyaW5naWZ5KGZlYXR1cmVDb2xsZWN0aW9uKTtcbiAgICAgICAgICAgIGZlYXR1cmVDb2xsZWN0aW9uID0gZm9ybWF0LnJlYWRGZWF0dXJlcyhmZWF0dXJlQ29sbGVjdGlvbiwge1xuICAgICAgICAgICAgICBkYXRhUHJvamVjdGlvbjogJ0VQU0c6NDMyNicsXG4gICAgICAgICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRFeHBvcnRPcHRpb25zID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnaW1wb3J0RXhwb3J0Jyk7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRXaXRoU3R5bGUgPWltcG9ydEV4cG9ydE9wdGlvbnM/LmltcG9ydFdpdGhTdHlsZSB8fCB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdpbXBvcnRXaXRoU3R5bGUnKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFxuICAgICAgICAgICAgICBUaGUgbG9jYXRpb24gb2YgdGhpcyBjb25maWcgaW1wb3J0V2l0aFN0eWxlIGlzIGRlcHJlY2F0ZWQuXG4gICAgICAgICAgICAgIFBsZWFzZSBtb3ZlIHRoaXMgcHJvcGVydHkgd2l0aGluIGltcG9ydEV4cG9ydCBjb25maWd1cmF0aW9uLlxuICAgICAgICAgICAgICBFeDogaW1wb3J0V2l0aFN0eWxlOiB0cnVlL2ZhbHNlIG11c3QgYmUgdHJhbnNmZXJlZCB0byBpbXBvcnRFeHBvcnQ6IHsgaW1wb3J0V2l0aFN0eWxlOiB0cnVlL2ZhbHNlIH1cbiAgICAgICAgICAgICAgUmVmZXIgdG8gZW52aXJvbm5lbWVudC50cyBPUiBjb25maWcvY29uZmlnLmpzb25cbiAgICAgICAgICAgICAgVGhpcyBsZWdhY3kgY29udmVyc2lvbiB3aWxsIGJlIGRlbGV0ZWQgaW4gMjAyNC5cbiAgICAgICAgICAgICAgYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWltcG9ydFdpdGhTdHlsZSkge1xuICAgICAgICAgICAgICBhZGRJbXBvcnRlZEZlYXR1cmVzVG9NYXAoZmVhdHVyZUNvbGxlY3Rpb24sIHRoaXMubWFwLCB0aXRsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZGRJbXBvcnRlZEZlYXR1cmVzU3R5bGVkVG9NYXAoXG4gICAgICAgICAgICAgICAgZmVhdHVyZUNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgdGhpcy5tYXAsXG4gICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZUxpc3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVTZXJ2aWNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxheWVyU2VydmljZS5jcmVhdGVBc3luY0lkYkxheWVycyhjb250ZXh0LnVyaSkucGlwZShkZWJvdW5jZVRpbWUoNTAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVyczogTGF5ZXJbXSkgPT4gdGhpcy5oYW5kbGVBZGRMYXllcnMobGF5ZXJzKSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWRkTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIGxheWVycyA9IGxheWVyc1xuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyKSA9PiBsYXllciAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgobGF5ZXIpID0+IHtcbiAgICAgICAgbGF5ZXIudmlzaWJsZSA9IHRoaXMuY29tcHV0ZUxheWVyVmlzaWJpbGl0eUZyb21VcmwobGF5ZXIpO1xuICAgICAgICBsYXllci56SW5kZXggPSBsYXllci56SW5kZXg7XG5cbiAgICAgICAgcmV0dXJuIGxheWVyO1xuICAgICAgfSk7XG4gICAgdGhpcy5jb250ZXh0TGF5ZXJzLmNvbmNhdChsYXllcnMpO1xuICAgIHRoaXMubWFwLmFkZExheWVycyhsYXllcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJWaXNpYmlsaXR5RnJvbVVybChsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zO1xuICAgIGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5jb250ZXh0JC52YWx1ZS51cmk7XG4gICAgY29uc3QgY3VycmVudExheWVyaWQ6IHN0cmluZyA9IGxheWVyLmlkO1xuXG4gICAgbGV0IHZpc2libGUgPSBsYXllci52aXNpYmxlO1xuICAgIGlmICghcGFyYW1zIHx8ICFjdXJyZW50TGF5ZXJpZCkge1xuICAgICAgcmV0dXJuIHZpc2libGU7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dFBhcmFtcyA9IHBhcmFtc1t0aGlzLnJvdXRlLm9wdGlvbnMuY29udGV4dEtleSBhcyBzdHJpbmddO1xuICAgIGlmIChjb250ZXh0UGFyYW1zID09PSBjdXJyZW50Q29udGV4dCB8fCAhY29udGV4dFBhcmFtcykge1xuICAgICAgbGV0IHZpc2libGVPbkxheWVyc1BhcmFtcyA9ICcnO1xuICAgICAgbGV0IHZpc2libGVPZmZMYXllcnNQYXJhbXMgPSAnJztcbiAgICAgIGxldCB2aXNpYmxlbGF5ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGV0IGludmlzaWJsZWxheWVyczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9uTGF5ZXJzS2V5ICYmXG4gICAgICAgIHBhcmFtc1t0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9uTGF5ZXJzS2V5IGFzIHN0cmluZ11cbiAgICAgICkge1xuICAgICAgICB2aXNpYmxlT25MYXllcnNQYXJhbXMgPVxuICAgICAgICAgIHBhcmFtc1t0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9uTGF5ZXJzS2V5IGFzIHN0cmluZ107XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT2ZmTGF5ZXJzS2V5ICYmXG4gICAgICAgIHBhcmFtc1t0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9mZkxheWVyc0tleSBhcyBzdHJpbmddXG4gICAgICApIHtcbiAgICAgICAgdmlzaWJsZU9mZkxheWVyc1BhcmFtcyA9XG4gICAgICAgICAgcGFyYW1zW3RoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT2ZmTGF5ZXJzS2V5IGFzIHN0cmluZ107XG4gICAgICB9XG5cbiAgICAgIC8qIFRoaXMgb3JkZXIgaXMgaW1wb3J0YW50IGJlY2F1c2UgdG8gY29udHJvbCB3aGljaGV2ZXJcbiAgICAgICB0aGUgb3JkZXIgb2YgKiBwYXJhbS4gRmlyc3Qgd2hlIG9wZW4gYW5kIGNsb3NlIGV2ZXJ5dGhpbmcuKi9cbiAgICAgIGlmICh2aXNpYmxlT25MYXllcnNQYXJhbXMgPT09ICcqJykge1xuICAgICAgICB2aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2aXNpYmxlT2ZmTGF5ZXJzUGFyYW1zID09PSAnKicpIHtcbiAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciwgbWFuYWdpbmcgbmFtZWQgbGF5ZXIgYnkgaWQgKGNvbnRleHQuanNvbiBPUiBpZCBmcm9tIGRhdGFzb3VyY2UpXG4gICAgICB2aXNpYmxlbGF5ZXJzID0gdmlzaWJsZU9uTGF5ZXJzUGFyYW1zLnNwbGl0KCcsJyk7XG4gICAgICBpbnZpc2libGVsYXllcnMgPSB2aXNpYmxlT2ZmTGF5ZXJzUGFyYW1zLnNwbGl0KCcsJyk7XG4gICAgICBpZiAodmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkKSA+IC0xIHx8IHZpc2libGVsYXllcnMuaW5kZXhPZihjdXJyZW50TGF5ZXJpZC50b1N0cmluZygpKSA+IC0xKSB7XG4gICAgICAgIHZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGludmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkKSA+IC0xIHx8IGludmlzaWJsZWxheWVycy5pbmRleE9mKGN1cnJlbnRMYXllcmlkLnRvU3RyaW5nKCkpID4gLTEpIHtcbiAgICAgICAgdmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2aXNpYmxlO1xuICB9XG59XG4iXX0=
@@ -1,70 +1,70 @@
1
- import { Directive } from '@angular/core';
2
- import { filter } from 'rxjs/operators';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@igo2/geo";
5
- import * as i2 from "./context.service";
6
- import * as i3 from "@igo2/core";
7
- export class MapContextDirective {
8
- constructor(component, contextService, mediaService) {
9
- this.contextService = contextService;
10
- this.mediaService = mediaService;
11
- this.component = component;
12
- }
13
- get map() {
14
- return this.component.map;
15
- }
16
- ngOnInit() {
17
- this.context$$ = this.contextService.context$
18
- .pipe(filter(context => context !== undefined))
19
- .subscribe(context => this.handleContextChange(context));
20
- }
21
- ngOnDestroy() {
22
- this.context$$.unsubscribe();
23
- }
24
- handleContextChange(context) {
25
- if (context.map === undefined) {
26
- return;
27
- }
28
- // This creates a new ol.Map when the context changes. Doing that
29
- // allows the print tool to work properly even when the map's canvas
30
- // has been tainted (CORS) with the layers of another context. This could
31
- // have some side effects such as unbinding all listeners on the first map.
32
- // A better solution would be to create a new map (preview) before
33
- // printing and avoid the tainted canvas issue. This will come later so
34
- // this snippet of code is kept here in case it takes too long becomes
35
- // an issue
36
- // const target = this.component.map.ol.getTarget();
37
- // this.component.map.ol.setTarget(undefined);
38
- // this.component.map.init();
39
- // this.component.map.ol.setTarget(target);
40
- const viewContext = context.map.view;
41
- if (!this.component.view || viewContext.keepCurrentView !== true || context.map.view.projection !== this.map.projection) {
42
- this.component.view = viewContext;
43
- }
44
- if (this.component.map.geolocationController) {
45
- this.component.map.geolocationController.updateGeolocationOptions(viewContext);
46
- }
47
- const controlsContext = context.map.controls;
48
- if (!this.component.controls && controlsContext) {
49
- if (this.mediaService.isMobile()) {
50
- if (typeof (controlsContext.scaleLine) !== 'boolean') {
51
- const scaleLineOption = controlsContext.scaleLine;
52
- if (!scaleLineOption.minWidth) {
53
- scaleLineOption.minWidth = Math.min(64, scaleLineOption.minWidth);
54
- controlsContext.scaleLine = scaleLineOption;
55
- }
56
- }
57
- }
58
- this.component.controls = controlsContext;
59
- }
60
- }
61
- }
62
- MapContextDirective.ɵfac = function MapContextDirective_Factory(t) { return new (t || MapContextDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent), i0.ɵɵdirectiveInject(i2.ContextService), i0.ɵɵdirectiveInject(i3.MediaService)); };
63
- MapContextDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: MapContextDirective, selectors: [["", "igoMapContext", ""]] });
64
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MapContextDirective, [{
65
- type: Directive,
66
- args: [{
67
- selector: '[igoMapContext]'
68
- }]
69
- }], function () { return [{ type: i1.MapBrowserComponent }, { type: i2.ContextService }, { type: i3.MediaService }]; }, null); })();
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGV4dC9zcmMvbGliL2NvbnRleHQtbWFuYWdlci9zaGFyZWQvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFZeEMsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixZQUNFLFNBQThCLEVBQ3RCLGNBQThCLEVBQzlCLFlBQTBCO1FBRDFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBVkQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBVUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRO2FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUM7YUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUF3QjtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUVELGlFQUFpRTtRQUNqRSxvRUFBb0U7UUFDcEUseUVBQXlFO1FBQ3pFLDJFQUEyRTtRQUMzRSxrRUFBa0U7UUFDbEUsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxXQUFXO1FBRVgsb0RBQW9EO1FBQ3BELDhDQUE4QztRQUM5Qyw2QkFBNkI7UUFDN0IsMkNBQTJDO1FBRTNDLE1BQU0sV0FBVyxHQUFtQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLGVBQWUsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3ZILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQTZCLENBQUM7U0FDckQ7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hGO1FBRUQsTUFBTSxlQUFlLEdBQXVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxlQUFlLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLE9BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUNuRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBZ0MsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBQzdCLGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNsRSxlQUFlLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztxQkFDN0M7aUJBQ0Y7YUFDRjtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztTQUMzQztJQUNILENBQUM7O3NGQWxFVSxtQkFBbUI7c0VBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBSC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2FBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE1hcFZpZXdPcHRpb25zLCBNYXBCcm93c2VyQ29tcG9uZW50LCBNYXBDb250cm9sc09wdGlvbnMsIE1hcFNjYWxlTGluZU9wdGlvbnMgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XHJcblxyXG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0LCBDb250ZXh0TWFwVmlldyB9IGZyb20gJy4vY29udGV4dC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBNZWRpYVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2lnb01hcENvbnRleHRdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFwQ29udGV4dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIGNvbXBvbmVudDogTWFwQnJvd3NlckNvbXBvbmVudDtcclxuICBwcml2YXRlIGNvbnRleHQkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQubWFwO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnQ6IE1hcEJyb3dzZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWVkaWFTZXJ2aWNlOiBNZWRpYVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRleHQkJCA9IHRoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dCRcclxuICAgICAgLnBpcGUoZmlsdGVyKGNvbnRleHQgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSlcclxuICAgICAgLnN1YnNjcmliZShjb250ZXh0ID0+IHRoaXMuaGFuZGxlQ29udGV4dENoYW5nZShjb250ZXh0KSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY29udGV4dCQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnRleHRDaGFuZ2UoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBpZiAoY29udGV4dC5tYXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBjcmVhdGVzIGEgbmV3IG9sLk1hcCB3aGVuIHRoZSBjb250ZXh0IGNoYW5nZXMuIERvaW5nIHRoYXRcclxuICAgIC8vIGFsbG93cyB0aGUgcHJpbnQgdG9vbCB0byB3b3JrIHByb3Blcmx5IGV2ZW4gd2hlbiB0aGUgbWFwJ3MgY2FudmFzXHJcbiAgICAvLyBoYXMgYmVlbiB0YWludGVkIChDT1JTKSB3aXRoIHRoZSBsYXllcnMgb2YgYW5vdGhlciBjb250ZXh0LiBUaGlzIGNvdWxkXHJcbiAgICAvLyBoYXZlIHNvbWUgc2lkZSBlZmZlY3RzIHN1Y2ggYXMgdW5iaW5kaW5nIGFsbCBsaXN0ZW5lcnMgb24gdGhlIGZpcnN0IG1hcC5cclxuICAgIC8vIEEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGNyZWF0ZSBhIG5ldyBtYXAgKHByZXZpZXcpIGJlZm9yZVxyXG4gICAgLy8gcHJpbnRpbmcgYW5kIGF2b2lkIHRoZSB0YWludGVkIGNhbnZhcyBpc3N1ZS4gVGhpcyB3aWxsIGNvbWUgbGF0ZXIgc29cclxuICAgIC8vIHRoaXMgc25pcHBldCBvZiBjb2RlIGlzIGtlcHQgaGVyZSBpbiBjYXNlIGl0IHRha2VzIHRvbyBsb25nIGJlY29tZXNcclxuICAgIC8vIGFuIGlzc3VlXHJcblxyXG4gICAgLy8gY29uc3QgdGFyZ2V0ID0gdGhpcy5jb21wb25lbnQubWFwLm9sLmdldFRhcmdldCgpO1xyXG4gICAgLy8gdGhpcy5jb21wb25lbnQubWFwLm9sLnNldFRhcmdldCh1bmRlZmluZWQpO1xyXG4gICAgLy8gdGhpcy5jb21wb25lbnQubWFwLmluaXQoKTtcclxuICAgIC8vIHRoaXMuY29tcG9uZW50Lm1hcC5vbC5zZXRUYXJnZXQodGFyZ2V0KTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dDogQ29udGV4dE1hcFZpZXcgPSBjb250ZXh0Lm1hcC52aWV3O1xyXG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudC52aWV3IHx8IHZpZXdDb250ZXh0LmtlZXBDdXJyZW50VmlldyAhPT0gdHJ1ZSB8fCBjb250ZXh0Lm1hcC52aWV3LnByb2plY3Rpb24gIT09IHRoaXMubWFwLnByb2plY3Rpb24pIHtcclxuICAgICAgdGhpcy5jb21wb25lbnQudmlldyA9IHZpZXdDb250ZXh0IGFzIE1hcFZpZXdPcHRpb25zO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50Lm1hcC5nZW9sb2NhdGlvbkNvbnRyb2xsZXIpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnQubWFwLmdlb2xvY2F0aW9uQ29udHJvbGxlci51cGRhdGVHZW9sb2NhdGlvbk9wdGlvbnModmlld0NvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRyb2xzQ29udGV4dDogTWFwQ29udHJvbHNPcHRpb25zID0gY29udGV4dC5tYXAuY29udHJvbHM7XHJcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50LmNvbnRyb2xzICYmIGNvbnRyb2xzQ29udGV4dCkge1xyXG4gICAgICBpZiAodGhpcy5tZWRpYVNlcnZpY2UuaXNNb2JpbGUoKSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoY29udHJvbHNDb250ZXh0LnNjYWxlTGluZSkgIT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgY29uc3Qgc2NhbGVMaW5lT3B0aW9uID0gY29udHJvbHNDb250ZXh0LnNjYWxlTGluZSBhcyBNYXBTY2FsZUxpbmVPcHRpb25zO1xyXG4gICAgICAgICAgaWYgKCFzY2FsZUxpbmVPcHRpb24ubWluV2lkdGgpIHtcclxuICAgICAgICAgICAgc2NhbGVMaW5lT3B0aW9uLm1pbldpZHRoID0gTWF0aC5taW4oNjQsIHNjYWxlTGluZU9wdGlvbi5taW5XaWR0aCk7XHJcbiAgICAgICAgICAgIGNvbnRyb2xzQ29udGV4dC5zY2FsZUxpbmUgPSBzY2FsZUxpbmVPcHRpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tcG9uZW50LmNvbnRyb2xzID0gY29udHJvbHNDb250ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Directive } from '@angular/core';
2
+ import { filter } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@igo2/geo";
5
+ import * as i2 from "./context.service";
6
+ import * as i3 from "@igo2/core";
7
+ export class MapContextDirective {
8
+ constructor(component, contextService, mediaService) {
9
+ this.contextService = contextService;
10
+ this.mediaService = mediaService;
11
+ this.component = component;
12
+ }
13
+ get map() {
14
+ return this.component.map;
15
+ }
16
+ ngOnInit() {
17
+ this.context$$ = this.contextService.context$
18
+ .pipe(filter(context => context !== undefined))
19
+ .subscribe(context => this.handleContextChange(context));
20
+ }
21
+ ngOnDestroy() {
22
+ this.context$$.unsubscribe();
23
+ }
24
+ handleContextChange(context) {
25
+ if (context.map === undefined) {
26
+ return;
27
+ }
28
+ // This creates a new ol.Map when the context changes. Doing that
29
+ // allows the print tool to work properly even when the map's canvas
30
+ // has been tainted (CORS) with the layers of another context. This could
31
+ // have some side effects such as unbinding all listeners on the first map.
32
+ // A better solution would be to create a new map (preview) before
33
+ // printing and avoid the tainted canvas issue. This will come later so
34
+ // this snippet of code is kept here in case it takes too long becomes
35
+ // an issue
36
+ // const target = this.component.map.ol.getTarget();
37
+ // this.component.map.ol.setTarget(undefined);
38
+ // this.component.map.init();
39
+ // this.component.map.ol.setTarget(target);
40
+ const viewContext = context.map.view;
41
+ if (!this.component.view || viewContext.keepCurrentView !== true || context.map.view.projection !== this.map.projection) {
42
+ this.component.view = viewContext;
43
+ }
44
+ if (this.component.map.geolocationController) {
45
+ this.component.map.geolocationController.updateGeolocationOptions(viewContext);
46
+ }
47
+ const controlsContext = context.map.controls;
48
+ if (!this.component.controls && controlsContext) {
49
+ if (this.mediaService.isMobile()) {
50
+ if (typeof (controlsContext.scaleLine) !== 'boolean') {
51
+ const scaleLineOption = controlsContext.scaleLine;
52
+ if (!scaleLineOption.minWidth) {
53
+ scaleLineOption.minWidth = Math.min(64, scaleLineOption.minWidth);
54
+ controlsContext.scaleLine = scaleLineOption;
55
+ }
56
+ }
57
+ }
58
+ this.component.controls = controlsContext;
59
+ }
60
+ }
61
+ }
62
+ MapContextDirective.ɵfac = function MapContextDirective_Factory(t) { return new (t || MapContextDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent), i0.ɵɵdirectiveInject(i2.ContextService), i0.ɵɵdirectiveInject(i3.MediaService)); };
63
+ MapContextDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: MapContextDirective, selectors: [["", "igoMapContext", ""]] });
64
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MapContextDirective, [{
65
+ type: Directive,
66
+ args: [{
67
+ selector: '[igoMapContext]'
68
+ }]
69
+ }], function () { return [{ type: i1.MapBrowserComponent }, { type: i2.ContextService }, { type: i3.MediaService }]; }, null); })();
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGV4dC9zcmMvbGliL2NvbnRleHQtbWFuYWdlci9zaGFyZWQvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFZeEMsTUFBTSxPQUFPLG1CQUFtQjtJQVE5QixZQUNFLFNBQThCLEVBQ3RCLGNBQThCLEVBQzlCLFlBQTBCO1FBRDFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBVkQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBVUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRO2FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUM7YUFDOUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUF3QjtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO1lBQzdCLE9BQU87U0FDUjtRQUVELGlFQUFpRTtRQUNqRSxvRUFBb0U7UUFDcEUseUVBQXlFO1FBQ3pFLDJFQUEyRTtRQUMzRSxrRUFBa0U7UUFDbEUsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxXQUFXO1FBRVgsb0RBQW9EO1FBQ3BELDhDQUE4QztRQUM5Qyw2QkFBNkI7UUFDN0IsMkNBQTJDO1FBRTNDLE1BQU0sV0FBVyxHQUFtQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLGVBQWUsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO1lBQ3ZILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFdBQTZCLENBQUM7U0FDckQ7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hGO1FBRUQsTUFBTSxlQUFlLEdBQXVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxlQUFlLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNoQyxJQUFJLE9BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFO29CQUNuRCxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBZ0MsQ0FBQztvQkFDekUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUU7d0JBQzdCLGVBQWUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNsRSxlQUFlLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQztxQkFDN0M7aUJBQ0Y7YUFDRjtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztTQUMzQztJQUNILENBQUM7O3NGQWxFVSxtQkFBbUI7c0VBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBSC9CLFNBQVM7ZUFBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2FBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTWFwVmlld09wdGlvbnMsIE1hcEJyb3dzZXJDb21wb25lbnQsIE1hcENvbnRyb2xzT3B0aW9ucywgTWFwU2NhbGVMaW5lT3B0aW9ucyB9IGZyb20gJ0BpZ28yL2dlbyc7XG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XG5cbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0LCBDb250ZXh0TWFwVmlldyB9IGZyb20gJy4vY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWVkaWFTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpZ29NYXBDb250ZXh0XSdcbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29udGV4dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBjb21wb25lbnQ6IE1hcEJyb3dzZXJDb21wb25lbnQ7XG4gIHByaXZhdGUgY29udGV4dCQkOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5tYXA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb21wb25lbnQ6IE1hcEJyb3dzZXJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZWRpYVNlcnZpY2U6IE1lZGlhU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29udGV4dCQkID0gdGhpcy5jb250ZXh0U2VydmljZS5jb250ZXh0JFxuICAgICAgLnBpcGUoZmlsdGVyKGNvbnRleHQgPT4gY29udGV4dCAhPT0gdW5kZWZpbmVkKSlcbiAgICAgIC5zdWJzY3JpYmUoY29udGV4dCA9PiB0aGlzLmhhbmRsZUNvbnRleHRDaGFuZ2UoY29udGV4dCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb250ZXh0JCQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29udGV4dENoYW5nZShjb250ZXh0OiBEZXRhaWxlZENvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dC5tYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgY3JlYXRlcyBhIG5ldyBvbC5NYXAgd2hlbiB0aGUgY29udGV4dCBjaGFuZ2VzLiBEb2luZyB0aGF0XG4gICAgLy8gYWxsb3dzIHRoZSBwcmludCB0b29sIHRvIHdvcmsgcHJvcGVybHkgZXZlbiB3aGVuIHRoZSBtYXAncyBjYW52YXNcbiAgICAvLyBoYXMgYmVlbiB0YWludGVkIChDT1JTKSB3aXRoIHRoZSBsYXllcnMgb2YgYW5vdGhlciBjb250ZXh0LiBUaGlzIGNvdWxkXG4gICAgLy8gaGF2ZSBzb21lIHNpZGUgZWZmZWN0cyBzdWNoIGFzIHVuYmluZGluZyBhbGwgbGlzdGVuZXJzIG9uIHRoZSBmaXJzdCBtYXAuXG4gICAgLy8gQSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gY3JlYXRlIGEgbmV3IG1hcCAocHJldmlldykgYmVmb3JlXG4gICAgLy8gcHJpbnRpbmcgYW5kIGF2b2lkIHRoZSB0YWludGVkIGNhbnZhcyBpc3N1ZS4gVGhpcyB3aWxsIGNvbWUgbGF0ZXIgc29cbiAgICAvLyB0aGlzIHNuaXBwZXQgb2YgY29kZSBpcyBrZXB0IGhlcmUgaW4gY2FzZSBpdCB0YWtlcyB0b28gbG9uZyBiZWNvbWVzXG4gICAgLy8gYW4gaXNzdWVcblxuICAgIC8vIGNvbnN0IHRhcmdldCA9IHRoaXMuY29tcG9uZW50Lm1hcC5vbC5nZXRUYXJnZXQoKTtcbiAgICAvLyB0aGlzLmNvbXBvbmVudC5tYXAub2wuc2V0VGFyZ2V0KHVuZGVmaW5lZCk7XG4gICAgLy8gdGhpcy5jb21wb25lbnQubWFwLmluaXQoKTtcbiAgICAvLyB0aGlzLmNvbXBvbmVudC5tYXAub2wuc2V0VGFyZ2V0KHRhcmdldCk7XG5cbiAgICBjb25zdCB2aWV3Q29udGV4dDogQ29udGV4dE1hcFZpZXcgPSBjb250ZXh0Lm1hcC52aWV3O1xuICAgIGlmICghdGhpcy5jb21wb25lbnQudmlldyB8fCB2aWV3Q29udGV4dC5rZWVwQ3VycmVudFZpZXcgIT09IHRydWUgfHwgY29udGV4dC5tYXAudmlldy5wcm9qZWN0aW9uICE9PSB0aGlzLm1hcC5wcm9qZWN0aW9uKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC52aWV3ID0gdmlld0NvbnRleHQgYXMgTWFwVmlld09wdGlvbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBvbmVudC5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnVwZGF0ZUdlb2xvY2F0aW9uT3B0aW9ucyh2aWV3Q29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbHNDb250ZXh0OiBNYXBDb250cm9sc09wdGlvbnMgPSBjb250ZXh0Lm1hcC5jb250cm9scztcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50LmNvbnRyb2xzICYmIGNvbnRyb2xzQ29udGV4dCkge1xuICAgICAgaWYgKHRoaXMubWVkaWFTZXJ2aWNlLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZihjb250cm9sc0NvbnRleHQuc2NhbGVMaW5lKSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgY29uc3Qgc2NhbGVMaW5lT3B0aW9uID0gY29udHJvbHNDb250ZXh0LnNjYWxlTGluZSBhcyBNYXBTY2FsZUxpbmVPcHRpb25zO1xuICAgICAgICAgIGlmICghc2NhbGVMaW5lT3B0aW9uLm1pbldpZHRoKSB7XG4gICAgICAgICAgICBzY2FsZUxpbmVPcHRpb24ubWluV2lkdGggPSBNYXRoLm1pbig2NCwgc2NhbGVMaW5lT3B0aW9uLm1pbldpZHRoKTtcbiAgICAgICAgICAgIGNvbnRyb2xzQ29udGV4dC5zY2FsZUxpbmUgPSBzY2FsZUxpbmVPcHRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvbmVudC5jb250cm9scyA9IGNvbnRyb2xzQ29udGV4dDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==