@igo2/geo 1.13.4 → 1.14.1

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 (73) hide show
  1. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -1
  2. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  3. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  4. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  5. package/esm2020/lib/draw/draw/draw-popup.component.mjs +562 -32
  6. package/esm2020/lib/draw/draw/draw.component.mjs +360 -130
  7. package/esm2020/lib/draw/draw/draw.module.mjs +12 -4
  8. package/esm2020/lib/draw/shared/draw-style.service.mjs +2 -2
  9. package/esm2020/lib/draw/shared/draw.enum.mjs +14 -1
  10. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  11. package/esm2020/lib/draw/shared/draw.utils.mjs +19 -1
  12. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +43 -16
  13. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +21 -8
  14. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +12 -2
  15. package/esm2020/lib/geometry/shared/controls/draw.mjs +53 -10
  16. package/esm2020/lib/import-export/shared/export.service.mjs +2 -2
  17. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  18. package/esm2020/lib/import-export/shared/import.service.mjs +26 -6
  19. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  20. package/esm2020/lib/map/shared/hover-feature.directive.mjs +2 -2
  21. package/esm2020/lib/map/shared/map.utils.mjs +4 -1
  22. package/esm2020/lib/map/shared/mapOffline.directive.mjs +7 -7
  23. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +33 -4
  24. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  25. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +12 -12
  26. package/esm2020/lib/print/shared/geopdf.mjs +58 -0
  27. package/esm2020/lib/print/shared/index.mjs +2 -1
  28. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  29. package/esm2020/lib/print/shared/print.service.mjs +118 -64
  30. package/esm2020/lib/query/shared/query.service.mjs +7 -4
  31. package/esm2020/lib/search/search-bar/search-bar.component.mjs +30 -28
  32. package/esm2020/lib/search/search-results/search-results.component.mjs +22 -13
  33. package/esm2020/lib/search/shared/search.utils.mjs +2 -1
  34. package/esm2020/lib/search/shared/sources/icherche.mjs +70 -58
  35. package/esm2020/lib/search/shared/sources/index.mjs +1 -3
  36. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +20 -9
  37. package/fesm2015/igo2-geo.mjs +1505 -529
  38. package/fesm2015/igo2-geo.mjs.map +1 -1
  39. package/fesm2020/igo2-geo.mjs +1456 -525
  40. package/fesm2020/igo2-geo.mjs.map +1 -1
  41. package/lib/catalog/shared/catalog.abstract.d.ts +1 -0
  42. package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
  43. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +1 -0
  44. package/lib/draw/draw/draw-popup.component.d.ts +52 -5
  45. package/lib/draw/draw/draw.component.d.ts +34 -4
  46. package/lib/draw/draw/draw.module.d.ts +3 -1
  47. package/lib/draw/shared/draw.enum.d.ts +11 -0
  48. package/lib/draw/shared/draw.interface.d.ts +4 -0
  49. package/lib/draw/shared/draw.utils.d.ts +2 -0
  50. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -1
  51. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
  52. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +7 -1
  53. package/lib/geometry/shared/controls/draw.d.ts +18 -0
  54. package/lib/import-export/shared/import.interface.d.ts +2 -1
  55. package/lib/import-export/shared/import.service.d.ts +7 -0
  56. package/lib/layer/shared/layers/layer.interface.d.ts +4 -0
  57. package/lib/map/shared/map.utils.d.ts +1 -0
  58. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -0
  59. package/lib/offline/geoDB/geoDB.interface.d.ts +1 -0
  60. package/lib/offline/geoDB/geoDB.service.d.ts +3 -3
  61. package/lib/print/shared/geopdf.d.ts +1 -0
  62. package/lib/print/shared/index.d.ts +1 -0
  63. package/lib/print/shared/print.interface.d.ts +5 -0
  64. package/lib/print/shared/print.service.d.ts +17 -8
  65. package/lib/search/search-bar/search-bar.component.d.ts +8 -8
  66. package/lib/search/search-results/search-results.component.d.ts +4 -1
  67. package/lib/search/shared/sources/index.d.ts +0 -2
  68. package/lib/workspace/shared/edition-workspace.service.d.ts +4 -0
  69. package/package.json +4 -4
  70. package/esm2020/lib/search/shared/sources/cadastre.mjs +0 -126
  71. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +0 -23
  72. package/lib/search/shared/sources/cadastre.d.ts +0 -33
  73. package/lib/search/shared/sources/cadastre.providers.d.ts +0 -18
@@ -11,7 +11,7 @@ import { MatListModule } from '@angular/material/list';
11
11
  import * as i4 from '@angular/material/tooltip';
12
12
  import { MatTooltipModule } from '@angular/material/tooltip';
13
13
  import * as i5$1 from '@igo2/common';
14
- import { getEntityId, getEntityTitle, getEntityProperty, getEntityRevision, getEntityIcon, EntityStore, EntityStoreStrategy, EntityStoreWatcher, SecureImagePipe, IgoListModule, IgoCollapsibleModule, IgoImageModule, IgoPanelModule, IgoMatBadgeIconModule, IgoCustomHtmlModule, IgoEntityTableModule, IgoKeyValueModule, IgoFormModule, IgoFormFieldComponent, DOMService, EntityStoreFilterSelectionStrategy, EntityTableColumnRenderer, IgoEntityModule, IgoDOMModule, DragAndDropDirective, IgoSpinnerModule, IgoDrapDropModule, IgoConfirmDialogModule, getEntityTitleHtml, EntityStoreFilterCustomFuncStrategy, IgoStopPropagationModule, IgoFlexibleModule, WidgetService, Workspace, ActionStore, IgoWidgetModule } from '@igo2/common';
14
+ import { getEntityId, getEntityTitle, getEntityProperty, getEntityRevision, getEntityIcon, EntityStore, EntityStoreStrategy, EntityStoreWatcher, SecureImagePipe, EntityTableColumnRenderer, IgoListModule, IgoCollapsibleModule, IgoImageModule, IgoPanelModule, IgoMatBadgeIconModule, IgoCustomHtmlModule, IgoEntityTableModule, IgoKeyValueModule, IgoFormModule, IgoFormFieldComponent, DOMService, EntityStoreFilterSelectionStrategy, IgoEntityModule, IgoDOMModule, DragAndDropDirective, IgoSpinnerModule, IgoDrapDropModule, IgoConfirmDialogModule, getEntityTitleHtml, EntityStoreFilterCustomFuncStrategy, IgoStopPropagationModule, IgoFlexibleModule, WidgetService, Workspace, ActionStore, IgoWidgetModule } from '@igo2/common';
15
15
  import * as i3 from '@angular/material/button';
16
16
  import { MatButtonModule } from '@angular/material/button';
17
17
  import * as i2$1 from '@igo2/core';
@@ -19,7 +19,7 @@ import { IgoLanguageModule, ConfigService, Media, StorageScope, IgoMessageModule
19
19
  import * as i1 from '@angular/material/dialog';
20
20
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
21
21
  import * as i7 from '@ngx-translate/core';
22
- import { BehaviorSubject, combineLatest, of, Observable, forkJoin, Subject, interval, skipWhile as skipWhile$1, zip, EMPTY, ReplaySubject, timer, fromEvent, throwError } from 'rxjs';
22
+ import { BehaviorSubject, combineLatest, of, Observable, forkJoin, Subject, interval, skipWhile as skipWhile$1, zip, EMPTY, ReplaySubject, timer, fromEvent, Subscription, throwError } from 'rxjs';
23
23
  import { map, concatMap, first, catchError, skipWhile, debounceTime, skip, distinctUntilChanged, switchMap, take, mergeMap, debounce, takeUntil } from 'rxjs/operators';
24
24
  import { Watcher, uuid, SubjectStatus, NumberUtils, ObjectUtils, userAgent, Clipboard, downloadContent, strEnum, ChangeUtils } from '@igo2/utils';
25
25
  import olMap from 'ol/Map';
@@ -54,7 +54,7 @@ import { WMSCapabilities, WMTSCapabilities, EsriJSON } from 'ol/format';
54
54
  import { Md5 } from 'ts-md5';
55
55
  import { MAC } from 'ol/has';
56
56
  import * as olfilter from 'ol/format/filter';
57
- import olWKT from 'ol/format/WKT';
57
+ import olFormatWKT from 'ol/format/WKT';
58
58
  import olFormatWFS from 'ol/format/WFS';
59
59
  import moment from 'moment';
60
60
  import olFormatGML2 from 'ol/format/GML2';
@@ -105,10 +105,10 @@ import { MAT_DATE_LOCALE, MatOptionModule, MatNativeDateModule } from '@angular/
105
105
  import * as i13 from '@angular/material/form-field';
106
106
  import { MatFormFieldModule } from '@angular/material/form-field';
107
107
  import * as i2$2 from '@angular/forms';
108
- import { ReactiveFormsModule, FormsModule, Validators, UntypedFormControl } from '@angular/forms';
108
+ import { UntypedFormControl, ReactiveFormsModule, FormsModule, Validators } from '@angular/forms';
109
109
  import * as i15 from '@angular/material/select';
110
110
  import { MatSelectModule } from '@angular/material/select';
111
- import * as i12$1 from '@angular/material/checkbox';
111
+ import * as i12 from '@angular/material/checkbox';
112
112
  import { MatCheckboxModule } from '@angular/material/checkbox';
113
113
  import * as i11 from '@angular/material/divider';
114
114
  import { MatDividerModule } from '@angular/material/divider';
@@ -120,7 +120,7 @@ import * as i23 from '@angular/material/slide-toggle';
120
120
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
121
121
  import * as i13$1 from '@angular/material/slider';
122
122
  import { MatSliderModule, MatSlider } from '@angular/material/slider';
123
- import * as i12 from 'ngx-color-picker';
123
+ import * as i12$1 from 'ngx-color-picker';
124
124
  import { ColorPickerModule } from 'ngx-color-picker';
125
125
  import scrollIntoView from 'scroll-into-view-if-needed';
126
126
  import OlOverlay from 'ol/Overlay';
@@ -135,13 +135,13 @@ import { doubleClick } from 'ol/events/condition';
135
135
  import lineIntersect from '@turf/line-intersect';
136
136
  import * as i18 from '@angular/material/button-toggle';
137
137
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
138
+ import * as i17 from '@angular/material/radio';
139
+ import { MatRadioModule } from '@angular/material/radio';
138
140
  import * as i11$1 from '@angular/material/autocomplete';
139
141
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
140
142
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
141
143
  import * as i25 from '@angular/material/datepicker';
142
144
  import { MatDatepickerModule } from '@angular/material/datepicker';
143
- import * as i17 from '@angular/material/radio';
144
- import { MatRadioModule } from '@angular/material/radio';
145
145
  import * as i21 from '@angular/material/table';
146
146
  import { MatTableModule } from '@angular/material/table';
147
147
  import * as i20 from '@angular/material/tabs';
@@ -157,7 +157,7 @@ import { SelectionModel } from '@angular/cdk/collections';
157
157
  import { NestedTreeControl } from '@angular/cdk/tree';
158
158
  import { encode } from 'windows-1252';
159
159
  import { saveAs } from 'file-saver';
160
- import jspdf from 'jspdf';
160
+ import jsPDF from 'jspdf';
161
161
  import html2canvas from 'html2canvas';
162
162
  import JSZip from 'jszip';
163
163
  import * as i3$1 from '@angular/cdk/drag-drop';
@@ -1095,6 +1095,9 @@ function roundCoordTo(coord, decimal = 3) {
1095
1095
  NumberUtils.roundToNDecimal(coord[1], decimal)
1096
1096
  ];
1097
1097
  }
1098
+ function roundCoordToString(coord, decimal = 3) {
1099
+ return roundCoordTo(coord, decimal).map(r => r.toString());
1100
+ }
1098
1101
  /**
1099
1102
  * Returns an array of converted coordinates.
1100
1103
  * Conversion is done for every configured projections
@@ -1554,7 +1557,7 @@ class OgcFilterWriter {
1554
1557
  const wfsExpression = filterOptions.expression;
1555
1558
  let geometry;
1556
1559
  if (wfsWktGeometry) {
1557
- const wkt = new olWKT();
1560
+ const wkt = new olFormatWKT();
1558
1561
  geometry = wkt.readGeometry(wfsWktGeometry, {
1559
1562
  dataProjection: wfsSrsName,
1560
1563
  featureProjection: wfsSrsName || 'EPSG:3857'
@@ -8444,12 +8447,12 @@ class MapOfflineDirective {
8444
8447
  else {
8445
8448
  if (this.networkState.connection === false ||
8446
8449
  this.offlineButtonState.connection === false) {
8447
- layer.ol.setMaxResolution(0);
8450
+ layer.maxResolution = 0;
8448
8451
  return;
8449
8452
  }
8450
8453
  else if (this.networkState.connection === true ||
8451
8454
  this.offlineButtonState.connection === true) {
8452
- layer.ol.setMaxResolution(Infinity);
8455
+ layer.maxResolution = layer.options.maxResolution || Infinity;
8453
8456
  return;
8454
8457
  }
8455
8458
  }
@@ -8477,22 +8480,22 @@ class MapOfflineDirective {
8477
8480
  else {
8478
8481
  if (this.networkState.connection === false ||
8479
8482
  this.offlineButtonState.connection === false) {
8480
- layer.ol.setMaxResolution(0);
8483
+ layer.maxResolution = 0;
8481
8484
  }
8482
8485
  else if (this.networkState.connection === true ||
8483
8486
  this.offlineButtonState.connection === true) {
8484
- layer.ol.setMaxResolution(Infinity);
8487
+ layer.maxResolution = layer.options.maxResolution || Infinity;
8485
8488
  }
8486
8489
  }
8487
8490
  }
8488
8491
  else {
8489
8492
  if (this.networkState.connection === false ||
8490
8493
  this.offlineButtonState.connection === false) {
8491
- layer.ol.setMaxResolution(0);
8494
+ layer.maxResolution = 0;
8492
8495
  }
8493
8496
  else if (this.networkState.connection === true ||
8494
8497
  this.offlineButtonState.connection === true) {
8495
- layer.ol.setMaxResolution(Infinity);
8498
+ layer.maxResolution = layer.options.maxResolution || Infinity;
8496
8499
  }
8497
8500
  }
8498
8501
  });
@@ -8687,7 +8690,7 @@ class HoverFeatureDirective {
8687
8690
  zIndex: 901,
8688
8691
  renderMode: "vector",
8689
8692
  declutter: true,
8690
- source: new olSourceVectorTile({}),
8693
+ source: new olSourceVectorTile({ projection: this.map.projection }),
8691
8694
  style: (feature, resolution) => {
8692
8695
  if (this.mvtStyleOptions && feature.getId() in this.selectionMVT) {
8693
8696
  return this.createHoverStyle(feature, this.mvtStyleOptions, resolution);
@@ -9656,7 +9659,7 @@ class GeoDBService {
9656
9659
  this.compression = compression;
9657
9660
  this.dbName = 'geoData';
9658
9661
  this.collisionsMap = new Map();
9659
- this._newTiles = 0;
9662
+ this._newData = 0;
9660
9663
  }
9661
9664
  /**
9662
9665
  * Only blob can be will be compressed
@@ -9691,7 +9694,7 @@ class GeoDBService {
9691
9694
  return this.ngxIndexedDBService.getByID(this.dbName, url);
9692
9695
  }), concatMap((dbObject) => {
9693
9696
  if (!dbObject) {
9694
- this._newTiles++;
9697
+ this._newData++;
9695
9698
  return this.ngxIndexedDBService.add(this.dbName, geoDBData);
9696
9699
  }
9697
9700
  else {
@@ -9743,11 +9746,11 @@ class GeoDBService {
9743
9746
  deleteByKey(url) {
9744
9747
  return this.ngxIndexedDBService.deleteByKey(this.dbName, url);
9745
9748
  }
9746
- getRegionTileCountByID(id) {
9749
+ getRegionCountByID(id) {
9747
9750
  const subject = new Subject();
9748
9751
  const dbRequest = this.getRegionByID(id)
9749
- .subscribe((tiles) => {
9750
- subject.next(tiles.length);
9752
+ .subscribe((datas) => {
9753
+ subject.next(datas.length);
9751
9754
  subject.complete();
9752
9755
  });
9753
9756
  return subject;
@@ -9766,9 +9769,9 @@ class GeoDBService {
9766
9769
  }
9767
9770
  const IDBKey = IDBKeyRange.only(id);
9768
9771
  const dbRequest = this.ngxIndexedDBService.getAllByIndex(this.dbName, 'regionID', IDBKey);
9769
- dbRequest.subscribe((tiles) => {
9770
- tiles.forEach((tile) => {
9771
- this.ngxIndexedDBService.deleteByKey(this.dbName, tile.url);
9772
+ dbRequest.subscribe((datas) => {
9773
+ datas.forEach((data) => {
9774
+ this.ngxIndexedDBService.deleteByKey(this.dbName, data.url);
9772
9775
  });
9773
9776
  });
9774
9777
  return dbRequest;
@@ -9779,7 +9782,7 @@ class GeoDBService {
9779
9782
  }
9780
9783
  resetCounters() {
9781
9784
  this.resetCollisionsMap();
9782
- this._newTiles = 0;
9785
+ this._newData = 0;
9783
9786
  }
9784
9787
  resetCollisionsMap() {
9785
9788
  this.collisionsMap = new Map();
@@ -9797,8 +9800,8 @@ class GeoDBService {
9797
9800
  }
9798
9801
  }
9799
9802
  }
9800
- get newTiles() {
9801
- return this._newTiles;
9803
+ get newData() {
9804
+ return this._newData;
9802
9805
  }
9803
9806
  }
9804
9807
  GeoDBService.ɵfac = function GeoDBService_Factory(t) { return new (t || GeoDBService)(i0.ɵɵinject(i1$3.NgxIndexedDBService), i0.ɵɵinject(i2$1.CompressionService)); };
@@ -10819,7 +10822,7 @@ class QueryService {
10819
10822
  features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);
10820
10823
  break;
10821
10824
  }
10822
- if (features.length > 0 && features[0].geometry === null) {
10825
+ if (features.length > 0 && (features[0].geometry === null || !features[0].geometry)) {
10823
10826
  const geomToAdd = this.createGeometryFromUrlClick(url);
10824
10827
  for (const feature of features) {
10825
10828
  feature.geometry = geomToAdd;
@@ -10830,7 +10833,7 @@ class QueryService {
10830
10833
  new RegExp('FEATURE_COUNT=' + this.featureCount) :
10831
10834
  new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);
10832
10835
  if (featureCount.test(url) &&
10833
- ((wmsDatasource.params?.FEATURE_COUNT && features.length === this.featureCount) ||
10836
+ ((wmsDatasource.params?.FEATURE_COUNT && this.featureCount > 1 && features.length === this.featureCount) ||
10834
10837
  (!wmsDatasource.params?.FEATURE_COUNT && features.length === this.defaultFeatureCount))) {
10835
10838
  this.languageService.translate.get('igo.geo.query.featureCountMax', { value: layer.title }).subscribe(message => {
10836
10839
  const messageObj = this.messageService.info(message);
@@ -11029,6 +11032,7 @@ class QueryService {
11029
11032
  delete properties.SHAPE_P;
11030
11033
  delete properties.the_geom;
11031
11034
  delete properties.geom;
11035
+ delete properties.geom32198;
11032
11036
  let geometry;
11033
11037
  if (featureGeometry) {
11034
11038
  geometry = {
@@ -11186,7 +11190,9 @@ class QueryService {
11186
11190
  *
11187
11191
  */
11188
11192
  getCustomQueryUrl(datasource, options, mapExtent) {
11189
- let url = datasource.options.queryUrl.replace(/\{xmin\}/g, mapExtent[0].toString())
11193
+ const extent = olextent.getForViewAndSize(options.coordinates, options.resolution, 0, [101, 101]);
11194
+ let url = datasource.options.queryUrl.replace(/\{bbox\}/g, extent.join(','))
11195
+ .replace(/\{xmin\}/g, mapExtent[0].toString())
11190
11196
  .replace(/\{ymin\}/g, mapExtent[1].toString())
11191
11197
  .replace(/\{xmax\}/g, mapExtent[2].toString())
11192
11198
  .replace(/\{ymax\}/g, mapExtent[3].toString())
@@ -12520,6 +12526,9 @@ class CatalogBrowserComponent {
12520
12526
  if (!layer.options.sourceOptions.optionsFromApi) {
12521
12527
  layer.options.sourceOptions.optionsFromApi = true;
12522
12528
  }
12529
+ if (this.catalog.profils?.length) {
12530
+ layer.options.security = { profils: this.catalog.profils };
12531
+ }
12523
12532
  return this.layerService.createAsyncLayer(layer.options);
12524
12533
  });
12525
12534
  zip(...layers$).subscribe((oLayers) => {
@@ -15450,7 +15459,20 @@ var FontType;
15450
15459
  FontType["LucidaConsole"] = "Lucida Console";
15451
15460
  FontType["BrushScriptMT"] = "Brush Script MT";
15452
15461
  FontType["ComicSansMS"] = "Comic Sans MS";
15453
- })(FontType || (FontType = {}));
15462
+ })(FontType || (FontType = {}));
15463
+ var LabelType;
15464
+ (function (LabelType) {
15465
+ LabelType["Coordinates"] = "Coordinates";
15466
+ LabelType["Length"] = "Length";
15467
+ LabelType["Area"] = "Area";
15468
+ LabelType["Predefined"] = "Predefined";
15469
+ LabelType["Custom"] = "Custom";
15470
+ })(LabelType || (LabelType = {}));
15471
+ var CoordinatesUnit;
15472
+ (function (CoordinatesUnit) {
15473
+ CoordinatesUnit["DecimalDegree"] = "DD";
15474
+ CoordinatesUnit["DegreesMinutesSeconds"] = "DMS";
15475
+ })(CoordinatesUnit || (CoordinatesUnit = {}));
15454
15476
 
