UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

76 lines 11.8 kB
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=