@igo2/geo 19.0.0-next.6 → 19.0.0-next.8

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.
@@ -2196,6 +2196,86 @@ class XYZDataSource extends DataSource {
2196
2196
  }
2197
2197
  }
2198
2198
 
2199
+ const TimeFrame = ['now', 'today'];
2200
+ const TimeUnit = [
2201
+ 'years',
2202
+ 'months',
2203
+ 'weeks',
2204
+ 'days',
2205
+ 'hours',
2206
+ 'seconds'
2207
+ ];
2208
+ const ArithmeticSymbol = ['+', '-'];
2209
+ /**
2210
+ * this function to parse date with specific format
2211
+ * exemple 'today' or 'today + 1 days' or 'now + 1 years'
2212
+ * @param value string date
2213
+ * @returns date
2214
+ */
2215
+ function parseDateOperation(dateOperation) {
2216
+ const normalizedOp = dateOperation.replace(/\s+/g, '');
2217
+ if (normalizedOp === TimeFrame[0]) {
2218
+ return moment().format();
2219
+ }
2220
+ else if (normalizedOp === TimeFrame[1]) {
2221
+ return moment().endOf('day').format();
2222
+ }
2223
+ const regex = new RegExp(`(${TimeFrame.join('|')})([${ArithmeticSymbol.join('|')}]\\d+)(${TimeUnit.join('|')})?`, 'i');
2224
+ const match = normalizedOp.match(regex);
2225
+ if (!match) {
2226
+ console.warn('Invalid format. example: today or today + 1 year...');
2227
+ return moment().toString();
2228
+ }
2229
+ let date = match[1] === TimeFrame[0] ? moment() : moment().endOf('day');
2230
+ if (!match[2]) {
2231
+ console.warn(`Invalid arithmetic symbol or value. Expected one of: ${ArithmeticSymbol.join(', ')}`);
2232
+ return date.format();
2233
+ }
2234
+ const operator = match[2][0];
2235
+ const value = parseInt(match[2].slice(1), 10);
2236
+ const unit = match[3]?.toLowerCase();
2237
+ if (!match[3] && !TimeUnit.includes(unit)) {
2238
+ console.warn(`Invalid time unit. Expected one of: ${TimeUnit.join(', ')}`);
2239
+ return date.format();
2240
+ }
2241
+ if (operator === ArithmeticSymbol['0']) {
2242
+ date = date.add(value, unit);
2243
+ }
2244
+ else {
2245
+ date = date.subtract(value, unit);
2246
+ }
2247
+ return date.format();
2248
+ }
2249
+ function isIgoLogicalArray(filters) {
2250
+ return 'filters' in filters && 'logical' in filters;
2251
+ }
2252
+ function isFilterAttributeOptions(filters) {
2253
+ return 'propertyName' in filters;
2254
+ }
2255
+ /**
2256
+ * Recursive
2257
+ * Search inside filters of OgcFiltersOptions
2258
+ */
2259
+ function searchFilter(filters, key, value) {
2260
+ if (isIgoLogicalArray(filters)) {
2261
+ if (Array.isArray(filters.filters)) {
2262
+ return filters.filters.find((filter) => searchFilter(filter, key, value));
2263
+ }
2264
+ else {
2265
+ searchFilter(filters, key, value);
2266
+ }
2267
+ }
2268
+ else if (isFilterAttributeOptions(filters)) {
2269
+ if (filters[key] === value) {
2270
+ return filters;
2271
+ }
2272
+ }
2273
+ return undefined;
2274
+ }
2275
+ function isTimeFrame(value) {
2276
+ return TimeFrame.some((timeFrame) => value.toLocaleLowerCase().includes(timeFrame));
2277
+ }
2278
+
2199
2279
  var OgcFilterOperatorType;
2200
2280
  (function (OgcFilterOperatorType) {
2201
2281
  OgcFilterOperatorType["BasicNumericOperator"] = "basicnumericoperator";
@@ -2923,7 +3003,7 @@ class OgcFilterWriter {
2923
3003
  }
2924
3004
  else if (value.toLowerCase().includes('now') ||
2925
3005
  value.toLowerCase().includes('today')) {
2926
- return this.parseDateOperation(value);
3006
+ return parseDateOperation(value);
2927
3007
  }
2928
3008
  else if (moment(value).isValid()) {
2929
3009
  return value;
@@ -2932,50 +3012,16 @@ class OgcFilterWriter {
2932
3012
  return undefined;
2933
3013
  }
2934
3014
  }
2935
- /**
2936
- * this function to parse date with specific format
2937
- * exemple 'today + 1 days' or 'now + 1 years'
2938
- * @param value string date
2939
- * @returns date
2940
- */
2941
- parseDateOperation(value) {
2942
- const operationSplitted = value.toLowerCase().split(' ');
2943
- const leftOperand = operationSplitted[0];
2944
- const operator = ['+', '-'].includes(operationSplitted[1])
2945
- ? operationSplitted[1]
2946
- : undefined;
2947
- const rightOperand = /^[0-9]*$/.test(operationSplitted[2])
2948
- ? operationSplitted[2]
2949
- : undefined;
2950
- const rightUnitOperand = (['years', 'months', 'weeks', 'days', 'hours', 'seconds'].includes(operationSplitted[3])
2951
- ? operationSplitted[3]
2952
- : undefined);
2953
- if (!operator || !rightUnitOperand || !rightOperand) {
2954
- return leftOperand === 'now'
2955
- ? moment().format()
2956
- : moment().endOf('day').format();
2957
- }
2958
- if (operator === '+') {
2959
- return leftOperand === 'now'
2960
- ? moment().add(parseInt(rightOperand, 10), rightUnitOperand).format()
2961
- : moment()
2962
- .endOf('day')
2963
- .add(parseInt(rightOperand, 10), rightUnitOperand)
2964
- .format();
2965
- }
2966
- else {
2967
- return leftOperand === 'now'
2968
- ? moment()
2969
- .subtract(parseInt(rightOperand, 10), rightUnitOperand)
2970
- .format()
2971
- : moment()
2972
- .endOf('day')
2973
- .subtract(parseInt(rightOperand, 10), rightUnitOperand)
2974
- .format();
2975
- }
2976
- }
2977
3015
  }
2978
3016
 
3017
+ const OgcSelectorFields = [
3018
+ 'pushButtons',
3019
+ 'checkboxes',
3020
+ 'radioButtons',
3021
+ 'select',
3022
+ 'autocomplete'
3023
+ ];
3024
+
2979
3025
  const defaultEpsg = 'EPSG:3857';
2980
3026
  const defaultMaxFeatures = 5000;
2981
3027
  const defaultWfsVersion = '2.0.0';
@@ -2990,7 +3036,8 @@ const jsonRegex = new RegExp(/(.*)?json(.*)?/gi);
2990
3036
  * @param ogcFilters OgcFiltersOptions
2991
3037
  * @returns A string representing the datasource options, based on filter and views
2992
3038
  */
2993
- function buildUrl(options, extent, proj, ogcFilters, randomParam) {
3039
+ function buildUrl(options, extent, proj, randomParam) {
3040
+ const ogcFilters = options.ogcFilters;
2994
3041
  const paramsWFS = options.paramsWFS;
2995
3042
  const queryStringValues = formatWFSQueryString(options, undefined, options.paramsWFS.srsName);
2996
3043
  let igoFilters;
@@ -3193,6 +3240,56 @@ function getFormatFromOptions(options) {
3193
3240
  }
3194
3241
  return new olFormatCls();
3195
3242
  }
3243
+ function getSaveableOgcParams(options) {
3244
+ const selectors = OgcSelectorFields.reduce((selector, selectorName) => {
3245
+ if (options[selectorName]) {
3246
+ selector[selectorName] = {
3247
+ groups: options[selectorName].groups
3248
+ };
3249
+ }
3250
+ return selector;
3251
+ }, {});
3252
+ return {
3253
+ ...selectors,
3254
+ ...(options?.interfaceOgcFilters && {
3255
+ interfaceOgcFilters: options.interfaceOgcFilters.map((interfaceOgc) => {
3256
+ const filters = searchFilter(options.filters, 'filterid', interfaceOgc.filterid);
3257
+ return interfaceOgcFilters(filters, interfaceOgc);
3258
+ })
3259
+ })
3260
+ };
3261
+ }
3262
+ function interfaceOgcFilters(filters, interfaceOgc) {
3263
+ const saveableInterface = {
3264
+ propertyName: interfaceOgc?.propertyName,
3265
+ operator: interfaceOgc?.operator,
3266
+ active: interfaceOgc?.active,
3267
+ expression: interfaceOgc?.expression
3268
+ };
3269
+ Object.keys(saveableInterface).forEach((key) => {
3270
+ if (isEmpty(saveableInterface[key])) {
3271
+ delete saveableInterface[key];
3272
+ }
3273
+ });
3274
+ handleFilterDate(filters, interfaceOgc, saveableInterface);
3275
+ return saveableInterface;
3276
+ }
3277
+ function isEmpty(value) {
3278
+ return value === null || value === undefined || value === '';
3279
+ }
3280
+ function handleFilterDate(filter, interfaceOgc, saveableInterface) {
3281
+ const keys = ['begin', 'end'];
3282
+ const formatDate = (date) => TimeFrame.some((timeFrame) => date.toLocaleLowerCase().includes(timeFrame))
3283
+ ? new Date(parseDateOperation(date)).toISOString().split('.')[0] + 'Z'
3284
+ : new Date(date).toISOString().split('.')[0] + 'Z';
3285
+ keys.forEach((key) => {
3286
+ if (filter && !isEmpty(filter[key])) {
3287
+ if (formatDate(filter[key]) !== formatDate(interfaceOgc[key])) {
3288
+ saveableInterface[key] = interfaceOgc[key];
3289
+ }
3290
+ }
3291
+ });
3292
+ }
3196
3293
 
3197
3294
  class WFSDataSource extends DataSource {
3198
3295
  options;
@@ -3208,7 +3305,10 @@ class WFSDataSource extends DataSource {
3208
3305
  const baseOptions = super.saveableOptions;
3209
3306
  return {
3210
3307
  ...baseOptions,
3211
- params: this.options.params
3308
+ params: this.options.params,
3309
+ ...(this.ogcFilters && {
3310
+ ogcFilters: getSaveableOgcParams(this.ogcFilters)
3311
+ })
3212
3312
  };
3213
3313
  }
3214
3314
  constructor(options, wfsService, authInterceptor) {
@@ -3268,9 +3368,8 @@ class WFSDataSource extends DataSource {
3268
3368
  const currentExtent = extent
3269
3369
  ? olproj.transformExtent(extent, projection, wfsProj)
3270
3370
  : undefined;
3271
- const ogcFilters = this.ogcFilters;
3272
3371
  paramsWFS.srsName = paramsWFS.srsName || projection.getCode();
3273
- let url = buildUrl(this.options, currentExtent, wfsProj, ogcFilters);
3372
+ let url = buildUrl(this.options, currentExtent, wfsProj);
3274
3373
  // Exportation want to fetch without extent/bbox restrictions
3275
3374
  if (!extent && url.includes('bbox')) {
3276
3375
  const [baseUrl, params] = url.split('?');
@@ -3485,6 +3584,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
3485
3584
  }]
3486
3585
  }], ctorParameters: () => [{ type: i1.HttpClient }] });
3487
3586
 