15455
15477
  class DrawIconService {
15456
15478
  constructor(config) {
@@ -16090,6 +16112,22 @@ function createOlTooltipDrawAtPoint(olPoint) {
16090
16112
  olTooltip.setPosition(olPoint.getFlatCoordinates());
16091
16113
  olPoint.set('_tooltip', olTooltip);
16092
16114
  return olTooltip;
16115
+ }
16116
+ function DDtoDMS(value, unit) {
16117
+ const conversionMapper = new Map([
16118
+ [CoordinatesUnit.DecimalDegree, (val) => {
16119
+ if (typeof val[0] === 'number') {
16120
+ return roundCoordToString(val, 5);
16121
+ }
16122
+ else {
16123
+ const numVal = [Number(val[0]), Number(val[1])];
16124
+ return roundCoordToString(numVal, 5);
16125
+ }
16126
+ }],
16127
+ [CoordinatesUnit.DegreesMinutesSeconds, (val) => convertDDToDMS(val, 2)]
16128
+ ]);
16129
+ let conversion = conversionMapper.get(unit);
16130
+ return conversion ? conversion(value) : undefined;
16093
16131
  }
16094
16132
 
16095
16133
  class DrawStyleService {
@@ -16099,7 +16137,7 @@ class DrawStyleService {
16099
16137
  this.strokeColor = 'rgba(143,7,7,1)';
16100
16138
  this.strokeWidth = 1;
16101
16139
  this.labelsAreShown = true;
16102
- this.fontSize = '20';
16140
+ this.fontSize = '15';
16103
16141
  this.fontStyle = FontType.Arial.toString();
16104
16142
  this.offsetX = 0;
16105
16143
  this.offsetY = 0;
@@ -16945,8 +16983,24 @@ class DrawControl {
16945
16983
  * Freehand mode observable (defaults to false)
16946
16984
  */
16947
16985
  this.freehand$ = new BehaviorSubject(false);
16986
+ /**
16987
+ * Observables from predefined radius (defaults to false and undefined)
16988
+ */
16989
+ this.ispredefinedRadius$ = new BehaviorSubject(false);
16990
+ this.predefinedRadius$ = new BehaviorSubject(undefined);
16991
+ this.radiusDrawEnd$ = new BehaviorSubject(undefined);
16948
16992
  this.olDrawingLayer = options.drawingLayer ? options.drawingLayer : this.createOlInnerOverlayLayer();
16949
16993
  this.olGeometryType = this.options.geometryType;
16994
+ this.olInteractionStyle = this.options.interactionStyle;
16995
+ }
16996
+ /**
16997
+ * take the value of radius
16998
+ */
16999
+ get radiusVal() {
17000
+ return this.predefinedRadius$.getValue();
17001
+ }
17002
+ set radiusValData(radiusCercle) {
17003
+ this.predefinedRadius$.next(radiusCercle);
16950
17004
  }
16951
17005
  /**
16952
17006
  * Wheter the control is active
@@ -16983,6 +17037,9 @@ class DrawControl {
16983
17037
  getSource() {
16984
17038
  return this.olDrawingLayerSource;
16985
17039
  }
17040
+ setOlInteractionStyle(style) {
17041
+ this.olInteractionStyle = style;
17042
+ }
16986
17043
  /**
16987
17044
  * Set the current geometry type
16988
17045
  * @param geometryType the geometry type
@@ -16990,6 +17047,12 @@ class DrawControl {
16990
17047
  setGeometryType(geometryType) {
16991
17048
  this.olGeometryType = geometryType;
16992
17049
  }
17050
+ /**
17051
+ * Get the current geometry type
17052
+ */
17053
+ getGeometryType() {
17054
+ return this.olGeometryType;
17055
+ }
16993
17056
  /**
16994
17057
  * Create a drawing source if none is defined in the options
16995
17058
  */
@@ -17031,21 +17094,35 @@ class DrawControl {
17031
17094
  // Create Draw interaction
17032
17095
  let olDrawInteraction;
17033
17096
  if (!this.freehand$.getValue()) {
17034
- olDrawInteraction = new OlDraw({
17035
- type: this.olGeometryType,
17036
- source: this.getSource(),
17037
- stopClick: true,
17038
- style: this.options.interactionStyle,
17039
- maxPoints: this.options.maxPoints,
17040
- freehand: false,
17041
- freehandCondition: () => false
17042
- });
17097
+ if (!this.ispredefinedRadius$.getValue()) {
17098
+ olDrawInteraction = new OlDraw({
17099
+ type: this.olGeometryType,
17100
+ source: this.getSource(),
17101
+ stopClick: true,
17102
+ style: this.olInteractionStyle,
17103
+ maxPoints: this.options.maxPoints,
17104
+ freehand: false,
17105
+ freehandCondition: () => false
17106
+ });
17107
+ }
17108
+ else {
17109
+ olDrawInteraction = new OlDraw({
17110
+ type: 'Point',
17111
+ source: this.getSource(),
17112
+ stopClick: true,
17113
+ style: this.olInteractionStyle,
17114
+ maxPoints: this.options.maxPoints,
17115
+ freehand: false,
17116
+ freehandCondition: () => false
17117
+ });
17118
+ }
17043
17119
  }
17044
17120
  else {
17045
17121
  if (this.olGeometryType === 'Point') {
17046
17122
  olDrawInteraction = new OlDraw({
17047
17123
  type: 'Circle',
17048
17124
  source: this.getSource(),
17125
+ style: typeof this.olInteractionStyle === 'function' ? undefined : this.olInteractionStyle,
17049
17126
  maxPoints: this.options.maxPoints,
17050
17127
  freehand: true
17051
17128
  });
@@ -17054,6 +17131,7 @@ class DrawControl {
17054
17131
  olDrawInteraction = new OlDraw({
17055
17132
  type: this.olGeometryType,
17056
17133
  source: this.getSource(),
17134
+ style: this.olInteractionStyle,
17057
17135
  maxPoints: this.options.maxPoints,
17058
17136
  freehand: true
17059
17137
  });
@@ -17116,6 +17194,9 @@ class DrawControl {
17116
17194
  * @param event Draw event (drawend)
17117
17195
  */
17118
17196
  onDrawEnd(event) {
17197
+ if (event.feature.getGeometry().getType() === 'Point') {
17198
+ this.radiusDrawEnd$.next(this.predefinedRadius$.getValue());
17199
+ }
17119
17200
  this.unsubscribeKeyDown();
17120
17201
  unByKey(this.onDrawKey);
17121
17202
  const olGeometry = event.feature.getGeometry();
@@ -17173,57 +17254,570 @@ class DrawControl {
17173
17254
  }
17174
17255
  }
17175
17256
 
17257
+ function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template(rf, ctx) { if (rf & 1) {
17258
+ const _r10 = i0.ɵɵgetCurrentView();
17259
+ i0.ɵɵelementStart(0, "mat-radio-button", 11);
17260
+ i0.ɵɵlistener("change", function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template_mat_radio_button_change_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onLabelTypeChange($event.value)); });
17261
+ i0.ɵɵtext(1);
17262
+ i0.ɵɵelementEnd();
17263
+ } if (rf & 2) {
17264
+ const option_r8 = ctx.$implicit;
17265
+ const ctx_r7 = i0.ɵɵnextContext(3);
17266
+ i0.ɵɵproperty("value", option_r8.value)("disabled", ctx_r7.optionAvailable(option_r8.value))("checked", option_r8.checked);
17267
+ i0.ɵɵadvance(1);
17268
+ i0.ɵɵtextInterpolate1(" ", ctx_r7.getProperLengthLabel(option_r8.value), " ");
17269
+ } }
17270
+ function DrawPopupComponent_div_12_mat_radio_group_5_Template(rf, ctx) { if (rf & 1) {
17271
+ i0.ɵɵelementStart(0, "mat-radio-group", 5);
17272
+ i0.ɵɵtemplate(1, DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template, 2, 4, "mat-radio-button", 10);
17273
+ i0.ɵɵelementEnd();
17274
+ } if (rf & 2) {
17275
+ const ctx_r2 = i0.ɵɵnextContext(2);
17276
+ i0.ɵɵadvance(1);
17277
+ i0.ɵɵproperty("ngForOf", ctx_r2.arrayBuiltInType);
17278
+ } }
17279
+ function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template(rf, ctx) { if (rf & 1) {
17280
+ const _r14 = i0.ɵɵgetCurrentView();
17281
+ i0.ɵɵelementStart(0, "mat-checkbox", 13);
17282
+ i0.ɵɵlistener("change", function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r13.onLabelTypeChange($event.source.value, $event.checked)); });
17283
+ i0.ɵɵtext(1);
17284
+ i0.ɵɵelementEnd();
17285
+ } if (rf & 2) {
17286
+ const option_r12 = ctx.$implicit;
17287
+ const ctx_r11 = i0.ɵɵnextContext(3);
17288
+ i0.ɵɵproperty("value", option_r12.value)("disabled", ctx_r11.optionAvailable(option_r12.value))("checked", option_r12.checked);
17289
+ i0.ɵɵadvance(1);
17290
+ i0.ɵɵtextInterpolate1(" ", ctx_r11.getProperLengthLabel(option_r12.value), " ");
17291
+ } }
17292
+ function DrawPopupComponent_div_12_ng_container_6_Template(rf, ctx) { if (rf & 1) {
17293
+ i0.ɵɵelementContainerStart(0, 5);
17294
+ i0.ɵɵtemplate(1, DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template, 2, 4, "mat-checkbox", 12);
17295
+ i0.ɵɵelementContainerEnd();
17296
+ } if (rf & 2) {
17297
+ const ctx_r3 = i0.ɵɵnextContext(2);
17298
+ i0.ɵɵadvance(1);
17299
+ i0.ɵɵproperty("ngForOf", ctx_r3.arrayBuiltInType);
17300
+ } }
17301
+ function DrawPopupComponent_div_12_div_7_mat_option_6_Template(rf, ctx) { if (rf & 1) {
17302
+ i0.ɵɵelementStart(0, "mat-option", 3);
17303
+ i0.ɵɵtext(1);
17304
+ i0.ɵɵelementEnd();
17305
+ } if (rf & 2) {
17306
+ const unit_r17 = ctx.$implicit;
17307
+ i0.ɵɵproperty("value", unit_r17);
17308
+ i0.ɵɵadvance(1);
17309
+ i0.ɵɵtextInterpolate1(" ", unit_r17, " ");
17310
+ } }
17311
+ function DrawPopupComponent_div_12_div_7_Template(rf, ctx) { if (rf & 1) {
17312
+ const _r19 = i0.ɵɵgetCurrentView();
17313
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
17314
+ i0.ɵɵelement(2, "input", 15, 16);
17315
+ i0.ɵɵelementEnd();
17316
+ i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
17317
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_7_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.onChangeCoordinateUnit($event.value)); });
17318
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_7_mat_option_6_Template, 2, 2, "mat-option", 19);
17319
+ i0.ɵɵelementEnd()()();
17320
+ } if (rf & 2) {
17321
+ const ctx_r4 = i0.ɵɵnextContext(2);
17322
+ i0.ɵɵadvance(2);
17323
+ i0.ɵɵpropertyInterpolate("value", ctx_r4.currentCoordinates);
17324
+ i0.ɵɵadvance(3);
17325
+ i0.ɵɵproperty("value", ctx_r4.coordinatesMeasureUnit);
17326
+ i0.ɵɵadvance(1);
17327
+ i0.ɵɵproperty("ngForOf", ctx_r4.allCoordinatesUnits);
17328
+ } }
17329
+ function DrawPopupComponent_div_12_div_8_mat_option_6_Template(rf, ctx) { if (rf & 1) {
17330
+ i0.ɵɵelementStart(0, "mat-option", 3);
17331
+ i0.ɵɵtext(1);
17332
+ i0.ɵɵelementEnd();
17333
+ } if (rf & 2) {
17334
+ const unit_r22 = ctx.$implicit;
17335
+ const ctx_r21 = i0.ɵɵnextContext(3);
17336
+ i0.ɵɵproperty("value", unit_r22);
17337
+ i0.ɵɵadvance(1);
17338
+ i0.ɵɵtextInterpolate1(" ", ctx_r21.getLengthUnitEnum(unit_r22), " ");
17339
+ } }
17340
+ function DrawPopupComponent_div_12_div_8_Template(rf, ctx) { if (rf & 1) {
17341
+ const _r24 = i0.ɵɵgetCurrentView();
17342
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
17343
+ i0.ɵɵelement(2, "input", 20, 16);
17344
+ i0.ɵɵelementEnd();
17345
+ i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
17346
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_8_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onChangeLengthUnit($event.value)); });
17347
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_8_mat_option_6_Template, 2, 2, "mat-option", 19);
17348
+ i0.ɵɵelementEnd()()();
17349
+ } if (rf & 2) {
17350
+ const ctx_r5 = i0.ɵɵnextContext(2);
17351
+ i0.ɵɵadvance(2);
17352
+ i0.ɵɵpropertyInterpolate("placeholder", ctx_r5.lengthLabelT);
17353
+ i0.ɵɵpropertyInterpolate("value", ctx_r5.currentLength);
17354
+ i0.ɵɵadvance(3);
17355
+ i0.ɵɵproperty("value", ctx_r5.lengthMeasureUnit);
17356
+ i0.ɵɵadvance(1);
17357
+ i0.ɵɵproperty("ngForOf", ctx_r5.allLengthUnits);
17358
+ } }
17359
+ function DrawPopupComponent_div_12_div_9_mat_option_7_Template(rf, ctx) { if (rf & 1) {
17360
+ i0.ɵɵelementStart(0, "mat-option", 3);
17361
+ i0.ɵɵtext(1);
17362
+ i0.ɵɵelementEnd();
17363
+ } if (rf & 2) {
17364
+ const unit_r27 = ctx.$implicit;
17365
+ const ctx_r26 = i0.ɵɵnextContext(3);
17366
+ i0.ɵɵproperty("value", unit_r27);
17367
+ i0.ɵɵadvance(1);
17368
+ i0.ɵɵtextInterpolate1(" ", ctx_r26.getAreaUnitEnum(unit_r27), " ");
17369
+ } }
17370
+ function DrawPopupComponent_div_12_div_9_Template(rf, ctx) { if (rf & 1) {
17371
+ const _r29 = i0.ɵɵgetCurrentView();
17372
+ i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
17373
+ i0.ɵɵelement(2, "input", 20, 16);
17374
+ i0.ɵɵpipe(4, "translate");
17375
+ i0.ɵɵelementEnd();
17376
+ i0.ɵɵelementStart(5, "mat-form-field", 17)(6, "mat-select", 18);
17377
+ i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_9_Template_mat_select_selectionChange_6_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.onChangeAreaUnit($event.value)); });
17378
+ i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_9_mat_option_7_Template, 2, 2, "mat-option", 19);
17379
+ i0.ɵɵelementEnd()()();
17380
+ } if (rf & 2) {
17381
+ const ctx_r6 = i0.ɵɵnextContext(2);
17382
+ i0.ɵɵadvance(2);
17383
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 4, "igo.geo.draw.labelType.Area"));
17384
+ i0.ɵɵpropertyInterpolate("value", ctx_r6.currentArea);
17385
+ i0.ɵɵadvance(4);
17386
+ i0.ɵɵproperty("value", ctx_r6.areaMeasureUnit);
17387
+ i0.ɵɵadvance(1);
17388
+ i0.ɵɵproperty("ngForOf", ctx_r6.allAreaUnits);
17389
+ } }
17390
+ function DrawPopupComponent_div_12_Template(rf, ctx) { if (rf & 1) {
17391
+ const _r31 = i0.ɵɵgetCurrentView();
17392
+ i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
17393
+ i0.ɵɵtext(3);
17394
+ i0.ɵɵpipe(4, "translate");
17395
+ i0.ɵɵelementEnd();
17396
+ i0.ɵɵtemplate(5, DrawPopupComponent_div_12_mat_radio_group_5_Template, 2, 1, "mat-radio-group", 6);
17397
+ i0.ɵɵtemplate(6, DrawPopupComponent_div_12_ng_container_6_Template, 2, 1, "ng-container", 6);
17398
+ i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_7_Template, 7, 3, "div", 4);
17399
+ i0.ɵɵtemplate(8, DrawPopupComponent_div_12_div_8_Template, 7, 4, "div", 4);
17400
+ i0.ɵɵtemplate(9, DrawPopupComponent_div_12_div_9_Template, 8, 6, "div", 4);
17401
+ i0.ɵɵelementEnd();
17402
+ i0.ɵɵelementStart(10, "div", 7)(11, "button", 8);
17403
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.cancelDrawing()); });
17404
+ i0.ɵɵtext(12);
17405
+ i0.ɵɵpipe(13, "translate");
17406
+ i0.ɵɵelementEnd();
17407
+ i0.ɵɵelementStart(14, "button", 9);
17408
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r31); const ctx_r32 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r32.confirm()); });
17409
+ i0.ɵɵtext(15);
17410
+ i0.ɵɵelementEnd()()();
17411
+ } if (rf & 2) {
17412
+ const ctx_r0 = i0.ɵɵnextContext();
17413
+ i0.ɵɵadvance(3);
17414
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 8, "igo.geo.draw.builtInInstructions"));
17415
+ i0.ɵɵadvance(2);
17416
+ i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType !== "Polygon");
17417
+ i0.ɵɵadvance(1);
17418
+ i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType === "Polygon");
17419
+ i0.ɵɵadvance(1);
17420
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Coordinates);
17421
+ i0.ɵɵadvance(1);
17422
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Length || ctx_r0.polygonCheck === 2);
17423
+ i0.ɵɵadvance(1);
17424
+ i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Area || ctx_r0.polygonCheck === 2);
17425
+ i0.ɵɵadvance(3);
17426
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 10, "igo.geo.draw.cancel"), " ");
17427
+ i0.ɵɵadvance(3);
17428
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.noLabelButton(), " ");
17429
+ } }
17430
+ function DrawPopupComponent_div_13_Template(rf, ctx) { if (rf & 1) {
17431
+ const _r36 = i0.ɵɵgetCurrentView();
17432
+ i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
17433
+ i0.ɵɵtext(3);
17434
+ i0.ɵɵpipe(4, "translate");
17435
+ i0.ɵɵelementEnd();
17436
+ i0.ɵɵelementStart(5, "mat-form-field", 21)(6, "input", 22, 16);
17437
+ i0.ɵɵlistener("select", function DrawPopupComponent_div_13_Template_input_select_6_listener() { return true; })("input", function DrawPopupComponent_div_13_Template_input_input_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r35.getLabelLength($event.target.value)); });
17438
+ i0.ɵɵpipe(8, "translate");
17439
+ i0.ɵɵelementEnd()()();
17440
+ i0.ɵɵelementStart(9, "div", 7)(10, "button", 8);
17441
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r36); const ctx_r37 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r37.cancelDrawing()); });
17442
+ i0.ɵɵtext(11);
17443
+ i0.ɵɵpipe(12, "translate");
17444
+ i0.ɵɵelementEnd();
17445
+ i0.ɵɵelementStart(13, "button", 9);
17446
+ i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r36); const _r33 = i0.ɵɵreference(7); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.confirm(_r33.value)); });
17447
+ i0.ɵɵtext(14);
17448
+ i0.ɵɵelementEnd()()();
17449
+ } if (rf & 2) {
17450
+ const ctx_r1 = i0.ɵɵnextContext();
17451
+ i0.ɵɵadvance(3);
17452
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 5, "igo.geo.draw.dialogInstruction"));
17453
+ i0.ɵɵadvance(3);
17454
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(8, 7, "igo.geo.draw.dialogTitle"));
17455
+ i0.ɵɵpropertyInterpolate("value", ctx_r1.currentLabel);
17456
+ i0.ɵɵadvance(5);
17457
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 9, "igo.geo.draw.cancel"), " ");
17458
+ i0.ɵɵadvance(3);
17459
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.noLabelButton(), " ");
17460
+ } }
17176
17461
  class DrawPopupComponent {
17177
- constructor(dialogRef, data) {
17462
+ constructor(languageService, dialogRef, data) {
17463
+ this.languageService = languageService;
17178
17464
  this.dialogRef = dialogRef;
17179
17465
  this.data = data;
17180
17466
  this.confirmFlag = false;
17181
- }
17467
+ this.labelFlag = LabelType.Custom;
17468
+ this.geometryType = GeometryType;
17469
+ this.labelType = LabelType;
17470
+ this.arrayBuiltInType = [];
17471
+ this.olGeometryType = undefined;
17472
+ this.polygonCheck = 0; // Count for polygon label types checkboxes
17473
+ this.currentLabel = this.data.olGeometry.get('draw');
17474
+ this.labelLength = this.currentLabel ? this.currentLabel.length : 0;
17475
+ let olGeometry;
17476
+ const projection = this.data.map.ol.getView().getProjection();
17477
+ if (this.data.olGeometry instanceof OlFeature) {
17478
+ if (this.data.olGeometry.get('rad')) {
17479
+ const longitudeLatitude = [this.data.olGeometry.get('longitude'), this.data.olGeometry.get('latitude')];
17480
+ this.olGeometryType = GeometryType.Circle;
17481
+ olGeometry = new OlCircle(longitudeLatitude, this.data.olGeometry.get('rad'));
17482
+ }
17483
+ else {
17484
+ this.olGeometryType = this.data.olGeometry.getGeometry().getType();
17485
+ olGeometry = this.data.olGeometry.get('geometry');
17486
+ }
17487
+ }
17488
+ else {
17489
+ this.olGeometryType = this.data.olGeometry.getType();
17490
+ olGeometry = this.data.olGeometry;
17491
+ }
17492
+ if (this.olGeometryType === GeometryType.Point || this.olGeometryType === GeometryType.Circle) {
17493
+ if (this.data.olGeometry instanceof OlFeature) {
17494
+ let longitude = this.data.olGeometry.get('longitude');
17495
+ let latitude = this.data.olGeometry.get('latitude');
17496
+ this.longlatDD = roundCoordTo([longitude, latitude], 5);
17497
+ this.coordinatesInDD = '(' + latitude + ', '
17498
+ + longitude + ')';
17499
+ }
17500
+ else {
17501
+ let point4326 = transform(this.data.olGeometry.getFlatCoordinates(), projection, 'EPSG:4326');
17502
+ this.longlatDD = roundCoordTo([point4326[0], point4326[1]], 5);
17503
+ this.coordinatesInDD =
17504
+ '(' + this.longlatDD[1] + ', ' + this.longlatDD[0] + ')';
17505
+ }
17506
+ this.currentCoordinates = this.coordinatesInDD;
17507
+ }
17508
+ if (this.olGeometryType === GeometryType.LineString) {
17509
+ this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
17510
+ this.currentLength = this.lengthInMeters;
17511
+ }
17512
+ else if (this.olGeometryType === GeometryType.Polygon) {
17513
+ this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
17514
+ this.currentLength = this.lengthInMeters;
17515
+ this.areaInMetersSquare = measureOlGeometryArea(olGeometry, projection.getCode()).toFixed(2);
17516
+ this.currentArea = this.areaInMetersSquare;
17517
+ }
17518
+ else if (this.olGeometryType === GeometryType.Circle) {
17519
+ let circularPolygon = fromCircle(olGeometry, 10000);
17520
+ const radius = this.getRadius(circularPolygon);
17521
+ this.lengthInMeters = radius.toFixed(2);
17522
+ this.currentLength = this.lengthInMeters;
17523
+ this.areaInMetersSquare = measureOlGeometryArea(circularPolygon, projection.getCode()).toFixed(2);
17524
+ this.currentArea = this.areaInMetersSquare;
17525
+ }
17526
+ if (data.olGeometry.get('labelType') === LabelType.Coordinates) {
17527
+ this.onLabelTypeChange(LabelType.Predefined);
17528
+ this.onLabelTypeChange(LabelType.Coordinates, true);
17529
+ this.coordinatesMeasureUnit = data.olGeometry.get('measureUnit');
17530
+ }
17531
+ else if (data.olGeometry.get('labelType') === LabelType.Length) {
17532
+ this.onLabelTypeChange(LabelType.Predefined);
17533
+ this.onLabelTypeChange(LabelType.Length, true);
17534
+ this.lengthMeasureUnit = data.olGeometry.get('measureUnit');
17535
+ }
17536
+ else if (data.olGeometry.get('labelType') === LabelType.Area) {
17537
+ this.onLabelTypeChange(LabelType.Predefined);
17538
+ this.onLabelTypeChange(LabelType.Area, true);
17539
+ this.areaMeasureUnit = data.olGeometry.get('measureUnit');
17540
+ }
17541
+ else if (data.olGeometry.get('labelType')?.length === 2) {
17542
+ this.onLabelTypeChange(LabelType.Predefined);
17543
+ this.onLabelTypeChange(LabelType.Length, true);
17544
+ this.onLabelTypeChange(LabelType.Area, true);
17545
+ this.lengthMeasureUnit = data.olGeometry.get('measureUnit')[0];
17546
+ this.areaMeasureUnit = data.olGeometry.get('measureUnit')[1];
17547
+ }
17548
+ this.buildArrayType();
17549
+ }
17550
+ /**
17551
+ * HTML Interactions
17552
+ */
17182
17553
  cancelDrawing() {
17183
17554
  this.dialogRef.close();
17184
17555
  }
17185
- confirm(labelString) {
17556
+ confirm(input) {
17186
17557
  this.confirmFlag = true;
17187
- this.dialogRef.close(labelString);
17558
+ if (this.labelFlag === LabelType.Predefined) {
17559
+ this.dialogRef.close();
17560
+ }
17561
+ else if (this.labelFlag === LabelType.Custom) {
17562
+ this.dialogRef.close({
17563
+ label: input
17564
+ });
17565
+ }
17566
+ else if (this.labelFlag === LabelType.Coordinates) {
17567
+ this.dialogRef.close({
17568
+ label: this.currentCoordinates,
17569
+ measureUnit: this.coordinatesMeasureUnit
17570
+ });
17571
+ }
17572
+ else if (this.olGeometryType === GeometryType.Polygon) {
17573
+ if (this.polygonCheck === 2) {
17574
+ this.labelFlag = [LabelType.Length, LabelType.Area];
17575
+ this.dialogRef.close({
17576
+ label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[MeasureLengthUnit.Meters] + '\n'
17577
+ + this.languageService.translate.instant('igo.geo.draw.labelType.A') + this.currentArea + ' ' +
17578
+ MeasureAreaUnitAbbreviation[MeasureAreaUnit.SquareMeters], measureUnit: [this.lengthMeasureUnit, this.areaMeasureUnit]
17579
+ });
17580
+ }
17581
+ else {
17582
+ this.labelFlag === LabelType.Length ?
17583
+ this.dialogRef.close({
17584
+ label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
17585
+ measureUnit: this.lengthMeasureUnit
17586
+ }) :
17587
+ this.dialogRef.close({
17588
+ label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
17589
+ measureUnit: this.areaMeasureUnit
17590
+ });
17591
+ }
17592
+ }
17593
+ else if (this.labelFlag === LabelType.Length) {
17594
+ if (this.olGeometryType === GeometryType.Circle) {
17595
+ this.dialogRef.close({
17596
+ label: 'R: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
17597
+ measureUnit: this.lengthMeasureUnit
17598
+ });
17599
+ }
17600
+ else if (this.olGeometryType === GeometryType.LineString) {
17601
+ this.dialogRef.close({
17602
+ label: this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
17603
+ measureUnit: this.lengthMeasureUnit
17604
+ });
17605
+ }
17606
+ }
17607
+ else if (this.labelFlag === LabelType.Area) {
17608
+ this.dialogRef.close({
17609
+ label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
17610
+ measureUnit: this.areaMeasureUnit
17611
+ });
17612
+ }
17613
+ }
17614
+ onLabelTypeChange(labelType, checked) {
17615
+ if (labelType !== LabelType.Predefined &&
17616
+ labelType !== LabelType.Custom &&
17617
+ this.olGeometryType === GeometryType.Polygon) {
17618
+ this.arrayBuiltInType.find(type => type.value === labelType) ?
17619
+ this.arrayBuiltInType.find(type => type.value === labelType).checked = checked : this.labelFlag = undefined;
17620
+ checked ? this.labelFlag = labelType : this.labelFlag = this.arrayBuiltInType.find(type => type.checked)?.value;
17621
+ }
17622
+ else {
17623
+ this.labelFlag = labelType;
17624
+ }
17625
+ if (labelType === LabelType.Predefined) {
17626
+ if (this.olGeometryType === GeometryType.Point) {
17627
+ this.labelFlag = LabelType.Coordinates;
17628
+ this.currentCoordinates = this.coordinatesInDD;
17629
+ this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
17630
+ }
17631
+ else if (this.olGeometryType === GeometryType.LineString) {
17632
+ this.labelFlag = LabelType.Length;
17633
+ this.currentLength = this.lengthInMeters;
17634
+ this.lengthMeasureUnit = MeasureLengthUnit.Meters;
17635
+ }
17636
+ }
17637
+ else if (labelType === LabelType.Area) {
17638
+ this.currentArea = this.areaInMetersSquare;
17639
+ this.areaMeasureUnit = MeasureAreaUnit.SquareMeters;
17640
+ }
17641
+ else if (labelType === LabelType.Length) {
17642
+ this.currentLength = this.lengthInMeters;
17643
+ this.lengthMeasureUnit = MeasureLengthUnit.Meters;
17644
+ }
17645
+ else if (this.labelFlag === LabelType.Coordinates) {
17646
+ this.currentCoordinates = this.coordinatesInDD;
17647
+ this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
17648
+ }
17649
+ const labeltypes = [this.labelType.Length, this.labelType.Area];
17650
+ if (this.olGeometryType === GeometryType.Polygon &&
17651
+ labeltypes.includes(labelType)) {
17652
+ checked ? this.polygonCheck += 1 : this.polygonCheck -= 1;
17653
+ ;
17654
+ }
17655
+ else {
17656
+ this.polygonCheck = 0;
17657
+ }
17658
+ }
17659
+ onChangeLengthUnit(lengthUnit) {
17660
+ this.lengthMeasureUnit = lengthUnit;
17661
+ this.currentLength = metersToUnit(Number(this.lengthInMeters), lengthUnit).toFixed(2);
17662
+ }
17663
+ onChangeAreaUnit(areaUnit) {
17664
+ this.areaMeasureUnit = areaUnit;
17665
+ this.currentArea = squareMetersToUnit(Number(this.areaInMetersSquare), areaUnit).toFixed(2);
17666
+ }
17667
+ onChangeCoordinateUnit(coordinatesUnit) {
17668
+ this.coordinatesMeasureUnit = coordinatesUnit;
17669
+ let coordinates = DDtoDMS(this.longlatDD, coordinatesUnit);
17670
+ this.currentCoordinates = '(' + coordinates[1] + ', ' + coordinates[0] + ')';
17671
+ }
17672
+ buildArrayType() {
17673
+ for (const labelType of Object.values(LabelType)) {
17674
+ if (labelType !== LabelType.Custom && labelType !== LabelType.Predefined) {
17675
+ this.arrayBuiltInType.push({
17676
+ value: labelType,
17677
+ checked: this.selectOptions(labelType) ||
17678
+ this.labelFlag === labelType ||
17679
+ (this.polygonCheck === 2 && labelType !== LabelType.Coordinates)
17680
+ });
17681
+ }
17682
+ }
17683
+ }
17684
+ noLabelButton() {
17685
+ if (this.labelFlag === LabelType.Predefined || (this.labelFlag === LabelType.Custom && this.labelLength === 0)) {
17686
+ return this.languageService.translate.instant('igo.geo.draw.noLabel');
17687
+ }
17688
+ return 'OK';
17689
+ }
17690
+ get customOrPredefined() {
17691
+ if (this.labelFlag === LabelType.Custom) {
17692
+ return LabelType.Custom;
17693
+ }
17694
+ return LabelType.Predefined;
17695
+ }
17696
+ optionAvailable(currentOption) {
17697
+ switch (this.olGeometryType) {
17698
+ case GeometryType.Point:
17699
+ if (currentOption === LabelType.Coordinates) {
17700
+ return false;
17701
+ }
17702
+ return true;
17703
+ case GeometryType.LineString:
17704
+ if (currentOption === LabelType.Length) {
17705
+ return false;
17706
+ }
17707
+ return true;
17708
+ case GeometryType.Polygon:
17709
+ if (currentOption === LabelType.Coordinates) {
17710
+ return true;
17711
+ }
17712
+ return false;
17713
+ default:
17714
+ return false;
17715
+ }
17716
+ }
17717
+ get allLengthUnits() {
17718
+ return Object.values(MeasureLengthUnit);
17719
+ }
17720
+ getLengthUnitEnum(lengthUnit) {
17721
+ return MeasureLengthUnitAbbreviation[lengthUnit];
17722
+ }
17723
+ get allAreaUnits() {
17724
+ return Object.values(MeasureAreaUnit);
17725
+ }
17726
+ get allCoordinatesUnits() {
17727
+ return Object.values(CoordinatesUnit);
17728
+ }
17729
+ getAreaUnitEnum(areaUnit) {
17730
+ return MeasureAreaUnitAbbreviation[areaUnit];
17731
+ }
17732
+ getRadius(olGeometry) {
17733
+ const length = getLength(olGeometry);
17734
+ return Number(length / (2 * Math.PI));
17735
+ }
17736
+ get lengthLabelT() {
17737
+ if (this.olGeometryType === GeometryType.Polygon) {
17738
+ return this.languageService.translate.instant('igo.geo.measure.perimeter');
17739
+ }
17740
+ if (this.olGeometryType === GeometryType.Circle) {
17741
+ return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
17742
+ }
17743
+ return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
17744
+ }
17745
+ getLabelLength(event) {
17746
+ this.labelLength = event.length;
17747
+ }
17748
+ selectOptions(option) {
17749
+ if (this.olGeometryType === GeometryType.Point) {
17750
+ return option === LabelType.Coordinates;
17751
+ }
17752
+ else if (this.olGeometryType === GeometryType.LineString) {
17753
+ return option === LabelType.Length;
17754
+ }
17755
+ }
17756
+ getProperLengthLabel(option) {
17757
+ if (option === LabelType.Length) {
17758
+ if (this.olGeometryType === GeometryType.Polygon) {
17759
+ return this.languageService.translate.instant('igo.geo.measure.perimeter');
17760
+ }
17761
+ if (this.olGeometryType === GeometryType.Circle) {
17762
+ return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
17763
+ }
17764
+ return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
17765
+ }
17766
+ return this.languageService.translate.instant('igo.geo.draw.labelType.' + option);
17188
17767
  }
17189
17768
  }
17190
- DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
17191
- DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag" }, decls: 14, vars: 10, consts: [["mat-dialog-content", ""], [1, "mat-typography"], [1, "example-full-width"], ["matInput", "", 3, "placeholder", "value"], ["input", ""], ["mat-dialog-actions", ""], ["mat-raised-button", "", 3, "click"], ["mat-raised-button", "", "color", "primary", 3, "click"]], template: function DrawPopupComponent_Template(rf, ctx) { if (rf & 1) {
17192
- const _r1 = i0.ɵɵgetCurrentView();
17193
- i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
17769
+ DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i2$1.LanguageService), i0.ɵɵdirectiveInject(i1.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
17770
+ DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag", labelFlag: "labelFlag", coordinatesMeasureUnit: "coordinatesMeasureUnit", lengthMeasureUnit: "lengthMeasureUnit", areaMeasureUnit: "areaMeasureUnit" }, decls: 14, vars: 14, consts: [["mat-dialog-title", ""], [1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [4, "ngIf"], [1, "mat-typography"], ["class", "mat-typography", 4, "ngIf"], ["mat-dialog-actions", ""], ["mat-raised-button", "", 3, "click"], ["mat-raised-button", "", "color", "primary", 3, "click"], [3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [3, "value", "disabled", "checked", "change"], ["class", "mat-typography", 3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [1, "mat-typography", 3, "value", "disabled", "checked", "change"], [1, "readOnly-Input"], ["matInput", "", "placeholder", "(Latitude, Longitude)", "readonly", "", 3, "value"], ["input", ""], [1, "unit-field"], [3, "value", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], ["matInput", "", "readonly", "", 3, "placeholder", "value"], [1, "input"], ["matInput", "", "cdkFocusInitial", "", 3, "placeholder", "value", "select", "input"]], template: function DrawPopupComponent_Template(rf, ctx) { if (rf & 1) {
17771
+ i0.ɵɵelementStart(0, "div")(1, "h2", 0);
17194
17772
  i0.ɵɵtext(2);
17195
17773
  i0.ɵɵpipe(3, "translate");
17196
- i0.ɵɵelementEnd();
17197
- i0.ɵɵelementStart(4, "mat-form-field", 2);
17198
- i0.ɵɵelement(5, "input", 3, 4);
17199
- i0.ɵɵpipe(7, "translate");
17200
17774
  i0.ɵɵelementEnd()();
17201
- i0.ɵɵelementStart(8, "div", 5)(9, "button", 6);
17202
- i0.ɵɵlistener("click", function DrawPopupComponent_Template_button_click_9_listener() { return ctx.cancelDrawing(); });
17775
+ i0.ɵɵelementStart(4, "div", 1)(5, "mat-button-toggle-group", 2);
17776
+ i0.ɵɵlistener("change", function DrawPopupComponent_Template_mat_button_toggle_group_change_5_listener($event) { return ctx.onLabelTypeChange($event.value); });
17777
+ i0.ɵɵelementStart(6, "mat-button-toggle", 3);
17778
+ i0.ɵɵtext(7);
17779
+ i0.ɵɵpipe(8, "translate");
17780
+ i0.ɵɵelementEnd();
17781
+ i0.ɵɵelementStart(9, "mat-button-toggle", 3);
17203
17782
  i0.ɵɵtext(10);
17204
17783
  i0.ɵɵpipe(11, "translate");
17205
- i0.ɵɵelementEnd();
17206
- i0.ɵɵelementStart(12, "button", 7);
17207
- i0.ɵɵlistener("click", function DrawPopupComponent_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const _r0 = i0.ɵɵreference(6); return i0.ɵɵresetView(ctx.confirm(_r0.value)); });
17208
- i0.ɵɵtext(13, "OK ");
17209
- i0.ɵɵelementEnd()();
17784
+ i0.ɵɵelementEnd()()();
17785
+ i0.ɵɵtemplate(12, DrawPopupComponent_div_12_Template, 16, 12, "div", 4);
17786
+ i0.ɵɵtemplate(13, DrawPopupComponent_div_13_Template, 15, 11, "div", 4);
17210
17787
  } if (rf & 2) {
17211
17788
  i0.ɵɵadvance(2);
17212
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.draw.dialogInstruction"));
17789
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, "igo.geo.draw.popupTitle"), " ");
17213
17790
  i0.ɵɵadvance(3);
17214
- i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(7, 6, "igo.geo.draw.dialogTitle"));
17215
- i0.ɵɵpropertyInterpolate("value", ctx.data.currentLabel);
17216
- i0.ɵɵadvance(5);
17217
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(11, 8, "igo.geo.draw.cancel"), " ");
17218
- } }, dependencies: [i3.MatButton, i13.MatFormField, i14.MatInput, i1.MatDialogContent, i1.MatDialogActions, i7.TranslatePipe] });
17791
+ i0.ɵɵproperty("value", ctx.customOrPredefined);
17792
+ i0.ɵɵadvance(1);
17793
+ i0.ɵɵproperty("value", ctx.labelType.Custom);
17794
+ i0.ɵɵadvance(1);
17795
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 10, "igo.geo.draw.labelType.custom"), " ");
17796
+ i0.ɵɵadvance(2);
17797
+ i0.ɵɵproperty("value", ctx.labelType.Predefined);
17798
+ i0.ɵɵadvance(1);
17799
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 12, "igo.geo.draw.labelType.predefined"), " ");
17800
+ i0.ɵɵadvance(2);
17801
+ i0.ɵɵproperty("ngIf", ctx.labelFlag !== ctx.labelType.Custom);
17802
+ i0.ɵɵadvance(1);
17803
+ i0.ɵɵproperty("ngIf", ctx.labelFlag === ctx.labelType.Custom);
17804
+ } }, dependencies: [i1$1.NgForOf, i1$1.NgIf, i3.MatButton, i18.MatButtonToggleGroup, i18.MatButtonToggle, i13.MatFormField, i14.MatInput, i15.MatSelect, i9.MatOption, i1.MatDialogTitle, i1.MatDialogActions, i17.MatRadioGroup, i17.MatRadioButton, i12.MatCheckbox, i7.TranslatePipe], styles: [".mat-radio-button[_ngcontent-%COMP%] ~ .mat-radio-button[_ngcontent-%COMP%]{margin-left:16px}.readOnly-Input[_ngcontent-%COMP%]{width:200px!important}.unit-field[_ngcontent-%COMP%]{width:50px;margin-left:10px;margin-top:10px}.mat-form-field[_ngcontent-%COMP%]{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView[_ngcontent-%COMP%]{top:5em!important} .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle[_ngcontent-%COMP%], .mat-dialog-actions[_ngcontent-%COMP%]{display:flex!important;justify-content:center}.input[_ngcontent-%COMP%]{width:auto!important}.mat-button-toggle-group[_ngcontent-%COMP%], .mat-button-toggle[_ngcontent-%COMP%]{width:100%}mat-checkbox[_ngcontent-%COMP%]{margin-right:10px}"] });
17219
17805
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrawPopupComponent, [{
17220
17806
  type: Component,
17221
- args: [{ selector: 'igo-draw-popup-component', template: "<div mat-dialog-content>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.dialogInstruction' | translate }}</p>\n <mat-form-field class=\"example-full-width\">\n <input\n #input\n matInput\n placeholder=\"{{'igo.geo.draw.dialogTitle' | translate}}\"\n value=\"{{data.currentLabel}}\"/>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button \n mat-raised-button \n (click)=\"cancelDrawing()\">{{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm(input.value)\">OK\n </button>\n</div>\n" }]
17222
- }], function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
17807
+ args: [{ selector: 'igo-draw-popup-component', template: "<div>\n <h2 mat-dialog-title>\n {{ 'igo.geo.draw.popupTitle' | translate }}\n </h2>\n</div>\n\n\n<div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onLabelTypeChange($event.value)\" [value]=\"customOrPredefined\">\n <mat-button-toggle [value]=\"labelType.Custom\" >\n {{ 'igo.geo.draw.labelType.custom' | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"labelType.Predefined\">\n {{ 'igo.geo.draw.labelType.predefined' | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div *ngIf=\"labelFlag !== labelType.Custom\">\n <div>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.builtInInstructions' | translate }}</p>\n <mat-radio-group *ngIf=\"olGeometryType !== 'Polygon'\" class=\"mat-typography\">\n <mat-radio-button *ngFor=\"let option of arrayBuiltInType\" [value]=\"option.value\" [disabled]=\"optionAvailable(option.value)\" \n (change)=\"onLabelTypeChange($event.value)\" [checked]=\"option.checked\">\n {{getProperLengthLabel(option.value)}}\n </mat-radio-button>\n </mat-radio-group>\n <ng-container class=\"mat-typography\" *ngIf=\"olGeometryType === 'Polygon'\">\n <mat-checkbox\n *ngFor=\"let option of arrayBuiltInType\"\n class=\"mat-typography\"\n [value]=\"option.value\"\n [disabled]=\"optionAvailable(option.value)\"\n (change)=\"onLabelTypeChange($event.source.value, $event.checked)\"\n [checked]=\"option.checked\">\n {{getProperLengthLabel(option.value)}}\n </mat-checkbox>\n </ng-container>\n <div *ngIf=\"labelFlag === labelType.Coordinates\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder=\"(Latitude, Longitude)\"\n value=\"{{currentCoordinates}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"coordinatesMeasureUnit\" (selectionChange)=\"onChangeCoordinateUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allCoordinatesUnits\" [value]=\"unit\">\n {{unit}}\n </mat-option>\n </mat-select> \n </mat-form-field>\n </div>\n <div *ngIf=\"labelFlag === labelType.Length || polygonCheck === 2\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder={{lengthLabelT}}\n value=\"{{currentLength}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"lengthMeasureUnit\" (selectionChange)=\"onChangeLengthUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allLengthUnits\" [value]=\"unit\">\n {{getLengthUnitEnum(unit)}}\n </mat-option>\n </mat-select> \n </mat-form-field>\n </div>\n <div *ngIf=\"labelFlag === labelType.Area || polygonCheck === 2\">\n <mat-form-field class=\"readOnly-Input\">\n <input\n #input\n matInput\n placeholder=\"{{ 'igo.geo.draw.labelType.Area' | translate }}\"\n value=\"{{currentArea}}\" readonly>\n </mat-form-field>\n <mat-form-field class=\"unit-field\">\n <mat-select [value]=\"areaMeasureUnit\" (selectionChange)=\"onChangeAreaUnit($event.value)\">\n <mat-option *ngFor=\"let unit of allAreaUnits\" [value]=\"unit\">\n {{getAreaUnitEnum(unit)}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n\n <div mat-dialog-actions>\n <button mat-raised-button (click)=\"cancelDrawing()\" >\n {{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm()\"> \n {{noLabelButton()}} \n </button>\n </div>\n</div>\n\n<div *ngIf=\"labelFlag === labelType.Custom\">\n <div>\n <p class=\"mat-typography\">{{ 'igo.geo.draw.dialogInstruction' | translate }}</p>\n <mat-form-field class=\"input\">\n <input\n #input\n matInput\n (select)=\"true\"\n (input)=\"getLabelLength($event.target.value)\"\n placeholder=\"{{'igo.geo.draw.dialogTitle' | translate}}\"\n value=\"{{ currentLabel }}\"\n cdkFocusInitial/>\n </mat-form-field>\n </div>\n \n <div mat-dialog-actions>\n <button mat-raised-button (click)=\"cancelDrawing()\" >\n {{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm(input.value)\">\n {{noLabelButton()}}\n </button>\n </div>\n</div>\n", styles: [".mat-radio-button~.mat-radio-button{margin-left:16px}.readOnly-Input{width:200px!important}.unit-field{width:50px;margin-left:10px;margin-top:10px}.mat-form-field{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView{top:5em!important}::ng-deep .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle,.mat-dialog-actions{display:flex!important;justify-content:center}.input{width:auto!important}.mat-button-toggle-group,.mat-button-toggle{width:100%}mat-checkbox{margin-right:10px}\n"] }]
17808
+ }], function () { return [{ type: i2$1.LanguageService }, { type: i1.MatDialogRef }, { type: undefined, decorators: [{
17223
17809
  type: Inject,
17224
17810
  args: [MAT_DIALOG_DATA]
17225
17811
  }] }]; }, { confirmFlag: [{
17226
17812
  type: Input
17813
+ }], labelFlag: [{
17814
+ type: Input
17815
+ }], coordinatesMeasureUnit: [{
17816
+ type: Input
17817
+ }], lengthMeasureUnit: [{
17818
+ type: Input
17819
+ }], areaMeasureUnit: [{
17820
+ type: Input
17227
17821
  }] }); })();
17228
17822
 
17229
17823
  class DrawShorcutsComponent {
@@ -17317,107 +17911,151 @@ DrawLayerPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Dra
17317
17911
  }] }); })();
17318
17912
 
17319
17913
  const _c0$c = ["selectedLayer"];
17320
- function DrawComponent_mat_option_30_Template(rf, ctx) { if (rf & 1) {
17914
+ function DrawComponent_mat_slide_toggle_22_Template(rf, ctx) { if (rf & 1) {
17915
+ const _r10 = i0.ɵɵgetCurrentView();
17916
+ i0.ɵɵelementStart(0, "mat-slide-toggle", 5);
17917
+ i0.ɵɵlistener("change", function DrawComponent_mat_slide_toggle_22_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.onToggleFreehandMode($event)); });
17918
+ i0.ɵɵtext(1);
17919
+ i0.ɵɵpipe(2, "translate");
17920
+ i0.ɵɵelementEnd();
17921
+ } if (rf & 2) {
17922
+ const ctx_r0 = i0.ɵɵnextContext();
17923
+ i0.ɵɵproperty("checked", ctx_r0.freehandMode)("labelPosition", "before");
17924
+ i0.ɵɵadvance(1);
17925
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 3, "igo.geo.draw.freehandMode"), " ");
17926
+ } }
17927
+ function DrawComponent_div_23_mat_option_7_Template(rf, ctx) { if (rf & 1) {
17321
17928
  i0.ɵɵelementStart(0, "mat-option", 2);
17322
17929
  i0.ɵɵtext(1);
17930
+ i0.ɵɵpipe(2, "translate");
17323
17931
  i0.ɵɵelementEnd();
17324
17932
  } if (rf & 2) {
17325
- const layer_r7 = ctx.$implicit;
17326
- i0.ɵɵproperty("value", layer_r7);
17933
+ const measureUnit_r12 = ctx.$implicit;
17934
+ i0.ɵɵproperty("value", measureUnit_r12);
17327
17935
  i0.ɵɵadvance(1);
17328
- i0.ɵɵtextInterpolate1(" ", layer_r7.title, " ");
17936
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.measure." + measureUnit_r12), " ");
17329
17937
  } }
17330
- function DrawComponent_button_34_Template(rf, ctx) { if (rf & 1) {
17331
- const _r9 = i0.ɵɵgetCurrentView();
17332
- i0.ɵɵelementStart(0, "button", 20);
17333
- i0.ɵɵlistener("click", function DrawComponent_button_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.activeDrawingLayer.visible = !ctx_r8.activeDrawingLayer.visible); });
17938
+ function DrawComponent_div_23_Template(rf, ctx) { if (rf & 1) {
17939
+ const _r14 = i0.ɵɵgetCurrentView();
17940
+ i0.ɵɵelementStart(0, "div", 22)(1, "form", 23)(2, "mat-form-field", 24);
17941
+ i0.ɵɵelement(3, "input", 25);
17942
+ i0.ɵɵpipe(4, "translate");
17943
+ i0.ɵɵelementEnd()();
17944
+ i0.ɵɵelementStart(5, "mat-form-field", 26)(6, "mat-select", 9);
17945
+ i0.ɵɵlistener("selectionChange", function DrawComponent_div_23_Template_mat_select_selectionChange_6_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.onMeasureUnitChange($event.value)); });
17946
+ i0.ɵɵtemplate(7, DrawComponent_div_23_mat_option_7_Template, 3, 4, "mat-option", 11);
17947
+ i0.ɵɵelementEnd()()();
17948
+ } if (rf & 2) {
17949
+ const ctx_r1 = i0.ɵɵnextContext();
17950
+ i0.ɵɵadvance(3);
17951
+ i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 5, "igo.geo.spatialFilter.radius"));
17952
+ i0.ɵɵproperty("formControl", ctx_r1.radiusFormControl)("readonly", ctx_r1.freehandMode);
17953
+ i0.ɵɵadvance(3);
17954
+ i0.ɵɵproperty("value", ctx_r1.measureUnit);
17955
+ i0.ɵɵadvance(1);
17956
+ i0.ɵɵproperty("ngForOf", ctx_r1.measureUnits);
17957
+ } }
17958
+ function DrawComponent_mat_option_32_Template(rf, ctx) { if (rf & 1) {
17959
+ i0.ɵɵelementStart(0, "mat-option", 2);
17960
+ i0.ɵɵtext(1);
17961
+ i0.ɵɵelementEnd();
17962
+ } if (rf & 2) {
17963
+ const layer_r15 = ctx.$implicit;
17964
+ i0.ɵɵproperty("value", layer_r15);
17965
+ i0.ɵɵadvance(1);
17966
+ i0.ɵɵtextInterpolate1(" ", layer_r15.title, " ");
17967
+ } }
17968
+ function DrawComponent_button_36_Template(rf, ctx) { if (rf & 1) {
17969
+ const _r17 = i0.ɵɵgetCurrentView();
17970
+ i0.ɵɵelementStart(0, "button", 27);
17971
+ i0.ɵɵlistener("click", function DrawComponent_button_36_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.activeDrawingLayer.visible = !ctx_r16.activeDrawingLayer.visible); });
17334
17972
  i0.ɵɵpipe(1, "translate");
