@yuuvis/client-core 2.0.15 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -398,6 +398,9 @@ var ClassificationPrefix;
398
398
  })(ClassificationPrefix || (ClassificationPrefix = {}));
399
399
 
400
400
  class Utils {
401
+ static { this.DEFAULT_RANGE_TIME_V1 = 'T00:00:00.000'; }
402
+ static { this.DEFAULT_RANGE_TIME_V2 = 'T23:59:59.000'; }
403
+ static { this.DEFAULT_TIME_OFFSET_V2 = (60000 * 60 * 24) - 1; } // T+23:59:59:999
401
404
  static optionsToURLParams(options) {
402
405
  if (options) {
403
406
  const searchParams = new URLSearchParams();
@@ -769,6 +772,26 @@ class Utils {
769
772
  static isValidDate(value) {
770
773
  return value instanceof Date && !isNaN(value.getTime());
771
774
  }
775
+ static getDateFrom(value) {
776
+ if (!value)
777
+ return undefined;
778
+ else if (value instanceof Date && this.isValidDate(value))
779
+ return value;
780
+ else {
781
+ const parsed = new Date(value);
782
+ return this.isValidDate(parsed) ? parsed : undefined;
783
+ }
784
+ }
785
+ static getDateRangeFrom(dateRange) {
786
+ const firstValue = this.getDateFrom(dateRange.firstValue);
787
+ if (!firstValue)
788
+ return undefined;
789
+ return {
790
+ ...dateRange,
791
+ firstValue,
792
+ secondValue: dateRange.secondValue ? this.getDateFrom(dateRange.secondValue) : undefined,
793
+ };
794
+ }
772
795
  }
773
796
 
774
797
  // enumeration of API endpoints provided by the backend
@@ -2034,46 +2057,65 @@ class SearchService {
2034
2057
  };
2035
2058
  }
2036
2059
  #dateRangeValueToSearchFilter(rv, property) {
2037
- const v1 = (Utils.isValidDate(rv.firstValue) ? rv.firstValue : new Date(rv.firstValue)).toISOString();
2038
- const v2 = rv.secondValue ? (Utils.isValidDate(rv.secondValue) ? rv.secondValue : new Date(rv.secondValue)).toISOString() : undefined;
2039
- let filter;
2060
+ const v1 = rv.firstValue;
2061
+ const v2 = rv.secondValue;
2040
2062
  switch (rv.operator) {
2041
2063
  case Operator.EQUAL: {
2042
- filter = {
2064
+ return {
2043
2065
  f: property,
2044
2066
  o: Operator.INTERVAL_INCLUDE_BOTH,
2045
- v1: v1.split('T')[0] + 'T00:00:00.000',
2046
- v2: v1.split('T')[0] + 'T23:59:59.000'
2067
+ v1: this.#dateToISOString(v1, 'start'),
2068
+ v2: this.#dateToISOString(v1, 'end')
2047
2069
  };
2048
- break;
2049
2070
  }
2050
2071
  case Operator.GREATER_OR_EQUAL: {
2051
- filter = {
2072
+ return {
2052
2073
  f: property,
2053
2074
  o: rv.operator,
2054
- v1: v1.split('T')[0] + 'T00:00:00.000'
2075
+ v1: this.#dateToISOString(v1)
2055
2076
  };
2056
- break;
2057
2077
  }
2058
2078
  case Operator.LESS_OR_EQUAL: {
2059
- filter = {
2079
+ return {
2060
2080
  f: property,
2061
2081
  o: rv.operator,
2062
- v1: v1.split('T')[0] + 'T23:59:59.000'
2082
+ v1: this.#dateToISOString(v1, 'end')
2063
2083
  };
2064
- break;
2065
2084
  }
2066
2085
  case Operator.INTERVAL_INCLUDE_BOTH: {
2067
- filter = {
2086
+ return {
2068
2087
  f: property,
2069
2088
  o: rv.operator,
2070
- v1: v1.split('T')[0] + 'T00:00:00.000',
2071
- v2: v2.split('T')[0] + 'T23:59:59.000'
2089
+ v1: this.#dateToISOString(v1, 'start'),
2090
+ v2: v2 ? this.#dateToISOString(v2, 'end') : '',
2072
2091
  };
2073
- break;
2074
2092
  }
2093
+ default:
2094
+ return undefined;
2095
+ }
2096
+ }
2097
+ /**
2098
+ * Checks if value is a date and retrieves an ISOString representation. Optionally you can determine, if it should be the beginning or the end of a day.
2099
+ *
2100
+ * @param value
2101
+ * @param range
2102
+ * @private
2103
+ */
2104
+ #dateToISOString(value, range = 'start') {
2105
+ const date = typeof value === 'string' ? new Date(value) : value;
2106
+ const offset = Utils.DEFAULT_TIME_OFFSET_V2; // T+23:59:59:999
2107
+ if (!Utils.isValidDate(date))
2108
+ return '';
2109
+ const isoDateString = date.toISOString();
2110
+ const isoDateStringWithOffset = new Date(date.getTime() + offset).toISOString();
2111
+ switch (range) {
2112
+ case 'start':
2113
+ return isoDateString;
2114
+ case 'end':
2115
+ return isoDateStringWithOffset;
2116
+ default:
2117
+ return isoDateString;
2075
2118
  }
2076
- return filter;
2077
2119
  }
2078
2120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2079
2121
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: SearchService, providedIn: 'root' }); }
@@ -2582,6 +2624,15 @@ class ObjectConfigService {
2582
2624
  });
