@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
76 lines • 11.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { INTERVAL_VALUES, TimeSpanInMs } from '@c8y/ngx-components/interval-picker';
import { AGGREGATION_VALUES } from './aggregation.model';
import * as i0 from "@angular/core";
export class AggregationService {
constructor() {
this.AGGREGATION_MAP = {
[INTERVAL_VALUES.minutes]: AGGREGATION_VALUES.none,
[INTERVAL_VALUES.hours]: AGGREGATION_VALUES.minutely,
[INTERVAL_VALUES.days]: AGGREGATION_VALUES.hourly
};
}
/**
* Determines which aggregation options should be disabled based on the time range between two dates.
* It calculates the time difference and checks against predefined time spans to decide if daily,
* hourly, or minutely aggregations should be disabled.
*
* @param dateFrom - The start date of the time range, as a `Date` object or an ISO date string.
* @param dateTo - The end date of the time range, as a `Date` object or an ISO date string.
* @returns An `AggregationOptionStatus` object indicating the disabled state of each aggregation option.
*/
getDisabledAggregationOptions(dateFrom, dateTo) {
const fromDate = typeof dateFrom === 'string' ? new Date(dateFrom) : dateFrom;
const toDate = typeof dateTo === 'string' ? new Date(dateTo) : dateTo;
const timeRangeInMs = toDate.valueOf() - fromDate.valueOf();
const disabledAggregationOptions = {};
disabledAggregationOptions[AGGREGATION_VALUES.daily] = timeRangeInMs <= TimeSpanInMs.DAY;
disabledAggregationOptions[AGGREGATION_VALUES.hourly] = timeRangeInMs <= TimeSpanInMs.HOUR;
disabledAggregationOptions[AGGREGATION_VALUES.minutely] = timeRangeInMs <= TimeSpanInMs.MINUTE;
return disabledAggregationOptions;
}
/**
* Determines the new aggregation value based on the current value and disabled options.
*
* Goal is to switch to the next available aggregation option if the current one is disabled.
* - If the current option is disabled, sets the control to the first available (non-disabled) option based on the following order:
* - If the current value is `DAILY`, it switches to `HOURLY` if it's not disabled, otherwise to `MINUTELY` if `HOURLY` is also disabled.
* - If the current value is `HOURLY`, it switches to `MINUTELY` if it's not disabled.
* - If all options are disabled, it sets the value to `NONE`.
*
* @param currentValue - The current aggregation option.
* @param disabledOptions - An object containing disabled options.
* @returns The new aggregation option.
*/
determineFirstNewAvailableAggregationValue(currentValue, disabledOptions) {
const { daily, hourly, minutely, none } = AGGREGATION_VALUES;
if (!disabledOptions[currentValue]) {
return currentValue; // Return the current value if it's not disabled
}
if (currentValue === daily) {
return !disabledOptions[hourly] ? hourly : !disabledOptions[minutely] ? minutely : none;
}
if (currentValue === hourly) {
return !disabledOptions[minutely] ? minutely : none;
}
return none; // Fallback to 'none' if all else fails
}
/**
* Determines the aggregation value based on the provided interval.
*
* @param interval - The time range interval.
* @returns The corresponding aggregation value.
*/
determineAggregationValue(interval) {
return this.AGGREGATION_MAP[interval] || AGGREGATION_VALUES.daily;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AggregationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AggregationService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AggregationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYWdncmVnYXRpb24vYWdncmVnYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBWSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUYsT0FBTyxFQUNMLGtCQUFrQixFQUduQixNQUFNLHFCQUFxQixDQUFDOztBQUs3QixNQUFNLE9BQU8sa0JBQWtCO0lBSC9CO1FBSVcsb0JBQWUsR0FBRztZQUN6QixDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxJQUFJO1lBQ2xELENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFFBQVE7WUFDcEQsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsTUFBTTtTQUNsRCxDQUFDO0tBc0VIO0lBcEVDOzs7Ozs7OztPQVFHO0lBQ0gsNkJBQTZCLENBQzNCLFFBQXVCLEVBQ3ZCLE1BQXFCO1FBRXJCLE1BQU0sUUFBUSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDdEUsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUU1RCxNQUFNLDBCQUEwQixHQUE0QixFQUFFLENBQUM7UUFDL0QsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDekYsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDM0YsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFFL0YsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsMENBQTBDLENBQ3hDLFlBQStCLEVBQy9CLGVBQXdDO1FBRXhDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUU3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxZQUFZLENBQUMsQ0FBQyxnREFBZ0Q7UUFDdkUsQ0FBQztRQUVELElBQUksWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFGLENBQUM7UUFFRCxJQUFJLFlBQVksS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUM1QixPQUFPLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsQ0FBQyx1Q0FBdUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQUMsUUFBd0I7UUFDaEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUNwRSxDQUFDOytHQTFFVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW50ZXJ2YWwsIElOVEVSVkFMX1ZBTFVFUywgVGltZVNwYW5Jbk1zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuaW1wb3J0IHtcbiAgQUdHUkVHQVRJT05fVkFMVUVTLFxuICBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgQWdncmVnYXRpb25PcHRpb25TdGF0dXNcbn0gZnJvbSAnLi9hZ2dyZWdhdGlvbi5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uU2VydmljZSB7XG4gIHJlYWRvbmx5IEFHR1JFR0FUSU9OX01BUCA9IHtcbiAgICBbSU5URVJWQUxfVkFMVUVTLm1pbnV0ZXNdOiBBR0dSRUdBVElPTl9WQUxVRVMubm9uZSxcbiAgICBbSU5URVJWQUxfVkFMVUVTLmhvdXJzXTogQUdHUkVHQVRJT05fVkFMVUVTLm1pbnV0ZWx5LFxuICAgIFtJTlRFUlZBTF9WQUxVRVMuZGF5c106IEFHR1JFR0FUSU9OX1ZBTFVFUy5ob3VybHlcbiAgfTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGljaCBhZ2dyZWdhdGlvbiBvcHRpb25zIHNob3VsZCBiZSBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgdGltZSByYW5nZSBiZXR3ZWVuIHR3byBkYXRlcy5cbiAgICogSXQgY2FsY3VsYXRlcyB0aGUgdGltZSBkaWZmZXJlbmNlIGFuZCBjaGVja3MgYWdhaW5zdCBwcmVkZWZpbmVkIHRpbWUgc3BhbnMgdG8gZGVjaWRlIGlmIGRhaWx5LFxuICAgKiBob3VybHksIG9yIG1pbnV0ZWx5IGFnZ3JlZ2F0aW9ucyBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlRnJvbSAtIFRoZSBzdGFydCBkYXRlIG9mIHRoZSB0aW1lIHJhbmdlLCBhcyBhIGBEYXRlYCBvYmplY3Qgb3IgYW4gSVNPIGRhdGUgc3RyaW5nLlxuICAgKiBAcGFyYW0gZGF0ZVRvIC0gVGhlIGVuZCBkYXRlIG9mIHRoZSB0aW1lIHJhbmdlLCBhcyBhIGBEYXRlYCBvYmplY3Qgb3IgYW4gSVNPIGRhdGUgc3RyaW5nLlxuICAgKiBAcmV0dXJucyBBbiBgQWdncmVnYXRpb25PcHRpb25TdGF0dXNgIG9iamVjdCBpbmRpY2F0aW5nIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiBlYWNoIGFnZ3JlZ2F0aW9uIG9wdGlvbi5cbiAgICovXG4gIGdldERpc2FibGVkQWdncmVnYXRpb25PcHRpb25zKFxuICAgIGRhdGVGcm9tOiBEYXRlIHwgc3RyaW5nLFxuICAgIGRhdGVUbzogRGF0ZSB8IHN0cmluZ1xuICApOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1cyB7XG4gICAgY29uc3QgZnJvbURhdGUgPSB0eXBlb2YgZGF0ZUZyb20gPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZGF0ZUZyb20pIDogZGF0ZUZyb207XG4gICAgY29uc3QgdG9EYXRlID0gdHlwZW9mIGRhdGVUbyA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlVG8pIDogZGF0ZVRvO1xuICAgIGNvbnN0IHRpbWVSYW5nZUluTXMgPSB0b0RhdGUudmFsdWVPZigpIC0gZnJvbURhdGUudmFsdWVPZigpO1xuXG4gICAgY29uc3QgZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnM6IEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzID0ge307XG4gICAgZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNbQUdHUkVHQVRJT05fVkFMVUVTLmRhaWx5XSA9IHRpbWVSYW5nZUluTXMgPD0gVGltZVNwYW5Jbk1zLkRBWTtcbiAgICBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc1tBR0dSRUdBVElPTl9WQUxVRVMuaG91cmx5XSA9IHRpbWVSYW5nZUluTXMgPD0gVGltZVNwYW5Jbk1zLkhPVVI7XG4gICAgZGlzYWJsZWRBZ2dyZWdhdGlvbk9wdGlvbnNbQUdHUkVHQVRJT05fVkFMVUVTLm1pbnV0ZWx5XSA9IHRpbWVSYW5nZUluTXMgPD0gVGltZVNwYW5Jbk1zLk1JTlVURTtcblxuICAgIHJldHVybiBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBuZXcgYWdncmVnYXRpb24gdmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGRpc2FibGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEdvYWwgaXMgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBhZ2dyZWdhdGlvbiBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb25lIGlzIGRpc2FibGVkLlxuICAgKiAtIElmIHRoZSBjdXJyZW50IG9wdGlvbiBpcyBkaXNhYmxlZCwgc2V0cyB0aGUgY29udHJvbCB0byB0aGUgZmlyc3QgYXZhaWxhYmxlIChub24tZGlzYWJsZWQpIG9wdGlvbiBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYERBSUxZYCwgaXQgc3dpdGNoZXMgdG8gYEhPVVJMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQsIG90aGVyd2lzZSB0byBgTUlOVVRFTFlgIGlmIGBIT1VSTFlgIGlzIGFsc28gZGlzYWJsZWQuXG4gICAqICAgLSBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBgSE9VUkxZYCwgaXQgc3dpdGNoZXMgdG8gYE1JTlVURUxZYCBpZiBpdCdzIG5vdCBkaXNhYmxlZC5cbiAgICogICAtIElmIGFsbCBvcHRpb25zIGFyZSBkaXNhYmxlZCwgaXQgc2V0cyB0aGUgdmFsdWUgdG8gYE5PTkVgLlxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIC0gVGhlIGN1cnJlbnQgYWdncmVnYXRpb24gb3B0aW9uLlxuICAgKiBAcGFyYW0gZGlzYWJsZWRPcHRpb25zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGlzYWJsZWQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5ldyBhZ2dyZWdhdGlvbiBvcHRpb24uXG4gICAqL1xuICBkZXRlcm1pbmVGaXJzdE5ld0F2YWlsYWJsZUFnZ3JlZ2F0aW9uVmFsdWUoXG4gICAgY3VycmVudFZhbHVlOiBBZ2dyZWdhdGlvbk9wdGlvbixcbiAgICBkaXNhYmxlZE9wdGlvbnM6IEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzXG4gICk6IEFnZ3JlZ2F0aW9uT3B0aW9uIHtcbiAgICBjb25zdCB7IGRhaWx5LCBob3VybHksIG1pbnV0ZWx5LCBub25lIH0gPSBBR0dSRUdBVElPTl9WQUxVRVM7XG5cbiAgICBpZiAoIWRpc2FibGVkT3B0aW9uc1tjdXJyZW50VmFsdWVdKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlOyAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgaWYgaXQncyBub3QgZGlzYWJsZWRcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFZhbHVlID09PSBkYWlseSkge1xuICAgICAgcmV0dXJuICFkaXNhYmxlZE9wdGlvbnNbaG91cmx5XSA/IGhvdXJseSA6ICFkaXNhYmxlZE9wdGlvbnNbbWludXRlbHldID8gbWludXRlbHkgOiBub25lO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50VmFsdWUgPT09IGhvdXJseSkge1xuICAgICAgcmV0dXJuICFkaXNhYmxlZE9wdGlvbnNbbWludXRlbHldID8gbWludXRlbHkgOiBub25lO1xuICAgIH1cblxuICAgIHJldHVybiBub25lOyAvLyBGYWxsYmFjayB0byAnbm9uZScgaWYgYWxsIGVsc2UgZmFpbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBhZ2dyZWdhdGlvbiB2YWx1ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW50ZXJ2YWwuXG4gICAqXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAtIFRoZSB0aW1lIHJhbmdlIGludGVydmFsLlxuICAgKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBhZ2dyZWdhdGlvbiB2YWx1ZS5cbiAgICovXG4gIGRldGVybWluZUFnZ3JlZ2F0aW9uVmFsdWUoaW50ZXJ2YWw6IEludGVydmFsWydpZCddKTogQWdncmVnYXRpb25PcHRpb24ge1xuICAgIHJldHVybiB0aGlzLkFHR1JFR0FUSU9OX01BUFtpbnRlcnZhbF0gfHwgQUdHUkVHQVRJT05fVkFMVUVTLmRhaWx5O1xuICB9XG59XG4iXX0=