17335
17973
  i0.ɵɵpipe(2, "translate");
17336
- i0.ɵɵelement(3, "mat-icon", 21);
17974
+ i0.ɵɵelement(3, "mat-icon", 28);
17337
17975
  i0.ɵɵelementEnd();
17338
17976
  } if (rf & 2) {
17339
- const ctx_r2 = i0.ɵɵnextContext();
17340
- i0.ɵɵproperty("color", ctx_r2.activeDrawingLayer.visible ? "primary" : "default")("matTooltip", ctx_r2.activeDrawingLayer.visible ? i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.hideLayer") : i0.ɵɵpipeBind1(2, 5, "igo.geo.layer.showLayer"));
17977
+ const ctx_r4 = i0.ɵɵnextContext();
17978
+ i0.ɵɵproperty("color", ctx_r4.activeDrawingLayer.visible ? "primary" : "default")("matTooltip", ctx_r4.activeDrawingLayer.visible ? i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.hideLayer") : i0.ɵɵpipeBind1(2, 5, "igo.geo.layer.showLayer"));
17341
17979
  i0.ɵɵadvance(3);
17342
- i0.ɵɵproperty("svgIcon", ctx_r2.activeDrawingLayer.visible ? "eye" : "eye-off");
17980
+ i0.ɵɵproperty("svgIcon", ctx_r4.activeDrawingLayer.visible ? "eye" : "eye-off");
17343
17981
  } }
17344
- function DrawComponent_button_37_Template(rf, ctx) { if (rf & 1) {
17345
- const _r11 = i0.ɵɵgetCurrentView();
17346
- i0.ɵɵelementStart(0, "button", 22);
17347
- i0.ɵɵlistener("click", function DrawComponent_button_37_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.deleteDrawings()); });
17982
+ function DrawComponent_button_39_Template(rf, ctx) { if (rf & 1) {
17983
+ const _r19 = i0.ɵɵgetCurrentView();
17984
+ i0.ɵɵelementStart(0, "button", 29);
17985
+ i0.ɵɵlistener("click", function DrawComponent_button_39_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r18.deleteDrawings()); });
17348
17986
  i0.ɵɵpipe(1, "translate");
17349
17987
  i0.ɵɵpipe(2, "async");
17350
- i0.ɵɵelement(3, "mat-icon", 23);
17988
+ i0.ɵɵelement(3, "mat-icon", 30);
17351
17989
  i0.ɵɵelementEnd();
17352
17990
  } if (rf & 2) {
17353
- const ctx_r3 = i0.ɵɵnextContext();
17354
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.draw.delete"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r3.selectedFeatures$).length === 0);
17991
+ const ctx_r5 = i0.ɵɵnextContext();
17992
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.draw.delete"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r5.selectedFeatures$).length === 0);
17355
17993
  } }
17356
- function DrawComponent_mat_form_field_42_div_6_Template(rf, ctx) { if (rf & 1) {
17357
- i0.ɵɵelementStart(0, "div", 27);
17358
- i0.ɵɵelement(1, "img", 28);
17994
+ function DrawComponent_mat_form_field_44_div_6_Template(rf, ctx) { if (rf & 1) {
17995
+ i0.ɵɵelementStart(0, "div", 34);
17996
+ i0.ɵɵelement(1, "img", 35);
17359
17997
  i0.ɵɵelementEnd();
17360
17998
  } if (rf & 2) {
17361
- const ctx_r12 = i0.ɵɵnextContext(2);
17999
+ const ctx_r20 = i0.ɵɵnextContext(2);
17362
18000
  i0.ɵɵadvance(1);
17363
- i0.ɵɵpropertyInterpolate("src", ctx_r12.icon, i0.ɵɵsanitizeUrl);
18001
+ i0.ɵɵpropertyInterpolate("src", ctx_r20.icon, i0.ɵɵsanitizeUrl);
17364
18002
  } }
17365
- function DrawComponent_mat_form_field_42_mat_option_10_Template(rf, ctx) { if (rf & 1) {
17366
- const _r16 = i0.ɵɵgetCurrentView();
17367
- i0.ɵɵelementStart(0, "mat-option", 29);
17368
- i0.ɵɵlistener("click", function DrawComponent_mat_form_field_42_mat_option_10_Template_mat_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r16); const icon_html_r14 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.onIconChange(icon_html_r14)); });
17369
- i0.ɵɵelementStart(1, "div", 27);
17370
- i0.ɵɵelement(2, "img", 28);
18003
+ function DrawComponent_mat_form_field_44_mat_option_10_Template(rf, ctx) { if (rf & 1) {
18004
+ const _r24 = i0.ɵɵgetCurrentView();
18005
+ i0.ɵɵelementStart(0, "mat-option", 36);
18006
+ i0.ɵɵlistener("click", function DrawComponent_mat_form_field_44_mat_option_10_Template_mat_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r24); const icon_html_r22 = restoredCtx.$implicit; const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onIconChange(icon_html_r22)); });
18007
+ i0.ɵɵelementStart(1, "div", 34);
18008
+ i0.ɵɵelement(2, "img", 35);
17371
18009
  i0.ɵɵelementEnd()();
17372
18010
  } if (rf & 2) {
17373
- const icon_html_r14 = ctx.$implicit;
17374
- i0.ɵɵproperty("value", icon_html_r14);
18011
+ const icon_html_r22 = ctx.$implicit;
18012
+ i0.ɵɵproperty("value", icon_html_r22);
17375
18013
  i0.ɵɵadvance(2);
17376
- i0.ɵɵpropertyInterpolate("src", icon_html_r14, i0.ɵɵsanitizeUrl);
18014
+ i0.ɵɵpropertyInterpolate("src", icon_html_r22, i0.ɵɵsanitizeUrl);
17377
18015
  } }
17378
- function DrawComponent_mat_form_field_42_Template(rf, ctx) { if (rf & 1) {
17379
- const _r18 = i0.ɵɵgetCurrentView();
18016
+ function DrawComponent_mat_form_field_44_Template(rf, ctx) { if (rf & 1) {
18017
+ const _r26 = i0.ɵɵgetCurrentView();
17380
18018
  i0.ɵɵelementStart(0, "mat-form-field")(1, "mat-label");
17381
18019
  i0.ɵɵtext(2);
17382
18020
  i0.ɵɵpipe(3, "translate");
17383
18021
  i0.ɵɵelementEnd();
17384
18022
  i0.ɵɵelementStart(4, "mat-select")(5, "mat-select-trigger");
17385
- i0.ɵɵtemplate(6, DrawComponent_mat_form_field_42_div_6_Template, 2, 1, "div", 24);
18023
+ i0.ɵɵtemplate(6, DrawComponent_mat_form_field_44_div_6_Template, 2, 1, "div", 31);
17386
18024
  i0.ɵɵelementEnd();
17387
- i0.ɵɵelementStart(7, "mat-option", 25);
17388
- i0.ɵɵlistener("click", function DrawComponent_mat_form_field_42_Template_mat_option_click_7_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r17.onIconChange()); });
18025
+ i0.ɵɵelementStart(7, "mat-option", 32);
18026
+ i0.ɵɵlistener("click", function DrawComponent_mat_form_field_44_Template_mat_option_click_7_listener() { i0.ɵɵrestoreView(_r26); const ctx_r25 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r25.onIconChange()); });
17389
18027
  i0.ɵɵtext(8);
17390
18028
  i0.ɵɵpipe(9, "translate");
17391
18029
  i0.ɵɵelementEnd();
17392
- i0.ɵɵtemplate(10, DrawComponent_mat_form_field_42_mat_option_10_Template, 3, 2, "mat-option", 26);
18030
+ i0.ɵɵtemplate(10, DrawComponent_mat_form_field_44_mat_option_10_Template, 3, 2, "mat-option", 33);
17393
18031
  i0.ɵɵelementEnd()();
17394
18032
  } if (rf & 2) {
17395
- const ctx_r5 = i0.ɵɵnextContext();
18033
+ const ctx_r7 = i0.ɵɵnextContext();
17396
18034
  i0.ɵɵadvance(2);
17397
18035
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.draw.icon"));
17398
18036
  i0.ɵɵadvance(4);
17399
- i0.ɵɵproperty("ngIf", ctx_r5.icon);
18037
+ i0.ɵɵproperty("ngIf", ctx_r7.icon);
17400
18038
  i0.ɵɵadvance(2);
17401
18039
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 6, "igo.geo.draw.noIcon"));
17402
18040
  i0.ɵɵadvance(2);
17403
- i0.ɵɵproperty("ngForOf", ctx_r5.icons);
18041
+ i0.ɵɵproperty("ngForOf", ctx_r7.icons);
17404
18042
  } }
17405
- function DrawComponent_button_46_Template(rf, ctx) { if (rf & 1) {
17406
- const _r20 = i0.ɵɵgetCurrentView();
17407
- i0.ɵɵelementStart(0, "button", 30);
17408
- i0.ɵɵlistener("click", function DrawComponent_button_46_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.openStyleModalDialog()); });
18043
+ function DrawComponent_button_48_Template(rf, ctx) { if (rf & 1) {
18044
+ const _r28 = i0.ɵɵgetCurrentView();
18045
+ i0.ɵɵelementStart(0, "button", 37);
18046
+ i0.ɵɵlistener("click", function DrawComponent_button_48_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r28); const ctx_r27 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r27.openStyleModalDialog()); });
17409
18047
  i0.ɵɵpipe(1, "translate");
17410
18048
  i0.ɵɵtext(2);
17411
18049
  i0.ɵɵpipe(3, "translate");
17412
- i0.ɵɵelement(4, "mat-icon", 31);
18050
+ i0.ɵɵelement(4, "mat-icon", 38);
17413
18051
  i0.ɵɵelementEnd();
17414
18052
  } if (rf & 2) {
17415
- const ctx_r6 = i0.ɵɵnextContext();
18053
+ const ctx_r8 = i0.ɵɵnextContext();
17416
18054
  i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.style.styleModalTooltip"));
17417
18055
  i0.ɵɵadvance(2);
17418
18056
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, "igo.geo.layer.style.styleModal"), " ");
17419
18057
  i0.ɵɵadvance(2);
17420
- i0.ɵɵproperty("matBadge", ctx_r6.selectedFeatures$.value.length);
18058
+ i0.ɵɵproperty("matBadge", ctx_r8.selectedFeatures$.value.length);
17421
18059
  } }
17422
18060
  class DrawComponent {
17423
18061
  constructor(languageService, formBuilder, drawStyleService, dialog, drawIconService) {
@@ -17441,10 +18079,24 @@ class DrawComponent {
17441
18079
  {
17442
18080
  name: 'Drawing',
17443
18081
  title: this.languageService.translate.instant('igo.geo.draw.labels'),
17444
- tooltip: this.languageService.translate.instant('igo.geo.draw.changeLabel'),
17445
18082
  valueAccessor: (feature) => {
17446
18083
  return feature.properties.draw;
17447
18084
  }
18085
+ },
18086
+ {
18087
+ name: 'Edition',
18088
+ title: '',
18089
+ sort: false,
18090
+ valueAccessor: (feature) => {
18091
+ return [{
18092
+ editMode: false,
18093
+ icon: 'pencil',
18094
+ color: 'primary',
18095
+ click: () => { this.editLabelDrawing(feature); },
18096
+ style: 'mat-icon-button'
18097
+ }];
18098
+ },
18099
+ renderer: EntityTableColumnRenderer.ButtonGroup,
17448
18100
  }
17449
18101
  ]
17450
18102
  };
@@ -17460,8 +18112,14 @@ class DrawComponent {
17460
18112
  this.selectedFeatures$ = new BehaviorSubject([]);
17461
18113
  this.drawControlIsDisabled = true;
17462
18114
  this.drawControlIsActive = false;
18115
+ this.freehandMode = false;
17463
18116
  this.subscriptions$$ = [];
17464
18117
  this.position = 'bottom';
18118
+ this.radiusFormControl = new UntypedFormControl(1000);
18119
+ this.measureUnit = MeasureLengthUnit.Meters;
18120
+ this.radiusFormControlChange$$ = new Subscription();
18121
+ this.predefinedRadius$ = new BehaviorSubject(undefined);
18122
+ this.radiusDrawEnd$ = new BehaviorSubject(undefined);
17465
18123
  this.isCreatingNewLayer = false;
17466
18124
  this.currGeometryType = this.geometryType.Point;
17467
18125
  this.buildForm();
@@ -17492,6 +18150,13 @@ class DrawComponent {
17492
18150
  set activeDrawingLayer(value) {
17493
18151
  this._activeDrawingLayer = value;
17494
18152
  }
18153
+ /**
18154
+ * Available measure units for the measure type given
18155
+ * @internal
18156
+ */
18157
+ get measureUnits() {
18158
+ return [MeasureLengthUnit.Meters, MeasureLengthUnit.Kilometers];
18159
+ }
17495
18160
  // Initialize the store that will contain the entities and create the Draw control
17496
18161
  ngOnInit() {
17497
18162
  if (!this.stores.length) {
@@ -17544,6 +18209,11 @@ class DrawComponent {
17544
18209
  });
17545
18210
  this.onLayerChange(this.activeDrawingLayer);
17546
18211
  }
18212
+ this.radiusFormControlChange$$ = this.radiusFormControl.valueChanges.subscribe(value => {
18213
+ if (this.activeDrawControl.ispredefinedRadius$.getValue()) {
18214
+ this.changeRadius(value);
18215
+ }
18216
+ });
17547
18217
  }
17548
18218
  /**
17549
18219
  * Remove the drawing layer and the interactions
@@ -17554,6 +18224,7 @@ class DrawComponent {
17554
18224
  this.activeStore.state.updateAll({ selected: false });
17555
18225
  this.deactivateDrawControl();
17556
18226
  this.subscriptions$$.map((s) => s.unsubscribe());
18227
+ this.radiusFormControlChange$$.unsubscribe();
17557
18228
  }
17558
18229
  /**
17559
18230
  * Create a Draw Control
@@ -17627,30 +18298,21 @@ class DrawComponent {
17627
18298
  // open the dialog box used to enter label
17628
18299
  const dialogRef = this.dialog.open(DrawPopupComponent, {
17629
18300
  disableClose: false,
17630
- data: { currentLabel: olGeometry.get('draw') }
18301
+ data: { olGeometry: olGeometry, map: this.map }
17631
18302
  });
17632
18303
  // when dialog box is closed, get label and set it to geometry
17633
- dialogRef.afterClosed().subscribe((label) => {
18304
+ dialogRef.afterClosed().subscribe((result) => {
17634
18305
  // checks if the user clicked ok
17635
18306
  if (dialogRef.componentInstance.confirmFlag) {
17636
- this.updateLabelOfOlGeometry(olGeometry, label);
17637
- if (!olGeometry.values_.fontStyle) {
17638
- this.updateFontSizeAndStyle(olGeometry, '20', FontType.Arial);
17639
- }
17640
- if (!olGeometry.values_.drawingStyle) {
18307
+ this.updateLabelOfOlGeometry(olGeometry, result.label);
18308
+ this.updateLabelType(olGeometry, dialogRef.componentInstance.labelFlag);
18309
+ this.updateMeasureUnit(olGeometry, result.measureUnit);
18310
+ if (!(olGeometry instanceof OlFeature)) {
18311
+ this.updateFontSizeAndStyle(olGeometry, '15', FontType.Arial);
17641
18312
  this.updateFillAndStrokeColor(olGeometry, 'rgba(255,255,255,0.4)', 'rgba(143,7,7,1)');
18313
+ this.updateOffset(olGeometry, 0, (olGeometry instanceof OlPoint) ? -15 : 0);
17642
18314
  }
17643
- if (!(olGeometry.values_.offsetX || olGeometry.values_.offsetY)) {
17644
- this.updateOffset(olGeometry, 0, olGeometry instanceof OlPoint ? -15 : 0);
17645
- }
17646
- // if event was fired at draw end
17647
- if (isDrawEnd) {
17648
- this.onDrawEnd(olGeometry);
17649
- // if event was fired at select
17650
- }
17651
- else {
17652
- this.onSelectDraw(olGeometry, label);
17653
- }
18315
+ isDrawEnd ? this.onDrawEnd(olGeometry) : this.onSelectDraw(olGeometry, result.label, [dialogRef.componentInstance.labelFlag, result.measureUnit]);
17654
18316
  this.updateHeightTable();
17655
18317
  }
17656
18318
  // deletes the feature
@@ -17682,7 +18344,55 @@ class DrawComponent {
17682
18344
  const entityId = entity.properties.id;
17683
18345
  const olGeometryId = olGeometry.ol_uid;
17684
18346
  if (entityId === olGeometryId) {
17685
- this.updateLabelOfOlGeometry(olGeometry, entity.properties.draw);
18347
+ if (entity.properties.labelType === LabelType.Coordinates) {
18348
+ let longLat = DDtoDMS([entity.properties.longitude, entity.properties.latitude], entity.properties.measureUnit);
18349
+ this.updateLabelOfOlGeometry(olGeometry, '(' + longLat[1] + ', ' + longLat[0] + ')');
18350
+ }
18351
+ else if (entity.properties.labelType === LabelType.Length) {
18352
+ if (olGeometry instanceof OlCircle) {
18353
+ let circularPolygon = fromCircle(olGeometry, 10000);
18354
+ const radius = metersToUnit(this.getRadius(circularPolygon), entity.properties.measureUnit);
18355
+ const unit = MeasureLengthUnitAbbreviation[entity.properties.measureUnit];
18356
+ const radiusLabel = 'R: ' + radius.toFixed(2).toString() + ' ' + unit;
18357
+ this.updateLabelOfOlGeometry(olGeometry, radiusLabel);
18358
+ }
18359
+ else {
18360
+ let olGeometryLength = measureOlGeometryLength(olGeometry, this.map.ol.getView().getProjection().getCode());
18361
+ let measureUnit;
18362
+ const temp = entity.properties.measureUnit;
18363
+ measureUnit = MeasureLengthUnitAbbreviation[entity.properties.measureUnit];
18364
+ olGeometryLength = metersToUnit(olGeometryLength, temp);
18365
+ let lengthLabel = olGeometry instanceof OlPolygon ?
18366
+ 'P: ' + olGeometryLength.toFixed(2).toString() + ' ' + measureUnit
18367
+ : olGeometryLength.toFixed(2).toString() + ' ' + measureUnit;
18368
+ this.updateLabelOfOlGeometry(olGeometry, lengthLabel);
18369
+ }
18370
+ }
18371
+ else if (entity.properties.labelType === LabelType.Area) {
18372
+ if (olGeometry instanceof OlCircle) {
18373
+ let circularPolygon = fromCircle(olGeometry, 10000);
18374
+ let circleArea = measureOlGeometryArea(circularPolygon, this.map.ol.getView().getProjection().getCode());
18375
+ const unit = MeasureAreaUnitAbbreviation[entity.properties.measureUnit];
18376
+ const temp = entity.properties.measureUnit;
18377
+ circleArea = squareMetersToUnit(circleArea, temp);
18378
+ const areaLabel = circleArea.toFixed(2).toString() + ' ' + unit;
18379
+ this.updateLabelOfOlGeometry(olGeometry, areaLabel);
18380
+ }
18381
+ else {
18382
+ let olGeometryArea = measureOlGeometryArea(olGeometry, this.map.ol.getView().getProjection().getCode());
18383
+ let measureUnit;
18384
+ const temp = entity.properties.measureUnit;
18385
+ measureUnit = MeasureAreaUnitAbbreviation[entity.properties.measureUnit];
18386
+ olGeometryArea = squareMetersToUnit(olGeometryArea, temp);
18387
+ const lengthLabel = olGeometryArea.toFixed(2).toString() + ' ' + measureUnit;
18388
+ this.updateLabelOfOlGeometry(olGeometry, lengthLabel);
18389
+ }
18390
+ }
18391
+ else {
18392
+ this.updateLabelOfOlGeometry(olGeometry, entity.properties.draw);
18393
+ }
18394
+ this.updateLabelType(olGeometry, entity.properties.labelType);
18395
+ this.updateMeasureUnit(olGeometry, entity.properties.measureUnit);
17686
18396
  this.updateFontSizeAndStyle(olGeometry, entity.properties.fontStyle.split(' ')[0].replace('px', ''), entity.properties.fontStyle.substring(entity.properties.fontStyle.indexOf(' ') + 1));
17687
18397
  this.updateFillAndStrokeColor(olGeometry, entity.properties.drawingStyle.fill, entity.properties.drawingStyle.stroke);
17688
18398
  this.updateOffset(olGeometry, entity.properties.offsetX, entity.properties.offsetY);
@@ -17690,7 +18400,7 @@ class DrawComponent {
17690
18400
  }
17691
18401
  });
17692
18402
  }
17693
- onSelectDraw(olFeature, label) {
18403
+ onSelectDraw(olFeature, label, labelTypeAndUnit) {
17694
18404
  const entities = this.activeStore.all();
17695
18405
  const olGeometry = olFeature.getGeometry();
17696
18406
  olGeometry.ol_uid = olFeature.get('id');
@@ -17716,6 +18426,8 @@ class DrawComponent {
17716
18426
  this.updateFontSizeAndStyle(olGeometry, fontSize, fontStyle);
17717
18427
  this.updateFillAndStrokeColor(olGeometry, fillColor, strokeColor);
17718
18428
  this.updateOffset(olGeometry, offsetX, offsetY);
18429
+ this.updateLabelType(olGeometry, labelTypeAndUnit[0]);
18430
+ this.updateMeasureUnit(olGeometry, labelTypeAndUnit[1]);
17719
18431
  this.replaceFeatureInStore(entity, olGeometry, rad);
17720
18432
  }
17721
18433
  });
@@ -17755,8 +18467,12 @@ class DrawComponent {
17755
18467
  lon4326 = center4326[0];
17756
18468
  lat4326 = center4326[1];
17757
18469
  rad = getDistance(center4326, extent4326);
18470
+ this.radiusFormControl.setValue(Math.round(rad));
17758
18471
  }
17759
18472
  }
18473
+ if (this.activeDrawControl.radiusDrawEnd$.getValue()) {
18474
+ rad = this.activeDrawControl.radiusDrawEnd$.getValue();
18475
+ }
17760
18476
  if (olGeometry instanceof OlPoint) {
17761
18477
  point4326 = transform(olGeometry.getFlatCoordinates(), projection, 'EPSG:4326');
17762
18478
  lon4326 = point4326[0];
@@ -17778,12 +18494,17 @@ class DrawComponent {
17778
18494
  stroke: olGeometry.get('strokeColor_')
17779
18495
  },
17780
18496
  offsetX: olGeometry.get('offsetX_'),
17781
- offsetY: olGeometry.get('offsetY_')
18497
+ offsetY: olGeometry.get('offsetY_'),
18498
+ labelType: olGeometry.get('labelType_'),
18499
+ measureUnit: olGeometry.get('measureUnit_')
17782
18500
  },
17783
18501
  meta: {
17784
18502
  id: featureId
17785
18503
  }
17786
18504
  });
18505
+ this.activeStore.setLayerExtent();
18506
+ this.activeDrawControl.predefinedRadius$.next(undefined);
18507
+ this.activeDrawControl.radiusDrawEnd$.next(undefined);
17787
18508
  }
17788
18509
  buildForm() {
17789
18510
  this.form = this.formBuilder.group({
@@ -17828,11 +18549,9 @@ class DrawComponent {
17828
18549
  /**
17829
18550
  * Called when the user double-clicks the selected drawing
17830
18551
  */
17831
- editLabelDrawing() {
17832
- if (this.selectedFeatures$.value.length) {
17833
- const olGeometry = featureToOl(this.selectedFeatures$.value[0], this.map.ol.getView().getProjection().getCode());
17834
- this.openDrawDialog(olGeometry, false);
17835
- }
18552
+ editLabelDrawing(feature) {
18553
+ const olGeometryFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
18554
+ this.openDrawDialog(olGeometryFeature, false);
17836
18555
  }
17837
18556
  openShorcutsDialog() {
17838
18557
  this.dialog.open(DrawShorcutsComponent);
@@ -17850,6 +18569,7 @@ class DrawComponent {
17850
18569
  });
17851
18570
  });
17852
18571
  this.updateHeightTable();
18572
+ this.activeStore.setLayerExtent();
17853
18573
  }
17854
18574
  /**
17855
18575
  * Called when the user toggles the labels toggle
@@ -17869,6 +18589,19 @@ class DrawComponent {
17869
18589
  onToggleDrawControl(toggleIsChecked) {
17870
18590
  toggleIsChecked ? this.toggleDrawControl() : this.deactivateDrawControl();
17871
18591
  }
18592
+ onToggleFreehandMode(event) {
18593
+ if (this.isCircle() && !event.checked) {
18594
+ this.activeDrawControl.ispredefinedRadius$.next(true);
18595
+ this.changeRadius(this.radiusFormControl.value);
18596
+ }
18597
+ else {
18598
+ this.activeDrawControl.setOlInteractionStyle(createInteractionStyle(this.fillColor, this.strokeColor, this.strokeWidth));
18599
+ this.activeDrawControl.ispredefinedRadius$.next(false);
18600
+ }
18601
+ this.freehandMode = event.checked;
18602
+ this.activeDrawControl.freehand$.next(event.checked);
18603
+ this.toggleDrawControl();
18604
+ }
17872
18605
  // User changes properties of a drawing element
17873
18606
  /**
17874
18607
  * Display the current layer with the current store and the current layerSource
@@ -18019,16 +18752,19 @@ class DrawComponent {
18019
18752
  onGeometryTypeChange(geometryType) {
18020
18753
  this.currGeometryType = geometryType;
18021
18754
  this.activeDrawControl.setGeometryType(geometryType);
18755
+ this.freehandMode ?
18756
+ this.onToggleFreehandMode({ checked: true }) :
18757
+ this.onToggleFreehandMode({ checked: false });
18022
18758
  this.toggleDrawControl();
18023
18759
  }
18024
18760
  // Updates the properties of olFeature inputted
18025
18761
  /**
18026
18762
  * Update the label of a geometry when a label is entered in a dialog box
18027
- * @param olGeometry the geometry
18763
+ * @param OlFeature the feature
18028
18764
  * @param label the label
18029
18765
  */
18030
- updateLabelOfOlGeometry(olGeometry, label) {
18031
- olGeometry.setProperties({
18766
+ updateLabelOfOlGeometry(OlFeature, label) {
18767
+ OlFeature.setProperties({
18032
18768
  _label: label
18033
18769
  }, true);
18034
18770
  }
@@ -18049,13 +18785,23 @@ class DrawComponent {
18049
18785
  offsetY_: offsetY
18050
18786
  }, true);
18051
18787
  }
18788
+ updateLabelType(olFeature, typeOfLabel) {
18789
+ olFeature.setProperties({
18790
+ labelType_: typeOfLabel
18791
+ }, true);
18792
+ }
18793
+ updateMeasureUnit(olFeature, measureUnit) {
18794
+ olFeature.setProperties({
18795
+ measureUnit_: measureUnit
18796
+ }, true);
18797
+ }
18052
18798
  // Updates values of the selected element on the HTML view
18053
18799
  getFeatureFontSize() {
18054
18800
  return this.selectedFeatures$.value.length > 0
18055
18801
  ? this.selectedFeatures$.value[0].properties.fontStyle
18056
18802
  .split(' ')[0]
18057
18803
  .replace('px', '')
18058
- : '20';
18804
+ : '15';
18059
18805
  }
18060
18806
  getFeatureFontStyle() {
18061
18807
  return this.selectedFeatures$.value.length > 0
@@ -18159,6 +18905,66 @@ class DrawComponent {
18159
18905
  }
18160
18906
  this.activeDrawControl.setOlMap(this.map.ol, true);
18161
18907
  }
18908
+ /**
18909
+ * get the geometry of design
18910
+ *
18911
+ */
18912
+ isPoint() {
18913
+ return this.activeDrawControl.getGeometryType() === this.geometryType.Point;
18914
+ }
18915
+ isLineString() {
18916
+ return this.activeDrawControl.getGeometryType() === this.geometryType.LineString;
18917
+ }
18918
+ isPolygon() {
18919
+ return this.activeDrawControl.getGeometryType() === this.geometryType.Polygon;
18920
+ }
18921
+ isCircle() {
18922
+ return this.activeDrawControl.getGeometryType() === this.geometryType.Circle;
18923
+ }
18924
+ /**
18925
+ * The fonction to predefine the radius of the user
18926
+ *
18927
+ */
18928
+ changeRadius(radius) {
18929
+ let radiusMeters;
18930
+ if (radius) {
18931
+ this.measureUnit === MeasureLengthUnit.Meters ? radiusMeters = radius :
18932
+ radiusMeters = radius * 1000;
18933
+ }
18934
+ else {
18935
+ radiusMeters = undefined;
18936
+ }
18937
+ const pointStyle = (feature, resolution) => {
18938
+ const geom = feature.getGeometry();
18939
+ const coordinates = olproj.transform(geom.getCoordinates(), this.map.projection, 'EPSG:4326');
18940
+ const radius = radiusMeters / (Math.cos((Math.PI / 180) * coordinates[1])) / resolution;
18941
+ this.activeDrawControl.predefinedRadius$.next(radiusMeters);
18942
+ return new olstyle.Style({
18943
+ image: new olstyle.Circle({
18944
+ radius: radius,
18945
+ stroke: new olstyle.Stroke({
18946
+ width: 1,
18947
+ color: 'rgba(143,7,7,1)'
18948
+ }),
18949
+ fill: new olstyle.Fill({
18950
+ color: 'rgba(255,255,255,0.4)'
18951
+ })
18952
+ })
18953
+ });
18954
+ };
18955
+ this.activeDrawControl.setOlInteractionStyle(pointStyle);
18956
+ this.toggleDrawControl();
18957
+ }
18958
+ onMeasureUnitChange(selectedMeasureUnit) {
18959
+ if (selectedMeasureUnit === this.measureUnit) {
18960
+ return;
18961
+ }
18962
+ else {
18963
+ this.measureUnit = selectedMeasureUnit;
18964
+ this.measureUnit === MeasureLengthUnit.Meters ? this.radiusFormControl.setValue(this.radiusFormControl.value * 1000) :
18965
+ this.radiusFormControl.setValue(this.radiusFormControl.value / 1000);
18966
+ }
18967
+ }
18162
18968
  /**
18163
18969
  * Recreates the style of the feature stored
18164
18970
  */
@@ -18174,6 +18980,10 @@ class DrawComponent {
18174
18980
  });
18175
18981
  }
18176
18982
  }
18983
+ getRadius(olGeometry) {
18984
+ const length = getLength(olGeometry);
18985
+ return Number(length / (2 * Math.PI));
18986
+ }
18177
18987
  }
18178
18988
  DrawComponent.ɵfac = function DrawComponent_Factory(t) { return new (t || DrawComponent)(i0.ɵɵdirectiveInject(i2$1.LanguageService), i0.ɵɵdirectiveInject(i2$2.UntypedFormBuilder), i0.ɵɵdirectiveInject(DrawStyleService), i0.ɵɵdirectiveInject(i1.MatDialog), i0.ɵɵdirectiveInject(DrawIconService)); };
