UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

81 lines 10.1 kB
import { Injectable } from '@angular/core'; import { AppStateService } from './ui-state.service'; import * as i0 from "@angular/core"; import * as i1 from "./ui-state.service"; export class DateFormatService { constructor(appStateService) { this.appStateService = appStateService; } /** * Returns date format pattern based on locale and formatting syntax. * * @param formattingOptions - Object containing formatting options * @returns A string containing the date format pattern for the specified locale */ getDateFormat(formattingOptions) { let locale = formattingOptions?.locale || this.appStateService.state.lang; const useUppercaseFormat = formattingOptions?.useUppercaseFormat !== undefined ? formattingOptions.useUppercaseFormat : true; // Intl.DateTimeFormat requires locale to be in the format e.g. 'en-US' instead of 'en_US' locale = locale.replace(/_/g, '-'); if (!this.isValidLocale(locale)) { locale = 'en-US'; } const formatter = new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'numeric', day: 'numeric' }); const patterns = { day: useUppercaseFormat ? 'DD' : 'dd', month: 'MM', year: useUppercaseFormat ? 'YYYY' : 'yyyy' }; return formatter .formatToParts(new Date(2020, 0, 1)) .map(part => (part.type === 'literal' ? part.value : patterns[part.type] || '')) .join(''); } /** * Determines whether a given locale should use 12-hour clock format with AM/PM. * * @param locale - The locale code (e.g., 'en', 'pl', 'en_US') * @returns boolean indicating whether meridian format (AM/PM) should be used */ shouldUseMeridianFormat(locale = this.appStateService.state.lang) { if (!this.isNonEmptyString(locale)) { return false; } try { const formatter = new Intl.DateTimeFormat(locale.replace(/_/g, '-'), { hour: 'numeric' }); return formatter .formatToParts(new Date(2020, 0, 1, 13, 0, 0)) .some(part => part.type === 'dayPeriod'); } catch (error) { return false; } } isNonEmptyString(locale) { return typeof locale === 'string' && locale.trim().length > 0; } isValidLocale(locale) { try { const supportedLocales = Intl.DateTimeFormat.supportedLocalesOf([locale]); return supportedLocales.length > 0; } catch (e) { return false; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, deps: [{ token: i1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateFormatService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.AppStateService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1mb3JtYXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2RhdGUtZm9ybWF0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVVyRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW9CLGVBQWdDO1FBQWhDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUFHLENBQUM7SUFFeEQ7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsaUJBQXFDO1FBQ2pELElBQUksTUFBTSxHQUFHLGlCQUFpQixFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDMUUsTUFBTSxrQkFBa0IsR0FDdEIsaUJBQWlCLEVBQUUsa0JBQWtCLEtBQUssU0FBUztZQUNqRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCO1lBQ3RDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFWCwwRkFBMEY7UUFDMUYsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUNoRCxJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUc7WUFDZixHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNyQyxLQUFLLEVBQUUsSUFBSTtZQUNYLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1NBQzNDLENBQUM7UUFFRixPQUFPLFNBQVM7YUFDYixhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRixPQUFPLFNBQVM7aUJBQ2IsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBYztRQUNyQyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQWM7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUUxRSxPQUFPLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDOytHQTFFVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIERhdGVGb3JtYXRPcHRpb25zIHtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICB1c2VVcHBlcmNhc2VGb3JtYXQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRlRm9ybWF0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZGF0ZSBmb3JtYXQgcGF0dGVybiBiYXNlZCBvbiBsb2NhbGUgYW5kIGZvcm1hdHRpbmcgc3ludGF4LlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybWF0dGluZ09wdGlvbnMgLSBPYmplY3QgY29udGFpbmluZyBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgICogQHJldHVybnMgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGF0ZSBmb3JtYXQgcGF0dGVybiBmb3IgdGhlIHNwZWNpZmllZCBsb2NhbGVcbiAgICovXG4gIGdldERhdGVGb3JtYXQoZm9ybWF0dGluZ09wdGlvbnM/OiBEYXRlRm9ybWF0T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgbGV0IGxvY2FsZSA9IGZvcm1hdHRpbmdPcHRpb25zPy5sb2NhbGUgfHwgdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUubGFuZztcbiAgICBjb25zdCB1c2VVcHBlcmNhc2VGb3JtYXQgPVxuICAgICAgZm9ybWF0dGluZ09wdGlvbnM/LnVzZVVwcGVyY2FzZUZvcm1hdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm9ybWF0dGluZ09wdGlvbnMudXNlVXBwZXJjYXNlRm9ybWF0XG4gICAgICAgIDogdHJ1ZTtcblxuICAgIC8vIEludGwuRGF0ZVRpbWVGb3JtYXQgcmVxdWlyZXMgbG9jYWxlIHRvIGJlIGluIHRoZSBmb3JtYXQgZS5nLiAnZW4tVVMnIGluc3RlYWQgb2YgJ2VuX1VTJ1xuICAgIGxvY2FsZSA9IGxvY2FsZS5yZXBsYWNlKC9fL2csICctJyk7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZExvY2FsZShsb2NhbGUpKSB7XG4gICAgICBsb2NhbGUgPSAnZW4tVVMnO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwge1xuICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgbW9udGg6ICdudW1lcmljJyxcbiAgICAgIGRheTogJ251bWVyaWMnXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXR0ZXJucyA9IHtcbiAgICAgIGRheTogdXNlVXBwZXJjYXNlRm9ybWF0ID8gJ0REJyA6ICdkZCcsXG4gICAgICBtb250aDogJ01NJyxcbiAgICAgIHllYXI6IHVzZVVwcGVyY2FzZUZvcm1hdCA/ICdZWVlZJyA6ICd5eXl5J1xuICAgIH07XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyXG4gICAgICAuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLCAwLCAxKSlcbiAgICAgIC5tYXAocGFydCA9PiAocGFydC50eXBlID09PSAnbGl0ZXJhbCcgPyBwYXJ0LnZhbHVlIDogcGF0dGVybnNbcGFydC50eXBlXSB8fCAnJykpXG4gICAgICAuam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gbG9jYWxlIHNob3VsZCB1c2UgMTItaG91ciBjbG9jayBmb3JtYXQgd2l0aCBBTS9QTS5cbiAgICpcbiAgICogQHBhcmFtIGxvY2FsZSAtIFRoZSBsb2NhbGUgY29kZSAoZS5nLiwgJ2VuJywgJ3BsJywgJ2VuX1VTJylcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgbWVyaWRpYW4gZm9ybWF0IChBTS9QTSkgc2hvdWxkIGJlIHVzZWRcbiAgICovXG4gIHNob3VsZFVzZU1lcmlkaWFuRm9ybWF0KGxvY2FsZSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnN0YXRlLmxhbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNOb25FbXB0eVN0cmluZyhsb2NhbGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZS5yZXBsYWNlKC9fL2csICctJyksIHsgaG91cjogJ251bWVyaWMnIH0pO1xuICAgICAgcmV0dXJuIGZvcm1hdHRlclxuICAgICAgICAuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLCAwLCAxLCAxMywgMCwgMCkpXG4gICAgICAgIC5zb21lKHBhcnQgPT4gcGFydC50eXBlID09PSAnZGF5UGVyaW9kJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTm9uRW1wdHlTdHJpbmcobG9jYWxlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIGxvY2FsZSA9PT0gJ3N0cmluZycgJiYgbG9jYWxlLnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkTG9jYWxlKGxvY2FsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1cHBvcnRlZExvY2FsZXMgPSBJbnRsLkRhdGVUaW1lRm9ybWF0LnN1cHBvcnRlZExvY2FsZXNPZihbbG9jYWxlXSk7XG5cbiAgICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzLmxlbmd0aCA+IDA7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIl19