@yuuvis/client-core 2.1.0 → 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.
@@ -400,6 +400,7 @@ var ClassificationPrefix;
400
400
  class Utils {
401
401
  static { this.DEFAULT_RANGE_TIME_V1 = 'T00:00:00.000'; }
402
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
403
404
  static optionsToURLParams(options) {
404
405
  if (options) {
405
406
  const searchParams = new URLSearchParams();
@@ -771,6 +772,26 @@ class Utils {
771
772
  static isValidDate(value) {
772
773
  return value instanceof Date && !isNaN(value.getTime());
773
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
+ }
774
795
  }
775
796
 
776
797
  // enumeration of API endpoints provided by the backend
@@ -2036,46 +2057,65 @@ class SearchService {
2036
2057
  };
2037
2058
  }
2038
2059
  #dateRangeValueToSearchFilter(rv, property) {
2039
- const v1 = (Utils.isValidDate(rv.firstValue) ? rv.firstValue : new Date(rv.firstValue)).toISOString();
2040
- const v2 = rv.secondValue ? (Utils.isValidDate(rv.secondValue) ? rv.secondValue : new Date(rv.secondValue)).toISOString() : undefined;
2041
- let filter;
2060
+ const v1 = rv.firstValue;
2061
+ const v2 = rv.secondValue;
2042
2062
  switch (rv.operator) {
2043
2063
  case Operator.EQUAL: {
2044
- filter = {
2064
+ return {
2045
2065
  f: property,
2046
2066
  o: Operator.INTERVAL_INCLUDE_BOTH,
2047
- v1: v1.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1,
2048
- v2: v1.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2
2067
+ v1: this.#dateToISOString(v1, 'start'),
2068
+ v2: this.#dateToISOString(v1, 'end')
2049
2069
  };
2050
- break;
2051
2070
  }
2052
2071
  case Operator.GREATER_OR_EQUAL: {
2053
- filter = {
2072
+ return {
2054
2073
  f: property,
2055
2074
  o: rv.operator,
2056
- v1: v1.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1
2075
+ v1: this.#dateToISOString(v1)
2057
2076
  };
2058
- break;
2059
2077
  }
2060
2078
  case Operator.LESS_OR_EQUAL: {
2061
- filter = {
2079
+ return {
2062
2080
  f: property,
2063
2081
  o: rv.operator,
2064
- v1: v1.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2
2082
+ v1: this.#dateToISOString(v1, 'end')
2065
2083
  };
2066
- break;
2067
2084
  }
2068
2085
  case Operator.INTERVAL_INCLUDE_BOTH: {
2069
- filter = {
2086
+ return {
2070
2087
  f: property,
2071
2088
  o: rv.operator,
2072
- v1: v1.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V1,
2073
- v2: v2.split('T')[0] + Utils.DEFAULT_RANGE_TIME_V2
2089
+ v1: this.#dateToISOString(v1, 'start'),
2090
+ v2: v2 ? this.#dateToISOString(v2, 'end') : '',
2074
2091
  };
2075
- break;
2076
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;
2077
2118
  }
2078
- return filter;
2079
2119
  }
2080
2120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: SearchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2081
2121
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: SearchService, providedIn: 'root' }); }
@@ -2584,6 +2624,15 @@ class ObjectConfigService {
2584
2624
  });
2585
2625
  }
2586
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
+ }
2587
2636
  #getRegisteredDefaults(bucket) {
2588
2637
  if (bucket) {
2589
2638
  const defaultTileBucket = this.#registeredDefaultObjectConfigs.buckets.find((b) => b.id === bucket);
@@ -2606,12 +2655,19 @@ class ObjectConfigService {
2606
2655
  const oc = otr[type.id];
2607
2656
  // return oc || this.#getRegisteredDefaults(bucket)[type.id];
2608
2657
  // override icons by APP_SCHEMA-icons: temporary solution. Todo: remove when handling of custom svg-icons is clear!
2609
- const result = oc || this.#getRegisteredDefaults(bucket)[type.id];
2610
- if (result.icon)
2611
- 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;
2612
2661
  return result;
2613
2662
  }
2614
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) {
2615
2671
  if (!this.#objectConfigs)
2616
2672
  this.#objectConfigs = {
2617
2673
  main: {},
@@ -2621,11 +2677,27 @@ class ObjectConfigService {
2621
2677
  // does bucket exist?
2622
2678
  const tileBucketIdx = this.#objectConfigs.buckets.findIndex((b) => b.id === bucket);
2623
2679
  if (tileBucketIdx !== -1) {
2624
- 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
+ });
2625
2689
  }
2626
2690
  else {
2627
2691
  const configs = {};
2628
- 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
+ });
2629
2701
  this.#objectConfigs.buckets.push({
2630
2702
  id: bucket,
2631
2703
  configs
@@ -2633,10 +2705,17 @@ class ObjectConfigService {
2633
2705
  }
2634
2706
  }
2635
2707
  else {
2636
- 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
+ });
2637
2717
  }
2638
2718
  this.#objectConfigsSource.next(this.#objectConfigs);
2639
- return this.#user.saveObjectConfig(this.#objectConfigs);
2640
2719
  }
2641
2720
  getDefaultConfig(objectTypeID) {
2642
2721
  return this.#defaultObjectConfigs[objectTypeID];