3587
+ /**
3588
+ * @param date: string
3589
+ * @example date = <[2014-08-25, 2018-08-25]>
3590
+ * @example date = 2014-08-25, 2018-08-25
3591
+ * @example date = 2014-08-25/ 2018-08-25
3592
+ * @example date = 2014-08-25
3593
+ */
3594
+ function parseDateString(date) {
3595
+ let dateStrings;
3596
+ if (Array.isArray(date)) {
3597
+ dateStrings = date;
3598
+ }
3599
+ else {
3600
+ if (date.startsWith('[') && date.endsWith(']')) {
3601
+ dateStrings = date.replace(/[\[\]]/g, '').split(',');
3602
+ }
3603
+ else if (date.includes('/')) {
3604
+ dateStrings = date.split('/');
3605
+ }
3606
+ else {
3607
+ dateStrings = date.split(',');
3608
+ }
3609
+ }
3610
+ const dates = dateStrings.map((date) => moment(date));
3611
+ if (dates.length === 1) {
3612
+ return dates[0].isValid() ? dates[0].toDate() : undefined;
3613
+ }
3614
+ const startDate = dates[0];
3615
+ const endDate = dates[1];
3616
+ if (endDate.isBefore(startDate)) {
3617
+ console.error('Please check the order min and max dates');
3618
+ return undefined;
3619
+ }
3620
+ if (startDate.isValid() && endDate.isValid()) {
3621
+ return [startDate.toDate(), endDate.toDate()];
3622
+ }
3623
+ return undefined;
3624
+ }
3625
+ function isValidAndWithinRange(date, [min, max]) {
3626
+ const value = moment(date);
3627
+ return (value.isValid() &&
3628
+ value.isBetween(moment(min), moment(max), undefined, '[]'));
3629
+ }
3630
+ function isDateOrRangeInRange(dateOrRange, [min, max]) {
3631
+ if (Array.isArray(dateOrRange)) {
3632
+ const [start, end] = dateOrRange;
3633
+ return (isValidAndWithinRange(start, [min, max]) &&
3634
+ isValidAndWithinRange(end, [min, max]));
3635
+ }
3636
+ return isValidAndWithinRange(dateOrRange, [min, max]);
3637
+ }
3638
+
3488
3639
  var QueryFormat;