18179
18989
  DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent, selectors: [["igo-draw"]], viewQuery: function DrawComponent_Query(rf, ctx) { if (rf & 1) {
@@ -18181,8 +18991,8 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
18181
18991
  } if (rf & 2) {
18182
18992
  let _t;
18183
18993
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.select = _t.first);
18184
- } }, inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, decls: 47, vars: 45, consts: [[1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [1, "draw-options", "mat-typography"], [3, "disabled", "checked", "labelPosition", "change"], [3, "checked", "labelPosition", "change"], ["appearance", "outline", 1, "layer-select"], [3, "value", "selectionChange"], ["selectedLayer", ""], [3, "value", 4, "ngFor", "ngForOf"], ["id", "createNewLayer"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click", 4, "ngIf"], ["class", "deleteBtn", "mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "disabled", "click", 4, "ngIf"], [1, "table-compact", 3, "store", "template", "dblclick"], ["table", ""], [1, "icon-options"], [4, "ngIf"], ["mat-icon-button", "", "color", "accent", "disableRipple", "true", 3, "click"], ["svgIcon", "keyboard-outline", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "shortcuts-icon", 3, "matTooltip"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click"], [3, "svgIcon"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "deleteBtn", 3, "matTooltip", "disabled", "click"], ["svgIcon", "delete"], ["class", "box", 4, "ngIf"], ["value", "", 3, "click"], [3, "value", "click", 4, "ngFor", "ngForOf"], [1, "box"], [3, "src"], [3, "value", "click"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "palette", "matBadgeColor", "warn", "matBadgeSize", "medium", 1, "style-icon", 3, "matBadge"]], template: function DrawComponent_Template(rf, ctx) { if (rf & 1) {
18185
- const _r21 = i0.ɵɵgetCurrentView();
18994
+ } }, inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, decls: 49, vars: 47, consts: [[1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [1, "draw-options", "mat-typography"], [3, "disabled", "checked", "labelPosition", "change"], [3, "checked", "labelPosition", "change"], [3, "checked", "labelPosition", "change", 4, "ngIf"], ["class", "radius-unit", 4, "ngIf"], ["appearance", "outline", 1, "layer-select"], [3, "value", "selectionChange"], ["selectedLayer", ""], [3, "value", 4, "ngFor", "ngForOf"], ["id", "createNewLayer"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click", 4, "ngIf"], ["class", "deleteBtn", "mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "disabled", "click", 4, "ngIf"], [1, "table-compact", 3, "store", "template"], ["table", ""], [1, "icon-options"], [4, "ngIf"], ["mat-icon-button", "", "color", "accent", "disableRipple", "true", 3, "click"], ["svgIcon", "keyboard-outline", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "shortcuts-icon", 3, "matTooltip"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click", 4, "ngIf"], [1, "radius-unit"], [1, "radius-form"], [1, "radius"], ["matInput", "", "type", "number", "min", "0", 3, "placeholder", "formControl", "readonly"], [1, "unit-field"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click"], [3, "svgIcon"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "deleteBtn", 3, "matTooltip", "disabled", "click"], ["svgIcon", "delete"], ["class", "box", 4, "ngIf"], ["value", "", 3, "click"], [3, "value", "click", 4, "ngFor", "ngForOf"], [1, "box"], [3, "src"], [3, "value", "click"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "palette", "matBadgeColor", "warn", "matBadgeSize", "medium", 1, "style-icon", 3, "matBadge"]], template: function DrawComponent_Template(rf, ctx) { if (rf & 1) {
18995
+ const _r29 = i0.ɵɵgetCurrentView();
18186
18996
  i0.ɵɵelementStart(0, "div")(1, "div", 0)(2, "mat-button-toggle-group", 1);
18187
18997
  i0.ɵɵlistener("change", function DrawComponent_Template_mat_button_toggle_group_change_2_listener($event) { return ctx.onGeometryTypeChange($event.value); });
18188
18998
  i0.ɵɵelementStart(3, "mat-button-toggle", 2);
@@ -18210,36 +19020,39 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
18210
19020
  i0.ɵɵlistener("change", function DrawComponent_Template_mat_slide_toggle_change_19_listener() { return ctx.onToggleLabels(); });
18211
19021
  i0.ɵɵtext(20);
18212
19022
  i0.ɵɵpipe(21, "translate");
18213
- i0.ɵɵelementEnd()();
18214
- i0.ɵɵelement(22, "mat-divider");
18215
- i0.ɵɵelementStart(23, "div")(24, "mat-form-field", 6)(25, "mat-label");
18216
- i0.ɵɵtext(26);
18217
- i0.ɵɵpipe(27, "translate");
18218
19023
  i0.ɵɵelementEnd();
18219
- i0.ɵɵelementStart(28, "mat-select", 7, 8);
18220
- i0.ɵɵlistener("selectionChange", function DrawComponent_Template_mat_select_selectionChange_28_listener() { i0.ɵɵrestoreView(_r21); const _r0 = i0.ɵɵreference(29); return i0.ɵɵresetView(ctx.onLayerChange(_r0.value)); });
18221
- i0.ɵɵtemplate(30, DrawComponent_mat_option_30_Template, 2, 2, "mat-option", 9);
18222
- i0.ɵɵelementStart(31, "mat-option", 10);
18223
- i0.ɵɵtext(32);
18224
- i0.ɵɵpipe(33, "translate");
18225
- i0.ɵɵelementEnd()()();
18226
- i0.ɵɵtemplate(34, DrawComponent_button_34_Template, 4, 7, "button", 11);
19024
+ i0.ɵɵtemplate(22, DrawComponent_mat_slide_toggle_22_Template, 3, 5, "mat-slide-toggle", 6);
19025
+ i0.ɵɵtemplate(23, DrawComponent_div_23_Template, 8, 7, "div", 7);
18227
19026
  i0.ɵɵelementEnd();
18228
- i0.ɵɵelement(35, "mat-divider");
18229
- i0.ɵɵelementStart(36, "div");
18230
- i0.ɵɵtemplate(37, DrawComponent_button_37_Template, 4, 6, "button", 12);
18231
- i0.ɵɵelementStart(38, "div")(39, "igo-entity-table", 13, 14);
18232
- i0.ɵɵlistener("dblclick", function DrawComponent_Template_igo_entity_table_dblclick_39_listener() { return ctx.editLabelDrawing(); });
19027
+ i0.ɵɵelement(24, "mat-divider");
19028
+ i0.ɵɵelementStart(25, "div")(26, "mat-form-field", 8)(27, "mat-label");
19029
+ i0.ɵɵtext(28);
19030
+ i0.ɵɵpipe(29, "translate");
19031
+ i0.ɵɵelementEnd();
19032
+ i0.ɵɵelementStart(30, "mat-select", 9, 10);
19033
+ i0.ɵɵlistener("selectionChange", function DrawComponent_Template_mat_select_selectionChange_30_listener() { i0.ɵɵrestoreView(_r29); const _r2 = i0.ɵɵreference(31); return i0.ɵɵresetView(ctx.onLayerChange(_r2.value)); });
19034
+ i0.ɵɵtemplate(32, DrawComponent_mat_option_32_Template, 2, 2, "mat-option", 11);
19035
+ i0.ɵɵelementStart(33, "mat-option", 12);
19036
+ i0.ɵɵtext(34);
19037
+ i0.ɵɵpipe(35, "translate");
18233
19038
  i0.ɵɵelementEnd()()();
18234
- i0.ɵɵelementStart(41, "div", 15);
18235
- i0.ɵɵtemplate(42, DrawComponent_mat_form_field_42_Template, 11, 8, "mat-form-field", 16);
19039
+ i0.ɵɵtemplate(36, DrawComponent_button_36_Template, 4, 7, "button", 13);
18236
19040
  i0.ɵɵelementEnd();
18237
- i0.ɵɵelementStart(43, "button", 17);
18238
- i0.ɵɵlistener("click", function DrawComponent_Template_button_click_43_listener() { return ctx.openShorcutsDialog(); });
18239
- i0.ɵɵelement(44, "mat-icon", 18);
18240
- i0.ɵɵpipe(45, "translate");
19041
+ i0.ɵɵelement(37, "mat-divider");
19042
+ i0.ɵɵelementStart(38, "div");
19043
+ i0.ɵɵtemplate(39, DrawComponent_button_39_Template, 4, 6, "button", 14);
19044
+ i0.ɵɵelementStart(40, "div");
19045
+ i0.ɵɵelement(41, "igo-entity-table", 15, 16);
19046
+ i0.ɵɵelementEnd()();
19047
+ i0.ɵɵelementStart(43, "div", 17);
19048
+ i0.ɵɵtemplate(44, DrawComponent_mat_form_field_44_Template, 11, 8, "mat-form-field", 18);
19049
+ i0.ɵɵelementEnd();
19050
+ i0.ɵɵelementStart(45, "button", 19);
19051
+ i0.ɵɵlistener("click", function DrawComponent_Template_button_click_45_listener() { return ctx.openShorcutsDialog(); });
19052
+ i0.ɵɵelement(46, "mat-icon", 20);
19053
+ i0.ɵɵpipe(47, "translate");
18241
19054
  i0.ɵɵelementEnd();
18242
- i0.ɵɵtemplate(46, DrawComponent_button_46_Template, 5, 7, "button", 19);
19055
+ i0.ɵɵtemplate(48, DrawComponent_button_48_Template, 5, 7, "button", 21);
18243
19056
  i0.ɵɵelementEnd();
18244
19057
  } if (rf & 2) {
18245
19058
  i0.ɵɵadvance(2);
@@ -18247,35 +19060,39 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
18247
19060
  i0.ɵɵadvance(1);
18248
19061
  i0.ɵɵproperty("value", ctx.geometryType.Point);
18249
19062
  i0.ɵɵadvance(1);
18250
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 27, "igo.geo.draw." + ctx.geometryType.Point), " ");
19063
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 29, "igo.geo.draw." + ctx.geometryType.Point), " ");
18251
19064
  i0.ɵɵadvance(2);
18252
19065
  i0.ɵɵproperty("value", ctx.geometryType.LineString);
18253
19066
  i0.ɵɵadvance(1);
18254
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 29, "igo.geo.draw." + ctx.geometryType.LineString), " ");
19067
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 31, "igo.geo.draw." + ctx.geometryType.LineString), " ");
18255
19068
  i0.ɵɵadvance(2);
18256
19069
  i0.ɵɵproperty("value", ctx.geometryType.Polygon);
18257
19070
  i0.ɵɵadvance(1);
18258
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 31, "igo.geo.draw." + ctx.geometryType.Polygon), " ");
19071
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 33, "igo.geo.draw." + ctx.geometryType.Polygon), " ");
18259
19072
  i0.ɵɵadvance(2);
18260
19073
  i0.ɵɵproperty("value", ctx.geometryType.Circle);
18261
19074
  i0.ɵɵadvance(1);
18262
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 33, "igo.geo.draw." + ctx.geometryType.Circle), " ");
19075
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 35, "igo.geo.draw." + ctx.geometryType.Circle), " ");
18263
19076
  i0.ɵɵadvance(3);
18264
19077
  i0.ɵɵproperty("disabled", ctx.drawControlIsDisabled)("checked", ctx.drawControlIsActive)("labelPosition", "before");
18265
19078
  i0.ɵɵadvance(1);
18266
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 35, "igo.geo.spatialFilter.drawControl"), " ");
19079
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 37, "igo.geo.spatialFilter.drawControl"), " ");
18267
19080
  i0.ɵɵadvance(2);
18268
19081
  i0.ɵɵproperty("checked", ctx.labelsAreShown)("labelPosition", "before");
18269
19082
  i0.ɵɵadvance(1);
18270
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21, 37, "igo.geo.draw.toggleMapTooltips"), " ");
18271
- i0.ɵɵadvance(6);
18272
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(27, 39, "igo.geo.draw.layer.title"));
19083
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21, 39, "igo.geo.draw.toggleMapTooltips"), " ");
19084
+ i0.ɵɵadvance(2);
19085
+ i0.ɵɵproperty("ngIf", !ctx.isPoint());
19086
+ i0.ɵɵadvance(1);
19087
+ i0.ɵɵproperty("ngIf", ctx.isCircle());
19088
+ i0.ɵɵadvance(5);
19089
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(29, 41, "igo.geo.draw.layer.title"));
18273
19090
  i0.ɵɵadvance(2);
18274
19091
  i0.ɵɵproperty("value", ctx.updateActiveLayer());
18275
19092
  i0.ɵɵadvance(2);
18276
19093
  i0.ɵɵproperty("ngForOf", ctx.allLayers);
18277
19094
  i0.ɵɵadvance(2);
18278
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(33, 41, "igo.geo.draw.layer.createNewLayer"), " ");
19095
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(35, 43, "igo.geo.draw.layer.createNewLayer"), " ");
18279
19096
  i0.ɵɵadvance(2);
18280
19097
  i0.ɵɵproperty("ngIf", ctx.activeDrawingLayer);
18281
19098
  i0.ɵɵadvance(3);
@@ -18285,10 +19102,10 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
18285
19102
  i0.ɵɵadvance(3);
18286
19103
  i0.ɵɵproperty("ngIf", ctx.icons.length >= 1);
18287
19104
  i0.ɵɵadvance(2);
18288
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(45, 43, "igo.geo.draw.shortcuts"));
19105
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(47, 45, "igo.geo.draw.shortcuts"));
18289
19106
  i0.ɵɵadvance(2);
18290
19107
  i0.ɵɵproperty("ngIf", ctx.selectedFeatures$.value.length);
18291
- } }, dependencies: [i1$1.NgForOf, i1$1.NgIf, i3.MatButton, i18.MatButtonToggleGroup, i18.MatButtonToggle, i11.MatDivider, i13.MatFormField, i13.MatLabel, i2.MatIcon, i7$1.MatBadge, i4.MatTooltip, i15.MatSelect, i15.MatSelectTrigger, i9.MatOption, i23.MatSlideToggle, i5$1.EntityTableComponent, i1$1.AsyncPipe, i7.TranslatePipe], styles: [".geometry-type-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:25%}.draw-options[_ngcontent-%COMP%]{overflow-x:hidden}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options[_ngcontent-%COMP%]{margin:5px 5px 0}.edition-drawing[_ngcontent-%COMP%]{padding:10px 0}img[_ngcontent-%COMP%]{width:100%;height:100%}.deleteBtn[_ngcontent-%COMP%]{margin-left:12px}.storeTable[_ngcontent-%COMP%]{height:auto!important}.layer-select[_ngcontent-%COMP%]{width:85%;padding:10px 10px 0%}.input-button-container[_ngcontent-%COMP%]{padding:10px}.input-button-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:25%}.input-button-container[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{left:8px;bottom:10px}"], data: { animation: [
19108
+ } }, dependencies: [i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NumberValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.MinValidator, i2$2.NgForm, i2$2.FormControlDirective, i1$1.NgForOf, i1$1.NgIf, i3.MatButton, i18.MatButtonToggleGroup, i18.MatButtonToggle, i11.MatDivider, i13.MatFormField, i13.MatLabel, i2.MatIcon, i7$1.MatBadge, i4.MatTooltip, i14.MatInput, i15.MatSelect, i15.MatSelectTrigger, i9.MatOption, i23.MatSlideToggle, i5$1.EntityTableComponent, i1$1.AsyncPipe, i7.TranslatePipe], styles: [".geometry-type-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:25%}.draw-options[_ngcontent-%COMP%]{overflow-x:hidden}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options[_ngcontent-%COMP%]{margin:5px 5px 0}.edition-drawing[_ngcontent-%COMP%]{padding:10px 0}img[_ngcontent-%COMP%]{width:100%;height:100%}.deleteBtn[_ngcontent-%COMP%]{margin-left:12px}.storeTable[_ngcontent-%COMP%]{height:auto!important}.layer-select[_ngcontent-%COMP%]{width:85%;padding:10px 10px 0%}.input-button-container[_ngcontent-%COMP%]{padding:10px}.input-button-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:25%}.input-button-container[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{left:8px;bottom:10px}.radius[_ngcontent-%COMP%]{display:flex;flex-flow:column nowrap;width:110%}.unit-field[_ngcontent-%COMP%]{width:110px;margin-left:30px}.radius-unit[_ngcontent-%COMP%]{display:flex;width:100%;margin-left:2px;padding:5px} igo-entity-table td:last-child{text-align:right!important} igo-entity-table td:last-child button{margin:0%!important}"], data: { animation: [
18292
19109
  trigger('openClose', [
18293
19110
  state('open', style({
18294
19111
  opacity: 1
@@ -18313,7 +19130,7 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
18313
19130
  transition('open => closed', [animate('600ms ease')]),
18314
19131
  transition('closed => open', [animate('800ms ease')])
18315
19132
  ])
18316
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\" [value]=\"geometryType.Point\">\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{'igo.geo.draw.' + geometryType.Point | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{'igo.geo.draw.' + geometryType.LineString | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{'igo.geo.draw.' + geometryType.Polygon | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{'igo.geo.draw.' + geometryType.Circle | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n </div>\n\n <mat-divider></mat-divider>\n\n <div>\n <mat-form-field appearance=\"outline\" class=\"layer-select\">\n <mat-label>{{'igo.geo.draw.layer.title' | translate}}</mat-label>\n <mat-select #selectedLayer (selectionChange)=\"onLayerChange(selectedLayer.value)\" [value]=\"updateActiveLayer()\">\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\" >\n {{'igo.geo.draw.layer.createNewLayer' | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"activeDrawingLayer.visible ?\n ('igo.geo.layer.hideLayer' | translate) :\n ('igo.geo.layer.showLayer' | translate)\"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\">\n <mat-icon\n [svgIcon]=\"activeDrawingLayer.visible ? 'eye' : 'eye-off'\">\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n (dblclick)=\"editLabelDrawing()\">\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\">\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{ 'igo.geo.draw.noIcon' | translate }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\">\n <div class=\"box\">\n <img src=\"{{ icon_html }}\">\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n svgIcon=\"keyboard-outline\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.layer.style.styleModalTooltip' | translate\">\n {{'igo.geo.layer.style.styleModal' | translate}}\n <mat-icon\n class=\"style-icon\"\n svgIcon=\"palette\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\">\n </mat-icon>\n </button>\n</div>\n", styles: [".geometry-type-toggle{padding:10px;text-align:center}.geometry-type-toggle mat-button-toggle-group{width:100%}.geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}.draw-options{overflow-x:hidden}.draw-options mat-slide-toggle{width:100%;margin:10px}.draw-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options{margin:5px 5px 0}.edition-drawing{padding:10px 0}img{width:100%;height:100%}.deleteBtn{margin-left:12px}.storeTable{height:auto!important}.layer-select{width:85%;padding:10px 10px 0%}.input-button-container{padding:10px}.input-button-container mat-form-field{width:25%}.input-button-container button{left:8px;bottom:10px}\n"] }]
19133
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\" [value]=\"geometryType.Point\">\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{'igo.geo.draw.' + geometryType.Point | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{'igo.geo.draw.' + geometryType.LineString | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{'igo.geo.draw.' + geometryType.Polygon | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{'igo.geo.draw.' + geometryType.Circle | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\">\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\">\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <form class=\"radius-form\">\n <mat-form-field class=\"radius\">\n <input\n matInput type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div>\n <mat-form-field appearance=\"outline\" class=\"layer-select\">\n <mat-label>{{'igo.geo.draw.layer.title' | translate}}</mat-label>\n <mat-select #selectedLayer (selectionChange)=\"onLayerChange(selectedLayer.value)\" [value]=\"updateActiveLayer()\">\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\" >\n {{'igo.geo.draw.layer.createNewLayer' | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"activeDrawingLayer.visible ?\n ('igo.geo.layer.hideLayer' | translate) :\n ('igo.geo.layer.showLayer' | translate)\"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\">\n <mat-icon\n [svgIcon]=\"activeDrawingLayer.visible ? 'eye' : 'eye-off'\">\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\">\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\">\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{ 'igo.geo.draw.noIcon' | translate }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\">\n <div class=\"box\">\n <img src=\"{{ icon_html }}\">\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n svgIcon=\"keyboard-outline\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.layer.style.styleModalTooltip' | translate\">\n {{'igo.geo.layer.style.styleModal' | translate}}\n <mat-icon\n class=\"style-icon\"\n svgIcon=\"palette\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\">\n </mat-icon>\n </button>\n</div>\n", styles: [".geometry-type-toggle{padding:10px;text-align:center}.geometry-type-toggle mat-button-toggle-group{width:100%}.geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}.draw-options{overflow-x:hidden}.draw-options mat-slide-toggle{width:100%;margin:10px}.draw-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options{margin:5px 5px 0}.edition-drawing{padding:10px 0}img{width:100%;height:100%}.deleteBtn{margin-left:12px}.storeTable{height:auto!important}.layer-select{width:85%;padding:10px 10px 0%}.input-button-container{padding:10px}.input-button-container mat-form-field{width:25%}.input-button-container button{left:8px;bottom:10px}.radius{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}.radius-unit{display:flex;width:100%;margin-left:2px;padding:5px}::ng-deep igo-entity-table td:last-child{text-align:right!important}::ng-deep igo-entity-table td:last-child button{margin:0%!important}\n"] }]
18317
19134
  }], function () { return [{ type: i2$1.LanguageService }, { type: i2$2.UntypedFormBuilder }, { type: DrawStyleService }, { type: i1.MatDialog }, { type: DrawIconService }]; }, { map: [{
18318
19135
  type: Input
18319
19136
  }], stores: [{
@@ -18603,7 +19420,7 @@ StyleModalComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StyleMo
18603
19420
  i0.ɵɵproperty("value", ctx.getFeatureOffsetY());
18604
19421
  i0.ɵɵadvance(4);
18605
19422
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(51, 44, "igo.geo.draw.cancel"), " ");
18606
- } }, dependencies: [i13.MatFormField, i13.MatLabel, i13.MatSuffix, i14.MatInput, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.FormGroupDirective, i2$2.FormControlName, i1$1.NgForOf, i1$1.NgIf, i2.MatIcon, i3.MatButton, i15.MatSelect, i9.MatOption, i4.MatTooltip, i12.ColorPickerDirective, i7.TranslatePipe], styles: ["h2[_ngcontent-%COMP%]{font-weight:700;font-size:large}.igo-form[_ngcontent-%COMP%]{padding:10px}.fill-field[_ngcontent-%COMP%], .stroke-field[_ngcontent-%COMP%]{width:130px}.fill-color-picker[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{position:relative;top:7px}.fill-color-picker[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{left:8px}.stroke-color-picker[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{position:relative;top:7px}.stroke-color-picker[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{left:35px}.box[_ngcontent-%COMP%]{width:25px;height:25px}.edition-drawing[_ngcontent-%COMP%]{padding:10px 0}.igo-input-container[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}.igo-form-input-box[_ngcontent-%COMP%]{width:150px}button[_ngcontent-%COMP%]{margin-right:5px}"] });
19423
+ } }, dependencies: [i13.MatFormField, i13.MatLabel, i13.MatSuffix, i14.MatInput, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.FormGroupDirective, i2$2.FormControlName, i1$1.NgForOf, i1$1.NgIf, i2.MatIcon, i3.MatButton, i15.MatSelect, i9.MatOption, i4.MatTooltip, i12$1.ColorPickerDirective, i7.TranslatePipe], styles: ["h2[_ngcontent-%COMP%]{font-weight:700;font-size:large}.igo-form[_ngcontent-%COMP%]{padding:10px}.fill-field[_ngcontent-%COMP%], .stroke-field[_ngcontent-%COMP%]{width:130px}.fill-color-picker[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{position:relative;top:7px}.fill-color-picker[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{left:8px}.stroke-color-picker[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{position:relative;top:7px}.stroke-color-picker[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{left:35px}.box[_ngcontent-%COMP%]{width:25px;height:25px}.edition-drawing[_ngcontent-%COMP%]{padding:10px 0}.igo-input-container[_ngcontent-%COMP%] .mat-form-field[_ngcontent-%COMP%] + .mat-form-field[_ngcontent-%COMP%]{margin-left:8px}.igo-form-input-box[_ngcontent-%COMP%]{width:150px}button[_ngcontent-%COMP%]{margin-right:5px}"] });
18607
19424
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StyleModalComponent, [{
18608
19425
  type: Component,
18609
19426
  args: [{ selector: 'igo-style-modal-component', template: "<div mat-dialog-content>\n <h2 mat-dialog-title class=\"mat-typography\">{{ 'igo.geo.layer.style.styleModal' | translate }}</h2>\n <div\n class=\"edition-drawing mat-typography\"\n [hidden]=\"data.features.length === 0\">\n <form\n class=\"igo-form\"\n [formGroup]=\"form\">\n <div class=\"fill-color-picker mat-typography\" *ngIf=\"linestringOnly !== true\">\n <span>\n <mat-icon class=\"stroke-palette-icon\" svgIcon=\"square\"></mat-icon>\n {{ 'igo.geo.draw.fill' | translate }}\n </span>\n\n <mat-form-field\n class=\"fill-field\"\n appearance=\"outline\"\n floatLabel=\"always\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.colorPicker' | translate\">\n <mat-label>{{ getFeatureFillColor() }}</mat-label>\n <input\n #fillColorInput\n formControlName=\"fill\"\n matInput\n type=\"text\"\n [style.background]=\"getFeatureFillColor()\"\n [readonly]=\"true\"\n [colorPicker]=\"getFeatureFillColor()\"\n [cpWidth]=\"'200px'\"\n [cpOutputFormat]=\"'rgba'\"\n [cpPosition]=\"'bottom'\"\n [cpPositionOffset]=\"'-75%'\"\n [cpCancelButton]=\"true\"\n [cpCancelButtonText]=\"'igo.geo.draw.cancel' | translate\"\n [cpOKButton]=\"true\"\n (colorPickerChange)=\"styleModalData.fillColor = $event\">\n </mat-form-field>\n </div>\n\n <div class=\"stroke-color-picker mat-typography\">\n <span>\n <mat-icon\n class=\"stroke-palette-icon\"\n svgIcon=\"square-outline\">\n </mat-icon>\n {{'igo.geo.draw.stroke' | translate}}\n </span>\n\n <mat-form-field\n class=\"stroke-field\"\n appearance=\"outline\"\n floatLabel=\"always\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.colorPicker' | translate\">\n <mat-label>{{ getFeatureStrokeColor() }}</mat-label>\n <input\n #strokeColorInput\n formControlName=\"stroke\"\n matInput\n type=\"text\"\n [style.background]=\"getFeatureStrokeColor()\"\n [readonly]=\"true\"\n [colorPicker]=\"getFeatureStrokeColor()\"\n [cpWidth]=\"'200px'\"\n [cpPosition]=\"'bottom'\"\n [cpPositionOffset]=\"'-75%'\"\n [cpOutputFormat]=\"'rgba'\"\n [cpCancelButton]=\"true\"\n [cpCancelButtonText]=\"'igo.geo.draw.cancel' | translate\"\n [cpOKButton]=\"true\"\n (colorPickerChange)=\"styleModalData.strokeColor = $event\">\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field appearance=\"outline\" class=\"igo-form-input-box\">\n <mat-label>{{ 'igo.geo.draw.fontSize' | translate }}</mat-label>\n <input\n matInput\n #testFontSize\n type=\"number\"\n placeholder=\"10\"\n min=\"10\"\n onkeydown=\"return event.keyCode !== 69\"\n [value]=\"getFeatureFontSize()\"\n (input)=\"styleModalData.fontSize = $event.target.value\">\n <span matSuffix>px</span>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"igo-form-input-box\">\n <mat-label>{{ 'igo.geo.draw.fontStyle' | translate }}</mat-label>\n <mat-select\n #testFontStyle\n [value]=\"getFeatureFontStyle()\"\n (selectionChange)=\"styleModalData.fontStyle = $event.value\">\n <mat-option\n *ngFor=\"let fontSelect of allFontStyles\"\n [value]=\"fontSelect\">\n {{ fontSelect }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-input-container\">\n <mat-form-field appearance=\"outline\" class=\"igo-form-input-box\">\n <mat-label>{{ 'igo.geo.draw.offsetX' | translate }}</mat-label>\n <input\n matInput\n #offsetXInput\n type=\"number\"\n onkeydown=\"return event.keyCode !== 69\"\n [value]=\"getFeatureOffsetX()\"\n (input)=\"styleModalData.offsetX = $event.target.value\">\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"igo-form-input-box\">\n <mat-label>{{ 'igo.geo.draw.offsetY' | translate }}</mat-label>\n <input\n matInput\n #offsetYInput\n type=\"number\"\n onkeydown=\"return event.keyCode !== 69\"\n [value]=\"getFeatureOffsetY()\"\n (input)=\"styleModalData.offsetY= $event.target.value\">\n </mat-form-field>\n </div>\n </form>\n </div>\n</div>\n<div mat-dialog-actions>\n <button \n mat-raised-button \n (click)=\"cancelDrawing()\">{{'igo.geo.draw.cancel' | translate}}\n </button>\n <button \n mat-raised-button \n color=\"primary\" \n (click)=\"confirm()\">OK\n </button>\n</div>\n", styles: ["h2{font-weight:700;font-size:large}.igo-form{padding:10px}.fill-field,.stroke-field{width:130px}.fill-color-picker mat-icon{position:relative;top:7px}.fill-color-picker mat-form-field{left:8px}.stroke-color-picker mat-icon{position:relative;top:7px}.stroke-color-picker mat-form-field{left:35px}.box{width:25px;height:25px}.edition-drawing{padding:10px 0}.igo-input-container .mat-form-field+.mat-form-field{margin-left:8px}.igo-form-input-box{width:150px}button{margin-right:5px}\n"] }]
@@ -18745,9 +19562,9 @@ IgoLayerModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [MatInputM
18745
19562
  LayerLegendListBindingDirective,
18746
19563
  TrackFeatureButtonComponent,
18747
19564
  StyleModalComponent] }); })();
18748
- i0.ɵɵsetComponentScope(LayerItemComponent, [i1$1.NgClass, i1$1.NgIf, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5.MatListItem, i9.MatLine, i5.MatListIconCssMatStyler, i7$1.MatBadge, i12$1.MatCheckbox, LayerLegendComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
19565
+ i0.ɵɵsetComponentScope(LayerItemComponent, [i1$1.NgClass, i1$1.NgIf, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5.MatListItem, i9.MatLine, i5.MatListIconCssMatStyler, i7$1.MatBadge, i12.MatCheckbox, LayerLegendComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
18749
19566
  i0.ɵɵsetComponentScope(LayerLegendItemComponent, [i4.MatTooltip, i5.MatListItem, i9.MatLine, LayerLegendComponent], []);
18750
- i0.ɵɵsetComponentScope(LayerListComponent, [i2$2.NgControlStatus, i1$1.NgClass, i1$1.NgForOf, i1$1.NgIf, i1$1.NgTemplateOutlet, i2$2.NgModel, i11.MatDivider, i7$2.MatMenu, i7$2.MatMenuTrigger, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5.MatList, i5.MatListItem, i13$1.MatSlider, i7$1.MatBadge, i12$1.MatCheckbox, i5$1.ListItemDirective, i5$1.ListComponent, i5$1.PanelComponent, LayerItemComponent,
19567
+ i0.ɵɵsetComponentScope(LayerListComponent, [i2$2.NgControlStatus, i1$1.NgClass, i1$1.NgForOf, i1$1.NgIf, i1$1.NgTemplateOutlet, i2$2.NgModel, i11.MatDivider, i7$2.MatMenu, i7$2.MatMenuTrigger, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5.MatList, i5.MatListItem, i13$1.MatSlider, i7$1.MatBadge, i12.MatCheckbox, i5$1.ListItemDirective, i5$1.ListComponent, i5$1.PanelComponent, LayerItemComponent,
18751
19568
  LayerListToolComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
18752
19569
  i0.ɵɵsetComponentScope(LayerLegendListComponent, [i1$1.NgForOf, i1$1.NgIf, i11.MatDivider, i23.MatSlideToggle, i4.MatTooltip, i5$1.ListItemDirective, i5$1.ListComponent, LayerLegendItemComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
18753
19570
 
@@ -20071,7 +20888,9 @@ IgoDrawModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [FormsModul
20071
20888
  IgoEntityTableModule,
20072
20889
  ColorPickerModule,
20073
20890
  BrowserModule,
20074
- BrowserAnimationsModule] });
20891
+ BrowserAnimationsModule,
20892
+ MatRadioModule,
20893
+ MatCheckboxModule] });
20075
20894
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(IgoDrawModule, [{
20076
20895
  type: NgModule,
20077
20896
  args: [{
@@ -20096,7 +20915,9 @@ IgoDrawModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [FormsModul
20096
20915
  IgoEntityTableModule,
20097
20916
  ColorPickerModule,
20098
20917
  BrowserModule,
20099
- BrowserAnimationsModule
20918
+ BrowserAnimationsModule,
20919
+ MatRadioModule,
20920
+ MatCheckboxModule
20100
20921
  ],
20101
20922
  declarations: [DrawComponent, DrawPopupComponent, DrawLayerPopupComponent, DrawShorcutsComponent],
20102
20923
  exports: [DrawComponent]
@@ -20122,7 +20943,9 @@ IgoDrawModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [FormsModul
20122
20943
  IgoEntityTableModule,
20123
20944
  ColorPickerModule,
20124
20945
  BrowserModule,
20125
- BrowserAnimationsModule], exports: [DrawComponent] }); })();
20946
+ BrowserAnimationsModule,
20947
+ MatRadioModule,
20948
+ MatCheckboxModule], exports: [DrawComponent] }); })();
20126
20949
 
20127
20950
  class IgoDrawingToolModule {
20128
20951
  }
@@ -22286,6 +23109,14 @@ class GeometryFormFieldInputComponent {
22286
23109
  }
22287
23110
  this.toggleControl();
22288
23111
  }
23112
+ /**
23113
+ * Whether freehand draw control should be active or not
23114
+ */
23115
+ get predefinedRadius() { return this._predefinedRadius; }
23116
+ set predefinedRadius(value) {
23117
+ this._predefinedRadius = value;
23118
+ this.drawControl.ispredefinedRadius$.next(value);
23119
+ }
22289
23120
  /**
22290
23121
  * Style for the draw control (applies while the geometry is being drawn)
22291
23122
  */
@@ -22666,7 +23497,7 @@ class GeometryFormFieldInputComponent {
22666
23497
  }
22667
23498
  }
22668
23499
  GeometryFormFieldInputComponent.ɵfac = function GeometryFormFieldInputComponent_Factory(t) { return new (t || GeometryFormFieldInputComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2$2.NgControl, 10)); };
22669
- GeometryFormFieldInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GeometryFormFieldInputComponent, selectors: [["igo-geometry-form-field-input"]], inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, decls: 1, vars: 0, template: function GeometryFormFieldInputComponent_Template(rf, ctx) { if (rf & 1) {
23500
+ GeometryFormFieldInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: GeometryFormFieldInputComponent, selectors: [["igo-geometry-form-field-input"]], inputs: { map: "map", geometryType: "geometryType", drawGuide: "drawGuide", measure: "measure", drawControlIsActive: "drawControlIsActive", freehandDrawIsActive: "freehandDrawIsActive", predefinedRadius: "predefinedRadius", controlOptions: "controlOptions", drawStyle: "drawStyle", overlayStyle: "overlayStyle", value: "value", radius: "radius" }, decls: 1, vars: 0, template: function GeometryFormFieldInputComponent_Template(rf, ctx) { if (rf & 1) {
22670
23501
  i0.ɵɵtemplate(0, GeometryFormFieldInputComponent_ng_template_0_Template, 0, 0, "ng-template");
22671
23502
  } }, encapsulation: 2, changeDetection: 0 });