2583
2625
  }
2584
2626
  }
2627
+ getRegisteredDefault(objectTypeId, bucket) {
2628
+ if (bucket) {
2629
+ const b = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);
2630
+ return b ? b.configs[objectTypeId] : undefined;
2631
+ }
2632
+ else {
2633
+ return this.#registeredDefaultObjectConfigs.main[objectTypeId];
2634
+ }
2635
+ }
2585
2636
  #getRegisteredDefaults(bucket) {
2586
2637
  if (bucket) {
2587
2638
  const defaultTileBucket = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);
@@ -2604,12 +2655,19 @@ class ObjectConfigService {
2604
2655
  const oc = otr[type.id];
2605
2656
  // return oc || this.#getRegisteredDefaults(bucket)[type.id];
2606
2657
  // override icons by APP_SCHEMA-icons: temporary solution. Todo: remove when handling of custom svg-icons is clear!
2607
- const result = oc || this.#getRegisteredDefaults(bucket)[type.id];
2608
- if (result.icon)
2609
- result.icon = type.icon ? { svg: type.icon } : undefined;
2658
+ const result = oc || this.#getRegisteredDefaults(bucket)[type.id] || this.#defaultObjectConfigs[type.id];
2659
+ if (result?.icon)
2660
+ result.icon = type.icon ? { svg: type.icon } : result.icon;
2610
2661
  return result;
2611
2662
  }
2612
2663
  saveObjectConfig(type, config, bucket) {
2664
+ return this.saveObjectConfigs({ [type.id]: config }, bucket);
2665
+ }
2666
+ saveObjectConfigs(configs, bucket) {
2667
+ this.#updateObjectConfig(configs, bucket);
2668
+ return this.#user.saveObjectConfig(this.#objectConfigs);
2669
+ }
2670
+ #updateObjectConfig(configs, bucket) {
2613
2671
  if (!this.#objectConfigs)
2614
2672
  this.#objectConfigs = {
2615
2673
  main: {},
@@ -2619,11 +2677,27 @@ class ObjectConfigService {
2619
2677
  // does bucket exist?
2620
2678
  const tileBucketIdx = this.#objectConfigs.buckets.findIndex((b) => b.id === bucket);
2621
2679
  if (tileBucketIdx !== -1) {
2622
- this.#objectConfigs.buckets[tileBucketIdx].configs[type.id] = config;
2680
+ Object.keys(configs).forEach((objectTypeId) => {
2681
+ const config = configs[objectTypeId];
2682
+ if (config) {
2683
+ this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId] = config;
2684
+ }
2685
+ else {
2686
+ delete this.#objectConfigs.buckets[tileBucketIdx].configs[objectTypeId];
2687
+ }
2688
+ });
2623
2689
  }
2624
2690
  else {
2625
2691
  const configs = {};
2626
- configs[type.id] = config;
2692
+ Object.keys(configs).forEach((objectTypeId) => {
2693
+ const config = configs[objectTypeId];
2694
+ if (config) {
2695
+ configs[objectTypeId] = config;
2696
+ }
2697
+ else {
2698
+ delete configs[objectTypeId];
2699
+ }
2700
+ });
2627
2701
  this.#objectConfigs.buckets.push({
2628
2702
  id: bucket,
2629
2703
  configs
@@ -2631,10 +2705,17 @@ class ObjectConfigService {
2631
2705
  }
2632
2706
  }
2633
2707
  else {
2634
- this.#objectConfigs.main[type.id] = config;
2708
+ Object.keys(configs).forEach((objectTypeId) => {
2709
+ const config = configs[objectTypeId];
2710
+ if (config) {
2711
+ this.#objectConfigs.main[objectTypeId] = config;
2712
+ }
2713
+ else {
2714
+ delete this.#objectConfigs.main[objectTypeId];
2715
+ }
2716
+ });
2635
2717
  }
2636
2718
  this.#objectConfigsSource.next(this.#objectConfigs);
2637
- return this.#user.saveObjectConfig(this.#objectConfigs);
2638
2719
  }
2639
2720
  getDefaultConfig(objectTypeID) {
2640
2721
  return this.#defaultObjectConfigs[objectTypeID];
@@ -4539,8 +4620,8 @@ class SearchUtils {
4539
4620
  static getMatchingDateRange(rangeValue) {
4540
4621
  return SearchUtils.dateRanges.find((dateRange) => {
4541
4622
  const { start, end } = SearchUtils.dateRangeStartEnd(dateRange);
4542
- return (rangeValue.firstValue === start.toISOString().split('T')[0] + 'T00:00:00.000' &&
4543
- rangeValue.secondValue === end.toISOString().split('T')[0] + 'T23:59:59.000');
4623
+ return (rangeValue.firstValue === start.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1 &&
4624
+ rangeValue.secondValue === end.toISOString().split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2);
4544
4625
  });
4545
4626
  }
4546
4627
  // Files size ranges