3489
3640
  (function (QueryFormat) {
3490
3641
  QueryFormat["GML2"] = "gml2";
@@ -3523,6 +3674,10 @@ class WMSDataSource extends DataSource {
3523
3674
  get params() {
3524
3675
  return this.options.params;
3525
3676
  }
3677
+ set stylesParams(value) {
3678
+ this.options.params.STYLES = value;
3679
+ this.ol.updateParams({ value });
3680
+ }
3526
3681
  get queryTitle() {
3527
3682
  return this.options.queryTitle
3528
3683
  ? this.options.queryTitle
@@ -3551,9 +3706,18 @@ class WMSDataSource extends DataSource {
3551
3706
  timeFilter$ = new BehaviorSubject(undefined);
3552
3707
  get saveableOptions() {
3553
3708
  const baseOptions = super.saveableOptions;
3709
+ if (this.timeFilter?.value &&
3710
+ this.timeFilter?.value.toString() !== this.timeFilter?.default.toString()) {
3711
+ baseOptions.timeFilter = {
3712
+ value: this.timeFilter.value
3713
+ };
3714
+ }
3554
3715
  return {
3555
3716
  ...baseOptions,
3556
- params: this.params
3717
+ params: this.params,
3718
+ ...(this.ogcFilters && {
3719
+ ogcFilters: getSaveableOgcParams(this.ogcFilters)
3720
+ })
3557
3721
  };
3558
3722
  }
3559
3723
  constructor(options, wfsService) {
@@ -3653,9 +3817,33 @@ class WMSDataSource extends DataSource {
3653
3817
  const timeFilterableDataSourceOptions = options;
3654
3818
  if (timeFilterableDataSourceOptions?.timeFilterable &&
3655
3819
  timeFilterableDataSourceOptions?.timeFilter) {
3820
+ if (timeFilterableDataSourceOptions.timeFilter.value) {
3821
+ const date = this.dateFormat(timeFilterableDataSourceOptions.timeFilter);
3822
+ this.ol.updateParams({
3823
+ TIME: date
3824
+ });
3825
+ }
3656
3826
  this.setTimeFilter(timeFilterableDataSourceOptions.timeFilter, true);
3657
3827
  }
3658
3828
  }
3829
+ dateFormat(timeFilterOptions) {
3830
+ const date = parseDateString(timeFilterOptions.value);
3831
+ const minMax = parseDateString([
3832
+ timeFilterOptions.min,
3833
+ timeFilterOptions.max
3834
+ ]);
3835
+ const valueInRange = isDateOrRangeInRange(date, minMax);
3836
+ if (date instanceof Date) {
3837
+ return valueInRange
3838
+ ? `${date.toISOString().split('.')[0]}Z`
3839
+ : `${minMax[0].toISOString().split('.')[0]}Z`;
3840
+ }
3841
+ else {
3842
+ return valueInRange
3843
+ ? `${date[0].toISOString().split('.')[0]}Z/${date[1].toISOString().split('.')[0]}Z`
3844
+ : `${minMax[0].toISOString().split('.')[0]}Z/${minMax[1].toISOString().split('.')[0]}Z`;
3845
+ }
3846
+ }
3659
3847
  refresh() {
3660
3848
  this.ol.updateParams({ igoRefresh: Math.random() });
3661
3849
  }
@@ -3677,7 +3865,7 @@ class WMSDataSource extends DataSource {
3677
3865
  this.timeFilter = timeFilter;
3678
3866
  if (triggerEvent) {
3679
3867
  this.timeFilter$.next(this.timeFilter);
3680
- this.ol.notify('timeFilter', this.ogcFilters);
3868
+ this.ol.notify('timeFilter', this.timeFilter);
3681
3869
  }
3682
3870
  }
3683
3871
  getLegend(style, view) {
@@ -5461,10 +5649,8 @@ class VectorLayer extends Layer {
5461
5649
  geoDBService;
5462
5650
  layerDBService;
5463
5651
  type = 'vector';
5464
- previousLoadExtent;
5465
- previousLoadResolution;
5466
- previousOgcFilters;
5467
- xhrAccumulator = [];
5652
+ lastRequest;
5653
+ ongoingRequests = [];
5468
5654
  watcher;
5469
5655
  trackFeatureListenerId;
5470
5656
  get browsable() {
@@ -5554,12 +5740,12 @@ class VectorLayer extends Layer {
5554
5740
  if (wfsOptions?.type === 'wfs' &&
5555
5741
  (wfsOptions.params || wfsOptions.paramsWFS)) {
5556
5742
  loader = (extent, resolution, proj, success, failure) => {
5557
- this.customWFSLoader(vectorSource, wfsOptions, this.authInterceptor, extent, resolution, proj, success, failure);
5743
+ this.customWFSLoader(vectorSource, wfsOptions, extent, resolution, proj, success, failure);
5558
5744
  };
5559
5745
  }
5560
5746
  else {
5561
- loader = (extent, resolution, proj, success, failure) => {
5562
- this.customLoader(vectorSource, url, extent, resolution, proj, success, failure);
5747
+ loader = (extent, _resolution, proj, success, failure) => {
5748
+ this.customLoader(vectorSource, url, extent, proj, success, failure);
5563
5749
  };
5564
5750
  }
5565
5751
  if (loader) {
@@ -5567,7 +5753,7 @@ class VectorLayer extends Layer {
5567
5753
  }
5568
5754
  }
5569
5755
  else if (this.options.idbInfo?.storeToIdb && this.geoDBService) {
5570
- const idbLoader = (extent, resolution, proj, success, failure) => {
5756
+ const idbLoader = (extent, _resolution, proj, success, failure) => {
5571
5757
  this.customIDBLoader(vectorSource, olOptions.id, extent, proj, success, failure);
5572
5758
  };
5573
5759
  if (idbLoader) {
@@ -5705,7 +5891,7 @@ class VectorLayer extends Layer {
5705
5891
  this.watcher.unsubscribe();
5706
5892
  }
5707
5893
  else {
5708
- this.watcher.subscribe(() => void 1);
5894
+ this.watcher.subscribe(() => void 0);
5709
5895
  }
5710
5896
  super.init(map);
5711
5897
  }
@@ -5747,7 +5933,6 @@ class VectorLayer extends Layer {
5747
5933
  * @internal
5748
5934
  * @param vectorSource the vector source to be created
5749
5935
  * @param options olOptions from source
5750
- * @param interceptor the interceptor of the data
5751
5936
  * @param extent the extent of the requested data
5752
5937
  * @param resolution the current resolution
5753
5938
  * @param proj the projection to retrieve the data
@@ -5755,45 +5940,57 @@ class VectorLayer extends Layer {
5755
5940
  * @param failure failure callback
5756
5941
  * @param randomParam random parameter to ensure cache is not causing problems in retrieving new data
5757
5942
  */
5758
- customWFSLoader(vectorSource, options, interceptor, extent, resolution, proj, success, failure, randomParam) {
5759
- {
5760
- const paramsWFS = options.paramsWFS;
5761
- const wfsProj = paramsWFS.srsName
5762
- ? new olProjection({ code: paramsWFS.srsName })
5763
- : proj;
5764
- const currentExtent = olproj.transformExtent(extent, proj, wfsProj);
5765
- const ogcFilters = options.ogcFilters;
5766
- if ((this.previousLoadExtent &&
5767
- this.previousLoadExtent !== currentExtent) ||
5768
- (this.previousLoadResolution &&
5769
- this.previousLoadResolution !== resolution) ||
5770
- (this.previousOgcFilters && this.previousOgcFilters !== ogcFilters)) {
5771
- vectorSource.removeLoadedExtent(this.previousLoadExtent);
5772
- for (const xhr of this.xhrAccumulator) {
5773
- xhr.abort();
5774
- }
5775
- }
5776
- this.previousLoadExtent = currentExtent;
5777
- this.previousLoadResolution = resolution;
5778
- this.previousOgcFilters = ogcFilters;
5779
- paramsWFS.srsName = paramsWFS.srsName || proj.getCode();
5780
- const url = buildUrl(options, currentExtent, wfsProj, ogcFilters, randomParam);
5781
- let startIndex = 0;
5782
- if (paramsWFS.version === '2.0.0' &&
5783
- paramsWFS.maxFeatures > defaultMaxFeatures) {
5784
- const nbOfFeature = 1000;
5785
- while (startIndex < paramsWFS.maxFeatures) {
5786
- let alteredUrl = url.replace('count=' + paramsWFS.maxFeatures, 'count=' + nbOfFeature);
5787
- alteredUrl = alteredUrl.replace('startIndex=0', '0');
5788
- alteredUrl += '&startIndex=' + startIndex;
5789
- alteredUrl.replace(/&&/g, '&');
5790
- this.getFeatures(vectorSource, currentExtent, wfsProj, proj, alteredUrl, success, failure);
5791
- startIndex += nbOfFeature;
5792
- }
5793
- }
5794
- else {
5795
- this.getFeatures(vectorSource, currentExtent, wfsProj, proj, url, success, failure);
5796
- }
5943
+ customWFSLoader(vectorSource, options, extent, resolution, proj, success, failure, randomParam) {
5944
+ const paramsWFS = options.paramsWFS;
5945
+ const wfsProj = this.getProjection(proj, paramsWFS);
5946
+ const currentExtent = olproj.transformExtent(extent, proj, wfsProj);
5947
+ if (this.lastRequest &&
5948
+ (this.lastRequest.extent !== currentExtent ||
5949
+ this.lastRequest.resolution !== resolution)) {
5950
+ this.abortRequests(vectorSource);
5951
+ }
5952
+ const url = buildUrl(options, currentExtent, wfsProj, randomParam);
5953
+ const request = {
5954
+ xhr: undefined,
5955
+ extent,
5956
+ resolution
5957
+ };
5958
+ const readOptions = {
5959
+ dataProjection: wfsProj,
5960
+ featureProjection: proj
5961
+ };
5962
+ if (paramsWFS.version === '2.0.0' &&
5963
+ paramsWFS.maxFeatures > defaultMaxFeatures) {
5964
+ this.batchGetFeatures(url, request, vectorSource, paramsWFS, readOptions, success, failure);
5965
+ }
5966
+ else {
5967
+ this.getFeatures(url, request, vectorSource, readOptions, success, failure);
5968
+ }
5969
+ }
5970
+ abortRequests(vectorSource) {
5971
+ vectorSource.removeLoadedExtent(this.lastRequest.extent);
5972
+ for (const request of this.ongoingRequests) {
5973
+ request.xhr?.abort();
5974
+ this.removeRequest(request);
5975
+ }
5976
+ }
5977
+ getProjection(proj, params) {
5978
+ const newProj = params.srsName
5979
+ ? new olProjection({ code: params.srsName })
5980
+ : proj;
5981
+ params.srsName = newProj.getCode();
5982
+ return newProj;
5983
+ }
5984
+ batchGetFeatures(url, request, vectorSource, paramsWFS, readOptions, success, failure) {
5985
+ const nbOfFeature = 1000;
5986
+ let startIndex = 0;
5987
+ while (startIndex < paramsWFS.maxFeatures) {
5988
+ let alteredUrl = url.replace('count=' + paramsWFS.maxFeatures, 'count=' + nbOfFeature);
5989
+ alteredUrl = alteredUrl.replace('startIndex=0', '0');
5990
+ alteredUrl += '&startIndex=' + startIndex;
5991
+ alteredUrl.replace(/&&/g, '&');
5992
+ this.getFeatures(alteredUrl, request, vectorSource, readOptions, success, failure);
5993
+ startIndex += nbOfFeature;
5797
5994
  }
5798
5995
  }
5799
5996
  /**
@@ -5807,7 +6004,7 @@ class VectorLayer extends Layer {
5807
6004
  * @param success success callback
5808
6005
  * @param failure failure callback
5809
6006
  */
5810
- getFeatures(vectorSource, extent, dataProjection, featureProjection, url, success, failure) {
6007
+ getFeatures(url, request, vectorSource, readOptions, success, failure) {
5811
6008
  const xhr = new XMLHttpRequest();
5812
6009
  const alteredUrlWithKeyAuth = this.authInterceptor.alterUrlWithKeyAuth(url);
5813
6010
  let modifiedUrl = url;
@@ -5819,7 +6016,8 @@ class VectorLayer extends Layer {
5819
6016
  this.authInterceptor.interceptXhr(xhr, modifiedUrl);
5820
6017
  }
5821
6018
  const onError = () => {
5822
- vectorSource.removeLoadedExtent(extent);
6019
+ vectorSource.removeLoadedExtent(request.extent);
6020
+ this.removeRequest(request);
5823
6021
  failure();
5824
6022
  };
5825
6023
  xhr.onerror = onError;
@@ -5827,10 +6025,7 @@ class VectorLayer extends Layer {
5827
6025
  if (xhr.status === 200 && xhr.responseText.length > 0) {
5828
6026
  const features = vectorSource
5829
6027
  .getFormat()
5830
- .readFeatures(xhr.responseText, {
5831
- dataProjection,
5832
- featureProjection
5833
- });
6028
+ .readFeatures(xhr.responseText, readOptions);
5834
6029
  if (features) {
5835
6030
  vectorSource.addFeatures(features);
5836
6031
  success(features);
@@ -5838,24 +6033,35 @@ class VectorLayer extends Layer {
5838
6033
  else {
5839
6034
  success([]);
5840
6035
  }
6036
+ this.removeRequest(request);
5841
6037
  }
5842
6038
  else {
5843
6039
  onError();
5844
6040
  }
5845
6041
  };
5846
- this.xhrAccumulator.push(xhr);
6042
+ request.xhr = xhr;
6043
+ this.lastRequest = request;
6044
+ this.ongoingRequests.push(request);
5847
6045
  xhr.send();
5848
6046
  }
6047
+ removeRequest(request) {
6048
+ if (request === this.lastRequest) {
6049
+ this.lastRequest = undefined;
6050
+ }
6051
+ const index = this.ongoingRequests.indexOf(request);
6052
+ if (index > -1) {
6053
+ this.ongoingRequests.splice(index, 1);
6054
+ }
6055
+ }
5849
6056
  /**
5850
6057
  * Custom loader for vector layer.
5851
6058
  * @internal
5852
6059
  * @param vectorSource the vector source to be created
5853
6060
  * @param url the url string or function to retrieve the data
5854
6061
  * @param extent the extent of the requested data
5855
- * @param resolution the current resolution
5856
6062
  * @param projection the projection to retrieve the data
5857
6063
  */
5858
- customLoader(vectorSource, url, extent, resolution, projection, success, failure) {
6064
+ customLoader(vectorSource, url, extent, projection, success, failure) {
5859
6065
  const xhr = new XMLHttpRequest();
5860
6066
  let modifiedUrl = url;
5861
6067
  if (typeof url !== 'function') {
@@ -9349,6 +9555,12 @@ class CapabilitiesService {
9349
9555
  if (!queryFormat) {
9350
9556
  queryable = false;
9351
9557
  }
9558
+ if (baseOptions.params.STYLES) {
9559
+ const style = legendOptions?.stylesAvailable?.find((style) => style.name === baseOptions.params.STYLES);
9560
+ if (!style) {
9561
+ delete baseOptions.params.STYLES;
9562
+ }
9563
+ }
9352
9564
  const options = ObjectUtils.removeUndefined({
9353
9565
  _layerOptionsFromSource: {
9354
9566
  title: layer.Title,
@@ -9541,7 +9753,7 @@ class CapabilitiesService {
9541
9753
  timeFilter.step = minMaxDim[2] !== undefined ? minMaxDim[2] : undefined;
9542
9754
  }
9543
9755
  if (dimension.default) {
9544
- timeFilter.value = dimension.default;
9756
+ timeFilter.value = timeFilter.default = dimension.default;
9545
9757
  }
9546
9758
  return timeFilter;
9547
9759
  }
@@ -10279,7 +10491,7 @@ class LayerLegendComponent {
10279
10491
  .LAYERS.split(',')
10280
10492
  .map(() => (STYLES += this.currentStyle + ','));
10281
10493
  STYLES = STYLES.slice(0, -1);
10282
- this.layer.dataSource.ol.updateParams({ STYLES });
10494
+ this.layer.dataSource.stylesParams = STYLES;
10283
10495
  }
10284
10496
  }
10285
10497
  onLoadImage(id) {
@@ -17873,23 +18085,11 @@ class TimeFilterService {
17873
18085
  }
17874
18086
  reformatDateTime(value) {
17875
18087
  const year = value.getFullYear();
17876
- let month = value.getMonth() + 1;
17877
- let day = value.getUTCDate();
17878
- let hour = value.getUTCHours();
17879
- let minute = value.getUTCMinutes();
17880
- if (Number(month) < 10) {
17881
- month = '0' + month;
17882
- }
17883
- if (Number(day) < 10) {
17884
- day = '0' + day;
17885
- }
17886
- if (Number(hour) < 10) {
17887
- hour = '0' + hour;
17888
- }
17889
- if (Number(minute) < 10) {
17890
- minute = '0' + minute;
17891
- }
17892
- return year + '-' + month + '-' + day + 'T' + hour + ':' + minute + ':00Z';
18088
+ let month = (value.getMonth() + 1).toString().padStart(2, '0');
18089
+ let day = value.getUTCDate().toString().padStart(2, '0');
18090
+ let hour = value.getUTCHours().toString().padStart(2, '0');
18091
+ let minute = value.getUTCMinutes().toString().padStart(2, '0');
18092
+ return `${year}-${month}-${day}T${hour}:${minute}:00Z`;
17893
18093
  }
17894
18094
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17895
18095
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterService });
@@ -17912,6 +18112,11 @@ class OGCFilterService {
17912
18112
  options.ogcFilters.interfaceOgcFilters =
17913
18113
  ogcFilterWriter.defineInterfaceFilterSequence(options.ogcFilters.filters, options.paramsWFS.fieldNameGeometry);
17914
18114
  }
18115
+ else {
18116
+ const mergedInterfaceOgcFilters = this.mergeInterfaceFilters(options.ogcFilters.filters, options.ogcFilters.interfaceOgcFilters);
18117
+ options.ogcFilters.interfaceOgcFilters =
18118
+ ogcFilterWriter.defineInterfaceFilterSequence(mergedInterfaceOgcFilters, options.paramsWFS.fieldNameGeometry);
18119
+ }
17915
18120
  }
17916
18121
  }
17917
18122
  setOgcWMSFiltersOptions(wmsDatasource) {
@@ -17925,6 +18130,11 @@ class OGCFilterService {
17925
18130
  // With some wms server, this param must be set to make spatials call.
17926
18131
  options.ogcFilters.filters, options.fieldNameGeometry);
17927
18132
  }
18133
+ else {
18134
+ const mergedInterfaceOgcFilters = this.mergeInterfaceFilters(options.ogcFilters.filters, options.ogcFilters.interfaceOgcFilters);
18135
+ options.ogcFilters.interfaceOgcFilters =
18136
+ ogcFilterWriter.defineInterfaceFilterSequence(mergedInterfaceOgcFilters, options.fieldNameGeometry);
18137
+ }
17928
18138
  this.filterByOgc(wmsDatasource, ogcFilterWriter.buildFilter(options.ogcFilters.filters, undefined, undefined, undefined, wmsDatasource.options));
17929
18139
  options.filtered = true;
17930
18140
  }
@@ -17934,6 +18144,15 @@ class OGCFilterService {
17934
18144
  options.filtered = false;
17935
18145
  }
17936
18146
  }
18147
+ mergeInterfaceFilters(filters, interfaceOgcFilters) {
18148
+ return interfaceOgcFilters.map((interfaceOgc) => {
18149
+ const filter = searchFilter(filters, 'propertyName', interfaceOgc.propertyName);
18150
+ if (filter) {
18151
+ return { ...interfaceOgc, filterid: filter.filterid };
18152
+ }
18153
+ return interfaceOgc;
18154
+ });
18155
+ }
17937
18156
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: OGCFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17938
18157
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: OGCFilterService });
17939
18158
  }
@@ -18976,6 +19195,9 @@ class OgcFilterTimeComponent {
18976
19195
  }
18977
19196
  changeTemporalProperty(value, position, refreshFilter = true) {
18978
19197
  if (typeof value === 'string') {
19198
+ if (!this.isValidDate(value)) {
19199
+ return;
19200
+ }
18979
19201
  value = new Date(value);
18980
19202
  }
18981
19203
  let valueTmp = this.getDateTime(value, position);
@@ -19431,6 +19653,13 @@ class OgcFilterTimeComponent {
19431
19653
  this.setFilterStateDisable();
19432
19654
  this.updateValues();
19433
19655
  }
19656
+ isValidDate(value) {
19657
+ if (/^\d+$/.test(value)) {
19658
+ return false;
19659
+ }
19660
+ const date = new Date(value);
19661
+ return date instanceof Date && !isNaN(date.getTime());
19662
+ }
19434
19663
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: OgcFilterTimeComponent, deps: [{ token: OGCFilterTimeService }], target: i0.ɵɵFactoryTarget.Component });
19435
19664
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: OgcFilterTimeComponent, isStandalone: true, selector: "igo-ogc-filter-time", inputs: { datasource: "datasource", currentFilter: "currentFilter" }, outputs: { changeProperty: "changeProperty" }, providers: [OGCFilterTimeService, provideMomentDateAdapter()], viewQueries: [{ propertyName: "endDatepickerTime", first: true, predicate: ["endDatepickerTime"], descendants: true }, { propertyName: "beginDatepickerTime", first: true, predicate: ["beginDatepickerTime"], descendants: true }, { propertyName: "beginTime", first: true, predicate: ["beginTime"], descendants: true }, { propertyName: "endTime", first: true, predicate: ["endTime"], descendants: true }], ngImport: i0, template: "<div class=\"datetime-container\">\n <mat-slide-toggle\n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\"\n >\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 </div>\n\n <div *ngIf=\"!sliderMode\">\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\" subscriptSizing=\"dynamic\">\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\n matSuffix\n [for]=\"beginDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></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\n #beginYear\n class=\"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled=\"false\"\n readonly=\"true\"\n [value]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"\n endValue && !restrictedToStep()\n ? endValue\n : handleDate(datasource.options.maxDate)\n \"\n />\n </mat-form-field>\n\n <mat-form-field class=\"year-input\" subscriptSizing=\"dynamic\">\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 />\n <mat-datepicker-toggle\n matSuffix\n [for]=\"endDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></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\n #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]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [max]=\"handleDate(datasource.options.maxDate)\"\n />\n </mat-form-field>\n <div class=\"actions-container\">\n <button\n class=\"reset-button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n [disabled]=\"filterStateDisable\"\n >\n <mat-icon>{{ 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 >\n </mat-slide-toggle>\n </div>\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType() !== 'year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"beginDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n <input\n #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]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"\n endValue && !restrictedToStep()\n ? endValue\n : handleDate(datasource.options.maxDate)\n \"\n [disabled]=\"filterStateDisable\"\n />\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 >\n </mat-datepicker>\n </mat-form-field>\n\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\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 >\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{\n hour\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\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 >\n <mat-option\n *ngFor=\"let minute of beginMinutes\"\n [value]=\"minute\"\n >{{ minute }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div *ngIf=\"!restrictedToStep()\" class=\"datetime-input\">\n <mat-form-field class=\"date-input\" subscriptSizing=\"dynamic\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"endDatepicker\"\n [disabled]=\"filterStateDisable\"\n ></mat-datepicker-toggle>\n <input\n #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]=\"\n endValue ? endValue : handleDate(datasource.options.maxDate)\n \"\n [min]=\"\n beginValue ? beginValue : handleDate(datasource.options.minDate)\n \"\n [max]=\"handleDate(datasource.options.maxDate)\"\n [disabled]=\"filterStateDisable\"\n />\n <span class=\"filler\"></span>\n <mat-datepicker\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n </mat-form-field>\n\n <div *ngIf=\"calendarType() === 'datetime'\" class=\"time-input\">\n <mat-form-field class=\"hour-input\" subscriptSizing=\"dynamic\">\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 >\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{\n hour\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" subscriptSizing=\"dynamic\">\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 >\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{\n minute\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"actions-container\">\n <button\n class=\"reset-button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\"\n [disabled]=\"filterStateDisable\"\n >\n <mat-icon>{{ 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 >\n </mat-slide-toggle>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{text-align:center!important;margin:auto 5px!important}:host .slider-container{text-align:center}:host .datetime-input-container{display:flex;align-items:center;flex-wrap:wrap}:host .datetime-input-container>:not(:last-child){margin-right:8px}:host .datetime-input{display:block}:host .date-input{width:154px}:host .actions-container{display:flex;align-items:center}:host .time-input{margin-top:16px}:host .time-input>:not(:last-child){margin-right:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host .time-input{margin-top:4px}}:host .hour-input,:host .minute-input{width:100px}:host .year-input-container{display:flex;width:100%}:host .year-input-container mat-form-field:not(:last-child){margin-right:4px}:host .year-input-hide{width:120px;margin-right:25px;display:none}:host .year-input-only-year{width:120px;margin-right:25px;text-align:left!important}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}:host ::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: OgcFilterTimeSliderComponent, selector: "igo-ogc-filter-time-slider", inputs: ["currentFilter", "begin", "max", "datasource"], outputs: ["changeProperty"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i6$3.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6$3.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6$3.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
19436
19665
  }
@@ -28987,7 +29216,7 @@ class TimeFilterFormComponent {
28987
29216
  }
28988
29217
  }
28989
29218
  }
28990
- change = new EventEmitter();
29219
+ dateChange = new EventEmitter();
28991
29220
  yearChange = new EventEmitter();
28992
29221
  mySlider;
28993
29222
  get type() {
@@ -29036,7 +29265,9 @@ class TimeFilterFormComponent {
29036
29265
  }
29037
29266
  get min() {
29038
29267
  if (this.options.min) {
29039
- const min = new Date(this.options.min);
29268
+ const min = isTimeFrame(this.options.min)
29269
+ ? new Date(parseDateOperation(this.options.min))
29270
+ : new Date(this.options.min);
29040
29271
  return new Date(min.getTime() + min.getTimezoneOffset() * 60000);
29041
29272
  }
29042
29273
  else {
@@ -29045,7 +29276,9 @@ class TimeFilterFormComponent {
29045
29276
  }
29046
29277
  get max() {
29047
29278
  if (this.options.max) {
29048
- const max = new Date(this.options.max);
29279
+ const max = isTimeFrame(this.options.max)
29280
+ ? new Date(parseDateOperation(this.options.max))
29281
+ : new Date(this.options.max);
29049
29282
  return new Date(max.getTime() + max.getTimezoneOffset() * 60000);
29050
29283
  }
29051
29284
  else {
@@ -29055,6 +29288,13 @@ class TimeFilterFormComponent {
29055
29288
  get is() {
29056
29289
  return this.options.range === undefined ? false : this.options.range;
29057
29290
  }
29291
+ get allYearsInterval() {
29292
+ const options = [];
29293
+ for (let i = this.initStartYear; i <= this.initEndYear; i++) {
29294
+ options.push(i);
29295
+ }
29296
+ return options;
29297
+ }
29058
29298
  constructor(dateAdapter) {
29059
29299
  this.dateAdapter = dateAdapter;
29060
29300
  this.dateAdapter.setLocale('fr');
@@ -29074,22 +29314,15 @@ class TimeFilterFormComponent {
29074
29314
  this.endYear = new Date(this.endDate).getFullYear();
29075
29315
  this.initEndYear = this.endYear;
29076
29316
  }
29317
+ this.checkFilterValue();
29077
29318
  if (!this.isRange) {
29078
- for (let i = this.startYear; i <= this.endYear + 1; i++) {
29079
- this.listYears.push(i);
29080
- }
29319
+ this.listYears = this.allYearsInterval;
29081
29320
  }
29082
29321
  else {
29083
- for (let i = this.startYear; i < this.endYear; i++) {
29084
- this.startListYears.push(i);
29085
- }
29086
- for (let i = this.startYear + 1; i <= this.endYear; i++) {
29087
- this.endListYears.push(i);
29088
- }
29322
+ this.setUpYearsInterval();
29089
29323
  }
29090
29324
  this.options.enabled =
29091
29325
  this.options.enabled === undefined ? true : this.options.enabled;
29092
- this.checkFilterValue();
29093
29326
  if (this.options.enabled) {
29094
29327
  if (!this.isRange && this.style === 'slider' && this.type === 'year') {
29095
29328
  this.yearChange.emit(this.year);
@@ -29108,74 +29341,124 @@ class TimeFilterFormComponent {
29108
29341
  this.options.value = this.year.toString();
29109
29342
  }
29110
29343
  }
29111
- checkFilterValue() {
29112
- const olSource = this.layer.dataSource.ol;
29113
- const timeFromWms = olSource.getParams().TIME;
29114
- if (!this.isRange &&
29115
- this.style === TimeFilterStyle.SLIDER &&
29116
- this.type === TimeFilterType.YEAR) {
29117
- if (timeFromWms) {
29118
- this.year = new Date(timeFromWms.toString()).getFullYear() + 1;
29344
+ processSliderValue() {
29345
+ // if style is Slider the range always false
29346
+ const dateValue = this.getDateValue();
29347
+ const inRange = dateValue
29348
+ ? isDateOrRangeInRange(dateValue, [this.min, this.max])
29349
+ : undefined;
29350
+ if (inRange && dateValue instanceof Date) {
29351
+ if (this.type === TimeFilterType.YEAR) {
29352
+ this.year = dateValue.getFullYear();
29353
+ }
29354
+ else {
29355
+ this.date = dateValue;
29119
29356
  }
29120
- else if (this.options.value) {
29121
- this.year = new Date(this.options.value.toString()).getFullYear() + 1;
29357
+ }
29358
+ else {
29359
+ if (this.type === TimeFilterType.YEAR) {
29360
+ this.year = this.min.getFullYear();
29122
29361
  }
29123
29362
  else {
29124
- this.year = new Date(this.min).getFullYear() + 1;
29363
+ this.date = this.min;
29125
29364
  }
29126
29365
  }
29127
- else if (this.isRange &&
29128
- this.style === TimeFilterStyle.CALENDAR &&
29129
- this.type === TimeFilterType.YEAR) {
29130
- if (timeFromWms) {
29131
- this.startYear = parseInt(timeFromWms.substr(0, 4), 10);
29132
- this.endYear = parseInt(timeFromWms.substr(5, 4), 10);
29133
- const newStartListYears = [];
29134
- const newEndListYears = [];
29135
- for (let i = this.initStartYear; i < this.endYear; i++) {
29136
- newStartListYears.push(i);
29137
- }
29138
- for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
29139
- newEndListYears.push(i);
29140
- }
29141
- this.startListYears = newStartListYears;
29142
- this.endListYears = newEndListYears;
29366
+ }
29367
+ processCalendarYearType() {
29368
+ const dateValue = this.getDateValue();
29369
+ const inRange = dateValue
29370
+ ? isDateOrRangeInRange(dateValue, [this.min, this.max])
29371
+ : undefined;
29372
+ if (!this.isRange) {
29373
+ if (inRange && dateValue instanceof Date) {
29374
+ this.year = dateValue.getFullYear();
29375
+ }
29376
+ else {
29377
+ this.year = this.min.getFullYear();
29378
+ }
29379
+ }
29380
+ else {
29381
+ if (inRange &&
29382
+ Array.isArray(dateValue) &&
29383
+ dateValue[0].getFullYear() !== dateValue[1].getFullYear()) {
29384
+ this.startYear = dateValue[0].getFullYear();
29385
+ this.endYear = dateValue[1].getFullYear();
29143
29386
  }
29144
29387
  }
29145
- // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
29388
+ }
29389
+ processCalendarDateType() {
29390
+ const dateValue = this.getDateValue();
29391
+ const inRange = dateValue
29392
+ ? isDateOrRangeInRange(dateValue, [this.min, this.max])
29393
+ : undefined;
29394
+ if (!this.isRange) {
29395
+ if (inRange && dateValue instanceof Date) {
29396
+ this.date = dateValue;
29397
+ }
29398
+ else {
29399
+ this.date = this.min;
29400
+ }
29401
+ }
29402
+ else {
29403
+ if (inRange &&
29404
+ Array.isArray(dateValue) &&
29405
+ dateValue[0] !== dateValue[1]) {
29406
+ this.startDate = dateValue[0];
29407
+ this.endDate = dateValue[1];
29408
+ }
29409
+ }
29410
+ }
29411
+ getDateValue() {
29412
+ const olSource = this.layer.dataSource.ol;
29413
+ const timeFromWms = olSource.getParams().TIME
29414
+ ? parseDateString(String(olSource.getParams().TIME))
29415
+ : undefined;
29416
+ const dateValue = this.options.value && !timeFromWms
29417
+ ? parseDateString(this.options.value)
29418
+ : undefined;
29419
+ return timeFromWms ?? dateValue;
29420
+ }
29421
+ checkCalendarValue() {
29422
+ if (this.type === TimeFilterType.YEAR) {
29423
+ this.processCalendarYearType();
29424
+ }
29425
+ else {
29426
+ this.processCalendarDateType();
29427
+ }
29428
+ }
29429
+ checkFilterValue() {
29430
+ if (this.style === TimeFilterStyle.SLIDER) {
29431
+ this.processSliderValue();
29432
+ }
29433
+ else if (this.style === TimeFilterStyle.CALENDAR) {
29434
+ this.checkCalendarValue();
29435
+ }
29146
29436
  }
29147
29437
  handleDateChange() {
29148
29438
  this.setupDateOutput();
29149
29439
  this.applyTypeChange();
29150
29440
  // Only if is range, use 2 dates to make the range
29151
29441
  if (this.isRange) {
29152
- this.change.emit([this.startDate, this.endDate]);
29442
+ this.dateChange.emit([this.startDate, this.endDate]);
29153
29443
  }
29154
29444
  else {
29155
- this.change.emit(this.startDate);
29445
+ this.dateChange.emit(this.startDate);
29156
29446
  }
29157
29447
  }
29158
29448
  handleYearChange() {
29159
29449
  if (this.isRange) {
29160
29450
  this.endListYears = [];
29161
- for (let i = this.startYear + 1; i <= this.initEndYear; i++) {
29162
- this.endListYears.push(i);
29163
- }
29164
29451
  this.startListYears = [];
29165
- for (let i = this.initStartYear + 1; i < this.endYear; i++) {
29166
- this.startListYears.push(i);
29167
- }
29452
+ this.setUpYearsInterval();
29168
29453
  this.yearChange.emit([this.startYear, this.endYear]);
29169
29454
  }
29170
29455
  else {
29171
29456
  this.yearChange.emit(this.year);
29172
29457
  }
29173
29458
  }
29174
- handleListYearChange() {
29175
- this.handleYearChange();
29176
- }
29177
- handleListYearStartChange() {
29178
- this.change.emit([this.startDate, this.endDate]);
29459
+ setUpYearsInterval() {
29460
+ this.endListYears = this.allYearsInterval.slice(this.startYear + 1 - this.initStartYear);
29461
+ this.startListYears = this.allYearsInterval.slice(0, this.endYear - this.initStartYear);
29179
29462
  }
29180
29463
  dateToNumber(date) {
29181
29464
  let newDate;
@@ -29217,7 +29500,7 @@ class TimeFilterFormComponent {
29217
29500
  else {
29218
29501
  this.stopFilter();
29219
29502
  this.storeCurrentFilterValue();
29220
- this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
29503
+ this.dateChange.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
29221
29504
  }
29222
29505
  }
29223
29506
  resetFilter() {
@@ -29230,7 +29513,7 @@ class TimeFilterFormComponent {
29230
29513
  }
29231
29514
  else {
29232
29515
  this.setupDateOutput();
29233
- this.change.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
29516
+ this.dateChange.emit(undefined); // TODO: FIX THIS for ALL OTHER TYPES STYLES OR RANGE.
29234
29517
  }
29235
29518
  }
29236
29519
  playFilter() {
@@ -29283,7 +29566,8 @@ class TimeFilterFormComponent {
29283
29566
  this.playIcon = 'play_circle';
29284
29567
  }
29285
29568
  handleSliderDateChange(event) {
29286
- this.date = new Date(event.value);
29569
+ const date = new Date(event.value);
29570
+ this.date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);
29287
29571
  this.setSliderThumbLabel(this.handleSliderTooltip());
29288
29572
  this.handleDateChange();
29289
29573
  }
@@ -29304,36 +29588,22 @@ class TimeFilterFormComponent {
29304
29588
  }
29305
29589
  }
29306
29590
  handleSliderTooltip() {
29307
- let label;
29591
+ // 24h = 86400000 ms
29592
+ const oneDayMs = 86400000;
29593
+ const date = this.date === undefined ? this.min : this.date;
29308
29594
  switch (this.type) {
29309
29595
  case TimeFilterType.DATE:
29310
- label =
29311
- this.date === undefined
29312
- ? this.min.toDateString()
29313
- : this.date.toDateString();
29314
- break;
29596
+ return this.step >= oneDayMs ? date.toDateString() : date.toUTCString();
29315
29597
  case TimeFilterType.TIME:
29316
- label =
29317
- this.date === undefined
29318
- ? this.min.toTimeString()
29319
- : this.date.toTimeString();
29320
- break;
29321
- // datetime
29598
+ return date.toTimeString();
29322
29599
  default:
29323
- label =
29324
- this.date === undefined
29325
- ? this.min.toUTCString()
29326
- : this.date.toUTCString();
29327
- break;
29600
+ return this.date.toUTCString();
29328
29601
  }
29329
- return label;
29330
29602
  }
29331
29603
  setupDateOutput() {
29332
29604
  if (this.style === TimeFilterStyle.SLIDER) {
29333
29605
  this.startDate = new Date(this.date);
29334
- this.startDate.setSeconds(-(this.step / 1000));
29335
29606
  this.endDate = new Date(this.startDate);
29336
- this.endDate.setSeconds(this.step / 1000);
29337
29607
  }
29338
29608
  else if (!this.isRange && !!this.date) {
29339
29609
  this.endDate = new Date(this.date);
@@ -29355,13 +29625,15 @@ class TimeFilterFormComponent {
29355
29625
  applyTypeChange() {
29356
29626
  switch (this.type) {
29357
29627
  case TimeFilterType.DATE:
29358
- if (this.startDate !== undefined || this.endDate !== undefined) {
29359
- this.startDate.setHours(0);
29360
- this.startDate.setMinutes(0);
29361
- this.startDate.setSeconds(0);
29362
- this.endDate.setHours(23);
29363
- this.endDate.setMinutes(59);
29364
- this.endDate.setSeconds(59);
29628
+ if (this.style === TimeFilterStyle.CALENDAR) {
29629
+ if (this.startDate !== undefined || this.endDate !== undefined) {
29630
+ this.startDate.setHours(0);
29631
+ this.startDate.setMinutes(0);
29632
+ this.startDate.setSeconds(0);
29633
+ this.endDate.setHours(23);
29634
+ this.endDate.setMinutes(59);
29635
+ this.endDate.setSeconds(59);
29636
+ }
29365
29637
  }
29366
29638
  break;
29367
29639
  case TimeFilterType.TIME:
@@ -29418,7 +29690,7 @@ class TimeFilterFormComponent {
29418
29690
  return moment.duration(step).asMilliseconds();
29419
29691
  }
29420
29692
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterFormComponent, deps: [{ token: i1$8.DateAdapter }], target: i0.ɵɵFactoryTarget.Component });
29421
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: TimeFilterFormComponent, isStandalone: true, selector: "igo-time-filter-form", inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { change: "change", yearChange: "yearChange" }, viewQueries: [{ propertyName: "mySlider", first: true, predicate: MatSlider, descendants: true }], ngImport: i0, template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"datetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #datetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"minDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #minDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"(startDate)\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"maxDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #maxDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [(ngModel)]=\"year\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\n year\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [(ngModel)]=\"startYear\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option\n [value]=\"startYear\"\n *ngFor=\"let startYear of startListYears\"\n >{{ startYear }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [(ngModel)]=\"endYear\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\n endYear\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<br />\n<div\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\n>\n <span>{{ startYear }}</span>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [color]=\"color\"\n thumbLabel\n [disabled]=\"!options.enabled || !layer.visible\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n (change)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n />\n </mat-slider>\n <span>{{ endYear }}</span>\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle\n (change)=\"toggleFilterState()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n [color]=\"color\"\n [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\"\n >\n </mat-slide-toggle>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"playYear()\"\n >\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n >\n <mat-icon>{{ resetIcon }}</mat-icon>\n </button>\n </div>\n</div>\n\n<div\n *ngIf=\"style === 'slider' && type !== 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m\"\n>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n thumbLabel\n (selectionChange)=\"handleSliderDateChange($event)\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderDateChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter()\">\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n</div>\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatetimepickerModule }, { kind: "component", type: i3$6.MatDatetimepickerComponent, selector: "mat-datetimepicker", inputs: ["multiYearSelector", "twelvehour", "startView", "mode", "timeInterval", "ariaNextMonthLabel", "ariaPrevMonthLabel", "ariaNextYearLabel", "ariaPrevYearLabel", "preventSameDateTimeSelection", "panelClass", "startAt", "openOnFocus", "type", "touchUi", "disabled"], outputs: ["selectedChanged", "opened", "closed", "viewChanged"], exportAs: ["matDatetimepicker"] }, { kind: "component", type: i3$6.MatDatetimepickerToggleComponent, selector: "mat-datetimepicker-toggle", inputs: ["for", "disabled"], exportAs: ["matDatetimepickerToggle"] }, { kind: "directive", type: i3$6.MatDatetimepickerInputDirective, selector: "input[matDatetimepicker]", inputs: ["matDatetimepicker", "matDatepickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatMomentDateModule }, { kind: "ngmodule", type: MatNativeDatetimeModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: // For the DateAdapter provider
29693
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: TimeFilterFormComponent, isStandalone: true, selector: "igo-time-filter-form", inputs: { layer: "layer", options: "options", currentValue: "currentValue" }, outputs: { dateChange: "dateChange", yearChange: "yearChange" }, viewQueries: [{ propertyName: "mySlider", first: true, predicate: MatSlider, descendants: true }], ngImport: i0, template: "<div *ngIf=\"style === 'calendar' && type !== 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"datetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #datetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [matDatetimepicker]=\"datetimePicker\"\n [(ngModel)]=\"date\"\n [min]=\"min\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"minDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #minDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [matDatetimepicker]=\"minDatetimePicker\"\n [(ngModel)]=\"startDate\"\n [min]=\"min\"\n [max]=\"getRangeMaxDate()\"\n readonly=\"readonly\"\n (input)=\"(startDate)\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-datetimepicker-toggle\n class=\"time-filter-mat-datetimepicker-toggle\"\n [for]=\"maxDatetimePicker\"\n matSuffix\n ></mat-datetimepicker-toggle>\n <mat-datetimepicker\n #maxDatetimePicker\n [type]=\"type\"\n [openOnFocus]=\"true\"\n [timeInterval]=\"5\"\n ></mat-datetimepicker>\n <input\n matInput\n autocomplete=\"false\"\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [matDatetimepicker]=\"maxDatetimePicker\"\n [(ngModel)]=\"endDate\"\n [min]=\"getRangeMinDate()\"\n [max]=\"max\"\n readonly=\"readonly\"\n (dateChange)=\"handleDateChange()\"\n />\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<div *ngIf=\"style === 'calendar' && type === 'year'\">\n <div *ngIf=\"!isRange\" class=\"igo-col igo-col-100 igo-col-100-m\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.date' | translate }}\"\n [(ngModel)]=\"year\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option [value]=\"year\" *ngFor=\"let year of listYears\">{{\n year\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div *ngIf=\"isRange\">\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.startDate' | translate }}\"\n [(ngModel)]=\"startYear\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option\n [value]=\"startYear\"\n *ngFor=\"let startYear of startListYears\"\n >{{ startYear }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"igo-col igo-col-100\">\n <mat-form-field>\n <mat-select\n placeholder=\"{{ 'igo.geo.timeFilter.endDate' | translate }}\"\n [(ngModel)]=\"endYear\"\n (selectionChange)=\"handleYearChange()\"\n >\n <mat-option [value]=\"endYear\" *ngFor=\"let endYear of endListYears\">{{\n endYear\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<br />\n<div\n *ngIf=\"!isRange && style === 'slider' && type === 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m mat-typography\"\n>\n <span>{{ startYear }}</span>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"startYear\"\n [max]=\"endYear\"\n [color]=\"color\"\n thumbLabel\n [disabled]=\"!options.enabled || !layer.visible\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n (change)=\"\n handleSliderYearChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n />\n </mat-slider>\n <span>{{ endYear }}</span>\n <p *ngIf=\"options.enabled\" class=\"date-below\">{{ year }}</p>\n <div #actions class=\"igo-layer-actions-container\">\n <mat-slide-toggle\n (change)=\"toggleFilterState()\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\"\n [color]=\"color\"\n [checked]=\"options.enabled\"\n [disabled]=\"!layer.visible\"\n >\n </mat-slide-toggle>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"playYear()\"\n >\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n <button\n [disabled]=\"!options.enabled || !layer.visible\"\n mat-icon-button\n color=\"primary\"\n (click)=\"resetFilter()\"\n >\n <mat-icon>{{ resetIcon }}</mat-icon>\n </button>\n </div>\n</div>\n\n<div\n *ngIf=\"style === 'slider' && type !== 'year'\"\n class=\"igo-col igo-col-100 igo-col-100-m\"\n>\n <!-- TODO: The 'tickInterval' property no longer exists -->\n <mat-slider\n id=\"time-slider\"\n step=\"{{ step }}\"\n [min]=\"dateToNumber(min)\"\n [max]=\"dateToNumber(max)\"\n thumbLabel\n (selectionChange)=\"handleSliderDateChange($event)\"\n #ngSlider\n ><input\n matSliderThumb\n [value]=\"handleSliderValue()\"\n (input)=\"\n handleSliderDateChange({\n source: ngSliderThumb,\n parent: ngSlider,\n value: ngSliderThumb.value\n })\n \"\n #ngSliderThumb=\"matSliderThumb\"\n />\n </mat-slider>\n <p class=\"date-below\">{{ handleSliderTooltip() }}</p>\n <button mat-icon-button color=\"primary\" (click)=\"playFilter()\">\n <mat-icon>{{ playIcon }}</mat-icon>\n </button>\n</div>\n", styles: [":host .igo-layer-filters-container{padding-left:5px}:host #time-slider{width:70%}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){:host #time-slider{width:60%}}:host .date-below{margin:0}:host .igo-layer-actions-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatetimepickerModule }, { kind: "component", type: i3$6.MatDatetimepickerComponent, selector: "mat-datetimepicker", inputs: ["multiYearSelector", "twelvehour", "startView", "mode", "timeInterval", "ariaNextMonthLabel", "ariaPrevMonthLabel", "ariaNextYearLabel", "ariaPrevYearLabel", "preventSameDateTimeSelection", "panelClass", "startAt", "openOnFocus", "type", "touchUi", "disabled"], outputs: ["selectedChanged", "opened", "closed", "viewChanged"], exportAs: ["matDatetimepicker"] }, { kind: "component", type: i3$6.MatDatetimepickerToggleComponent, selector: "mat-datetimepicker-toggle", inputs: ["for", "disabled"], exportAs: ["matDatetimepickerToggle"] }, { kind: "directive", type: i3$6.MatDatetimepickerInputDirective, selector: "input[matDatetimepicker]", inputs: ["matDatetimepicker", "matDatepickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatMomentDateModule }, { kind: "ngmodule", type: MatNativeDatetimeModule }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: // For the DateAdapter provider
29422
29694
  MatInputModule }, { kind: "directive", type: i4$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i7$1.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i7$1.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5$1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
29423
29695
  }
29424
29696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterFormComponent, decorators: [{
@@ -29448,7 +29720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
29448
29720
  type: Input
29449
29721
  }], currentValue: [{
29450
29722
  type: Input
29451
- }], change: [{
29723
+ }], dateChange: [{
29452
29724
  type: Output
29453
29725
  }], yearChange: [{
29454
29726
  type: Output
@@ -29483,9 +29755,17 @@ class TimeFilterItemComponent {
29483
29755
  }
29484
29756
  handleYearChange(year) {
29485
29757
  this.timeFilterService.filterByYear(this.datasource, year);
29758
+ this.datasource.options.timeFilter.value = year.toString();
29486
29759
  }
29487
29760
  handleDateChange(date) {
29488
29761
  this.timeFilterService.filterByDate(this.datasource, date);
29762
+ this.datasource.options.timeFilter.value =
29763
+ date instanceof Date
29764
+ ? this.reformDate(date)
29765
+ : [this.reformDate(date[0]), this.reformDate(date[1])];
29766
+ }
29767
+ reformDate(date) {
29768
+ return date.toISOString().split('.')[0] + 'Z';
29489
29769
  }
29490
29770
  toggleLegend(collapsed) {
29491
29771
  this.layer.legendCollapsed = collapsed;
@@ -29503,7 +29783,7 @@ class TimeFilterItemComponent {
29503
29783
  this.filtersCollapsed = !this.filtersCollapsed;
29504
29784
  }
29505
29785
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterItemComponent, deps: [{ token: TimeFilterService }], target: i0.ɵɵFactoryTarget.Component });
29506
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: TimeFilterItemComponent, isStandalone: true, selector: "igo-time-filter-item", inputs: { header: "header", layer: "layer" }, providers: [TimeFilterService], ngImport: i0, template: "<mat-list-item *ngIf=\"header\">\n <mat-icon\n class=\"igo-chevron\"\n matListItemIcon\n igoCollapse\n [target]=\"filters\"\n [collapsed]=\"filtersCollapsed\"\n (click)=\"toggleFiltersCollapsed()\"\n >\n expand_less\n </mat-icon>\n\n <span\n matListItemTitle\n (click)=\"toggleLegendOnClick()\"\n [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n >{{ layer.title }}</span\n >\n\n <button\n *ngIf=\"header\"\n mat-icon-button\n matListItemMeta\n [color]=\"layer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n layer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"layer.visible = !layer.visible\"\n >\n <mat-icon [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n</mat-list-item>\n\n<div #filters class=\"igo-datasource-filters-container\">\n <div #legend class=\"igo-layer-legend-container\">\n <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n </igo-layer-legend>\n </div>\n <igo-time-filter-form\n [layer]=\"layer\"\n [options]=\"datasource.options.timeFilter\"\n [currentValue]=\"datasource.options.params.TIME\"\n (change)=\"handleDateChange($event)\"\n (yearChange)=\"handleYearChange($event)\"\n >\n </igo-time-filter-form>\n</div>\n", styles: [":host{overflow:hidden}:host .igo-datasource-filters-container{text-align:center;width:100%;display:inline-block;padding-top:5px}:host .igo-layer-legend-container{padding-left:1.125em;width:calc(100% - 18px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i1$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i1$3.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i1$3.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i1$3.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CollapseDirective, selector: "[igoCollapse]", inputs: ["target", "collapsed"], outputs: ["toggle"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LayerLegendComponent, selector: "igo-layer-legend", inputs: ["updateLegendOnResolutionChange", "layer"] }, { kind: "component", type: TimeFilterFormComponent, selector: "igo-time-filter-form", inputs: ["layer", "options", "currentValue"], outputs: ["change", "yearChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
29786
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: TimeFilterItemComponent, isStandalone: true, selector: "igo-time-filter-item", inputs: { header: "header", layer: "layer" }, providers: [TimeFilterService], ngImport: i0, template: "<mat-list-item *ngIf=\"header\">\n <mat-icon\n class=\"igo-chevron\"\n matListItemIcon\n igoCollapse\n [target]=\"filters\"\n [collapsed]=\"filtersCollapsed\"\n (click)=\"toggleFiltersCollapsed()\"\n >\n expand_less\n </mat-icon>\n\n <span\n matListItemTitle\n (click)=\"toggleLegendOnClick()\"\n [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n >{{ layer.title }}</span\n >\n\n <button\n *ngIf=\"header\"\n mat-icon-button\n matListItemMeta\n [color]=\"layer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n layer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"layer.visible = !layer.visible\"\n >\n <mat-icon [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n</mat-list-item>\n\n<div #filters class=\"igo-datasource-filters-container\">\n <div #legend class=\"igo-layer-legend-container\">\n <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n </igo-layer-legend>\n </div>\n <igo-time-filter-form\n [layer]=\"layer\"\n [options]=\"datasource.options.timeFilter\"\n [currentValue]=\"datasource.options.params.TIME\"\n (dateChange)=\"handleDateChange($event)\"\n (yearChange)=\"handleYearChange($event)\"\n >\n </igo-time-filter-form>\n</div>\n", styles: [":host{overflow:hidden}:host .igo-datasource-filters-container{text-align:center;width:100%;display:inline-block;padding-top:5px}:host .igo-layer-legend-container{padding-left:1.125em;width:calc(100% - 18px)}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i1$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i1$3.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i1$3.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i1$3.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CollapseDirective, selector: "[igoCollapse]", inputs: ["target", "collapsed"], outputs: ["toggle"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LayerLegendComponent, selector: "igo-layer-legend", inputs: ["updateLegendOnResolutionChange", "layer"] }, { kind: "component", type: TimeFilterFormComponent, selector: "igo-time-filter-form", inputs: ["layer", "options", "currentValue"], outputs: ["dateChange", "yearChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
29507
29787
  }
29508
29788
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TimeFilterItemComponent, decorators: [{
29509
29789
  type: Component,
@@ -29520,7 +29800,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
29520
29800
  TimeFilterFormComponent,
29521
29801
  AsyncPipe,
29522
29802
  IgoLanguageModule
29523
- ], providers: [TimeFilterService], template: "<mat-list-item *ngIf=\"header\">\n <mat-icon\n class=\"igo-chevron\"\n matListItemIcon\n igoCollapse\n [target]=\"filters\"\n [collapsed]=\"filtersCollapsed\"\n (click)=\"toggleFiltersCollapsed()\"\n >\n expand_less\n </mat-icon>\n\n <span\n matListItemTitle\n (click)=\"toggleLegendOnClick()\"\n [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n >{{ layer.title }}</span\n >\n\n <button\n *ngIf=\"header\"\n mat-icon-button\n matListItemMeta\n [color]=\"layer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n layer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"layer.visible = !layer.visible\"\n >\n <mat-icon [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n</mat-list-item>\n\n<div #filters class=\"igo-datasource-filters-container\">\n <div #legend class=\"igo-layer-legend-container\">\n <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n </igo-layer-legend>\n </div>\n <igo-time-filter-form\n [layer]=\"layer\"\n [options]=\"datasource.options.timeFilter\"\n [currentValue]=\"datasource.options.params.TIME\"\n (change)=\"handleDateChange($event)\"\n (yearChange)=\"handleYearChange($event)\"\n >\n </igo-time-filter-form>\n</div>\n", styles: [":host{overflow:hidden}:host .igo-datasource-filters-container{text-align:center;width:100%;display:inline-block;padding-top:5px}:host .igo-layer-legend-container{padding-left:1.125em;width:calc(100% - 18px)}\n"] }]
29803
+ ], providers: [TimeFilterService], template: "<mat-list-item *ngIf=\"header\">\n <mat-icon\n class=\"igo-chevron\"\n matListItemIcon\n igoCollapse\n [target]=\"filters\"\n [collapsed]=\"filtersCollapsed\"\n (click)=\"toggleFiltersCollapsed()\"\n >\n expand_less\n </mat-icon>\n\n <span\n matListItemTitle\n (click)=\"toggleLegendOnClick()\"\n [ngStyle]=\"{ cursor: filtersCollapsed ? 'default' : 'pointer' }\"\n >{{ layer.title }}</span\n >\n\n <button\n *ngIf=\"header\"\n mat-icon-button\n matListItemMeta\n [color]=\"layer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n layer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"layer.visible = !layer.visible\"\n >\n <mat-icon [ngClass]=\"{ disabled: (inResolutionRange$ | async) === false }\"\n >{{ layer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n</mat-list-item>\n\n<div #filters class=\"igo-datasource-filters-container\">\n <div #legend class=\"igo-layer-legend-container\">\n <igo-layer-legend *ngIf=\"showLegend$ | async\" [layer]=\"layer\">\n </igo-layer-legend>\n </div>\n <igo-time-filter-form\n [layer]=\"layer\"\n [options]=\"datasource.options.timeFilter\"\n [currentValue]=\"datasource.options.params.TIME\"\n (dateChange)=\"handleDateChange($event)\"\n (yearChange)=\"handleYearChange($event)\"\n >\n </igo-time-filter-form>\n</div>\n", styles: [":host{overflow:hidden}:host .igo-datasource-filters-container{text-align:center;width:100%;display:inline-block;padding-top:5px}:host .igo-layer-legend-container{padding-left:1.125em;width:calc(100% - 18px)}\n"] }]
29524
29804
  }], ctorParameters: () => [{ type: TimeFilterService }], propDecorators: { header: [{
29525
29805
  type: Input
29526
29806
  }], layer: [{
@@ -37294,7 +37574,7 @@ class EditionWorkspaceService {
37294
37574
  refreshMap(layer, map) {
37295
37575
  const wfsOlLayer = layer.dataSource.ol;
37296
37576
  const loader = (extent, resolution, proj, success, failure) => {
37297
- layer.customWFSLoader(layer.ol.getSource(), layer.options.sourceOptions, this.authInterceptor, extent, resolution, proj, success, failure, true);
37577
+ layer.customWFSLoader(layer.ol.getSource(), layer.options.sourceOptions, extent, resolution, proj, success, failure, true);
37298
37578
  };
37299
37579
  wfsOlLayer.setLoader(loader);
37300
37580
  wfsOlLayer.refresh();
@@ -42633,5 +42913,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
42633
42913
  * Generated bundle index. Do not edit.
42634
42914
  */
42635
42915
 
42636
- export { AddCatalogDialogComponent, ArcGISRestCapabilitiesLayerTypes, ArcGISRestDataSource, BaseLayersSwitcherComponent, CATALOG_DIRECTIVES, CATALOG_LIBRARY_DIRECTIVES, CadastreSearchSource, CapabilitiesService, CartoDataSource, Catalog, CatalogBrowserComponent, CatalogItemType, CatalogLibaryComponent, CatalogService, ClusterDataSource, ConfigFileToGeoDBService, ConfirmationPopupComponent, CoordinatesReverseSearchSource, CoordinatesReverseSearchSourceFactory, CoordinatesSearchResultFormatter, CoordinatesUnit, CsvSeparator, DDtoDMS, DataService, DataSource, DataSourceService, DirectionRelativePositionType, DirectionSourceKind, DirectionsButtonsComponent, DirectionsComponent, DirectionsFormat, DirectionsInputsComponent, DirectionsResultsComponent, DirectionsService, DirectionsSource, DirectionsType, DownloadButtonComponent, DownloadService, DrawComponent, DrawControl, DrawIconService, DrawStyleService, DropGeoFileDirective, EditionWorkspace, EditionWorkspaceService, EsriStyleGenerator, ExportButtonComponent, ExportError, ExportFormat, ExportFormatLegacy, ExportInvalidFileError, ExportNothingToExportError, ExportService, FEATURE, FEATURE_DETAILS_DIRECTIVES, FEATURE_DIRECTIVES, FILTER_DIRECTIVES, FeatureDataSource, FeatureDetailsComponent, FeatureDetailsDirective, FeatureFormComponent, FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreLoadingStrategy, FeatureStoreSearchIndexStrategy, FeatureStoreSelectionStrategy, FeatureWorkspace, FeatureWorkspaceService, FilterableDataSourcePipe, GEOMETRY_FORM_FIELD_DIRECTIVES, GeoDBService, GeoNetworkService, GeoPropertiesStrategy, GeolocateButtonComponent, GeolocationOverlayType, GeometryFormFieldComponent, GeometryFormFieldInputComponent, GeometrySliceError, GeometrySliceLineStringError, GeometrySliceMultiPolygonError, GeometrySliceTooManyIntersectionError, GeometryType, GoogleLinks, HomeExtentButtonComponent, HoverFeatureDirective, IChercheReverseSearchSource, IChercheSearchResultFormatter, IChercheSearchSource, ILayerSearchResultFormatter, ILayerSearchSource, IMPORT_EXPORT_DIRECTIVES, IgoCatalogBrowserModule, IgoCatalogLibraryModule, IgoCatalogModule, IgoConfirmationPopupModule, IgoDirectionsModule, IgoDownloadModule, IgoDrawModule, IgoDrawingToolModule, IgoFeatureDetailsModule, IgoFeatureFormModule, IgoFeatureModule, IgoFilterModule, IgoGeoModule, IgoGeoWorkspaceModule, IgoGeometryFormFieldModule, IgoGeometryModule, IgoHttpParameterCodec, IgoImportExportModule, IgoLayerModule, IgoMap, IgoMapModule, IgoMeasureModule, IgoMeasurerModule, IgoMetadataModule, IgoOgcFilterModule, IgoPrintModule, IgoQueryModule, IgoSearchBarModule, IgoSearchModule, IgoSearchResultsModule, IgoSearchSelectorModule, IgoSearchSettingsModule, IgoStyleListModule, IgoStyleModule, IgoToastModule, IgoWktModule, IgoWorkspaceSelectorModule, IgoWorkspaceUpdatorModule, ImageArcGISRestDataSource, ImageLayer, ImageWatcher, ImportError, ImportExportComponent, ImportInvalidFileError, ImportNothingToImportError, ImportOgreServerError, ImportSRSError, ImportService, ImportSizeError, ImportUnreadableFileError, InfoSectionComponent, InsertSourceInsertDBEnum, LAYER, LAYER_DIRECTIVES, LabelType, LaneType, Layer, LayerBase, LayerController, LayerDBService, LayerGroup, LayerGroupBase, LayerGroupComponent, LayerItemComponent, LayerLegendComponent, LayerLegendItemComponent, LayerLegendListBindingDirective, LayerLegendListComponent, LayerListComponent, LayerListControlsEnum, LayerListToolComponent, LayerListToolService, LayerSearchComponent, LayerService, LayerUnavailableComponent, LayerUnavailableListComponent, LayerViewerBottomActionsComponent, LayerViewerComponent, LayerVisibilityButtonComponent, Linked, LinkedProperties, MAP_DIRECTIVES, MEASURER_DIRECTIVES, MEASURE_UNIT_AUTO, METADATA_DIRECTIVES, MVTDataSource, ManeuverModifier, ManeuverType, MapBase, 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, PointerPositionDirective, PrintComponent, PrintFormComponent, PrintLegendPosition, PrintOrientation, PrintOutputFormat, PrintPaperFormat, PrintResolution, PrintSaveImageFormat, PrintService, ProjectionService, PropertyTypeDetectorService, ProposalType, QueryDirective, QueryFormat, QueryFormatMimeType, QueryHtmlTarget, QuerySearchSource, QueryService, ResponseType, RotationButtonComponent, RoutesFeatureStore, SEARCH_DIRECTIVES, SEARCH_RESULTS_DIRECTIVES, SEARCH_TYPES, STYLELIST_OPTIONS, SearchBarComponent, SearchPointerSummaryDirective, SearchResultAddButtonComponent, SearchResultMode, SearchResultsComponent, SearchSelectorComponent, SearchService, SearchSettingsComponent, SearchSource, SearchSourceKind, SearchSourceService, SliceControl, SourceDirectionsType, SpatialFilterItemComponent, SpatialFilterItemType, SpatialFilterListComponent, SpatialFilterQueryType, SpatialFilterService, SpatialFilterType, SpatialFilterTypeComponent, StepsFeatureStore, StopsFeatureStore, StopsStore, StoredQueriesReverseSearchSource, StoredQueriesSearchSource, StyleListService, StyleModalDrawingComponent, StyleModalLayerButtonComponent, StyleModalLayerComponent, 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, WorkspaceSearchSource, WorkspaceSelectorDirective, WorkspaceUpdatorDirective, XYZDataSource, ZoomButtonComponent, addLayerAndFeaturesStyledToMap, addLayerAndFeaturesToMap, addLinearRingToOlPolygon, addOrRemoveLayer, addRouteToRoutesFeatureStore, addStopToStopsFeatureStore, addStopToStore, buildUrl, cadastreSearchSourceFactory, checkWfsParams, clearOlGeometryMidpoints, computeBestAreaUnit, computeBestLengthUnit, computeLayerTitleFromFile, computeMVTOptionsOnHover, computeOlFeatureExtent, computeOlFeaturesDiff, computeOlFeaturesExtent, computeProjectionsConstraints, computeRelativePosition, computeStopsPosition, computeTermSimilarity, convertDDToDMS, createDefaultTileGrid, createDrawHoleInteractionStyle, createDrawInteractionStyle, createFilterInMapExtentOrResolutionStrategy, createInteractionStyle, createMeasureInteractionStyle, createMeasureLayerStyle, createOlTooltipAtPoint, createOlTooltipDrawAtPoint, createOverlayDefaultStyle, createOverlayLayer, createOverlayLayerStyle, createOverlayMarkerStyle, createTableTemplate, ctrlKeyDown, defaultCoordinatesSearchResultFormatterFactory, defaultEpsg, defaultFieldNameGeometry, defaultIChercheSearchResultFormatterFactory, defaultMaxFeatures, defaultWfsVersion, detectFileEPSG, directionsStyle, entitiesToRowData, exportToCSV, featureFromOl, featureRandomStyle, featureRandomStyleFunction, featureToOl, featureToSearchResult, featuresAreOutOfView, featuresAreTooDeepInView, findDiff, findLayerByLinkId, formatDistance, formatDuration, formatMeasure, formatScale, formatStep, formatWFSQueryString, generateArcgisRestIdFromSourceOptions, generateFeatureIdFromSourceOptions, generateId, generateIdFromSourceOptions, generateWMSIdFromSourceOptions, generateWMTSIdFromSourceOptions, generateWfsIdFromSourceOptions, generateXYZIdFromSourceOptions, getAllChildLayersByDeletion, getAllChildLayersByProperty, getCommonVectorSelectedStyle, getCommonVectorStyle, getFileExtension, getFormatFromOptions, getGeoServiceAction, getLayersByDeletion, 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, hoverFeatureMarkerStyle, ichercheReverseSearchSourceFactory, ichercheSearchSourceFactory, ilayerSearchResultFormatterFactory, ilayerSearchSourceFactory, initRoutesFeatureStore, initStepsFeatureStore, initStopsFeatureStore, isBaseLayer, isBaseLayerLinked, isCsvExport, isLayerGroup, isLayerGroupOptions, isLayerItem, isLayerItemOptions, isLayerLinked, isLayerLinkedOptions, isLayerLinkedTogether, isLinkMaster, isSaveableLayer, jsonRegex, layerFeatureIsQueryable, layerIsQueryable, lonLatConversion, mapExtentStrategyActiveToolTip, measureOlGeometry, measureOlGeometryArea, measureOlGeometryLength, metersToFeet, metersToKilometers, metersToMiles, metersToUnit, moveToOlFeatures, mtmZoneFromLonLat, noElementSelected, nominatimSearchSourceFactory, ogcFilterWidgetFactory, olLayerFeatureIsQueryable, olLayerIsQueryable, olStyleToBasicIgoStyle, optionsApiFactory, osrmDirectionsSourcesFactory, pointerPositionSummaryMarkerStyle, provideCadastreSearchSource, provideCoordinatesReverseSearchSource, provideDefaultCoordinatesSearchResultFormatter, provideDefaultIChercheSearchResultFormatter, provideDirection, provideIChercheReverseSearchSource, provideIChercheSearchSource, provideILayerSearchResultFormatter, provideILayerSearchSource, provideNominatimSearchSource, provideOffline, provideOgcFilterWidget, provideOptionsApi, provideOsrmDirectionsSource, provideQuerySearchSource, provideSearch, provideSearchSourceService, provideStoredQueriesReverseSearchSource, provideStoredQueriesSearchSource, provideStyleListLoader, provideStyleListOptions, provideWorkspaceSearchSource, querySearchSourceFactory, removeStopFromStore, renderFeatureFromOl, roundCoordTo, roundCoordToString, scaleExtent, searchSourceServiceFactory, setRowsInMapExtent, setSelectedOnly, sliceOlGeometry, sliceOlPolygon, sortLayersByZindex, sourceCanReverseSearch, sourceCanReverseSearchAsSummary, sourceCanSearch, squareMetersToAcres, squareMetersToHectares, squareMetersToSquareFeet, squareMetersToSquareKilometers, squareMetersToSquareMiles, squareMetersToUnit, standardizeUrl, storedqueriesReverseSearchSourceFactory, storedqueriesSearchSourceFactory, stringToLonLat, translateManeuverBearing, translateManeuverModifier, tryAddLoadingStrategy, tryAddSelectionStrategy, tryBindStoreLayer, updateOlGeometryCenter, updateOlGeometryMidpoints, updateOlTooltipAtCenter, updateOlTooltipDrawAtCenter, updateOlTooltipsAtMidpoints, updateOlTooltipsDrawAtMidpoints, updateStoreSorting, utmZoneFromLonLat, viewStatesAreEqual, withCadastreSource, withCoordinatesReverseSource, withIChercheReverseSource, withIChercheSource, withILayerSource, withNominatimSource, withOsrmSource, withStoredQueriesReverseSource, withStoredQueriesSource, withWorkspaceSource, workspaceSearchSourceFactory, zoneMtm, zoneUtm };
42916
+ export { AddCatalogDialogComponent, ArcGISRestCapabilitiesLayerTypes, ArcGISRestDataSource, BaseLayersSwitcherComponent, CATALOG_DIRECTIVES, CATALOG_LIBRARY_DIRECTIVES, CadastreSearchSource, CapabilitiesService, CartoDataSource, Catalog, CatalogBrowserComponent, CatalogItemType, CatalogLibaryComponent, CatalogService, ClusterDataSource, ConfigFileToGeoDBService, ConfirmationPopupComponent, CoordinatesReverseSearchSource, CoordinatesReverseSearchSourceFactory, CoordinatesSearchResultFormatter, CoordinatesUnit, CsvSeparator, DDtoDMS, DataService, DataSource, DataSourceService, DirectionRelativePositionType, DirectionSourceKind, DirectionsButtonsComponent, DirectionsComponent, DirectionsFormat, DirectionsInputsComponent, DirectionsResultsComponent, DirectionsService, DirectionsSource, DirectionsType, DownloadButtonComponent, DownloadService, DrawComponent, DrawControl, DrawIconService, DrawStyleService, DropGeoFileDirective, EditionWorkspace, EditionWorkspaceService, EsriStyleGenerator, ExportButtonComponent, ExportError, ExportFormat, ExportFormatLegacy, ExportInvalidFileError, ExportNothingToExportError, ExportService, FEATURE, FEATURE_DETAILS_DIRECTIVES, FEATURE_DIRECTIVES, FILTER_DIRECTIVES, FeatureDataSource, FeatureDetailsComponent, FeatureDetailsDirective, FeatureFormComponent, FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreLoadingStrategy, FeatureStoreSearchIndexStrategy, FeatureStoreSelectionStrategy, FeatureWorkspace, FeatureWorkspaceService, FilterableDataSourcePipe, GEOMETRY_FORM_FIELD_DIRECTIVES, GeoDBService, GeoNetworkService, GeoPropertiesStrategy, GeolocateButtonComponent, GeolocationOverlayType, GeometryFormFieldComponent, GeometryFormFieldInputComponent, GeometrySliceError, GeometrySliceLineStringError, GeometrySliceMultiPolygonError, GeometrySliceTooManyIntersectionError, GeometryType, GoogleLinks, HomeExtentButtonComponent, HoverFeatureDirective, IChercheReverseSearchSource, IChercheSearchResultFormatter, IChercheSearchSource, ILayerSearchResultFormatter, ILayerSearchSource, IMPORT_EXPORT_DIRECTIVES, IgoCatalogBrowserModule, IgoCatalogLibraryModule, IgoCatalogModule, IgoConfirmationPopupModule, IgoDirectionsModule, IgoDownloadModule, IgoDrawModule, IgoDrawingToolModule, IgoFeatureDetailsModule, IgoFeatureFormModule, IgoFeatureModule, IgoFilterModule, IgoGeoModule, IgoGeoWorkspaceModule, IgoGeometryFormFieldModule, IgoGeometryModule, IgoHttpParameterCodec, IgoImportExportModule, IgoLayerModule, IgoMap, IgoMapModule, IgoMeasureModule, IgoMeasurerModule, IgoMetadataModule, IgoOgcFilterModule, IgoPrintModule, IgoQueryModule, IgoSearchBarModule, IgoSearchModule, IgoSearchResultsModule, IgoSearchSelectorModule, IgoSearchSettingsModule, IgoStyleListModule, IgoStyleModule, IgoToastModule, IgoWktModule, IgoWorkspaceSelectorModule, IgoWorkspaceUpdatorModule, ImageArcGISRestDataSource, ImageLayer, ImageWatcher, ImportError, ImportExportComponent, ImportInvalidFileError, ImportNothingToImportError, ImportOgreServerError, ImportSRSError, ImportService, ImportSizeError, ImportUnreadableFileError, InfoSectionComponent, InsertSourceInsertDBEnum, LAYER, LAYER_DIRECTIVES, LabelType, LaneType, Layer, LayerBase, LayerController, LayerDBService, LayerGroup, LayerGroupBase, LayerGroupComponent, LayerItemComponent, LayerLegendComponent, LayerLegendItemComponent, LayerLegendListBindingDirective, LayerLegendListComponent, LayerListComponent, LayerListControlsEnum, LayerListToolComponent, LayerListToolService, LayerSearchComponent, LayerService, LayerUnavailableComponent, LayerUnavailableListComponent, LayerViewerBottomActionsComponent, LayerViewerComponent, LayerVisibilityButtonComponent, Linked, LinkedProperties, MAP_DIRECTIVES, MEASURER_DIRECTIVES, MEASURE_UNIT_AUTO, METADATA_DIRECTIVES, MVTDataSource, ManeuverModifier, ManeuverType, MapBase, 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, OgcSelectorFields, OlDragSelectInteraction, OptionsApiService, OptionsService, OsmLinks, OsrmDirectionsSource, Overlay, OverlayAction, PointerPositionDirective, PrintComponent, PrintFormComponent, PrintLegendPosition, PrintOrientation, PrintOutputFormat, PrintPaperFormat, PrintResolution, PrintSaveImageFormat, PrintService, ProjectionService, PropertyTypeDetectorService, ProposalType, QueryDirective, QueryFormat, QueryFormatMimeType, QueryHtmlTarget, QuerySearchSource, QueryService, ResponseType, RotationButtonComponent, RoutesFeatureStore, SEARCH_DIRECTIVES, SEARCH_RESULTS_DIRECTIVES, SEARCH_TYPES, STYLELIST_OPTIONS, SearchBarComponent, SearchPointerSummaryDirective, SearchResultAddButtonComponent, SearchResultMode, SearchResultsComponent, SearchSelectorComponent, SearchService, SearchSettingsComponent, SearchSource, SearchSourceKind, SearchSourceService, SliceControl, SourceDirectionsType, SpatialFilterItemComponent, SpatialFilterItemType, SpatialFilterListComponent, SpatialFilterQueryType, SpatialFilterService, SpatialFilterType, SpatialFilterTypeComponent, StepsFeatureStore, StopsFeatureStore, StopsStore, StoredQueriesReverseSearchSource, StoredQueriesSearchSource, StyleListService, StyleModalDrawingComponent, StyleModalLayerButtonComponent, StyleModalLayerComponent, 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, WorkspaceSearchSource, WorkspaceSelectorDirective, WorkspaceUpdatorDirective, XYZDataSource, ZoomButtonComponent, addLayerAndFeaturesStyledToMap, addLayerAndFeaturesToMap, addLinearRingToOlPolygon, addOrRemoveLayer, addRouteToRoutesFeatureStore, addStopToStopsFeatureStore, addStopToStore, buildUrl, cadastreSearchSourceFactory, checkWfsParams, clearOlGeometryMidpoints, computeBestAreaUnit, computeBestLengthUnit, computeLayerTitleFromFile, computeMVTOptionsOnHover, computeOlFeatureExtent, computeOlFeaturesDiff, computeOlFeaturesExtent, computeProjectionsConstraints, computeRelativePosition, computeStopsPosition, computeTermSimilarity, convertDDToDMS, createDefaultTileGrid, createDrawHoleInteractionStyle, createDrawInteractionStyle, createFilterInMapExtentOrResolutionStrategy, createInteractionStyle, createMeasureInteractionStyle, createMeasureLayerStyle, createOlTooltipAtPoint, createOlTooltipDrawAtPoint, createOverlayDefaultStyle, createOverlayLayer, createOverlayLayerStyle, createOverlayMarkerStyle, createTableTemplate, ctrlKeyDown, defaultCoordinatesSearchResultFormatterFactory, defaultEpsg, defaultFieldNameGeometry, defaultIChercheSearchResultFormatterFactory, defaultMaxFeatures, defaultWfsVersion, detectFileEPSG, directionsStyle, entitiesToRowData, exportToCSV, featureFromOl, featureRandomStyle, featureRandomStyleFunction, featureToOl, featureToSearchResult, featuresAreOutOfView, featuresAreTooDeepInView, findDiff, findLayerByLinkId, formatDistance, formatDuration, formatMeasure, formatScale, formatStep, formatWFSQueryString, generateArcgisRestIdFromSourceOptions, generateFeatureIdFromSourceOptions, generateId, generateIdFromSourceOptions, generateWMSIdFromSourceOptions, generateWMTSIdFromSourceOptions, generateWfsIdFromSourceOptions, generateXYZIdFromSourceOptions, getAllChildLayersByDeletion, getAllChildLayersByProperty, getCommonVectorSelectedStyle, getCommonVectorStyle, getFileExtension, getFormatFromOptions, getGeoServiceAction, getLayersByDeletion, getLayersLegends, getLinkedLayersOptions, getMousePositionFromOlGeometryEvent, getOlTooltipAtCenter, getOlTooltipsAtMidpoints, getResolutionFromScale, getRootParentByDeletion, getRootParentByProperty, getRowsInMapExtent, getSaveableOgcParams, getScaleFromResolution, getSelectedOnly, getTooltipsOfOlGeometry, gmlRegex, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleLayerPropertyChange, handleNothingToExportError, handleNothingToImportError, handleOgreServerImportError, handleSRSImportError, handleSizeFileImportError, handleUnreadbleFileImportError, hideOlFeature, hoverFeatureMarkerStyle, ichercheReverseSearchSourceFactory, ichercheSearchSourceFactory, ilayerSearchResultFormatterFactory, ilayerSearchSourceFactory, initRoutesFeatureStore, initStepsFeatureStore, initStopsFeatureStore, isBaseLayer, isBaseLayerLinked, isCsvExport, isLayerGroup, isLayerGroupOptions, isLayerItem, isLayerItemOptions, isLayerLinked, isLayerLinkedOptions, isLayerLinkedTogether, isLinkMaster, isSaveableLayer, jsonRegex, layerFeatureIsQueryable, layerIsQueryable, lonLatConversion, mapExtentStrategyActiveToolTip, measureOlGeometry, measureOlGeometryArea, measureOlGeometryLength, metersToFeet, metersToKilometers, metersToMiles, metersToUnit, moveToOlFeatures, mtmZoneFromLonLat, noElementSelected, nominatimSearchSourceFactory, ogcFilterWidgetFactory, olLayerFeatureIsQueryable, olLayerIsQueryable, olStyleToBasicIgoStyle, optionsApiFactory, osrmDirectionsSourcesFactory, pointerPositionSummaryMarkerStyle, provideCadastreSearchSource, provideCoordinatesReverseSearchSource, provideDefaultCoordinatesSearchResultFormatter, provideDefaultIChercheSearchResultFormatter, provideDirection, provideIChercheReverseSearchSource, provideIChercheSearchSource, provideILayerSearchResultFormatter, provideILayerSearchSource, provideNominatimSearchSource, provideOffline, provideOgcFilterWidget, provideOptionsApi, provideOsrmDirectionsSource, provideQuerySearchSource, provideSearch, provideSearchSourceService, provideStoredQueriesReverseSearchSource, provideStoredQueriesSearchSource, provideStyleListLoader, provideStyleListOptions, provideWorkspaceSearchSource, querySearchSourceFactory, removeStopFromStore, renderFeatureFromOl, roundCoordTo, roundCoordToString, scaleExtent, searchSourceServiceFactory, setRowsInMapExtent, setSelectedOnly, sliceOlGeometry, sliceOlPolygon, sortLayersByZindex, sourceCanReverseSearch, sourceCanReverseSearchAsSummary, sourceCanSearch, squareMetersToAcres, squareMetersToHectares, squareMetersToSquareFeet, squareMetersToSquareKilometers, squareMetersToSquareMiles, squareMetersToUnit, standardizeUrl, storedqueriesReverseSearchSourceFactory, storedqueriesSearchSourceFactory, stringToLonLat, translateManeuverBearing, translateManeuverModifier, tryAddLoadingStrategy, tryAddSelectionStrategy, tryBindStoreLayer, updateOlGeometryCenter, updateOlGeometryMidpoints, updateOlTooltipAtCenter, updateOlTooltipDrawAtCenter, updateOlTooltipsAtMidpoints, updateOlTooltipsDrawAtMidpoints, updateStoreSorting, utmZoneFromLonLat, viewStatesAreEqual, withCadastreSource, withCoordinatesReverseSource, withIChercheReverseSource, withIChercheSource, withILayerSource, withNominatimSource, withOsrmSource, withStoredQueriesReverseSource, withStoredQueriesSource, withWorkspaceSource, workspaceSearchSourceFactory, zoneMtm, zoneUtm };
42637
42917
  //# sourceMappingURL=igo2-geo.mjs.map