22672
23503
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(GeometryFormFieldInputComponent, [{
@@ -22688,6 +23519,8 @@ GeometryFormFieldInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ t
22688
23519
  type: Input
22689
23520
  }], freehandDrawIsActive: [{
22690
23521
  type: Input
23522
+ }], predefinedRadius: [{
23523
+ type: Input
22691
23524
  }], controlOptions: [{
22692
23525
  type: Input
22693
23526
  }], drawStyle: [{
@@ -23924,7 +24757,7 @@ TimeFilterListBindingDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ ty
23924
24757
  class WktService {
23925
24758
  constructor() { }
23926
24759
  wktToFeature(wkt, wktProj, featureProj) {
23927
- return new olWKT().readFeature(wkt, {
24760
+ return new olFormatWKT().readFeature(wkt, {
23928
24761
  dataProjection: wktProj,
23929
24762
  featureProjection: featureProj
23930
24763
  });
@@ -27324,6 +28157,7 @@ class SpatialFilterItemComponent {
27324
28157
  this.measureUnitChange = new EventEmitter();
27325
28158
  this.radiusEvent = new EventEmitter();
27326
28159
  this.freehandControl = new EventEmitter();
28160
+ this.predefinedRadius = new EventEmitter();
27327
28161
  this.clearButtonEvent = new EventEmitter();
27328
28162
  this.clearSearchEvent = new EventEmitter();
27329
28163
  this.export = new EventEmitter();
@@ -27791,6 +28625,16 @@ class SpatialFilterItemComponent {
27791
28625
  onfreehandControlChange() {
27792
28626
  this.freehandDrawIsActive = !this.freehandDrawIsActive;
27793
28627
  this.freehandControl.emit(this.freehandDrawIsActive);
28628
+ if (this.isPoint()) {
28629
+ this.predefinedRadius.emit(!this.freehandDrawIsActive);
28630
+ if (this.freehandDrawIsActive) {
28631
+ this.overlayStyle$.next(undefined);
28632
+ this.drawStyle$.next(undefined);
28633
+ }
28634
+ }
28635
+ else {
28636
+ this.predefinedRadius.emit(false);
28637
+ }
27794
28638
  }
27795
28639
  /**
27796
28640
  * Launch search button
@@ -27979,7 +28823,7 @@ class SpatialFilterItemComponent {
27979
28823
  }
27980
28824
  }
27981
28825
  SpatialFilterItemComponent.ɵfac = function SpatialFilterItemComponent_Factory(t) { return new (t || SpatialFilterItemComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(SpatialFilterService), i0.ɵɵdirectiveInject(i2$1.MessageService), i0.ɵɵdirectiveInject(i2$1.LanguageService)); };
27982
- SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SpatialFilterItemComponent, selectors: [["igo-spatial-filter-item"]], inputs: { map: "map", type: "type", queryType: "queryType", zone: "zone", loading: "loading", store: "store", layers: "layers", allLayers: "allLayers", thematicLength: "thematicLength" }, outputs: { toggleSearch: "toggleSearch", itemTypeChange: "itemTypeChange", thematicChange: "thematicChange", drawZoneEvent: "drawZoneEvent", bufferEvent: "bufferEvent", zoneWithBufferChange: "zoneWithBufferChange", measureUnitChange: "measureUnitChange", radiusEvent: "radiusEvent", freehandControl: "freehandControl", clearButtonEvent: "clearButtonEvent", clearSearchEvent: "clearSearchEvent", export: "export", openWorkspace: "openWorkspace", entityChange: "entityChange" }, decls: 29, vars: 42, consts: [[3, "formControl", "map", "geometryType", "drawGuide", "measure", "drawControlIsActive", "freehandDrawIsActive", "drawStyle", "overlayStyle", "radius"], [1, "header"], [3, "checked", "labelPosition", "change", 4, "ngIf"], ["class", "buffer-unit", 4, "ngIf"], ["class", "radius-unit", 4, "ngIf"], [1, "title", "mat-typography"], [3, "value"], [3, "value", "change", 4, "ngFor", "ngForOf"], ["class", "thematics", 4, "ngIf"], [1, "buttons"], ["mat-raised-button", "", "class", "clear-search-button", 3, "disabled", "click", 4, "ngIf"], ["mat-raised-button", "", "class", "clear-form-button", 3, "disabled", "click", 4, "ngIf"], ["mat-raised-button", "", "color", "primary", 1, "search-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "remove-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "export-button", 3, "disabled", "click"], ["class", "chevron-down", "mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], ["class", "results", 4, "ngIf"], [3, "checked", "labelPosition", "change"], [1, "buffer-unit"], [1, "buffer-form"], [1, "buffer"], ["type", "number", "matInput", "", 3, "placeholder", "formControl", "value", "readonly"], [1, "unit-field"], [3, "value", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [1, "radius-unit"], [1, "radius-form"], [1, "radius"], ["type", "number", "matInput", "", 3, "placeholder", "formControl", "value", "readonly", "input"], [3, "value", "change"], [1, "thematics"], ["matColumnDef", "name"], ["class", "thematics-header", 4, "matHeaderCellDef"], ["matColumnDef", "select"], ["class", "checks-header", 4, "matHeaderCellDef"], [4, "matHeaderRowDef"], [4, "matRowDef", "matRowDefColumns"], [3, "dataSource", "treeControl"], ["matTreeNodeToggle", "", 4, "matTreeNodeDef"], [4, "matTreeNodeDef", "matTreeNodeDefWhen"], [1, "thematics-header"], [1, "checks-header"], [3, "checked", "indeterminate", "change"], ["matTreeNodeToggle", ""], [1, "mat-tree-node"], ["mat-icon-button", "", "disabled", ""], [1, "tree-check", 3, "checked", "click", "change"], ["mat-icon-button", "", 3, "click"], [3, "svgIcon"], [1, "tree-check-2", 3, "checked", "indeterminate", "change"], [1, "tree-ul"], ["matTreeNodeOutlet", ""], ["mat-raised-button", "", 1, "clear-search-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "clear-form-button", 3, "disabled", "click"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 1, "chevron-down", 3, "matTooltip", "click"], ["svgIcon", "chevron-down"], [1, "results"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], [1, "results-list", 3, "template", "store", "entitySelectChange"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click"], ["svgIcon", "chevron-up"]], template: function SpatialFilterItemComponent_Template(rf, ctx) { if (rf & 1) {
28826
+ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SpatialFilterItemComponent, selectors: [["igo-spatial-filter-item"]], inputs: { map: "map", type: "type", queryType: "queryType", zone: "zone", loading: "loading", store: "store", layers: "layers", allLayers: "allLayers", thematicLength: "thematicLength" }, outputs: { toggleSearch: "toggleSearch", itemTypeChange: "itemTypeChange", thematicChange: "thematicChange", drawZoneEvent: "drawZoneEvent", bufferEvent: "bufferEvent", zoneWithBufferChange: "zoneWithBufferChange", measureUnitChange: "measureUnitChange", radiusEvent: "radiusEvent", freehandControl: "freehandControl", predefinedRadius: "predefinedRadius", clearButtonEvent: "clearButtonEvent", clearSearchEvent: "clearSearchEvent", export: "export", openWorkspace: "openWorkspace", entityChange: "entityChange" }, decls: 29, vars: 43, consts: [[3, "formControl", "map", "geometryType", "drawGuide", "measure", "drawControlIsActive", "freehandDrawIsActive", "drawStyle", "overlayStyle", "radius", "predefinedRadius"], [1, "header"], [3, "checked", "labelPosition", "change", 4, "ngIf"], ["class", "buffer-unit", 4, "ngIf"], ["class", "radius-unit", 4, "ngIf"], [1, "title", "mat-typography"], [3, "value"], [3, "value", "change", 4, "ngFor", "ngForOf"], ["class", "thematics", 4, "ngIf"], [1, "buttons"], ["mat-raised-button", "", "class", "clear-search-button", 3, "disabled", "click", 4, "ngIf"], ["mat-raised-button", "", "class", "clear-form-button", 3, "disabled", "click", 4, "ngIf"], ["mat-raised-button", "", "color", "primary", 1, "search-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "remove-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "export-button", 3, "disabled", "click"], ["class", "chevron-down", "mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], ["class", "results", 4, "ngIf"], [3, "checked", "labelPosition", "change"], [1, "buffer-unit"], [1, "buffer-form"], [1, "buffer"], ["type", "number", "matInput", "", 3, "placeholder", "formControl", "value", "readonly"], [1, "unit-field"], [3, "value", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [1, "radius-unit"], [1, "radius-form"], [1, "radius"], ["type", "number", "matInput", "", 3, "placeholder", "formControl", "value", "readonly", "input"], [3, "value", "change"], [1, "thematics"], ["matColumnDef", "name"], ["class", "thematics-header", 4, "matHeaderCellDef"], ["matColumnDef", "select"], ["class", "checks-header", 4, "matHeaderCellDef"], [4, "matHeaderRowDef"], [4, "matRowDef", "matRowDefColumns"], [3, "dataSource", "treeControl"], ["matTreeNodeToggle", "", 4, "matTreeNodeDef"], [4, "matTreeNodeDef", "matTreeNodeDefWhen"], [1, "thematics-header"], [1, "checks-header"], [3, "checked", "indeterminate", "change"], ["matTreeNodeToggle", ""], [1, "mat-tree-node"], ["mat-icon-button", "", "disabled", ""], [1, "tree-check", 3, "checked", "click", "change"], ["mat-icon-button", "", 3, "click"], [3, "svgIcon"], [1, "tree-check-2", 3, "checked", "indeterminate", "change"], [1, "tree-ul"], ["matTreeNodeOutlet", ""], ["mat-raised-button", "", 1, "clear-search-button", 3, "disabled", "click"], ["mat-raised-button", "", 1, "clear-form-button", 3, "disabled", "click"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 1, "chevron-down", 3, "matTooltip", "click"], ["svgIcon", "chevron-down"], [1, "results"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], [1, "results-list", 3, "template", "store", "entitySelectChange"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click"], ["svgIcon", "chevron-up"]], template: function SpatialFilterItemComponent_Template(rf, ctx) { if (rf & 1) {
27983
28827
  i0.ɵɵelement(0, "igo-geometry-form-field-input", 0);
27984
28828
  i0.ɵɵpipe(1, "async");
27985
28829
  i0.ɵɵpipe(2, "async");
@@ -28019,7 +28863,7 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
28019
28863
  i0.ɵɵtemplate(27, SpatialFilterItemComponent_button_27_Template, 3, 3, "button", 15);
28020
28864
  i0.ɵɵtemplate(28, SpatialFilterItemComponent_div_28_Template, 3, 3, "div", 16);
28021
28865
  } if (rf & 2) {
28022
- i0.ɵɵproperty("formControl", ctx.formControl)("map", ctx.map)("geometryType", ctx.geometryType)("drawGuide", i0.ɵɵpipeBind1(1, 28, ctx.drawGuide$))("measure", ctx.measure)("drawControlIsActive", ctx.drawControlIsActive)("freehandDrawIsActive", ctx.freehandDrawIsActive)("drawStyle", i0.ɵɵpipeBind1(2, 30, ctx.drawStyle$))("overlayStyle", i0.ɵɵpipeBind1(3, 32, ctx.overlayStyle$))("radius", ctx.radius);
28866
+ i0.ɵɵproperty("formControl", ctx.formControl)("map", ctx.map)("geometryType", ctx.geometryType)("drawGuide", i0.ɵɵpipeBind1(1, 29, ctx.drawGuide$))("measure", ctx.measure)("drawControlIsActive", ctx.drawControlIsActive)("freehandDrawIsActive", ctx.freehandDrawIsActive)("drawStyle", i0.ɵɵpipeBind1(2, 31, ctx.drawStyle$))("overlayStyle", i0.ɵɵpipeBind1(3, 33, ctx.overlayStyle$))("radius", ctx.radius)("predefinedRadius", ctx.predefinedRadius);
28023
28867
  i0.ɵɵadvance(5);
28024
28868
  i0.ɵɵproperty("ngIf", !ctx.isPredefined());
28025
28869
  i0.ɵɵadvance(1);
@@ -28029,7 +28873,7 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
28029
28873
  i0.ɵɵadvance(1);
28030
28874
  i0.ɵɵproperty("ngIf", ctx.isPoint());
28031
28875
  i0.ɵɵadvance(2);
28032
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(11, 34, "igo.geo.spatialFilter.search"), " : ");
28876
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(11, 35, "igo.geo.spatialFilter.search"), " : ");
28033
28877
  i0.ɵɵadvance(2);
28034
28878
  i0.ɵɵproperty("value", ctx.selectedItemType);
28035
28879
  i0.ɵɵadvance(1);
@@ -28043,15 +28887,15 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
28043
28887
  i0.ɵɵadvance(1);
28044
28888
  i0.ɵɵproperty("disabled", ctx.disableSearchButton());
28045
28889
  i0.ɵɵadvance(1);
28046
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 36, "igo.geo.spatialFilter.goSearch"), " ");
28890
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 37, "igo.geo.spatialFilter.goSearch"), " ");
28047
28891
  i0.ɵɵadvance(2);
28048
28892
  i0.ɵɵproperty("disabled", ctx.allLayers.length === 0);
28049
28893
  i0.ɵɵadvance(1);
28050
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 38, "igo.geo.spatialFilter.removeLayer"), " ");
28894
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(23, 39, "igo.geo.spatialFilter.removeLayer"), " ");
28051
28895
  i0.ɵɵadvance(2);
28052
28896
  i0.ɵɵproperty("disabled", !ctx.store.entities$.getValue().length);
28053
28897
  i0.ɵɵadvance(1);
28054
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(26, 40, "igo.geo.spatialFilter.exportLayer"), " ");
28898
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(26, 41, "igo.geo.spatialFilter.exportLayer"), " ");
28055
28899
  i0.ɵɵadvance(2);
28056
28900
  i0.ɵɵproperty("ngIf", ctx.store.all().length && ctx.tableTemplate && !ctx.listIsVisible);
28057
28901
  i0.ɵɵadvance(1);
@@ -28059,7 +28903,7 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
28059
28903
  } }, styles: [".header[_ngcontent-%COMP%]{margin-top:5px;width:100%}.mat-slide-toggle[_ngcontent-%COMP%]{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 20px)}.title[_ngcontent-%COMP%]{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button[_ngcontent-%COMP%]{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field[_ngcontent-%COMP%]{margin-top:5px}.mat-column-select[_ngcontent-%COMP%]{overflow:auto}.buttons[_ngcontent-%COMP%]{margin-top:15px}.search-button[_ngcontent-%COMP%]{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button[_ngcontent-%COMP%]{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button[_ngcontent-%COMP%]{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button[_ngcontent-%COMP%]{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button[_ngcontent-%COMP%]{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button[_ngcontent-%COMP%]{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button[_ngcontent-%COMP%]{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button[_ngcontent-%COMP%]{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button[_ngcontent-%COMP%]{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button[_ngcontent-%COMP%]{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics[_ngcontent-%COMP%]{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results[_ngcontent-%COMP%]{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults[_ngcontent-%COMP%]{max-width:100px;margin-right:5px}.buffer-unit[_ngcontent-%COMP%], .radius-unit[_ngcontent-%COMP%]{display:flex;width:100%;margin-left:2px;padding:5px}.radius[_ngcontent-%COMP%], .buffer[_ngcontent-%COMP%]{display:flex;flex-flow:column nowrap;width:110%}.unit-field[_ngcontent-%COMP%]{width:110px;margin-left:30px}.example-tree-invisible[_ngcontent-%COMP%]{display:none}.tree-ul[_ngcontent-%COMP%]{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check[_ngcontent-%COMP%], .tree-check-2[_ngcontent-%COMP%]{position:relative;margin-left:auto;margin-right:5px}.thematics-header[_ngcontent-%COMP%]{max-width:250px}.checks-header[_ngcontent-%COMP%]{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox[_ngcontent-%COMP%]{padding:5px}.mat-tree-node[_ngcontent-%COMP%]{position:relative;min-height:42px;width:280px}.mat-header-cell[_ngcontent-%COMP%]{height:56px}.results[_ngcontent-%COMP%]{max-height:45%;width:98%}.results[_ngcontent-%COMP%] igo-entity-table[_ngcontent-%COMP%] div.table-container{overflow:visible;overflow:initial}"], changeDetection: 0 });
28060
28904
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SpatialFilterItemComponent, [{
28061
28905
  type: Component,
28062
- args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-geometry-form-field-input\n [formControl]=\"formControl\"\n [map]=\"map\"\n [geometryType]=\"geometryType\"\n [drawGuide]=\"drawGuide$ | async\"\n [measure]=\"measure\"\n [drawControlIsActive]=\"drawControlIsActive\"\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\n [drawStyle]=\"drawStyle$ | async\"\n [overlayStyle]=\"overlayStyle$ | async\"\n [radius]=\"radius\">\n</igo-geometry-form-field-input>\n\n<div class=\"header\">\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onDrawControlChange()\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"freehandDrawIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onfreehandControlChange()\">\n {{'igo.geo.spatialFilter.freehandControl' | translate}}\n </mat-slide-toggle>\n</div>\n\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\n <form class=\"buffer-form\">\n <mat-form-field class=\"buffer\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\n [value]=\"0\" [readonly]=\"this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\n <form class=\"radius-form\">\n <mat-form-field class=\"radius\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.radius' | translate}}\" [formControl]=\"radiusFormControl\"\n [value]=\"1000\" (input)=\"getRadius()\" [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<mat-label class=\"title mat-typography\">{{'igo.geo.spatialFilter.search' | translate}} : </mat-label>\n<mat-radio-group [value]=\"selectedItemType\">\n <mat-radio-button *ngFor=\"let item of itemType\"\n [value]=\"item\"\n (change)=\"onItemTypeChange($event)\">\n {{'igo.geo.spatialFilter.' + item | translate}}\n </mat-radio-button>\n</mat-radio-group>\n\n<div class=\"thematics\" *ngIf=\"(selectedItemType==='Thematics' && !tableTemplate) || (selectedItemType==='Thematics' && tableTemplate && !listIsVisible)\">\n <mat-table>\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{'igo.geo.spatialFilter.Thematics' | translate}}</mat-header-cell>\n </ng-container>\n\n <!-- Select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n\n </mat-table>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\n <li class=\"mat-tree-node\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n {{node.name}}\n <mat-checkbox class=\"tree-check\" (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? onToggleChange(node) : null\"\n [checked]=\"selectedThematics.isSelected(node)\">\n </mat-checkbox>\n </li>\n </mat-tree-node>\n\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"mat-tree-node\">\n <button mat-icon-button\n (click)=\"onToggleClick(node)\">\n <mat-icon [svgIcon]=\"treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\"></mat-icon>\n </button>\n {{node.name}}\n <mat-checkbox class=\"tree-check-2\" (change)=\"$event ? childrensToggle(node) : null\"\n [checked]=\"isAllSelected(node)\"\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\">\n </mat-checkbox>\n </div>\n <ul class=\"tree-ul\" [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </ul>\n </mat-nested-tree-node>\n\n </mat-tree>\n</div>\n\n<div class=\"buttons\">\n\n <button *ngIf=\"isPredefined()\" mat-raised-button class=\"clear-search-button\" [disabled]=\"disabledClearSearch()\"\n (click)=\"clearSearch()\">\n {{'igo.geo.spatialFilter.clearSearch' | translate}}\n </button>\n\n <button *ngIf=\"isPolygon() || isPoint()\" mat-raised-button class=\"clear-form-button\" [disabled]=\"this.formControl.value === null\"\n (click)=\"clearDrawZone()\">\n {{'igo.geo.spatialFilter.clearForm' | translate}}\n </button>\n\n <button mat-raised-button class=\"search-button\" [disabled]=\"disableSearchButton()\" color=\"primary\"\n (click)=\"toggleSearchButton()\">\n {{'igo.geo.spatialFilter.goSearch' | translate}}\n </button>\n\n <button mat-raised-button class=\"remove-button\" [disabled]=\"allLayers.length === 0\" (click)=\"clearButton()\">\n {{'igo.geo.spatialFilter.removeLayer' | translate}}\n </button>\n\n <button mat-raised-button class=\"export-button\" [disabled]=\"!store.entities$.getValue().length\" (click)=\"export.emit()\">\n {{'igo.geo.spatialFilter.exportLayer' | translate}}\n </button>\n\n</div>\n\n<button\n class=\"chevron-down\"\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\n</button>\n\n<div class=\"results\" *ngIf=\"store.all().length && tableTemplate && listIsVisible\">\n <button\n *ngIf=\"listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\n </button>\n <igo-entity-table\n class=\"results-list\"\n [template]=\"tableTemplate\"\n [store]=\"store\"\n (entitySelectChange)=\"entityChange.emit($event)\">\n </igo-entity-table>\n</div>\n", styles: [".header{margin-top:5px;width:100%}.mat-slide-toggle{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 20px)}.title{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field{margin-top:5px}.mat-column-select{overflow:auto}.buttons{margin-top:15px}.search-button{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults{max-width:100px;margin-right:5px}.buffer-unit,.radius-unit{display:flex;width:100%;margin-left:2px;padding:5px}.radius,.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}.example-tree-invisible{display:none}.tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check,.tree-check-2{position:relative;margin-left:auto;margin-right:5px}.thematics-header{max-width:250px}.checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox{padding:5px}.mat-tree-node{position:relative;min-height:42px;width:280px}.mat-header-cell{height:56px}.results{max-height:45%;width:98%}.results igo-entity-table ::ng-deep div.table-container{overflow:visible;overflow:initial}\n"] }]
28906
+ args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-geometry-form-field-input\n [formControl]=\"formControl\"\n [map]=\"map\"\n [geometryType]=\"geometryType\"\n [drawGuide]=\"drawGuide$ | async\"\n [measure]=\"measure\"\n [drawControlIsActive]=\"drawControlIsActive\"\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\n [drawStyle]=\"drawStyle$ | async\"\n [overlayStyle]=\"overlayStyle$ | async\"\n [radius]=\"radius\"\n [predefinedRadius]=\"predefinedRadius\">\n</igo-geometry-form-field-input>\n\n<div class=\"header\">\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onDrawControlChange()\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle *ngIf=\"!isPredefined()\"\n [checked]=\"freehandDrawIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onfreehandControlChange()\">\n {{'igo.geo.spatialFilter.freehandControl' | translate}}\n </mat-slide-toggle>\n</div>\n\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\n <form class=\"buffer-form\">\n <mat-form-field class=\"buffer\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.buffer' | translate}}\" [formControl]=\"bufferFormControl\"\n [value]=\"0\" [readonly]=\"this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\n <form class=\"radius-form\">\n <mat-form-field class=\"radius\">\n <input type=\"number\" matInput placeholder=\"{{'igo.geo.spatialFilter.radius' | translate}}\" [formControl]=\"radiusFormControl\"\n [value]=\"1000\" (input)=\"getRadius()\" [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\">\n </mat-form-field>\n </form>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\">\n <mat-option *ngFor=\"let measureUnit of measureUnits\" [value]=\"measureUnit\">\n {{('igo.geo.measure.' + measureUnit) | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n\n<mat-label class=\"title mat-typography\">{{'igo.geo.spatialFilter.search' | translate}} : </mat-label>\n<mat-radio-group [value]=\"selectedItemType\">\n <mat-radio-button *ngFor=\"let item of itemType\"\n [value]=\"item\"\n (change)=\"onItemTypeChange($event)\">\n {{'igo.geo.spatialFilter.' + item | translate}}\n </mat-radio-button>\n</mat-radio-group>\n\n<div class=\"thematics\" *ngIf=\"(selectedItemType==='Thematics' && !tableTemplate) || (selectedItemType==='Thematics' && tableTemplate && !listIsVisible)\">\n <mat-table>\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{'igo.geo.spatialFilter.Thematics' | translate}}</mat-header-cell>\n </ng-container>\n\n <!-- Select Column -->\n <ng-container matColumnDef=\"select\">\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n </mat-header-cell>\n </ng-container>\n\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\n <mat-row *matRowDef=\"let row; columns: displayedColumns;\"></mat-row>\n\n </mat-table>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\n <li class=\"mat-tree-node\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n {{node.name}}\n <mat-checkbox class=\"tree-check\" (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? onToggleChange(node) : null\"\n [checked]=\"selectedThematics.isSelected(node)\">\n </mat-checkbox>\n </li>\n </mat-tree-node>\n\n <!-- This is the tree node template for expandable nodes -->\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\n <div class=\"mat-tree-node\">\n <button mat-icon-button\n (click)=\"onToggleClick(node)\">\n <mat-icon [svgIcon]=\"treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\"></mat-icon>\n </button>\n {{node.name}}\n <mat-checkbox class=\"tree-check-2\" (change)=\"$event ? childrensToggle(node) : null\"\n [checked]=\"isAllSelected(node)\"\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\">\n </mat-checkbox>\n </div>\n <ul class=\"tree-ul\" [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\">\n <ng-container matTreeNodeOutlet></ng-container>\n </ul>\n </mat-nested-tree-node>\n\n </mat-tree>\n</div>\n\n<div class=\"buttons\">\n\n <button *ngIf=\"isPredefined()\" mat-raised-button class=\"clear-search-button\" [disabled]=\"disabledClearSearch()\"\n (click)=\"clearSearch()\">\n {{'igo.geo.spatialFilter.clearSearch' | translate}}\n </button>\n\n <button *ngIf=\"isPolygon() || isPoint()\" mat-raised-button class=\"clear-form-button\" [disabled]=\"this.formControl.value === null\"\n (click)=\"clearDrawZone()\">\n {{'igo.geo.spatialFilter.clearForm' | translate}}\n </button>\n\n <button mat-raised-button class=\"search-button\" [disabled]=\"disableSearchButton()\" color=\"primary\"\n (click)=\"toggleSearchButton()\">\n {{'igo.geo.spatialFilter.goSearch' | translate}}\n </button>\n\n <button mat-raised-button class=\"remove-button\" [disabled]=\"allLayers.length === 0\" (click)=\"clearButton()\">\n {{'igo.geo.spatialFilter.removeLayer' | translate}}\n </button>\n\n <button mat-raised-button class=\"export-button\" [disabled]=\"!store.entities$.getValue().length\" (click)=\"export.emit()\">\n {{'igo.geo.spatialFilter.exportLayer' | translate}}\n </button>\n\n</div>\n\n<button\n class=\"chevron-down\"\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\n</button>\n\n<div class=\"results\" *ngIf=\"store.all().length && tableTemplate && listIsVisible\">\n <button\n *ngIf=\"listIsVisible\"\n mat-icon-button\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\n (click)=\"toggleVisibleList()\">\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\n </button>\n <igo-entity-table\n class=\"results-list\"\n [template]=\"tableTemplate\"\n [store]=\"store\"\n (entitySelectChange)=\"entityChange.emit($event)\">\n </igo-entity-table>\n</div>\n", styles: [".header{margin-top:5px;width:100%}.mat-slide-toggle{padding:5px;margin-bottom:15px;width:98%}.mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 20px)}.title{margin-left:5px;font-size:medium;font-size:initial}.mat-radio-group{display:flex;flex-direction:column;padding-top:10px}.mat-radio-button{display:inline-flex;position:relative;margin-left:16px;margin-top:10px}.mat-form-field{margin-top:5px}.mat-column-select{overflow:auto}.buttons{margin-top:15px}.search-button{left:15px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.search-button{left:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.export-button{left:15px;width:46%;margin-bottom:5px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.export-button{left:10px;margin-top:10px;width:45%;min-height:35px;white-space:normal;line-height:normal}}.remove-button{margin-top:12px;left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.remove-button{margin:0;width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-form-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-form-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.clear-search-button{left:5px;width:46%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.clear-search-button{width:45%;min-height:35px;white-space:normal;line-height:normal}}.thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}.results{overflow:auto;max-height:250px;width:98%}.mat-column-typeResults{max-width:100px;margin-right:5px}.buffer-unit,.radius-unit{display:flex;width:100%;margin-left:2px;padding:5px}.radius,.buffer{display:flex;flex-flow:column nowrap;width:110%}.unit-field{width:110px;margin-left:30px}.example-tree-invisible{display:none}.tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}.tree-check,.tree-check-2{position:relative;margin-left:auto;margin-right:5px}.thematics-header{max-width:250px}.checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}.mat-checkbox{padding:5px}.mat-tree-node{position:relative;min-height:42px;width:280px}.mat-header-cell{height:56px}.results{max-height:45%;width:98%}.results igo-entity-table ::ng-deep div.table-container{overflow:visible;overflow:initial}\n"] }]
28063
28907
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: SpatialFilterService }, { type: i2$1.MessageService }, { type: i2$1.LanguageService }]; }, { map: [{
28064
28908
  type: Input
28065
28909
  }], type: [{
@@ -28096,6 +28940,8 @@ SpatialFilterItemComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
28096
28940
  type: Output
28097
28941
  }], freehandControl: [{
28098
28942
  type: Output
28943
+ }], predefinedRadius: [{
28944
+ type: Output
28099
28945
  }], clearButtonEvent: [{
28100
28946
  type: Output
28101
28947
  }], clearSearchEvent: [{
@@ -28347,7 +29193,7 @@ function OgcFilterTimeComponent_div_3_div_2_div_13_Template(rf, ctx) { if (rf &
28347
29193
  i0.ɵɵadvance(2);
28348
29194
  i0.ɵɵproperty("for", _r35)("disabled", ctx_r25.filterStateDisable);
28349
29195
  i0.ɵɵadvance(1);
28350
- i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.dateFilter.bind(ctx_r25, "end"))("value", ctx_r25.endValue ? ctx_r25.endValue : ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("min", ctx_r25.beginValue ? ctx_r25.beginValue : ctx_r25.handleDate(ctx_r25.datasource.options.minDate))("max", ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("disabled", ctx_r25.filterStateDisable);
29196
+ i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.filterEndFunction)("value", ctx_r25.endValue ? ctx_r25.endValue : ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("min", ctx_r25.beginValue ? ctx_r25.beginValue : ctx_r25.handleDate(ctx_r25.datasource.options.minDate))("max", ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("disabled", ctx_r25.filterStateDisable);
28351
29197
  i0.ɵɵattribute("disabled", !ctx_r25.currentFilter.active);
28352
29198
  i0.ɵɵadvance(4);
28353
29199
  i0.ɵɵproperty("startView", ctx_r25.calendarView())("startAt", ctx_r25.endValue);
@@ -28388,7 +29234,7 @@ function OgcFilterTimeComponent_div_3_div_2_Template(rf, ctx) { if (rf & 1) {
28388
29234
  i0.ɵɵadvance(3);
28389
29235
  i0.ɵɵproperty("for", _r22)("disabled", ctx_r9.filterStateDisable);
28390
29236
  i0.ɵɵadvance(1);
28391
- i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.dateFilter.bind(ctx_r9, "begin"))("value", ctx_r9.beginValue ? ctx_r9.beginValue : ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("min", ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("max", ctx_r9.endValue && !ctx_r9.restrictedToStep() ? ctx_r9.endValue : ctx_r9.handleDate(ctx_r9.datasource.options.maxDate))("disabled", ctx_r9.filterStateDisable);
29237
+ i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.filterBeginFunction)("value", ctx_r9.beginValue ? ctx_r9.beginValue : ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("min", ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("max", ctx_r9.endValue && !ctx_r9.restrictedToStep() ? ctx_r9.endValue : ctx_r9.handleDate(ctx_r9.datasource.options.maxDate))("disabled", ctx_r9.filterStateDisable);
28392
29238
  i0.ɵɵattribute("disabled", !ctx_r9.currentFilter.active);
28393
29239
  i0.ɵɵadvance(4);
28394
29240
  i0.ɵɵproperty("startView", ctx_r9.calendarView())("startAt", ctx_r9.beginValue);
@@ -28481,6 +29327,8 @@ class OgcFilterTimeComponent {
28481
29327
  this.updateHoursMinutesArray();
28482
29328
  // update value for now value
28483
29329
  this.updateValues();
29330
+ this.dateFilter(this.filterBeginFunction, 'begin');
29331
+ this.dateFilter(this.filterEndFunction, 'end');
28484
29332
  }
28485
29333
  parseFilter(filter) {
28486
29334
  if (!filter) {
@@ -28641,10 +29489,12 @@ class OgcFilterTimeComponent {
28641
29489
  if (type === 'end') {
28642
29490
  const dateValuePlus1 = moment(dateValue).add(1, 'd');
28643
29491
  const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'years', true);
28644
- return (monthDiffPlus1 % moment.duration(this.step).asYears()) === 0;
29492
+ this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asYears()) === 0;
29493
+ return;
28645
29494
  }
28646
29495
  else if (type === 'begin') {
28647
- return (monthDiff % moment.duration(this.step).asYears()) === 0;
29496
+ this.filterBeginFunction = (monthDiff % moment.duration(this.step).asYears()) === 0;
29497
+ return;
28648
29498
  }
28649
29499
  }
28650
29500
  else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
@@ -28652,10 +29502,12 @@ class OgcFilterTimeComponent {
28652
29502
  if (type === 'end') {
28653
29503
  const dateValuePlus1 = moment(dateValue).add(1, 'd');
28654
29504
  const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'months', true);
28655
- return (monthDiffPlus1 % moment.duration(this.step).asMonths()) === 0;
29505
+ this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asMonths()) === 0;
29506
+ return;
28656
29507
  }
28657
29508
  else if (type === 'begin') {
28658
- return (monthDiff % moment.duration(this.step).asMonths()) === 0;
29509
+ this.filterBeginFunction = (monthDiff % moment.duration(this.step).asMonths()) === 0;
29510
+ return;
28659
29511
  }
28660
29512
  }
28661
29513
  else if (this.ogcFilterTimeService.stepIsWeekDuration(this.step)) {
@@ -28663,10 +29515,12 @@ class OgcFilterTimeComponent {
28663
29515
  if (type === 'end') {
28664
29516
  const dateValuePlus1 = moment(dateValue).add(1, 'd');
28665
29517
  const weekDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'weeks', true);
28666
- return (weekDiffPlus1 % moment.duration(this.step).asWeeks()) === 0;
29518
+ this.filterEndFunction = (weekDiffPlus1 % moment.duration(this.step).asWeeks()) === 0;
29519
+ return;
28667
29520
  }
28668
29521
  else if (type === 'begin') {
28669
- return (weekDiff % moment.duration(this.step).asWeeks()) === 0;
29522
+ this.filterBeginFunction = (weekDiff % moment.duration(this.step).asWeeks()) === 0;
29523
+ return;
28670
29524
  }
28671
29525
  }
28672
29526
  else if (this.ogcFilterTimeService.stepIsDayDuration(this.step)) {
@@ -28675,21 +29529,40 @@ class OgcFilterTimeComponent {
28675
29529
  const dateValuePlus1 = moment(dateValue).add(1, 'd');
28676
29530
  const dayDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'days', true);
28677
29531
  const _mod = (dayDiffPlus1 % moment.duration(this.step).asDays());
28678
- return (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8
29532
+ this.filterEndFunction = (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8
29533
+ return;
28679
29534
  }
28680
29535
  else if (type === 'begin') {
28681
29536
  const _mod = ((dayDiff % moment.duration(this.step).asDays()) + 1);
28682
- return (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8
29537
+ this.filterBeginFunction = (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8
29538
+ return;
28683
29539
  }
28684
29540
  }
28685
29541
  else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
28686
- const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
28687
- return (hourDiff % moment.duration(this.step).asHours()) === 0;
29542
+ if (type === 'end') {
29543
+ const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
29544
+ this.filterEndFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
29545
+ return;
29546
+ }
29547
+ else if (type === 'begin') {
29548
+ const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
29549
+ this.filterBeginFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
29550
+ return;
29551
+ }
28688
29552
  }
28689
29553
  else if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
28690
- return true;
29554
+ if (type === 'end') {
29555
+ this.filterEndFunction = true;
29556
+ return;
29557
+ }
29558
+ else if (type === 'begin') {
29559
+ this.filterBeginFunction = true;
29560
+ return;
29561
+ }
28691
29562
  }
28692
- return diff % this.stepMilliseconds === 0;
29563
+ this.filterEndFunction = diff % this.stepMilliseconds === 0;
29564
+ this.filterBeginFunction = diff % this.stepMilliseconds === 0;
29565
+ return;
28693
29566
  }
28694
29567
  getDateTime(date, pos) {
28695
29568
  const valuetmp = new Date(date);
@@ -28952,7 +29825,7 @@ OgcFilterTimeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcF
28952
29825
  } }, styles: ["input{text-align:center!important;margin:auto 5px!important}.slider-container[_ngcontent-%COMP%]{text-align:center}.datetime-input[_ngcontent-%COMP%]{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input[_ngcontent-%COMP%]{width:36%;margin:0}}.date-input[_ngcontent-%COMP%]{width:100px;margin-right:25px}.time-input[_ngcontent-%COMP%]{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input[_ngcontent-%COMP%]{margin-right:5px}}.hour-input[_ngcontent-%COMP%], .minute-input[_ngcontent-%COMP%]{width:35px;margin-left:7px}.year-input[_ngcontent-%COMP%]{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input[_ngcontent-%COMP%]{width:32%;margin:0 0 0 10px}}.year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}.year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px}.reset-button[_ngcontent-%COMP%]{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button[_ngcontent-%COMP%]{padding-left:8px}}.toggle-filter-state[_ngcontent-%COMP%]{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state[_ngcontent-%COMP%]{padding-left:12px}} .datepicker-year .mat-calendar-arrow{display:none} .datepicker-year .mat-calendar-period-button{pointer-events:none} .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
28953
29826
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterTimeComponent, [{
28954
29827
  type: Component,
28955
- args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle \n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\">\n {{'igo.geo.filter.sliderModeTitle' | translate}}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\" \n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n \n </div>\n\n <div *ngIf=\"!sliderMode\">\n\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearBegin}}\"\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]= \"filterStateDisable\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n \n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input #beginYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled= false\n readonly= true\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearEnd}}\"\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled] = \"filterStateDisable\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input #endYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled= false\n readonly= true\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n <button class=\"reset-button\" \n mat-icon-button\n color=\"primary\" \n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class='toggle-filter-state' \n (change)=\"toggleFilterState()\" \n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\">\n </mat-slide-toggle>\n\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"dateFilter.bind(this, 'begin')\"\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"dateFilter.bind(this, 'end')\"\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <button class=\"reset-button\" \n mat-icon-button color=\"primary\"\n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class=\"toggle-filter-state\" \n (change)=\"toggleFilterState()\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n [checked]= \"!filterStateDisable\">\n </mat-slide-toggle>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
29828
+ args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle \n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\">\n {{'igo.geo.filter.sliderModeTitle' | translate}}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\" \n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n \n </div>\n\n <div *ngIf=\"!sliderMode\">\n\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearBegin}}\"\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]= \"filterStateDisable\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n \n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input #beginYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled= false\n readonly= true\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearEnd}}\"\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled] = \"filterStateDisable\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input #endYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled= false\n readonly= true\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n <button class=\"reset-button\" \n mat-icon-button\n color=\"primary\" \n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class='toggle-filter-state' \n (change)=\"toggleFilterState()\" \n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\">\n </mat-slide-toggle>\n\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"filterBeginFunction\"\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"filterEndFunction\"\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <button class=\"reset-button\" \n mat-icon-button color=\"primary\"\n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class=\"toggle-filter-state\" \n (change)=\"toggleFilterState()\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n [checked]= \"!filterStateDisable\">\n </mat-slide-toggle>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
28956
29829
  }], function () { return [{ type: OGCFilterTimeService }]; }, { datasource: [{
28957
29830
  type: Input
28958
29831
  }], currentFilter: [{
@@ -29343,15 +30216,15 @@ IgoFilterModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [TimeFi
29343
30216
  i0.ɵɵsetComponentScope(TimeFilterButtonComponent, [i1$1.NgIf, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5$1.ListItemDirective, i7$1.MatBadge, TimeFilterItemComponent], [i7.TranslatePipe]);
29344
30217
  i0.ɵɵsetComponentScope(TimeFilterItemComponent, [i1$1.NgClass, i1$1.NgIf, i1$1.NgStyle, i2.MatIcon, i3.MatButton, i5.MatListItem, i5.MatListAvatarCssMatStyler, i9.MatLine, i4.MatTooltip, LayerLegendComponent, i5$1.CollapseDirective, TimeFilterFormComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
29345
30218
  i0.ɵɵsetComponentScope(TimeFilterListComponent, [i1$1.NgForOf, i5$1.ListItemDirective, i5$1.ListComponent, TimeFilterItemComponent], [FilterableDataSourcePipe]);
29346
- i0.ɵɵsetComponentScope(OgcFilterFormComponent, [i1$1.NgClass, i1$1.NgForOf, i1$1.NgIf, i11$1.MatAutocomplete, i11$1.MatAutocompleteTrigger, i9.MatOption, i2.MatIcon, i3.MatButton, i12$1.MatCheckbox, i13.MatFormField, i13.MatSuffix, i14.MatInput, i15.MatSelect, i4.MatTooltip, OgcFilterTimeComponent], [i1$1.AsyncPipe, i7.TranslatePipe, i5$1.KeyValuePipe]);
30219
+ i0.ɵɵsetComponentScope(OgcFilterFormComponent, [i1$1.NgClass, i1$1.NgForOf, i1$1.NgIf, i11$1.MatAutocomplete, i11$1.MatAutocompleteTrigger, i9.MatOption, i2.MatIcon, i3.MatButton, i12.MatCheckbox, i13.MatFormField, i13.MatSuffix, i14.MatInput, i15.MatSelect, i4.MatTooltip, OgcFilterTimeComponent], [i1$1.AsyncPipe, i7.TranslatePipe, i5$1.KeyValuePipe]);
29347
30220
  i0.ɵɵsetComponentScope(OgcFilterButtonComponent, [i1$1.NgIf, i2.MatIcon, i3.MatButton, i4.MatTooltip, i5$1.ListItemDirective, i7$1.MatBadge, OgcFilterableItemComponent], [i7.TranslatePipe]);
29348
- i0.ɵɵsetComponentScope(OgcFilterSelectionComponent, [i1$1.NgForOf, i1$1.NgIf, i1$1.NgStyle, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.NgModel, i2$2.FormGroupDirective, i2$2.FormControlName, i11$1.MatAutocomplete, i11$1.MatAutocompleteTrigger, i9.MatOption, i2.MatIcon, i17.MatRadioGroup, i17.MatRadioButton, i18.MatButtonToggleGroup, i18.MatButtonToggle, i12$1.MatCheckbox, i13.MatFormField, i14.MatInput, i15.MatSelect, i11.MatDivider, i4.MatTooltip, OgcFilterTimeComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
30221
+ i0.ɵɵsetComponentScope(OgcFilterSelectionComponent, [i1$1.NgForOf, i1$1.NgIf, i1$1.NgStyle, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.NgModel, i2$2.FormGroupDirective, i2$2.FormControlName, i11$1.MatAutocomplete, i11$1.MatAutocompleteTrigger, i9.MatOption, i2.MatIcon, i17.MatRadioGroup, i17.MatRadioButton, i18.MatButtonToggleGroup, i18.MatButtonToggle, i12.MatCheckbox, i13.MatFormField, i14.MatInput, i15.MatSelect, i11.MatDivider, i4.MatTooltip, OgcFilterTimeComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
29349
30222
  i0.ɵɵsetComponentScope(OgcFilterableFormComponent, [i1$1.NgForOf, i1$1.NgIf, i5$1.ListItemDirective, OgcFilterFormComponent,
29350
30223
  OgcFilterSelectionComponent], []);
29351
- i0.ɵɵsetComponentScope(OgcFilterableItemComponent, [i1$1.NgClass, i1$1.NgIf, i1$1.NgStyle, i2$2.NgControlStatus, i2$2.NgModel, i2.MatIcon, i3.MatButton, i12$1.MatCheckbox, i5.MatListItem, i5.MatListAvatarCssMatStyler, i9.MatLine, i11.MatDivider, i4.MatTooltip, LayerLegendComponent, i5$1.CollapseDirective, OgcFilterableFormComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
30224
+ i0.ɵɵsetComponentScope(OgcFilterableItemComponent, [i1$1.NgClass, i1$1.NgIf, i1$1.NgStyle, i2$2.NgControlStatus, i2$2.NgModel, i2.MatIcon, i3.MatButton, i12.MatCheckbox, i5.MatListItem, i5.MatListAvatarCssMatStyler, i9.MatLine, i11.MatDivider, i4.MatTooltip, LayerLegendComponent, i5$1.CollapseDirective, OgcFilterableFormComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
29352
30225
  i0.ɵɵsetComponentScope(OgcFilterableListComponent, [i1$1.NgForOf, i1$1.NgIf, i5$1.ListItemDirective, i5$1.ListComponent, OgcFilterableItemComponent], [i7.TranslatePipe, FilterableDataSourcePipe]);
29353
30226
  i0.ɵɵsetComponentScope(SpatialFilterTypeComponent, [i1$1.NgForOf, i9.MatOption, i2.MatIcon, i20.MatTabGroup, i20.MatTab, i18.MatButtonToggleGroup, i18.MatButtonToggle, i13.MatFormField, i13.MatLabel, i15.MatSelect, i4.MatTooltip, SpatialFilterListComponent], [i7.TranslatePipe]);
29354
- i0.ɵɵsetComponentScope(SpatialFilterItemComponent, [i1$1.NgForOf, i1$1.NgIf, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NumberValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.NgForm, i2$2.FormControlDirective, i9.MatOption, i2.MatIcon, i3.MatButton, i17.MatRadioGroup, i17.MatRadioButton, i21.MatTable, i21.MatHeaderCellDef, i21.MatHeaderRowDef, i21.MatColumnDef, i21.MatRowDef, i21.MatHeaderCell, i21.MatHeaderRow, i21.MatRow, i22.MatNestedTreeNode, i22.MatTreeNodeDef, i22.MatTreeNodeToggle, i22.MatTree, i22.MatTreeNode, i22.MatTreeNodeOutlet, i12$1.MatCheckbox, i23.MatSlideToggle, i13.MatFormField, i13.MatLabel, i14.MatInput, i15.MatSelect, i4.MatTooltip, i5$1.EntityTableComponent, GeometryFormFieldInputComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
30227
+ i0.ɵɵsetComponentScope(SpatialFilterItemComponent, [i1$1.NgForOf, i1$1.NgIf, i2$2.ɵNgNoValidate, i2$2.DefaultValueAccessor, i2$2.NumberValueAccessor, i2$2.NgControlStatus, i2$2.NgControlStatusGroup, i2$2.NgForm, i2$2.FormControlDirective, i9.MatOption, i2.MatIcon, i3.MatButton, i17.MatRadioGroup, i17.MatRadioButton, i21.MatTable, i21.MatHeaderCellDef, i21.MatHeaderRowDef, i21.MatColumnDef, i21.MatRowDef, i21.MatHeaderCell, i21.MatHeaderRow, i21.MatRow, i22.MatNestedTreeNode, i22.MatTreeNodeDef, i22.MatTreeNodeToggle, i22.MatTree, i22.MatTreeNode, i22.MatTreeNodeOutlet, i12.MatCheckbox, i23.MatSlideToggle, i13.MatFormField, i13.MatLabel, i14.MatInput, i15.MatSelect, i4.MatTooltip, i5$1.EntityTableComponent, GeometryFormFieldInputComponent], [i1$1.AsyncPipe, i7.TranslatePipe]);
29355
30228
  i0.ɵɵsetComponentScope(OgcFilterTimeComponent, [i1$1.NgForOf, i1$1.NgIf, i2$2.NgControlStatus, i2$2.NgModel, i2$2.FormControlDirective, i9.MatOption, i2.MatIcon, i3.MatButton, i23.MatSlideToggle, i13.MatFormField, i13.MatLabel, i13.MatSuffix, i14.MatInput, i15.MatSelect, i4.MatTooltip, i25.MatDatepicker, i25.MatDatepickerInput, i25.MatDatepickerToggle, OgcFilterTimeSliderComponent], [i7.TranslatePipe]);
29356
30229
 
29357
30230
  function ExportButtonComponent_button_0_Template(rf, ctx) { if (rf & 1) {
@@ -29616,7 +30489,7 @@ class ExportService {
29616
30489
  outputName = `${title}.csv`;
29617
30490
  }
29618
30491
  outputName = outputName.replace(' ', '_');
29619
- outputName = outputName.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
30492
+ outputName = outputName.normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/’/g, "'");
29620
30493
  outputNameField.setAttribute('type', 'hidden');
29621
30494
  outputNameField.setAttribute('name', 'outputName');
29622
30495
  outputNameField.setAttribute('value', outputName);
@@ -29936,21 +30809,34 @@ class ImportService {
29936
30809
  constructor(http, config) {
29937
30810
  this.http = http;
29938
30811
  this.config = config;
29939
- this.ogreUrl = this.config.getConfig('importExport.url');
29940
- const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
30812
+ const importConfig = this.config.getConfig('importExport');
30813
+ this.ogreUrl = importConfig.url;
30814
+ const configFileSizeMb = importConfig.clientSideFileSizeMaxMb;
29941
30815
  this.clientSideFileSizeMax = (configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
30816
+ if (importConfig.formats) {
30817
+ ImportService.allowedExtensions = importConfig.formats
30818
+ .map(format => ImportService.formatExtensionAssociation[format])
30819
+ .filter(e => e);
30820
+ if (ImportService.allowedExtensions.includes('geojson')) {
30821
+ ImportService.allowedExtensions.push('json');
30822
+ }
30823
+ }
29942
30824
  }
29943
30825
  import(file, projectionIn = 'EPSG:4326', projectionOut = 'EPSG:4326') {
29944
30826
  return this.importAsync(file, projectionIn, projectionOut);
29945
30827
  }
29946
30828
  getFileImporter(file) {
29947
30829
  const extension = getFileExtension(file);
30830
+ const allowedExtensions = ImportService.allowedExtensions;
30831
+ let zipMimeTypes = [];
30832
+ if (allowedExtensions.includes('zip')) {
30833
+ zipMimeTypes = ImportService.allowedZipMimeTypes;
30834
+ }
29948
30835
  const mimeType = file.type;
29949
30836
  const allowedMimeTypes = [
29950
30837
  ...ImportService.allowedMimeTypes,
29951
- ...ImportService.allowedZipMimeTypes
30838
+ ...zipMimeTypes
29952
30839
  ];
29953
- const allowedExtensions = ImportService.allowedExtensions;
29954
30840
  if (allowedMimeTypes.indexOf(mimeType) < 0 &&
29955
30841
  allowedExtensions.indexOf(extension) < 0) {
29956
30842
  return undefined;
@@ -30096,6 +30982,13 @@ class ImportService {
30096
30982
  return features;
30097
30983
  }
30098
30984
  }
30985
+ ImportService.formatExtensionAssociation = {
30986
+ GeoJSON: 'geojson',
30987
+ GML: 'gml',
30988
+ GPX: 'gpx',
30989
+ KML: 'kml',
30990
+ Shapefile: 'zip'
30991
+ };
30099
30992
  ImportService.allowedMimeTypes = [
30100
30993
  'application/gml+xml',
30101
30994
  'application/vnd.google-earth.kml+xml',
@@ -30107,7 +31000,7 @@ ImportService.allowedZipMimeTypes = [
30107
31000
  'application/x-zip-compressed',
30108
31001
  'application/x-zip'
30109
31002
  ];
30110
- ImportService.allowedExtensions = ['geojson', 'kml', 'gpx', 'json', 'gml'];
31003
+ ImportService.allowedExtensions = ['geojson', 'kml', 'gpx', 'json', 'gml', 'zip'];
30111
31004
  ImportService.ɵfac = function ImportService_Factory(t) { return new (t || ImportService)(i0.ɵɵinject(i1$2.HttpClient), i0.ɵɵinject(i2$1.ConfigService)); };
30112
31005
  ImportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ImportService, factory: ImportService.ɵfac, providedIn: 'root' });
30113
31006
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportService, [{
@@ -31976,6 +32869,64 @@ IgoOverlayModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({});
31976
32869
  }], null, null); })();
31977
32870
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(IgoOverlayModule, { declarations: [OverlayDirective], exports: [OverlayDirective] }); })();
31978
32871
 
32872
+ /*
32873
+ * The MIT License (MIT)
32874
+ *
32875
+ * Copyright (c) 2016-2017 Dan "Ducky" Little
32876
+ *
32877
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
32878
+ * of this software and associated documentation files (the "Software"), to deal
32879
+ * in the Software without restriction, including without limitation the rights
32880
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
32881
+ * copies of the Software, and to permit persons to whom the Software is
32882
+ * furnished to do so, subject to the following conditions:
32883
+ *
32884
+ * The above copyright notice and this permission notice shall be included in all
32885
+ * copies or substantial portions of the Software.
32886
+ *
32887
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32888
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
32889
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
32890
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
32891
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32892
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32893
+ * SOFTWARE.
32894
+ */
32895
+ function jsGeoPdfPlugin(jsPDFAPI) {
32896
+ const setGeoArea = function (pdfExt, geoExt) {
32897
+ const bbox = pdfExt.join(' ');
32898
+ // the ordering may seem odd here but PDF
32899
+ // flips the Y axis upside down and this accounts for that
32900
+ // change.
32901
+ const minx = geoExt[0];
32902
+ const maxx = geoExt[2];
32903
+ const maxy = geoExt[1];
32904
+ const miny = geoExt[3];
32905
+ const bounds = [miny, minx, maxy, minx, maxy, maxx, miny, maxx].join(' ');
32906
+ const bbox_obj = this.internal.newAdditionalObject();
32907
+ const bounds_obj = this.internal.newAdditionalObject();
32908
+ const proj_obj = this.internal.newAdditionalObject();
32909
+ proj_obj.content = '<< /EPSG 3857 /Type /PROJCS /WKT (PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere"' +
32910
+ ',GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0]' +
32911
+ ',UNIT["Degree",0.017453292519943295]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0]' +
32912
+ ',PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0]' +
32913
+ ',PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0]]) >>';
32914
+ bounds_obj.content = '<< /Bounds [ 0 1 0 0 1 0 1 1 ] /GCS ' +
32915
+ proj_obj.objId + ' 0 R /GPTS [ ' + bounds + ' ] /LPTS [ 0 1 0 0 1 0 1 1 ] /Subtype /GEO /Type /Measure >>';
32916
+ bbox_obj.content = '<< /BBox [ ' + bbox + ' ] /Measure ' + bounds_obj.objId + ' 0 R /Name (Layer) /Type /Viewport >>';
32917
+ const title_obj = this.internal.newAdditionalObject();
32918
+ const date = new Date().toLocaleDateString('en-CA');
32919
+ title_obj.content = '<< /Name IGO2 /Type /OCG /Date ' + date + ' >>';
32920
+ return bbox_obj.objId;
32921
+ };
32922
+ jsPDFAPI.setGeoArea = function (pdfExt, geoExt) {
32923
+ this.internal.events.subscribe('putPage', function () {
32924
+ const bbox_id = setGeoArea.call(this, pdfExt, geoExt);
32925
+ this.internal.write('/VP [ ' + bbox_id + ' 0 R ]');
32926
+ });
32927
+ };
32928
+ }
32929
+
31979
32930
  class PrintService {
31980
32931
  constructor(http, messageService, activityService, languageService, configService) {
31981
32932
  this.http = http;
@@ -31983,6 +32934,15 @@ class PrintService {
31983
32934
  this.activityService = activityService;
31984
32935
  this.languageService = languageService;
31985
32936
  this.configService = configService;
32937
+ this.TEXTPDFFONT = {
32938
+ titleFont: 'Times',
32939
+ titleFontStyle: 'bold',
32940
+ subtitleFont: 'Times',
32941
+ subtitleFontStyle: 'bold',
32942
+ commentFont: 'courier',
32943
+ commentFontStyle: 'normal',
32944
+ commentFontSize: 16
32945
+ };
31986
32946
  }
31987
32947
  print(map, options) {
31988
32948
  const status$ = new Subject();
@@ -31991,9 +32951,11 @@ class PrintService {
31991
32951
  const orientation = options.orientation;
31992
32952
  const legendPostion = options.legendPosition;
31993
32953
  this.activityId = this.activityService.register();
31994
- const doc = new jspdf({
32954
+ jsGeoPdfPlugin(jsPDF.API);
32955
+ const doc = new jsPDF({
31995
32956
  orientation,
31996
- format: paperFormat.toLowerCase()
32957
+ format: paperFormat.toLowerCase(),
32958
+ unit: 'mm' // default
31997
32959
  });
31998
32960
  const dimensions = [
31999
32961
  doc.internal.pageSize.width,
@@ -32003,17 +32965,21 @@ class PrintService {
32003
32965
  const width = dimensions[0] - margins[3] - margins[1];
32004
32966
  const height = dimensions[1] - margins[0] - margins[2];
32005
32967
  const size = [width, height];
32006
- let titleSizeResults = [0, 0];
32968
+ let titleSizes;
32969
+ let subtitleSizes;
32970
+ // PDF title
32007
32971
  if (options.title !== undefined) {
32008
- titleSizeResults = this.getTitleSize(options.title, width, height, doc); // return : size(pt) and left margin (mm)
32009
- this.addTitle(doc, options.title, titleSizeResults[0], margins[3] + titleSizeResults[1], titleSizeResults[0] * (25.4 / 72));
32972
+ const fontSizeInPt = Math.round(2 * (height + 145) * 0.05) / 2; //calculate the fontSize title from the page height.
32973
+ titleSizes = this.getTextPdfObjectSizeAndMarg(options.title, margins, this.TEXTPDFFONT.titleFont, fontSizeInPt, this.TEXTPDFFONT.titleFontStyle, doc);
32974
+ this.addTextInPdfDoc(doc, options.title, this.TEXTPDFFONT.titleFont, this.TEXTPDFFONT.titleFontStyle, titleSizes.fontSize, titleSizes.marginLeft + margins[3], margins[0]);
32975
+ margins[0] = titleSizes.height + margins[0]; // cumulative margin top for next elem to place in pdf doc
32010
32976
  }
32977
+ // PDF subtitle
32011
32978
  if (options.subtitle !== undefined) {
32012
- let subtitleSizeResult = 0;
32013
- const titleH = titleSizeResults[0];
32014
- subtitleSizeResult = this.getSubTitleSize(options.subtitle, width, height, doc); // return : size(pt) and left margin (mm)
32015
- this.addSubTitle(doc, options.subtitle, titleH * 0.7, margins[3] + subtitleSizeResult, titleH * 1.7 * (25.4 / 72));
32016
- margins[0] = margins[0] + titleSizeResults[0] * 0.7 * (25.4 / 72);
32979
+ subtitleSizes = this.getTextPdfObjectSizeAndMarg(options.subtitle, margins, this.TEXTPDFFONT.subtitleFont, titleSizes.fontSize * 0.7, // 70% size of title
32980
+ this.TEXTPDFFONT.subtitleFontStyle, doc);
32981
+ this.addTextInPdfDoc(doc, options.subtitle, this.TEXTPDFFONT.subtitleFont, this.TEXTPDFFONT.subtitleFontStyle, subtitleSizes.fontSize, subtitleSizes.marginLeft + margins[3], margins[0]);
32982
+ margins[0] += 5; // cumulative marg top for next elem to place in pdf doc. 5 is a fix it could be adjust
32017
32983
  }
32018
32984
  if (options.showProjection === true || options.showScale === true) {
32019
32985
  this.addProjScale(doc, map, resolution, options.showProjection, options.showScale);
@@ -32025,6 +32991,10 @@ class PrintService {
32025
32991
  if (status === SubjectStatus.Done) {
32026
32992
  await this.addScale(doc, map, margins);
32027
32993
  await this.handleMeasureLayer(doc, map, margins);
32994
+ const width = this.imgSizeAdded[0];
32995
+ const height = this.imgSizeAdded[1];
32996
+ const res = 1;
32997
+ this.addGeoRef(doc, map, width, height, res, margins);
32028
32998
  if (options.legendPosition !== 'none') {
32029
32999
  if (['topleft', 'topright', 'bottomleft', 'bottomright'].indexOf(options.legendPosition) > -1) {
32030
33000
  await this.addLegendSamePage(doc, map, margins, resolution, options.legendPosition);
@@ -32044,6 +33014,20 @@ class PrintService {
32044
33014
  });
32045
33015
  return status$;
32046
33016
  }
33017
+ // ref GeoMoose https://github.com/geomoose/gm3/tree/main/src/gm3/components/print
33018
+ addGeoRef(doc, map, width, height, resolution, margins) {
33019
+ const unit = 'mm';
33020
+ const docHeight = doc.internal.pageSize.getHeight();
33021
+ // x,y = margin left-bottom corner for img in pdf doc
33022
+ const x = margins[3];
33023
+ const y = docHeight - margins[0] - height;
33024
+ let pdf_extents = [x, y, x + width, y + height];
33025
+ for (let i = 0; i < pdf_extents.length; i++) {
33026
+ pdf_extents[i] = this.pdf_units2points(pdf_extents[i], unit);
33027
+ }
33028
+ const mapExtent = map.viewController.getExtent('EPSG:3857');
33029
+ doc.setGeoArea(pdf_extents, mapExtent);
33030
+ }
32047
33031
  /**
32048
33032
  * Add measure overlay on the map on the document when the measure layer is present
32049
33033
  * @param doc - Pdf document where measure tooltip will be added
@@ -32163,66 +33147,46 @@ class PrintService {
32163
33147
  }
32164
33148
  return status$;
32165
33149
  }
32166
- getTitleSize(title, pageWidth, pageHeight, doc) {
33150
+ getTextPdfObjectSizeAndMarg(text, margins, font, fontSizeInPt, fontStyle, doc) {
32167
33151
  const pdfResolution = 96;
32168
- const titleSize = Math.round(2 * (pageHeight + 145) * 0.05) / 2;
32169
- doc.setFont('Times', 'bold');
32170
- const width = doc.getTextWidth(title);
32171
- const titleWidth = doc.getStringUnitWidth(title) * titleSize / doc.internal.scaleFactor;
32172
- const titleTailleMinimale = Math.round(2 * (pageHeight + 150) * 0.037) / 2;
32173
- let titleFontSize = 0;
32174
- let titleMarginLeft;
32175
- if (titleWidth >= (pageWidth)) {
32176
- titleMarginLeft = 0;
32177
- titleFontSize = Math.round(((pageWidth / title.length) * pdfResolution) / 25.4);
32178
- // If the formula to find the font size gives below the defined minimum size
32179
- if (titleFontSize < titleTailleMinimale) {
32180
- titleFontSize = titleTailleMinimale;
32181
- }
33152
+ const docWidth = doc.internal.pageSize.getWidth();
33153
+ const pageWidth = docWidth - margins[1] - margins[3];
33154
+ // important to set it first, the textDimension change when font change!
33155
+ doc.setFont(font, fontStyle);
33156
+ doc.setFontSize(fontSizeInPt);
33157
+ let textDimensions = doc.getTextDimensions(text);
33158
+ let textMarginLeft;
33159
+ if (textDimensions.w > pageWidth) {
33160
+ // if the text is to long, reduce fontSize 70% and the overflow with be cut in print...
33161
+ textMarginLeft = 0;
33162
+ fontSizeInPt = fontSizeInPt * 0.7;
33163
+ doc.setFontSize(fontSizeInPt);
33164
+ textDimensions = doc.getTextDimensions(text);
32182
33165
  }
32183
33166
  else {
32184
- titleMarginLeft = (pageWidth - titleWidth) / 2;
32185
- titleFontSize = titleSize;
32186
- }
32187
- return [titleFontSize, titleMarginLeft];
32188
- }
32189
- getSubTitleSize(subtitle, pageWidth, pageHeight, doc) {
32190
- const subtitleSize = 0.7 * Math.round(2 * (pageHeight + 145) * 0.05) / 2; // 70% of the title's font size
32191
- doc.setFont('Times', 'bold');
32192
- const subtitleWidth = doc.getStringUnitWidth(subtitle) * subtitleSize / doc.internal.scaleFactor;
32193
- let subtitleMarginLeft;
32194
- if (subtitleWidth >= (pageWidth)) {
32195
- subtitleMarginLeft = 0;
33167
+ textMarginLeft = (pageWidth - textDimensions.w) / 2;
32196
33168
  }
32197
- else {
32198
- subtitleMarginLeft = (pageWidth - subtitleWidth) / 2;
32199
- }
32200
- return subtitleMarginLeft;
32201
- }
32202
- addTitle(doc, title, titleFontSize, titleMarginLeft, titleMarginTop) {
32203
- doc.setFont('Times', 'bold');
32204
- doc.setFontSize(titleFontSize);
32205
- doc.text(title, titleMarginLeft, titleMarginTop);
32206
- }
32207
- addSubTitle(doc, subtitle, subtitleFontSize, subtitleMarginLeft, subtitleMarginTop) {
32208
- doc.setFont('Times', 'bold');
32209
- doc.setFontSize(subtitleFontSize);
32210
- doc.text(subtitle, subtitleMarginLeft, subtitleMarginTop);
33169
+ return {
33170
+ 'fontSize': fontSizeInPt,
33171
+ 'marginLeft': textMarginLeft,
33172
+ 'height': textDimensions.h
33173
+ };
32211
33174
  }
32212
33175
  /**
32213
33176
  * Add comment to the document
32214
33177
  * * @param doc - pdf document
32215
33178
  * * @param comment - Comment to add in the document
32216
- * * @param size - Size of the document
32217
33179
  */
32218
33180
  addComment(doc, comment) {
32219
- const commentSize = 16;
32220
- const commentMarginLeft = 20;
32221
- const marginBottom = 5;
32222
- const heightPixels = doc.internal.pageSize.height - marginBottom;
32223
- doc.setFont('courier');
32224
- doc.setFontSize(commentSize);
32225
- doc.text(comment, commentMarginLeft, heightPixels);
33181
+ const commentMarginLeft = 20; //margin left and bottom is fix
33182
+ const commentMarginBottom = 5;
33183
+ const marginTop = doc.internal.pageSize.height - commentMarginBottom;
33184
+ this.addTextInPdfDoc(doc, comment, this.TEXTPDFFONT.commentFont, this.TEXTPDFFONT.commentFontStyle, this.TEXTPDFFONT.commentFontSize, commentMarginLeft, marginTop);
33185
+ }
33186
+ addTextInPdfDoc(doc, textToAdd, textFont, textFontStyle, textFontSize, textMarginLeft, textMarginTop) {
33187
+ doc.setFont(textFont, textFontStyle);
33188
+ doc.setFontSize(textFontSize);
33189
+ doc.text(textToAdd, textMarginLeft, textMarginTop);
32226
33190
  }
32227
33191
  /**
32228
33192
  * Add projection and/or scale to the document
@@ -32394,9 +33358,14 @@ class PrintService {
32394
33358
  image = canvas.toDataURL('image/png');
32395
33359
  }
32396
33360
  if (image !== undefined) {
33361
+ if (image.length < 20) { // img is corrupt todo: fix addScale in mobile make a corrupt img
33362
+ console.log('Warning: An image cannot be print in pdf file');
33363
+ return;
33364
+ }
32397
33365
  const imageSize = this.getImageSizeToFitPdf(doc, canvas, margins);
32398
33366
  doc.addImage(image, 'PNG', margins[3], margins[0], imageSize[0], imageSize[1]);
32399
33367
  doc.rect(margins[3], margins[0], imageSize[0], imageSize[1]);
33368
+ this.imgSizeAdded = imageSize; // keep img size for georef later
32400
33369
  }
32401
33370
  }
32402
33371
  // TODO fix printing with image resolution
@@ -32630,7 +33599,7 @@ class PrintService {
32630
33599
  * @param doc - Document to save
32631
33600
  */
32632
33601
  async saveDoc(doc) {
32633
- await doc.save('map.pdf', { returnPromise: true });
33602
+ await doc.save('map_georef.pdf', { returnPromise: true });
32634
33603
  }
32635
33604
  /**
32636
33605
  * Calculate the best Image size to fit in pdf
@@ -32642,8 +33611,8 @@ class PrintService {
32642
33611
  // Define variable to calculate best size to fit in one page
32643
33612
  const pageHeight = doc.internal.pageSize.getHeight() - (margins[0] + margins[2]);
32644
33613
  const pageWidth = doc.internal.pageSize.getWidth() - (margins[1] + margins[3]);
32645
- const canHeight = canvas.height;
32646
- const canWidth = canvas.width;
33614
+ const canHeight = this.pdf_units2points(canvas.height, 'mm');
33615
+ const canWidth = this.pdf_units2points(canvas.width, 'mm');
32647
33616
  const heightRatio = canHeight / pageHeight;
32648
33617
  const widthRatio = canWidth / pageWidth;
32649
33618
  const maxRatio = heightRatio > widthRatio ? heightRatio : widthRatio;
@@ -32759,6 +33728,41 @@ class PrintService {
32759
33728
  delete that.zipFile;
32760
33729
  });
32761
33730
  }
33731
+ pdf_units2points(n, unit) {
33732
+ let k = 1;
33733
+ // this code is borrowed from jsPDF
33734
+ // as it does not expose a public API
33735
+ // for converting units to points.
33736
+ switch (unit) {
33737
+ case 'pt':
33738
+ k = 1;
33739
+ break;
33740
+ case 'mm':
33741
+ k = 72 / 25.4;
33742
+ break;
33743
+ case 'cm':
33744
+ k = 72 / 2.54;
33745
+ break;
33746
+ case 'in':
33747
+ k = 72;
33748
+ break;
33749
+ case 'px':
33750
+ k = 96 / 72;
33751
+ break;
33752
+ case 'pc':
33753
+ k = 12;
33754
+ break;
33755
+ case 'em':
33756
+ k = 12;
33757
+ break;
33758
+ case 'ex':
33759
+ k = 6;
33760
+ break;
33761
+ default:
33762
+ throw new Error('Invalid unit: ' + unit);
33763
+ }
33764
+ return n * k;
33765
+ }
32762
33766
  }
32763
33767
  PrintService.ɵfac = function PrintService_Factory(t) { return new (t || PrintService)(i0.ɵɵinject(i1$2.HttpClient), i0.ɵɵinject(i2$1.MessageService), i0.ɵɵinject(i2$1.ActivityService), i0.ɵɵinject(i2$1.LanguageService), i0.ɵɵinject(i2$1.ConfigService)); };
32764
33768
  PrintService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PrintService, factory: PrintService.ɵfac, providedIn: 'root' });
@@ -34277,6 +35281,7 @@ function featureToSearchResult(feature, source) {
34277
35281
  delete feature.properties.SHAPE_P;
34278
35282
  delete feature.properties.the_geom;
34279
35283
  delete feature.properties.geom;
35284
+ delete feature.properties.geom32198;
34280
35285
  }
34281
35286
  feature.sourceId = source.getId();
34282
35287
  return {
@@ -35365,6 +36370,30 @@ class IChercheSearchSource extends SearchSource {
35365
36370
  enabled: types.indexOf('anciennes-adresses') !== -1,
35366
36371
  hashtags: ['anciennes-adresses']
35367
36372
  },
36373
+ {
36374
+ title: 'igo.geo.search.icherche.type.oldCity',
36375
+ value: 'anciennes-municipalites',
36376
+ enabled: types.indexOf('anciennes-municipalites') !== -1,
36377
+ hashtags: ['anciennes-municipalites']
36378
+ },
36379
+ {
36380
+ title: 'igo.geo.search.icherche.type.cn',
36381
+ value: 'bornes-cn',
36382
+ enabled: types.indexOf('bornes-cn') !== -1,
36383
+ hashtags: ['borne', 'bornes', 'cn']
36384
+ },
36385
+ {
36386
+ title: 'igo.geo.search.icherche.type.sumi',
36387
+ value: 'bornes-sumi',
36388
+ enabled: types.indexOf('bornes-sumi') !== -1,
36389
+ hashtags: ['borne', 'bornes', 'sumi']
36390
+ },
36391
+ {
36392
+ title: 'igo.geo.search.icherche.type.cadastre',
36393
+ value: 'cadastre',
36394
+ enabled: types.indexOf('cadastre') !== -1,
36395
+ hashtags: ['cadastre']
36396
+ },
35368
36397
  {
35369
36398
  title: 'igo.geo.search.icherche.type.postalCode',
35370
36399
  value: 'codes-postaux',
@@ -35372,10 +36401,29 @@ class IChercheSearchSource extends SearchSource {
35372
36401
  hashtags: ['code-postal']
35373
36402
  },
35374
36403
  {
35375
- title: 'igo.geo.search.icherche.type.road',
35376
- value: 'routes',
35377
- enabled: types.indexOf('routes') !== -1,
35378
- hashtags: ['route']
36404
+ title: 'igo.geo.search.icherche.type.entreprise',
36405
+ value: 'entreprises',
36406
+ enabled: types.indexOf('entreprises') !== -1,
36407
+ available: false,
36408
+ hashtags: ['entreprise']
36409
+ },
36410
+ {
36411
+ title: 'igo.geo.search.icherche.type.cycleStop',
36412
+ value: 'haltes_cyclables',
36413
+ enabled: types.indexOf('haltes_cyclables') !== -1,
36414
+ hashtags: ['haltevelo', 'haltes_cyclables']
36415
+ },
36416
+ {
36417
+ title: 'igo.geo.search.icherche.type.restArea',
36418
+ value: 'haltes_routieres',
36419
+ enabled: types.indexOf('haltes_routieres') !== -1,
36420
+ hashtags: ['halteroute', 'haltes_routieres']
36421
+ },
36422
+ {
36423
+ title: 'igo.geo.search.icherche.type.hq',
36424
+ value: 'hq',
36425
+ enabled: types.indexOf('hq') !== -1,
36426
+ hashtags: ['hq']
35379
36427
  },
35380
36428
  {
35381
36429
  title: 'igo.geo.search.icherche.type.intersection',
@@ -35384,16 +36432,10 @@ class IChercheSearchSource extends SearchSource {
35384
36432
  hashtags: ['intersection', '+']
35385
36433
  },
35386
36434
  {
35387
- title: 'igo.geo.search.icherche.type.city',
35388
- value: 'municipalites',
35389
- enabled: types.indexOf('municipalites') !== -1,
35390
- hashtags: ['municipalité', 'mun']
35391
- },
35392
- {
35393
- title: 'igo.geo.search.icherche.type.oldCity',
35394
- value: 'anciennes-municipalites',
35395
- enabled: types.indexOf('anciennes-municipalites') !== -1,
35396
- hashtags: ['anciennes-municipalites']
36435
+ title: 'igo.geo.search.icherche.type.place',
36436
+ value: 'lieux',
36437
+ enabled: types.indexOf('lieux') !== -1,
36438
+ hashtags: ['lieu']
35397
36439
  },
35398
36440
  {
35399
36441
  title: 'igo.geo.search.icherche.type.mrc',
@@ -35401,37 +36443,18 @@ class IChercheSearchSource extends SearchSource {
35401
36443
  enabled: types.indexOf('mrc') !== -1,
35402
36444
  hashtags: ['mrc']
35403
36445
  },
36446
+ {
36447
+ title: 'igo.geo.search.icherche.type.city',
36448
+ value: 'municipalites',
36449
+ enabled: types.indexOf('municipalites') !== -1,
36450
+ hashtags: ['municipalité', 'mun']
36451
+ },
35404
36452
  {
35405
36453
  title: 'igo.geo.search.icherche.type.regadmin',
35406
36454
  value: 'regadmin',
35407
36455
  enabled: types.indexOf('regadmin') !== -1,
35408
36456
  hashtags: ['région-administrative', 'regadmin']
35409
36457
  },
35410
- {
35411
- title: 'igo.geo.search.icherche.type.entreprise',
35412
- value: 'entreprises',
35413
- enabled: types.indexOf('entreprises') !== -1,
35414
- available: false,
35415
- hashtags: ['entreprise']
35416
- },
35417
- {
35418
- title: 'igo.geo.search.icherche.type.place',
35419
- value: 'lieux',
35420
- enabled: types.indexOf('lieux') !== -1,
35421
- hashtags: ['lieu']
35422
- },
35423
- {
35424
- title: 'igo.geo.search.icherche.type.exit',
35425
- value: 'sorties-autoroute',
35426
- enabled: types.indexOf('sorties-autoroute') !== -1,
35427
- hashtags: ['sortie', 'sorties', 'exit']
35428
- },
35429
- {
35430
- title: 'igo.geo.search.icherche.type.km',
35431
- value: 'bornes-km',
35432
- enabled: types.indexOf('bornes-km') !== -1,
35433
- hashtags: ['borne', 'bornes', 'repère', 'km']
35434
- },
35435
36458
  {
35436
36459
  title: 'igo.geo.search.icherche.type.gcc',
35437
36460
  value: 'bornes-gcc',
@@ -35439,28 +36462,22 @@ class IChercheSearchSource extends SearchSource {
35439
36462
  hashtags: ['borne', 'bornes', 'repère', 'gcc', 'ccg']
35440
36463
  },
35441
36464
  {
35442
- title: 'igo.geo.search.icherche.type.cn',
35443
- value: 'bornes-cn',
35444
- enabled: types.indexOf('bornes-cn') !== -1,
35445
- hashtags: ['borne', 'bornes', 'cn']
35446
- },
35447
- {
35448
- title: 'igo.geo.search.icherche.type.sumi',
35449
- value: 'bornes-sumi',
35450
- enabled: types.indexOf('bornes-sumi') !== -1,
35451
- hashtags: ['borne', 'bornes', 'sumi']
36465
+ title: 'igo.geo.search.icherche.type.km',
36466
+ value: 'bornes-km',
36467
+ enabled: types.indexOf('bornes-km') !== -1,
36468
+ hashtags: ['borne', 'bornes', 'repère', 'km']
35452
36469
  },
35453
36470
  {
35454
- title: 'igo.geo.search.icherche.type.hq',
35455
- value: 'hq',
35456
- enabled: types.indexOf('hq') !== -1,
35457
- hashtags: ['hq']
36471
+ title: 'igo.geo.search.icherche.type.road',
36472
+ value: 'routes',
36473
+ enabled: types.indexOf('routes') !== -1,
36474
+ hashtags: ['route']
35458
36475
  },
35459
36476
  {
35460
- title: 'igo.geo.search.icherche.type.cadastre',
35461
- value: 'cadastre',
35462
- enabled: types.indexOf('cadastre') !== -1,
35463
- hashtags: ['cadastre']
36477
+ title: 'igo.geo.search.icherche.type.exit',
36478
+ value: 'sorties-autoroute',
36479
+ enabled: types.indexOf('sorties-autoroute') !== -1,
36480
+ hashtags: ['sortie', 'sorties', 'exit']
35464
36481
  }
35465
36482
  ]
35466
36483
  },
@@ -37110,7 +38127,7 @@ SearchSettingsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Sea
37110
38127
  i0.ɵɵproperty("ngForOf", ctx.getSearchSources());
37111
38128
  i0.ɵɵadvance(1);
37112
38129
  i0.ɵɵproperty("ngIf", ctx.hasPointerReverseSearchSource && !ctx.isTouchScreen);
37113
- } }, dependencies: [i1$1.NgForOf, i1$1.NgIf, i1$1.NgSwitch, i1$1.NgSwitchCase, i4.MatTooltip, i2.MatIcon, i3.MatButton, i7$2.MatMenu, i7$2.MatMenuItem, i7$2.MatMenuTrigger, i17.MatRadioGroup, i17.MatRadioButton, i12$1.MatCheckbox, i11.MatDivider, i23.MatSlideToggle, i7.TranslatePipe], styles: [".checkAllButton[_ngcontent-%COMP%]{text-align:center;padding:0 5px}.igo-search-settings-button[_ngcontent-%COMP%] div.mat-button-ripple-round{border-radius:0}.igo-search-settings-radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column}.igo-search-settings-radio-group[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%]{margin:5px}.igo-search-settings-checkbox[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%]{display:flex}.igo-search-settings-search-source[_ngcontent-%COMP%]{display:flex;width:100%}.igo-search-settings-search-source[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{display:flex;margin-left:5px;margin-right:5px}.pointer-summary-option[_ngcontent-%COMP%]{display:block;margin-right:10px;margin-bottom:15px}.pointer-summary-slide-toggle-container[_ngcontent-%COMP%]{overflow-x:hidden}.pointer-summary-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{margin:10px}"], changeDetection: 0 });
38130
+ } }, dependencies: [i1$1.NgForOf, i1$1.NgIf, i1$1.NgSwitch, i1$1.NgSwitchCase, i4.MatTooltip, i2.MatIcon, i3.MatButton, i7$2.MatMenu, i7$2.MatMenuItem, i7$2.MatMenuTrigger, i17.MatRadioGroup, i17.MatRadioButton, i12.MatCheckbox, i11.MatDivider, i23.MatSlideToggle, i7.TranslatePipe], styles: [".checkAllButton[_ngcontent-%COMP%]{text-align:center;padding:0 5px}.igo-search-settings-button[_ngcontent-%COMP%] div.mat-button-ripple-round{border-radius:0}.igo-search-settings-radio-group[_ngcontent-%COMP%]{display:flex;flex-direction:column}.igo-search-settings-radio-group[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%]{margin:5px}.igo-search-settings-checkbox[_ngcontent-%COMP%] mat-radio-button[_ngcontent-%COMP%]{display:flex}.igo-search-settings-search-source[_ngcontent-%COMP%]{display:flex;width:100%}.igo-search-settings-search-source[_ngcontent-%COMP%] mat-checkbox[_ngcontent-%COMP%]{display:flex;margin-left:5px;margin-right:5px}.pointer-summary-option[_ngcontent-%COMP%]{display:block;margin-right:10px;margin-bottom:15px}.pointer-summary-slide-toggle-container[_ngcontent-%COMP%]{overflow-x:hidden}.pointer-summary-slide-toggle-container[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{margin:10px}"], changeDetection: 0 });
37114
38131
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchSettingsComponent, [{
37115
38132
  type: Component,
37116
38133
  args: [{ selector: 'igo-search-settings', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"igo-search-settings\">\n\n <button\n mat-icon-button\n class=\"igo-search-settings-button\"\n color=\"primary\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.search.menu.tooltip' | translate\"\n [matMenuTriggerFor]=\"searchSettingsMenu\">\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\n </button>\n <mat-menu\n #searchSettingsMenu=\"matMenu\"\n class=\"no-border-radius\">\n <div class=\"checkAllButton\" *ngIf=\"getSearchSources().length>4\">\n <button mat-raised-button\n (click)=\"checkUncheckAllSources($event)\">{{!searchSourcesAllEnabled ? ('igo.geo.search.searchSources.unselectAll' | translate): ('igo.geo.search.searchSources.selectAll' | translate)}}</button>\n </div>\n <ng-container *ngFor=\"let source of getSearchSources()\">\n <span class=\"igo-search-settings-search-source\">\n <mat-checkbox\n class=\"igo-search-settings-checkbox\"\n [checked]=\"source.enabled\"\n [value]=\"source\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onCheckSearchSource($event, source)\">\n </mat-checkbox>\n <button *ngIf=\"source.settings.length\u00A0>\u00A00\"\n [matMenuTriggerFor]=\"sub_menu\"\n mat-menu-item>{{source.title}}\n </button>\n <button\n mat-menu-item\n *ngIf=\"source.settings.length\u00A0===\u00A00\">\n {{source.title}}\n </button>\n </span>\n <mat-menu #sub_menu=\"matMenu\">\n <ng-container *ngFor=\"let setting of source.settings\">\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"test_sub_menu\">\n {{'igo.geo.search.searchSources.settings.'+ setting.title | translate}}\n </button>\n <mat-menu #test_sub_menu=\"matMenu\"\n [ngSwitch]=\"setting.type\"\n yPosition=\"above\">\n <span *ngSwitchCase=\"'radiobutton'\">\n <mat-radio-group\n class=\"igo-search-settings-radio-group\"\n [value]=\"setting\">\n <mat-radio-button *ngFor=\"let settingValue of setting.values\"\n class=\"mat-typography\"\n [value]=\"settingValue\"\n [matTooltip]=\"getAvailableHashtagsValues(settingValue)\"\n [checked]=\"settingValue.enabled\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"settingsValueCheckedRadioButton($event, source, setting, settingValue)\">\n {{settingValue.title | translate}}\n </mat-radio-button>\n </mat-radio-group>\n </span>\n <span *ngSwitchCase=\"'checkbox'\">\n <div class=\"checkAllButton\" *ngIf=\"setting.values.length\u00A0>\u00A03\">\n <button mat-raised-button\n (click)=\"checkUncheckAll($event, source, setting)\">{{setting.allEnabled || setting.allEnabled === undefined ? ('igo.geo.search.searchSources.settings.unselectAll' | translate): ('igo.geo.search.searchSources.settings.selectAll' | translate)}}</button>\n </div>\n <mat-checkbox *ngFor=\"let settingValue of getAvailableValues(setting)\"\n class=\"mat-menu-item\"\n [style.display]=\"displayBlock\"\n [checked]=\"settingValue.enabled\"\n [value]=\"setting\"\n [matTooltip]=\"getAvailableHashtagsValues(settingValue)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"settingsValueCheckedCheckbox($event, source, setting, settingValue)\">\n {{settingValue.title | translate}}\n </mat-checkbox>\n </span>\n </mat-menu>\n </ng-container>\n </mat-menu>\n </ng-container>\n <span *ngIf=\"hasPointerReverseSearchSource && !isTouchScreen\">\n <mat-divider></mat-divider>\n <span class=\"pointer-summary-slide-toggle-container mat-typography\">\n <mat-slide-toggle class=\"pointer-summary-option\" (change)=\"changePointerReverseSearch($event)\" tooltip-position=\"below\"\n matTooltipShowDelay=\"500\" [matTooltip]=\"'igo.geo.search.pointerSearchSummary.tooltip' | translate\"\n (click)=\"$event.stopPropagation()\" [checked]=\"pointerSummaryEnabled\" [labelPosition]=\"'after'\">\n {{'igo.geo.search.pointerSearchSummary.title' | translate}}\n </mat-slide-toggle>\n <mat-slide-toggle class=\"pointer-summary-option\" (change)=\"changeSearchResultsGeometry($event)\" tooltip-position=\"below\"\n matTooltipShowDelay=\"500\" [matTooltip]=\"'igo.geo.search.searchResultsGeometry.tooltip' | translate\"\n (click)=\"$event.stopPropagation()\" [checked]=\"searchResultsGeometryEnabled\" [labelPosition]=\"'after'\">\n {{'igo.geo.search.searchResultsGeometry.title' | translate}}\n </mat-slide-toggle>\n </span>\n </span>\n </mat-menu>\n</div>\n", styles: [".checkAllButton{text-align:center;padding:0 5px}.igo-search-settings-button ::ng-deep div.mat-button-ripple-round{border-radius:0}.igo-search-settings-radio-group{display:flex;flex-direction:column}.igo-search-settings-radio-group mat-radio-button{margin:5px}.igo-search-settings-checkbox mat-radio-button{display:flex}.igo-search-settings-search-source{display:flex;width:100%}.igo-search-settings-search-source mat-checkbox{display:flex;margin-left:5px;margin-right:5px}.pointer-summary-option{display:block;margin-right:10px;margin-bottom:15px}.pointer-summary-slide-toggle-container{overflow-x:hidden}.pointer-summary-slide-toggle-container mat-slide-toggle{margin:10px}\n"] }]
@@ -37187,25 +38204,23 @@ function SearchBarComponent_mat_label_3_Template(rf, ctx) { if (rf & 1) {
37187
38204
  i0.ɵɵtextInterpolate(ctx_r0.label);
37188
38205
  } }
37189
38206
  function SearchBarComponent_button_11_Template(rf, ctx) { if (rf & 1) {
38207
+ const _r7 = i0.ɵɵgetCurrentView();
37190
38208
  i0.ɵɵelementStart(0, "button", 10);
37191
- i0.ɵɵelement(1, "mat-icon", 11);
38209
+ i0.ɵɵlistener("click", function SearchBarComponent_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.onClearButtonClick()); });
38210
+ i0.ɵɵpipe(1, "translate");
38211
+ i0.ɵɵelement(2, "mat-icon", 11);
37192
38212
  i0.ɵɵelementEnd();
37193
38213
  } if (rf & 2) {
37194
38214
  const ctx_r2 = i0.ɵɵnextContext();
37195
- i0.ɵɵproperty("color", ctx_r2.color);
37196
- i0.ɵɵadvance(1);
37197
- i0.ɵɵpropertyInterpolate("svgIcon", ctx_r2.searchIcon);
38215
+ i0.ɵɵproperty("color", ctx_r2.color)("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.search.clearSearch"));
37198
38216
  } }
37199
- function SearchBarComponent_button_12_Template(rf, ctx) { if (rf & 1) {
37200
- const _r7 = i0.ɵɵgetCurrentView();
38217
+ function SearchBarComponent_button_13_Template(rf, ctx) { if (rf & 1) {
37201
38218
  i0.ɵɵelementStart(0, "button", 12);
37202
- i0.ɵɵlistener("click", function SearchBarComponent_button_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.onClearButtonClick()); });
37203
- i0.ɵɵpipe(1, "translate");
37204
- i0.ɵɵelement(2, "mat-icon", 13);
38219
+ i0.ɵɵelement(1, "mat-icon", 13);
37205
38220
  i0.ɵɵelementEnd();
37206
38221
  } if (rf & 2) {
37207
38222
  const ctx_r3 = i0.ɵɵnextContext();
37208
- i0.ɵɵproperty("color", ctx_r3.color)("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.search.clearSearch"));
38223
+ i0.ɵɵproperty("color", ctx_r3.color);
37209
38224
  } }
37210
38225
  function SearchBarComponent_igo_search_selector_14_Template(rf, ctx) { if (rf & 1) {
37211
38226
  const _r9 = i0.ɵɵgetCurrentView();
@@ -37234,8 +38249,8 @@ const _c2$1 = function (a0) { return { "hasSearchIcon": a0 }; };
37234
38249
  * into that store. An event is always emitted when a research is completed.
37235
38250
  */
37236
38251
  class SearchBarComponent {
37237
- constructor(languageService, searchService, searchSourceService) {
37238
- this.languageService = languageService;
38252
+ constructor(configService, searchService, searchSourceService) {
38253
+ this.configService = configService;
37239
38254
  this.searchService = searchService;
37240
38255
  this.searchSourceService = searchSourceService;
37241
38256
  this.placeholder$ = new BehaviorSubject('igo.geo.search.placeholder');
@@ -37244,6 +38259,10 @@ class SearchBarComponent {
37244
38259
  * Search term stream
37245
38260
  */
37246
38261
  this.stream$ = new BehaviorSubject('');
38262
+ /**
38263
+ * whether to show search button or not
38264
+ */
38265
+ this.showSearchButton = false;
37247
38266
  /**
37248
38267
  * List of available search types
37249
38268
  */
@@ -37355,12 +38374,14 @@ class SearchBarComponent {
37355
38374
  this.empty$.next(term === undefined || term.length === 0);
37356
38375
  });
37357
38376
  this.stream$$ = this.stream$
37358
- .pipe(debounce((term) => (term === '' ? EMPTY : timer(this.debounce))))
38377
+ .pipe(debounce(() => timer(this.debounce)))
37359
38378
  .subscribe((term) => this.onSetTerm(term));
37360
38379
  this.handlePlaceholder();
37361
38380
  this.searchType$$ = this.searchType$
37362
38381
  .pipe(distinctUntilChanged())
37363
38382
  .subscribe((searchType) => this.onSetSearchType(searchType));
38383
+ const configValue = this.configService.getConfig("searchBar.showSearchButton");
38384
+ this.showSearchButton = configValue !== undefined ? configValue : false;
37364
38385
  }
37365
38386
  /**
37366
38387
  * Unsubscribe to the search term stream
@@ -37548,13 +38569,13 @@ SearchBarComponent.invalidKeys = [
37548
38569
  'ArrowRight',
37549
38570
  'ArrowLeft'
37550
38571
  ];
37551
- SearchBarComponent.ɵfac = function SearchBarComponent_Factory(t) { return new (t || SearchBarComponent)(i0.ɵɵdirectiveInject(i2$1.LanguageService), i0.ɵɵdirectiveInject(SearchService), i0.ɵɵdirectiveInject(SearchSourceService)); };
38572
+ SearchBarComponent.ɵfac = function SearchBarComponent_Factory(t) { return new (t || SearchBarComponent)(i0.ɵɵdirectiveInject(i2$1.ConfigService), i0.ɵɵdirectiveInject(SearchService), i0.ɵɵdirectiveInject(SearchSourceService)); };
37552
38573
  SearchBarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchBarComponent, selectors: [["igo-search-bar"]], viewQuery: function SearchBarComponent_Query(rf, ctx) { if (rf & 1) {
37553
38574
  i0.ɵɵviewQuery(_c0$3, 7);
37554
38575
  } if (rf & 2) {
37555
38576
  let _t;
37556
38577
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.input = _t.first);
37557
- } }, inputs: { searchTypes: "searchTypes", searchType: "searchType", term: "term", disabled: "disabled", pointerSummaryEnabled: "pointerSummaryEnabled", searchResultsGeometryEnabled: "searchResultsGeometryEnabled", floatLabel: "floatLabel", appearance: "appearance", placeholder: "placeholder", label: "label", color: "color", termSplitter: "termSplitter", debounce: "debounce", minLength: "minLength", searchIcon: "searchIcon", searchSelector: "searchSelector", searchSettings: "searchSettings", forceNA: "forceNA", store: "store" }, outputs: { pointerSummaryStatus: "pointerSummaryStatus", searchResultsGeometryStatus: "searchResultsGeometryStatus", searchTermChange: "searchTermChange", search: "search", searchTypeChange: "searchTypeChange", clearFeature: "clearFeature", searchSettingsChange: "searchSettingsChange" }, decls: 16, vars: 28, consts: [[1, "igo-search-bar-container", 3, "ngClass"], [3, "floatLabel", "appearance"], [4, "ngIf"], ["matInput", "", "autocomplete", "off", 3, "ngClass", "disabled", "placeholder", "value", "keyup", "touchend"], ["input", ""], [1, "search-bar-buttons"], ["mat-icon-button", "", 3, "color", 4, "ngIf"], ["mat-icon-button", "", 3, "color", "matTooltip", "click", 4, "ngIf"], [3, "searchTypes", "searchType", "searchTypeChange", 4, "ngIf"], [3, "pointerSummaryEnabled", "searchResultsGeometryEnabled", "pointerSummaryStatus", "searchResultsGeometryStatus", "searchSourceChange", 4, "ngIf"], ["mat-icon-button", "", 3, "color"], [3, "svgIcon"], ["mat-icon-button", "", 3, "color", "matTooltip", "click"], ["svgIcon", "close"], [3, "searchTypes", "searchType", "searchTypeChange"], [3, "pointerSummaryEnabled", "searchResultsGeometryEnabled", "pointerSummaryStatus", "searchResultsGeometryStatus", "searchSourceChange"]], template: function SearchBarComponent_Template(rf, ctx) { if (rf & 1) {
38578
+ } }, inputs: { searchTypes: "searchTypes", searchType: "searchType", term: "term", disabled: "disabled", pointerSummaryEnabled: "pointerSummaryEnabled", searchResultsGeometryEnabled: "searchResultsGeometryEnabled", floatLabel: "floatLabel", appearance: "appearance", placeholder: "placeholder", label: "label", color: "color", termSplitter: "termSplitter", debounce: "debounce", minLength: "minLength", searchSelector: "searchSelector", searchSettings: "searchSettings", forceNA: "forceNA", store: "store" }, outputs: { pointerSummaryStatus: "pointerSummaryStatus", searchResultsGeometryStatus: "searchResultsGeometryStatus", searchTermChange: "searchTermChange", search: "search", searchTypeChange: "searchTypeChange", clearFeature: "clearFeature", searchSettingsChange: "searchSettingsChange" }, decls: 16, vars: 28, consts: [[1, "igo-search-bar-container", 3, "ngClass"], [3, "floatLabel", "appearance"], [4, "ngIf"], ["matInput", "", "autocomplete", "off", 3, "ngClass", "disabled", "placeholder", "value", "keyup", "touchend"], ["input", ""], [1, "search-bar-buttons"], ["mat-icon-button", "", 3, "color", "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", 3, "color", 4, "ngIf"], [3, "searchTypes", "searchType", "searchTypeChange", 4, "ngIf"], [3, "pointerSummaryEnabled", "searchResultsGeometryEnabled", "pointerSummaryStatus", "searchResultsGeometryStatus", "searchSourceChange", 4, "ngIf"], ["mat-icon-button", "", 3, "color", "matTooltip", "click"], ["svgIcon", "close"], ["mat-icon-button", "", 3, "color"], ["svgIcon", "magnify"], [3, "searchTypes", "searchType", "searchTypeChange"], [3, "pointerSummaryEnabled", "searchResultsGeometryEnabled", "pointerSummaryStatus", "searchResultsGeometryStatus", "searchSourceChange"]], template: function SearchBarComponent_Template(rf, ctx) { if (rf & 1) {
37558
38579
  i0.ɵɵelementStart(0, "div", 0);
37559
38580
  i0.ɵɵpipe(1, "async");
37560
38581
  i0.ɵɵelementStart(2, "mat-form-field", 1);
@@ -37567,9 +38588,9 @@ SearchBarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchBa
37567
38588
  i0.ɵɵpipe(9, "async");
37568
38589
  i0.ɵɵelementEnd()();
37569
38590
  i0.ɵɵelementStart(10, "div", 5);
37570
- i0.ɵɵtemplate(11, SearchBarComponent_button_11_Template, 2, 2, "button", 6);
37571
- i0.ɵɵtemplate(12, SearchBarComponent_button_12_Template, 3, 4, "button", 7);
37572
- i0.ɵɵpipe(13, "async");
38591
+ i0.ɵɵtemplate(11, SearchBarComponent_button_11_Template, 3, 4, "button", 6);
38592
+ i0.ɵɵpipe(12, "async");
38593
+ i0.ɵɵtemplate(13, SearchBarComponent_button_13_Template, 2, 1, "button", 7);
37573
38594
  i0.ɵɵtemplate(14, SearchBarComponent_igo_search_selector_14_Template, 2, 4, "igo-search-selector", 8);
37574
38595
  i0.ɵɵtemplate(15, SearchBarComponent_igo_search_settings_15_Template, 1, 2, "igo-search-settings", 9);
37575
38596
  i0.ɵɵelementEnd()();
@@ -37580,20 +38601,20 @@ SearchBarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchBa
37580
38601
  i0.ɵɵadvance(1);
37581
38602
  i0.ɵɵproperty("ngIf", ctx.label);
37582
38603
  i0.ɵɵadvance(1);
37583
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c2$1, ctx.searchIcon))("disabled", i0.ɵɵpipeBind1(6, 14, ctx.disabled$))("placeholder", ctx.placeholder ? ctx.placeholder : i0.ɵɵpipeBind1(7, 16, ctx.placeholder$) ? i0.ɵɵpipeBind1(8, 18, ctx.placeholder$.value) : undefined)("value", i0.ɵɵpipeBind1(9, 20, ctx.term$));
38604
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c2$1, ctx.showSearchButton))("disabled", i0.ɵɵpipeBind1(6, 14, ctx.disabled$))("placeholder", ctx.placeholder ? ctx.placeholder : i0.ɵɵpipeBind1(7, 16, ctx.placeholder$) ? i0.ɵɵpipeBind1(8, 18, ctx.placeholder$.value) : undefined)("value", i0.ɵɵpipeBind1(9, 20, ctx.term$));
37584
38605
  i0.ɵɵadvance(7);
37585
- i0.ɵɵproperty("ngIf", ctx.searchIcon !== undefined);
37586
- i0.ɵɵadvance(1);
37587
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(13, 22, ctx.empty$) === false);
38606
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(12, 22, ctx.empty$) === false);
37588
38607
  i0.ɵɵadvance(2);
38608
+ i0.ɵɵproperty("ngIf", ctx.showSearchButton);
38609
+ i0.ɵɵadvance(1);
37589
38610
  i0.ɵɵproperty("ngIf", ctx.searchSelector);
37590
38611
  i0.ɵɵadvance(1);
37591
38612
  i0.ɵɵproperty("ngIf", ctx.searchSettings);
37592
38613
  } }, dependencies: [i1$1.NgClass, i1$1.NgIf, i4.MatTooltip, i2.MatIcon, i3.MatButton, i13.MatFormField, i13.MatLabel, i14.MatInput, SearchSelectorComponent, SearchSettingsComponent, i1$1.AsyncPipe, i7.TranslatePipe], styles: ["[_nghost-%COMP%] .mat-form-field{padding:0 5px}[_nghost-%COMP%] .mat-form-field-wrapper{margin-bottom:-1.5em}[_nghost-%COMP%] span.mat-form-field-label-wrapper{top:-20px}[_nghost-%COMP%] div.mat-form-field-infix{left:5px;right:5px;padding:0 0 12px!important}[_nghost-%COMP%] div.mat-form-field-underline{display:none}.igo-search-bar-container[_ngcontent-%COMP%]{position:relative;width:100%;display:inline-flex;overflow:hidden}.igo-search-bar-container[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{width:calc(100% - 80px)}.igo-search-bar-container.empty[_ngcontent-%COMP%] > mat-form-field[_ngcontent-%COMP%]{width:calc(100% - 40px)}.search-bar-buttons[_ngcontent-%COMP%]{position:relative;right:0px;display:inline-flex;top:0}.search-bar-buttons[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]:nth-child(2):before{content:\"\";left:0px;top:5px;border-right:1px solid #ddd;height:28px}igo-search-selector[_ngcontent-%COMP%]{background-color:#fff;top:0;border-radius:0}igo-search-settings[_ngcontent-%COMP%]{background-color:#fff;top:0;border-radius:0}"], changeDetection: 0 });
37593
38614
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchBarComponent, [{
37594
38615
  type: Component,
37595
- args: [{ selector: 'igo-search-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"igo-search-bar-container\" [ngClass]=\"{empty: empty$ | async}\">\n <mat-form-field [floatLabel]=\"floatLabel\" [appearance]=\"appearance\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input\n #input\n matInput\n autocomplete=\"off\"\n [ngClass]=\"{'hasSearchIcon': searchIcon}\"\n [disabled]=\"disabled$ | async\"\n [placeholder]=\"placeholder ? placeholder : (placeholder$ | async) ? (placeholder$.value | translate) : undefined\"\n [value]=\"term$ | async\"\n (keyup)=\"onKeyup($event)\"\n (touchend)=\"onKeyup($event)\">\n </mat-form-field>\n\n <div class=\"search-bar-buttons\">\n <button\n mat-icon-button\n [color]=\"color\"\n *ngIf=\"searchIcon !== undefined\">\n <mat-icon svgIcon=\"{{searchIcon}}\"></mat-icon>\n </button>\n\n <button\n *ngIf=\"(empty$ | async)===false\"\n mat-icon-button\n [color]=\"color\"\n (click)=\"onClearButtonClick()\"\n [matTooltip]=\"'igo.geo.search.clearSearch' | translate\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n\n <igo-search-selector\n *ngIf=\"searchSelector\"\n [searchTypes]=\"searchTypes\"\n [searchType]=\"searchType$ | async\"\n (searchTypeChange)=\"onSearchTypeChange($event)\">\n </igo-search-selector>\n\n <igo-search-settings\n *ngIf=\"searchSettings\"\n [pointerSummaryEnabled]=\"pointerSummaryEnabled\"\n (pointerSummaryStatus)=\"pointerSummaryStatus.emit($event)\"\n [searchResultsGeometryEnabled]=\"searchResultsGeometryEnabled\"\n (searchResultsGeometryStatus)=\"searchResultsGeometryStatus.emit($event)\"\n (searchSourceChange)=\"onSearchSettingsChange()\">\n </igo-search-settings>\n </div>\n</div>\n", styles: [":host ::ng-deep .mat-form-field{padding:0 5px}:host ::ng-deep .mat-form-field-wrapper{margin-bottom:-1.5em}:host ::ng-deep span.mat-form-field-label-wrapper{top:-20px}:host ::ng-deep div.mat-form-field-infix{left:5px;right:5px;padding:0 0 12px!important}:host ::ng-deep div.mat-form-field-underline{display:none}.igo-search-bar-container{position:relative;width:100%;display:inline-flex;overflow:hidden}.igo-search-bar-container>mat-form-field{width:calc(100% - 80px)}.igo-search-bar-container.empty>mat-form-field{width:calc(100% - 40px)}.search-bar-buttons{position:relative;right:0px;display:inline-flex;top:0}.search-bar-buttons>button:nth-child(2):before{content:\"\";left:0px;top:5px;border-right:1px solid #ddd;height:28px}igo-search-selector{background-color:#fff;top:0;border-radius:0}igo-search-settings{background-color:#fff;top:0;border-radius:0}\n"] }]
37596
- }], function () { return [{ type: i2$1.LanguageService }, { type: SearchService }, { type: SearchSourceService }]; }, { searchTypes: [{
38616
+ args: [{ selector: 'igo-search-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"igo-search-bar-container\" [ngClass]=\"{empty: empty$ | async}\">\n <mat-form-field [floatLabel]=\"floatLabel\" [appearance]=\"appearance\">\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\n <input\n #input\n matInput\n autocomplete=\"off\"\n [ngClass]=\"{'hasSearchIcon': showSearchButton}\"\n [disabled]=\"disabled$ | async\"\n [placeholder]=\"placeholder ? placeholder : (placeholder$ | async) ? (placeholder$.value | translate) : undefined\"\n [value]=\"term$ | async\"\n (keyup)=\"onKeyup($event)\"\n (touchend)=\"onKeyup($event)\">\n </mat-form-field>\n\n <div class=\"search-bar-buttons\">\n <button *ngIf=\"(empty$ | async)===false\"\n mat-icon-button\n [color]=\"color\"\n (click)=\"onClearButtonClick()\"\n [matTooltip]=\"'igo.geo.search.clearSearch' | translate\">\n <mat-icon svgIcon=\"close\"></mat-icon>\n </button>\n \n <button *ngIf=\"showSearchButton\"\n mat-icon-button\n [color]=\"color\">\n <mat-icon svgIcon=\"magnify\"></mat-icon>\n </button>\n\n <igo-search-selector\n *ngIf=\"searchSelector\"\n [searchTypes]=\"searchTypes\"\n [searchType]=\"searchType$ | async\"\n (searchTypeChange)=\"onSearchTypeChange($event)\">\n </igo-search-selector>\n\n <igo-search-settings\n *ngIf=\"searchSettings\"\n [pointerSummaryEnabled]=\"pointerSummaryEnabled\"\n (pointerSummaryStatus)=\"pointerSummaryStatus.emit($event)\"\n [searchResultsGeometryEnabled]=\"searchResultsGeometryEnabled\"\n (searchResultsGeometryStatus)=\"searchResultsGeometryStatus.emit($event)\"\n (searchSourceChange)=\"onSearchSettingsChange()\">\n </igo-search-settings>\n </div>\n</div>\n", styles: [":host ::ng-deep .mat-form-field{padding:0 5px}:host ::ng-deep .mat-form-field-wrapper{margin-bottom:-1.5em}:host ::ng-deep span.mat-form-field-label-wrapper{top:-20px}:host ::ng-deep div.mat-form-field-infix{left:5px;right:5px;padding:0 0 12px!important}:host ::ng-deep div.mat-form-field-underline{display:none}.igo-search-bar-container{position:relative;width:100%;display:inline-flex;overflow:hidden}.igo-search-bar-container>mat-form-field{width:calc(100% - 80px)}.igo-search-bar-container.empty>mat-form-field{width:calc(100% - 40px)}.search-bar-buttons{position:relative;right:0px;display:inline-flex;top:0}.search-bar-buttons>button:nth-child(2):before{content:\"\";left:0px;top:5px;border-right:1px solid #ddd;height:28px}igo-search-selector{background-color:#fff;top:0;border-radius:0}igo-search-settings{background-color:#fff;top:0;border-radius:0}\n"] }]
38617
+ }], function () { return [{ type: i2$1.ConfigService }, { type: SearchService }, { type: SearchSourceService }]; }, { searchTypes: [{
37597
38618
  type: Input
37598
38619
  }], searchType: [{
37599
38620
  type: Input
@@ -37625,8 +38646,6 @@ SearchBarComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchBa
37625
38646
  type: Input
37626
38647
  }], minLength: [{
37627
38648
  type: Input
37628
- }], searchIcon: [{
37629
- type: Input
37630
38649
  }], searchSelector: [{
37631
38650
  type: Input
37632
38651
  }], searchSettings: [{
@@ -37938,9 +38957,11 @@ var SearchResultMode;
37938
38957
  * This component is dumb and only emits events.
37939
38958
  */
37940
38959
  class SearchResultsComponent {
37941
- constructor(cdRef, searchService) {
38960
+ constructor(cdRef, searchService, configService) {
37942
38961
  this.cdRef = cdRef;
37943
38962
  this.searchService = searchService;
38963
+ this.configService = configService;
38964
+ this.showResultsCount = true;
37944
38965
  /**
37945
38966
  * Reference to the SearchResultMode enum
37946
38967
  * @internal
@@ -38005,6 +39026,9 @@ class SearchResultsComponent {
38005
39026
  this.settingsChange$$ = this.settingsChange$.subscribe(() => {
38006
39027
  this.pageIterator = [];
38007
39028
  });
39029
+ if (this.configService.getConfig('searchSources.showResultsCount') === false) {
39030
+ this.showResultsCount = false;
39031
+ }
38008
39032
  }
38009
39033
  /**
38010
39034
  * Unbind the search results store from the watcher
@@ -38023,7 +39047,7 @@ class SearchResultsComponent {
38023
39047
  computeGroupTitle(group) {
38024
39048
  const parts = [group.source.title];
38025
39049
  const count = group.results.length;
38026
- if (count > 1) {
39050
+ if (count > 1 && this.showResultsCount) {
38027
39051
  parts.push(`(${count})`);
38028
39052
  }
38029
39053
  return parts.join(' ');
@@ -38087,11 +39111,14 @@ class SearchResultsComponent {
38087
39111
  });
38088
39112
  }
38089
39113
  isMoreResults(group) {
38090
- // getStrategyOfType is to avoid display more result based on a filtered state
38091
39114
  const stategy = this.store.getStrategyOfType(EntityStoreFilterCustomFuncStrategy);
38092
39115
  const active = stategy?.active || false;
38093
- return !active && group.results &&
38094
- group.results[group.results.length - 1].meta.nextPage === true;
39116
+ if (!active) {
39117
+ return group.results && group.results[group.results.length - 1].meta.nextPage === true;
39118
+ }
39119
+ else {
39120
+ return group.results?.length % +group.source.params.limit === 0 && +group.source.params.page < 30;
39121
+ }
38095
39122
  }
38096
39123
  displayMoreResults(group) {
38097
39124
  const options = {
@@ -38121,7 +39148,7 @@ class SearchResultsComponent {
38121
39148
  return;
38122
39149
  }
38123
39150
  }
38124
- SearchResultsComponent.ɵfac = function SearchResultsComponent_Factory(t) { return new (t || SearchResultsComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(SearchService)); };
39151
+ SearchResultsComponent.ɵfac = function SearchResultsComponent_Factory(t) { return new (t || SearchResultsComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(SearchService), i0.ɵɵdirectiveInject(i2$1.ConfigService)); };
38125
39152
  SearchResultsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultsComponent, selectors: [["igo-search-results"]], contentQueries: function SearchResultsComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
38126
39153
  i0.ɵɵcontentQuery(dirIndex, _c0$1, 5);
38127
39154
  } if (rf & 2) {
@@ -38140,7 +39167,7 @@ SearchResultsComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Sear
38140
39167
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultsComponent, [{
38141
39168
  type: Component,
38142
39169
  args: [{ selector: 'igo-search-results', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-list [navigation]=\"true\">\n <ng-template\n #groupTemplate\n ngFor let-group\n [ngForOf]=\"results$ | async\">\n\n <igo-collapsible [class]=\"group.source.getId()\"\n *ngIf=\"mode === searchResultMode.Grouped; else flatTemplate\"\n [title]=\"computeGroupTitle(group)\"\n [collapsed]=\"collapsed[group.source.title]\"\n (toggle)=\"collapsed[group.source.title] = $event\">\n <ng-container *ngTemplateOutlet=\"storeItemTemplate; context: {results: group.results}\"></ng-container>\n </igo-collapsible>\n\n <ng-template #flatTemplate>\n <ng-container *ngTemplateOutlet=\"storeItemTemplate; context: {results: group.results}\"></ng-container>\n </ng-template>\n\n <ng-template #storeItemTemplate let-results=\"results\">\n <ng-template ngFor let-result [ngForOf]=\"results\">\n <igo-search-results-item\n igoListItem\n color=\"accent\"\n [map]=\"map\"\n [result]=\"result\"\n [showIcons]=\"showIcons\"\n [withZoomButton]=\"withZoomButton\"\n [focused]=\"store.state.get(result).focused\"\n [selected]=\"store.state.get(result).selected\"\n (focus)=\"resultFocus.emit(result)\"\n (unfocus)=\"resultUnfocus.emit(result)\"\n (select)=\"onResultSelect(result)\"\n (mouseenter)=\"resultFocus.emit(result)\"\n (mouseleave)=\"resultUnfocus.emit(result)\">\n\n <ng-container igoSearchItemToolbar\n [ngTemplateOutlet]=\"templateSearchToolbar\"\n [ngTemplateOutletContext]=\"{result: result}\">\n </ng-container>\n\n </igo-search-results-item>\n </ng-template>\n <span class=\"moreResults mat-typography\" *ngIf=\"isMoreResults(group)\" (click)=\"displayMoreResults(group)\">\n <u>{{ 'igo.geo.search.displayMoreResults' | translate }}</u>\n </span>\n </ng-template>\n\n </ng-template>\n\n</igo-list>\n", styles: [".moreResults{cursor:pointer;color:#00f;float:right;margin-right:10px;margin-top:5px}igo-list ::ng-deep mat-list{height:100%}\n"] }]
38143
- }], function () { return [{ type: i0.ChangeDetectorRef }, { type: SearchService }]; }, { map: [{
39170
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: SearchService }, { type: i2$1.ConfigService }]; }, { map: [{
38144
39171
  type: Input
38145
39172
  }], store: [{
38146
39173
  type: Input
@@ -39741,6 +40768,8 @@ class EditionWorkspaceService {
39741
40768
  this.relationLayers$ = new BehaviorSubject(undefined);
39742
40769
  this.rowsInMapExtentCheckCondition$ = new BehaviorSubject(true);
39743
40770
  this.loading = false;
40771
+ this.wktFormat = new olFormatWKT();
40772
+ this.geoJsonFormat = new OlGeoJSON();
39744
40773
  }
39745
40774
  get zoomAuto() {
39746
40775
  return this.storageService.get('zoomAuto');
@@ -40065,11 +41094,10 @@ class EditionWorkspaceService {
40065
41094
  }
40066
41095
  }
40067
41096
  addFeature(feature, workspace, url, headers) {
40068
- // TODO: adapt to any kind of geometry
40069
41097
  if (workspace.layer.dataSource.options.edition.hasGeometry) {
40070
- //feature.properties[geom] = feature.geometry;
40071
- feature.properties["longitude"] = feature.geometry.coordinates[0];
40072
- feature.properties["latitude"] = feature.geometry.coordinates[1];
41098
+ const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
41099
+ feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
41100
+ 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
40073
41101
  }
40074
41102
  for (const property in feature.properties) {
40075
41103
  for (const sf of workspace.layer.dataSource.options.sourceFields) {
@@ -40150,11 +41178,12 @@ class EditionWorkspaceService {
40150
41178
  });
40151
41179
  }
40152
41180
  modifyFeature(feature, workspace, url, headers, protocole = 'patch') {
40153
- //TODO: adapt to any kind of geometry
40154
41181
  if (workspace.layer.dataSource.options.edition.hasGeometry) {
40155
- //feature.properties[geom] = feature.geometry;
40156
- feature.properties["longitude"] = feature.geometry.coordinates[0];
40157
- feature.properties["latitude"] = feature.geometry.coordinates[1];
41182
+ const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
41183
+ // Remove 3e dimension
41184
+ feature.geometry.coordinates = removeZ(feature.geometry.coordinates);
41185
+ feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
41186
+ 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
40158
41187
  }
40159
41188
  for (const property in feature.properties) {
40160
41189
  for (const sf of workspace.layer.dataSource.options.sourceFields) {
@@ -40353,6 +41382,13 @@ function getColumnKeyWithoutPropertiesTag(column) {
40353
41382
  return column.split('.')[1];
40354
41383
  }
40355
41384
  return column;
41385
+ }
41386
+ function removeZ(coords) {
41387
+ if (coords.length === 0)
41388
+ return coords;
41389
+ if (typeof coords[0] === 'number')
41390
+ return coords.slice(0, 2);
41391
+ return coords.map(removeZ);
40356
41392
  }
40357
41393
 
40358
41394
  class FeatureWorkspace extends Workspace {
@@ -41103,138 +42139,6 @@ function provideOsrmDirectionsSource() {
41103
42139
  };
41104
42140
  }
41105
42141
 
41106
- /**
41107
- * Cadastre search source
41108
- */
41109
- class CadastreSearchSource extends SearchSource {
41110
- constructor(http, languageService, storageService, options) {
41111
- super(options, storageService);
41112
- this.http = http;
41113
- this.languageService = languageService;
41114
- }
41115
- getId() {
41116
- return CadastreSearchSource.id;
41117
- }
41118
- getType() {
41119
- return CadastreSearchSource.type;
41120
- }
41121
- /*
41122
- * Source : https://wiki.openstreetmap.org/wiki/Key:amenity
41123
- */
41124
- getDefaultOptions() {
41125
- return {
41126
- title: 'Cadastre (Québec)',
41127
- searchUrl: 'https://carto.cptaq.gouv.qc.ca/php/find_lot_v1.php?'
41128
- };
41129
- }
41130
- /**
41131
- * Search a place by name
41132
- * @param term Place name
41133
- * @returns Observable of <SearchResult<Feature>[]
41134
- */
41135
- search(term, options) {
41136
- term = term.endsWith(',') ? term.slice(0, -1) : term;
41137
- term = term.startsWith(',') ? term.substr(1) : term;
41138
- term = term.replace(/ /g, '');
41139
- const params = this.computeSearchRequestParams(term, options || {});
41140
- if (!params.get('numero') || !params.get('numero').match(/^[0-9,]+$/g)) {
41141
- return of([]);
41142
- }
41143
- return this.http
41144
- .get(this.searchUrl, { params, responseType: 'text' })
41145
- .pipe(map((response) => this.extractResults(response, term)));
41146
- }
41147
- computeSearchRequestParams(term, options) {
41148
- return new HttpParams({
41149
- fromObject: Object.assign({
41150
- numero: term,
41151
- epsg: '4326'
41152
- }, this.params, options.params || {})
41153
- });
41154
- }
41155
- extractResults(response, term) {
41156
- return response
41157
- .split('<br />')
41158
- .filter((lot) => lot.length > 0)
41159
- .map((lot) => this.dataToResult(lot, term));
41160
- }
41161
- dataToResult(data, term) {
41162
- const lot = data.split(';');
41163
- const numero = lot[0];
41164
- const wkt = lot[7];
41165
- const geometry = this.computeGeometry(wkt);
41166
- const properties = {
41167
- NoLot: numero,
41168
- Route: '<span class="routing"> <u>' + this.languageService.translate.instant('igo.geo.seeRouting') + '</u> </span>'
41169
- };
41170
- const id = [this.getId(), 'cadastre', numero].join('.');
41171
- return {
41172
- source: this,
41173
- meta: {
41174
- dataType: FEATURE,
41175
- id,
41176
- title: numero,
41177
- score: computeTermSimilarity(term.trim(), numero),
41178
- icon: 'map-marker'
41179
- },
41180
- data: {
41181
- type: FEATURE,
41182
- projection: 'EPSG:4326',
41183
- geometry,
41184
- properties,
41185
- meta: {
41186
- id,
41187
- title: numero
41188
- }
41189
- }
41190
- };
41191
- }
41192
- computeGeometry(wkt) {
41193
- const feature = new olWKT().readFeature(wkt, {
41194
- dataProjection: 'EPSG:4326',
41195
- featureProjection: 'EPSG:4326'
41196
- });
41197
- return {
41198
- type: feature.getGeometry().getType(),
41199
- coordinates: feature.getGeometry().getCoordinates()
41200
- };
41201
- }
41202
- }
41203
- CadastreSearchSource.id = 'cadastre';
41204
- CadastreSearchSource.type = FEATURE;
41205
- CadastreSearchSource.ɵfac = function CadastreSearchSource_Factory(t) { return new (t || CadastreSearchSource)(i0.ɵɵinject(i1$2.HttpClient), i0.ɵɵinject(i2$1.LanguageService), i0.ɵɵinject(i2$1.StorageService), i0.ɵɵinject('options')); };
41206
- CadastreSearchSource.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CadastreSearchSource, factory: CadastreSearchSource.ɵfac });
41207
- __decorate([
41208
- Cacheable({
41209
- maxCacheCount: 20
41210
- })
41211
- ], CadastreSearchSource.prototype, "search", null);
41212
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CadastreSearchSource, [{
41213
- type: Injectable
41214
- }], function () { return [{ type: i1$2.HttpClient }, { type: i2$1.LanguageService }, { type: i2$1.StorageService }, { type: undefined, decorators: [{
41215
- type: Inject,
41216
- args: ['options']
41217
- }] }]; }, { search: [] }); })();
41218
-
41219
- /**
41220
- * Cadastre search source factory
41221
- * @ignore
41222
- */
41223
- function cadastreSearchSourceFactory(http, languageService, storageService, config) {
41224
- return new CadastreSearchSource(http, languageService, storageService, config.getConfig(`searchSources.${CadastreSearchSource.id}`));
41225
- }
41226
- /**
41227
- * Function that returns a provider for the Cadastre search source
41228
- */
41229
- function provideCadastreSearchSource() {
41230
- return {
41231
- provide: SearchSource,
41232
- useFactory: cadastreSearchSourceFactory,
41233
- multi: true,
41234
- deps: [HttpClient, LanguageService, StorageService, ConfigService]
41235
- };
41236
- }
41237
-
41238
42142
  /**
41239
42143
  * Nominatim search source
41240
42144
  */
@@ -41994,7 +42898,7 @@ class ConfigFileToGeoDBService {
41994
42898
  }
41995
42899
  if (currentDate >= geoData.triggerDate) {
41996
42900
  if (geoData.action === 'update') {
41997
- const insertEvent = `${geoData.source || 'automatedDataUpdate'} (${geoData.triggerDate})`;
42901
+ const insertEvent = `${geoData.source || InsertSourceInsertDBEnum.System} (${geoData.triggerDate})`;
41998
42902
  geoData.urls.map((url) => {
41999
42903
  datas$.push(this.geoDBService.getByID(url).pipe(concatMap((res) => {
42000
42904
  if (res?.insertEvent !== insertEvent) {
@@ -42003,8 +42907,31 @@ class ConfigFileToGeoDBService {
42003
42907
  .info('igo.geo.indexedDb.data-download-start', undefined, { disableTimeOut: true, progressBar: false, closeButton: true, tapToDismiss: false });
42004
42908
  firstDownload = false;
42005
42909
  }
42006
- return this.http.get(url)
42007
- .pipe(concatMap(r => this.geoDBService.update(url, url, r, 'system', insertEvent)));
42910
+ let responseType = 'json';
42911
+ const isZip = this.isZip(url);
42912
+ if (isZip) {
42913
+ responseType = 'arraybuffer';
42914
+ }
42915
+ return this.http.get(url, { responseType }).pipe(concatMap(r => {
42916
+ if (isZip) {
42917
+ const observables$ = [this.geoDBService.update(url, url, {}, InsertSourceInsertDBEnum.System, insertEvent)];
42918
+ JSZip.loadAsync(r)
42919
+ .then((zipped) => {
42920
+ zipped.forEach((relativePath) => {
42921
+ if (relativePath.toLocaleLowerCase().endsWith('.geojson')) {
42922
+ zipped.file(relativePath).async("base64").then((r) => {
42923
+ const geojson = JSON.parse(atob(r));
42924
+ const subUrl = geoData.zippedBaseUrl || '';
42925
+ const zippedUrl = subUrl + (subUrl.endsWith('/') ? '' : '/') + relativePath;
42926
+ observables$.push(this.geoDBService.update(zippedUrl, url, geojson, InsertSourceInsertDBEnum.System, insertEvent));
42927
+ });
42928
+ }
42929
+ });
42930
+ });
42931
+ return zip(observables$);
42932
+ }
42933
+ return this.geoDBService.update(url, url, r, InsertSourceInsertDBEnum.System, insertEvent);
42934
+ }));
42008
42935
  }
42009
42936
  else {
42010
42937
  return of(false);
@@ -42030,6 +42957,10 @@ class ConfigFileToGeoDBService {
42030
42957
  }
42031
42958
  });
42032
42959
  }
42960
+ isZip(value) {
42961
+ const regex = /(zip)$/;
42962
+ return typeof value === 'string' && regex.test(value.toLowerCase());
42963
+ }
42033
42964
  }
42034
42965
  ConfigFileToGeoDBService.ɵfac = function ConfigFileToGeoDBService_Factory(t) { return new (t || ConfigFileToGeoDBService)(i0.ɵɵinject(i1$2.HttpClient), i0.ɵɵinject(GeoDBService), i0.ɵɵinject(i2$1.MessageService)); };
42035
42966
  ConfigFileToGeoDBService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ConfigFileToGeoDBService, factory: ConfigFileToGeoDBService.ɵfac, providedIn: 'root' });
@@ -42048,5 +42979,5 @@ ConfigFileToGeoDBService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token:
42048
42979
  * Generated bundle index. Do not edit.
42049
42980
  */
42050
42981
 
42051
- export { AddCatalogDialogComponent, ArcGISRestDataSource, BaseLayersSwitcherComponent, CadastreSearchSource, CapabilitiesService, CartoDataSource, Catalog, CatalogBrowserComponent, CatalogFactory, CatalogItemType, CatalogLibaryComponent, CatalogService, ClusterDataSource, CompositeCatalog, ConfigFileToGeoDBService, ConfirmationPopupComponent, CoordinatesReverseSearchSource, CoordinatesReverseSearchSourceFactory, CoordinatesSearchResultFormatter, DataService, DataSource, DataSourceService, DirectionRelativePositionType, DirectionType, DirectionsButtonsComponent, DirectionsComponent, DirectionsFormat, DirectionsInputsComponent, DirectionsResultsComponent, DirectionsService, DirectionsSource, DownloadButtonComponent, DownloadService, DrawComponent, DrawControl, DrawIconService, DrawStyleService, DropGeoFileDirective, EditionWorkspace, EditionWorkspaceService, EncodingFormat, EsriStyleGenerator, ExportButtonComponent, ExportError, ExportFormat, ExportInvalidFileError, ExportNothingToExportError, ExportService, FEATURE, FeatureDataSource, FeatureDetailsComponent, FeatureDetailsDirective, FeatureFormComponent, FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreLoadingStrategy, FeatureStoreSelectionStrategy, FeatureWorkspace, FeatureWorkspaceService, FilterableDataSourcePipe, FontType, GeoDBService, GeoNetworkService, GeolocateButtonComponent, GeometryFormFieldComponent, GeometryFormFieldInputComponent, GeometrySliceError, GeometrySliceLineStringError, GeometrySliceMultiPolygonError, GeometrySliceTooManyIntersectionError, GeometryType, GoogleLinks, HomeExtentButtonComponent, HoverFeatureDirective, IChercheReverseSearchSource, IChercheSearchResultFormatter, IChercheSearchSource, ILayerSearchResultFormatter, ILayerSearchSource, IgoCatalogBrowserModule, IgoCatalogLibraryModule, IgoCatalogModule, IgoConfirmationPopupModule, IgoDataSourceModule, IgoDirectionsModule, IgoDownloadModule, IgoDrawModule, IgoDrawingToolModule, IgoFeatureDetailsModule, IgoFeatureFormModule, IgoFeatureModule, IgoFilterModule, IgoGeoModule, IgoGeoWorkspaceModule, IgoGeometryFormFieldModule, IgoGeometryModule, IgoHttpParameterCodec, IgoImportExportModule, IgoLayerModule, IgoMap, IgoMapModule, IgoMeasureModule, IgoMeasurerModule, IgoMetadataModule, IgoOgcFilterModule, IgoOverlayModule, IgoPrintModule, IgoQueryModule, IgoSearchBarModule, IgoSearchModule, IgoSearchResultsModule, IgoSearchSelectorModule, IgoSearchSettingsModule, IgoStyleListModule, IgoToastModule, IgoWktModule, IgoWorkspaceSelectorModule, IgoWorkspaceUpdatorModule, ImageArcGISRestDataSource, ImageLayer, ImageWatcher, ImportError, ImportExportComponent, ImportInvalidFileError, ImportNothingToImportError, ImportOgreServerError, ImportSRSError, ImportService, ImportSizeError, ImportUnreadableFileError, InfoSectionComponent, InsertSourceInsertDBEnum, LAYER, Layer, LayerItemComponent, LayerLegendComponent, LayerLegendItemComponent, LayerLegendListBindingDirective, LayerLegendListComponent, LayerListBindingDirective, LayerListComponent, LayerListControlsEnum, LayerListDisplacement, LayerListSelectVisibleEnum, LayerListToolComponent, LayerListToolControlsEnum, LayerListToolService, LayerService, LinkedProperties, MEASURE_UNIT_AUTO, MVTDataSource, MapBrowserComponent, MapCenterComponent, MapController, MapGeolocationController, MapOfflineDirective, MapService, MapViewAction, MapViewController, MeasureAreaUnit, MeasureAreaUnitAbbreviation, MeasureFormatPipe, MeasureLengthUnit, MeasureLengthUnitAbbreviation, MeasureType, MeasurerComponent, MenuButtonComponent, MetadataAbstractComponent, MetadataButtonComponent, MetadataService, MiniBaseMapComponent, ModifyControl, NominatimSearchSource, OGCFilterService, OSMDataSource, OfflineButtonComponent, OgcFilterButtonComponent, OgcFilterComponent, OgcFilterFormComponent, OgcFilterOperator, OgcFilterOperatorType, OgcFilterSelectionComponent, OgcFilterTimeComponent, OgcFilterTimeSliderComponent, OgcFilterWidget, OgcFilterWriter, OgcFilterableFormComponent, OgcFilterableItemComponent, OgcFilterableListBindingDirective, OgcFilterableListComponent, OlDragSelectInteraction, OptionsApiService, OptionsService, OsmLinks, OsrmDirectionsSource, Overlay, OverlayAction, OverlayDirective, OverlayService, PointerPositionDirective, PrintComponent, PrintFormComponent, PrintLegendPosition, PrintOrientation, PrintOutputFormat, PrintPaperFormat, PrintResolution, PrintSaveImageFormat, PrintService, ProjectionService, ProposalType, QueryDirective, QueryFormat, QueryFormatMimeType, QueryHtmlTarget, QuerySearchSource, QueryService, ResponseType, RotationButtonComponent, RoutesFeatureStore, SEARCH_TYPES, STYLELIST_OPTIONS, SearchBarComponent, SearchPointerSummaryDirective, SearchResultAddButtonComponent, SearchResultMode, SearchResultsComponent, SearchResultsItemComponent, SearchSelectorComponent, SearchService, SearchSettingsComponent, SearchSource, SearchSourceService, SliceControl, SourceDirectionsType, SpatialFilterItemComponent, SpatialFilterItemType, SpatialFilterListComponent, SpatialFilterQueryType, SpatialFilterService, SpatialFilterType, SpatialFilterTypeComponent, StepFeatureStore, StopsFeatureStore, StopsStore, StoredQueriesReverseSearchSource, StoredQueriesSearchSource, StyleListService, StyleModalComponent, StyleService, SwipeControlComponent, TileArcGISRestDataSource, TileDebugDataSource, TileLayer, TileWatcher, TimeFilterButtonComponent, TimeFilterFormComponent, TimeFilterItemComponent, TimeFilterListBindingDirective, TimeFilterListComponent, TimeFilterService, TimeFilterStyle, TimeFilterType, ToastComponent, TooltipType, TrackFeatureButtonComponent, TypeCapabilities, TypeCatalog, VectorLayer, VectorTileLayer, VectorWatcher, WFSDataSource, WFSService, WMSDataSource, WMTSDataSource, WakeLockButtonComponent, WebSocketDataSource, WfsWorkspace, WfsWorkspaceService, WktService, WorkspaceSelectorDirective, WorkspaceUpdatorDirective, XYZDataSource, ZoomButtonComponent, addDirectionToRoutesFeatureStore, addLayerAndFeaturesStyledToMap, addLayerAndFeaturesToMap, addLinearRingToOlPolygon, addStopToStopsFeatureStore, addStopToStore, buildUrl, cadastreSearchSourceFactory, checkWfsParams, clearOlGeometryMidpoints, computeBestAreaUnit, computeBestLengthUnit, computeLayerTitleFromFile, computeMVTOptionsOnHover, computeOlFeatureExtent, computeOlFeaturesDiff, computeOlFeaturesExtent, computeProjectionsConstraints, computeRelativePosition, computeStopsPosition, computeTermSimilarity, convertDDToDMS, createDefaultTileGrid, createDrawHoleInteractionStyle, createDrawInteractionStyle, createInteractionStyle, createMeasureInteractionStyle, createMeasureLayerStyle, createOlTooltipAtPoint, createOlTooltipDrawAtPoint, createOverlayDefaultStyle, createOverlayLayer, createOverlayMarkerStyle, ctrlKeyDown, defaultCoordinatesSearchResultFormatterFactory, defaultEpsg, defaultFieldNameGeometry, defaultIChercheSearchResultFormatterFactory, defaultMaxFeatures, defaultWfsVersion, directionsStyle, entitiesToRowData, exportToCSV, featureFromOl, featureToOl, featureToSearchResult, featuresAreOutOfView, featuresAreTooDeepInView, findDiff, formatDistance, formatDuration, formatInstruction, formatMeasure, formatScale, formatWFSQueryString, generateArcgisRestIdFromSourceOptions, generateFeatureIdFromSourceOptions, generateId, generateIdFromSourceOptions, generateWMSIdFromSourceOptions, generateWMTSIdFromSourceOptions, generateWfsIdFromSourceOptions, generateXYZIdFromSourceOptions, getAllChildLayersByDeletion, getAllChildLayersByProperty, getCommonVectorSelectedStyle, getCommonVectorStyle, getDirectChildLayersByDeletion, getDirectChildLayersByProperty, getDirectParentLayerByDeletion, getDirectParentLayerByProperty, getFileExtension, getFormatFromOptions, getIgoLayerByLinkId, getLayersLegends, getLinkedLayersOptions, getMousePositionFromOlGeometryEvent, getOlTooltipAtCenter, getOlTooltipsAtMidpoints, getResolutionFromScale, getRootParentByDeletion, getRootParentByProperty, getRowsInMapExtent, getScaleFromResolution, getSelectedOnly, getTooltipsOfOlGeometry, gmlRegex, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleLayerPropertyChange, handleNothingToExportError, handleNothingToImportError, handleOgreServerImportError, handleSRSImportError, handleSizeFileImportError, handleUnreadbleFileImportError, hideOlFeature, hoverFeatureMarker, ichercheReverseSearchSourceFactory, ichercheSearchSourceFactory, ilayerSearchResultFormatterFactory, ilayerSearchSourceFactory, initLayerSyncFromRootParentLayers, initRoutesFeatureStore, initStepFeatureStore, initStopsFeatureStore, jsonRegex, layerFeatureIsQueryable, layerHasLinkDeletion, layerHasLinkWithProperty, layerIsQueryable, lonLatConversion, mapExtentStrategyActiveToolTip, measureOlGeometry, measureOlGeometryArea, measureOlGeometryLength, metersToFeet, metersToKilometers, metersToMiles, metersToUnit, moveToOlFeatures, mtmZoneFromLonLat, noElementSelected, nominatimSearchSourceFactory, ogcFilterWidgetFactory, olLayerFeatureIsQueryable, olLayerIsQueryable, optionsApiFactory, osrmDirectionsSourcesFactory, pointerPositionSummaryMarker, provideCadastreSearchSource, provideCoordinatesReverseSearchSource, provideDefaultCoordinatesSearchResultFormatter, provideDefaultIChercheSearchResultFormatter, provideIChercheReverseSearchSource, provideIChercheSearchSource, provideILayerSearchResultFormatter, provideILayerSearchSource, provideNominatimSearchSource, provideOgcFilterWidget, provideOptionsApi, provideOsrmDirectionsSource, provideSearchSourceService, provideStoredQueriesReverseSearchSource, provideStoredQueriesSearchSource, provideStyleListLoader, provideStyleListOptions, removeStopFromStore, renderFeatureFromOl, roundCoordTo, scaleExtent, searchSourceServiceFactory, setRowsInMapExtent, setSelectedOnly, sliceOlGeometry, sliceOlLineString, sliceOlPolygon, sourceCanReverseSearch, sourceCanReverseSearchAsSummary, sourceCanSearch, squareMetersToAcres, squareMetersToHectares, squareMetersToSquareFeet, squareMetersToSquareKilometers, squareMetersToSquareMiles, squareMetersToUnit, standardizeUrl, storedqueriesReverseSearchSourceFactory, storedqueriesSearchSourceFactory, stringToLonLat, styleListFactory, translateBearing, translateModifier, tryAddLoadingStrategy, tryAddSelectionStrategy, tryBindStoreLayer, updateOlGeometryCenter, updateOlGeometryMidpoints, updateOlTooltipAtCenter, updateOlTooltipDrawAtCenter, updateOlTooltipsAtMidpoints, updateOlTooltipsDrawAtMidpoints, updateStoreSorting, utmZoneFromLonLat, viewStatesAreEqual, zoneMtm, zoneUtm };
42982
+ export { AddCatalogDialogComponent, ArcGISRestDataSource, BaseLayersSwitcherComponent, CapabilitiesService, CartoDataSource, Catalog, CatalogBrowserComponent, CatalogFactory, CatalogItemType, CatalogLibaryComponent, CatalogService, ClusterDataSource, CompositeCatalog, ConfigFileToGeoDBService, ConfirmationPopupComponent, CoordinatesReverseSearchSource, CoordinatesReverseSearchSourceFactory, CoordinatesSearchResultFormatter, CoordinatesUnit, DDtoDMS, DataService, DataSource, DataSourceService, DirectionRelativePositionType, DirectionType, DirectionsButtonsComponent, DirectionsComponent, DirectionsFormat, DirectionsInputsComponent, DirectionsResultsComponent, DirectionsService, DirectionsSource, DownloadButtonComponent, DownloadService, DrawComponent, DrawControl, DrawIconService, DrawStyleService, DropGeoFileDirective, EditionWorkspace, EditionWorkspaceService, EncodingFormat, EsriStyleGenerator, ExportButtonComponent, ExportError, ExportFormat, ExportInvalidFileError, ExportNothingToExportError, ExportService, FEATURE, FeatureDataSource, FeatureDetailsComponent, FeatureDetailsDirective, FeatureFormComponent, FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreLoadingStrategy, FeatureStoreSelectionStrategy, FeatureWorkspace, FeatureWorkspaceService, FilterableDataSourcePipe, FontType, GeoDBService, GeoNetworkService, GeolocateButtonComponent, GeometryFormFieldComponent, GeometryFormFieldInputComponent, GeometrySliceError, GeometrySliceLineStringError, GeometrySliceMultiPolygonError, GeometrySliceTooManyIntersectionError, GeometryType, GoogleLinks, HomeExtentButtonComponent, HoverFeatureDirective, IChercheReverseSearchSource, IChercheSearchResultFormatter, IChercheSearchSource, ILayerSearchResultFormatter, ILayerSearchSource, IgoCatalogBrowserModule, IgoCatalogLibraryModule, IgoCatalogModule, IgoConfirmationPopupModule, IgoDataSourceModule, IgoDirectionsModule, IgoDownloadModule, IgoDrawModule, IgoDrawingToolModule, IgoFeatureDetailsModule, IgoFeatureFormModule, IgoFeatureModule, IgoFilterModule, IgoGeoModule, IgoGeoWorkspaceModule, IgoGeometryFormFieldModule, IgoGeometryModule, IgoHttpParameterCodec, IgoImportExportModule, IgoLayerModule, IgoMap, IgoMapModule, IgoMeasureModule, IgoMeasurerModule, IgoMetadataModule, IgoOgcFilterModule, IgoOverlayModule, IgoPrintModule, IgoQueryModule, IgoSearchBarModule, IgoSearchModule, IgoSearchResultsModule, IgoSearchSelectorModule, IgoSearchSettingsModule, IgoStyleListModule, IgoToastModule, IgoWktModule, IgoWorkspaceSelectorModule, IgoWorkspaceUpdatorModule, ImageArcGISRestDataSource, ImageLayer, ImageWatcher, ImportError, ImportExportComponent, ImportInvalidFileError, ImportNothingToImportError, ImportOgreServerError, ImportSRSError, ImportService, ImportSizeError, ImportUnreadableFileError, InfoSectionComponent, InsertSourceInsertDBEnum, LAYER, LabelType, Layer, LayerItemComponent, LayerLegendComponent, LayerLegendItemComponent, LayerLegendListBindingDirective, LayerLegendListComponent, LayerListBindingDirective, LayerListComponent, LayerListControlsEnum, LayerListDisplacement, LayerListSelectVisibleEnum, LayerListToolComponent, LayerListToolControlsEnum, LayerListToolService, LayerService, LinkedProperties, MEASURE_UNIT_AUTO, MVTDataSource, MapBrowserComponent, MapCenterComponent, MapController, MapGeolocationController, MapOfflineDirective, MapService, MapViewAction, MapViewController, MeasureAreaUnit, MeasureAreaUnitAbbreviation, MeasureFormatPipe, MeasureLengthUnit, MeasureLengthUnitAbbreviation, MeasureType, MeasurerComponent, MenuButtonComponent, MetadataAbstractComponent, MetadataButtonComponent, MetadataService, MiniBaseMapComponent, ModifyControl, NominatimSearchSource, OGCFilterService, OSMDataSource, OfflineButtonComponent, OgcFilterButtonComponent, OgcFilterComponent, OgcFilterFormComponent, OgcFilterOperator, OgcFilterOperatorType, OgcFilterSelectionComponent, OgcFilterTimeComponent, OgcFilterTimeSliderComponent, OgcFilterWidget, OgcFilterWriter, OgcFilterableFormComponent, OgcFilterableItemComponent, OgcFilterableListBindingDirective, OgcFilterableListComponent, OlDragSelectInteraction, OptionsApiService, OptionsService, OsmLinks, OsrmDirectionsSource, Overlay, OverlayAction, OverlayDirective, OverlayService, PointerPositionDirective, PrintComponent, PrintFormComponent, PrintLegendPosition, PrintOrientation, PrintOutputFormat, PrintPaperFormat, PrintResolution, PrintSaveImageFormat, PrintService, ProjectionService, ProposalType, QueryDirective, QueryFormat, QueryFormatMimeType, QueryHtmlTarget, QuerySearchSource, QueryService, ResponseType, RotationButtonComponent, RoutesFeatureStore, SEARCH_TYPES, STYLELIST_OPTIONS, SearchBarComponent, SearchPointerSummaryDirective, SearchResultAddButtonComponent, SearchResultMode, SearchResultsComponent, SearchResultsItemComponent, SearchSelectorComponent, SearchService, SearchSettingsComponent, SearchSource, SearchSourceService, SliceControl, SourceDirectionsType, SpatialFilterItemComponent, SpatialFilterItemType, SpatialFilterListComponent, SpatialFilterQueryType, SpatialFilterService, SpatialFilterType, SpatialFilterTypeComponent, StepFeatureStore, StopsFeatureStore, StopsStore, StoredQueriesReverseSearchSource, StoredQueriesSearchSource, StyleListService, StyleModalComponent, StyleService, SwipeControlComponent, TileArcGISRestDataSource, TileDebugDataSource, TileLayer, TileWatcher, TimeFilterButtonComponent, TimeFilterFormComponent, TimeFilterItemComponent, TimeFilterListBindingDirective, TimeFilterListComponent, TimeFilterService, TimeFilterStyle, TimeFilterType, ToastComponent, TooltipType, TrackFeatureButtonComponent, TypeCapabilities, TypeCatalog, VectorLayer, VectorTileLayer, VectorWatcher, WFSDataSource, WFSService, WMSDataSource, WMTSDataSource, WakeLockButtonComponent, WebSocketDataSource, WfsWorkspace, WfsWorkspaceService, WktService, WorkspaceSelectorDirective, WorkspaceUpdatorDirective, XYZDataSource, ZoomButtonComponent, addDirectionToRoutesFeatureStore, addLayerAndFeaturesStyledToMap, addLayerAndFeaturesToMap, addLinearRingToOlPolygon, addStopToStopsFeatureStore, addStopToStore, buildUrl, checkWfsParams, clearOlGeometryMidpoints, computeBestAreaUnit, computeBestLengthUnit, computeLayerTitleFromFile, computeMVTOptionsOnHover, computeOlFeatureExtent, computeOlFeaturesDiff, computeOlFeaturesExtent, computeProjectionsConstraints, computeRelativePosition, computeStopsPosition, computeTermSimilarity, convertDDToDMS, createDefaultTileGrid, createDrawHoleInteractionStyle, createDrawInteractionStyle, createInteractionStyle, createMeasureInteractionStyle, createMeasureLayerStyle, createOlTooltipAtPoint, createOlTooltipDrawAtPoint, createOverlayDefaultStyle, createOverlayLayer, createOverlayMarkerStyle, ctrlKeyDown, defaultCoordinatesSearchResultFormatterFactory, defaultEpsg, defaultFieldNameGeometry, defaultIChercheSearchResultFormatterFactory, defaultMaxFeatures, defaultWfsVersion, directionsStyle, entitiesToRowData, exportToCSV, featureFromOl, featureToOl, featureToSearchResult, featuresAreOutOfView, featuresAreTooDeepInView, findDiff, formatDistance, formatDuration, formatInstruction, formatMeasure, formatScale, formatWFSQueryString, generateArcgisRestIdFromSourceOptions, generateFeatureIdFromSourceOptions, generateId, generateIdFromSourceOptions, generateWMSIdFromSourceOptions, generateWMTSIdFromSourceOptions, generateWfsIdFromSourceOptions, generateXYZIdFromSourceOptions, getAllChildLayersByDeletion, getAllChildLayersByProperty, getCommonVectorSelectedStyle, getCommonVectorStyle, getDirectChildLayersByDeletion, getDirectChildLayersByProperty, getDirectParentLayerByDeletion, getDirectParentLayerByProperty, getFileExtension, getFormatFromOptions, getIgoLayerByLinkId, getLayersLegends, getLinkedLayersOptions, getMousePositionFromOlGeometryEvent, getOlTooltipAtCenter, getOlTooltipsAtMidpoints, getResolutionFromScale, getRootParentByDeletion, getRootParentByProperty, getRowsInMapExtent, getScaleFromResolution, getSelectedOnly, getTooltipsOfOlGeometry, gmlRegex, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleLayerPropertyChange, handleNothingToExportError, handleNothingToImportError, handleOgreServerImportError, handleSRSImportError, handleSizeFileImportError, handleUnreadbleFileImportError, hideOlFeature, hoverFeatureMarker, ichercheReverseSearchSourceFactory, ichercheSearchSourceFactory, ilayerSearchResultFormatterFactory, ilayerSearchSourceFactory, initLayerSyncFromRootParentLayers, initRoutesFeatureStore, initStepFeatureStore, initStopsFeatureStore, jsonRegex, layerFeatureIsQueryable, layerHasLinkDeletion, layerHasLinkWithProperty, layerIsQueryable, lonLatConversion, mapExtentStrategyActiveToolTip, measureOlGeometry, measureOlGeometryArea, measureOlGeometryLength, metersToFeet, metersToKilometers, metersToMiles, metersToUnit, moveToOlFeatures, mtmZoneFromLonLat, noElementSelected, nominatimSearchSourceFactory, ogcFilterWidgetFactory, olLayerFeatureIsQueryable, olLayerIsQueryable, optionsApiFactory, osrmDirectionsSourcesFactory, pointerPositionSummaryMarker, provideCoordinatesReverseSearchSource, provideDefaultCoordinatesSearchResultFormatter, provideDefaultIChercheSearchResultFormatter, provideIChercheReverseSearchSource, provideIChercheSearchSource, provideILayerSearchResultFormatter, provideILayerSearchSource, provideNominatimSearchSource, provideOgcFilterWidget, provideOptionsApi, provideOsrmDirectionsSource, provideSearchSourceService, provideStoredQueriesReverseSearchSource, provideStoredQueriesSearchSource, provideStyleListLoader, provideStyleListOptions, removeStopFromStore, renderFeatureFromOl, roundCoordTo, roundCoordToString, scaleExtent, searchSourceServiceFactory, setRowsInMapExtent, setSelectedOnly, sliceOlGeometry, sliceOlLineString, sliceOlPolygon, sourceCanReverseSearch, sourceCanReverseSearchAsSummary, sourceCanSearch, squareMetersToAcres, squareMetersToHectares, squareMetersToSquareFeet, squareMetersToSquareKilometers, squareMetersToSquareMiles, squareMetersToUnit, standardizeUrl, storedqueriesReverseSearchSourceFactory, storedqueriesSearchSourceFactory, stringToLonLat, styleListFactory, translateBearing, translateModifier, tryAddLoadingStrategy, tryAddSelectionStrategy, tryBindStoreLayer, updateOlGeometryCenter, updateOlGeometryMidpoints, updateOlTooltipAtCenter, updateOlTooltipDrawAtCenter, updateOlTooltipsAtMidpoints, updateOlTooltipsDrawAtMidpoints, updateStoreSorting, utmZoneFromLonLat, viewStatesAreEqual, zoneMtm, zoneUtm };
42052
42983
  //# sourceMappingURL=igo2-geo.mjs.map