UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

71 lines 9.91 kB
import { DatePipe as NgDatePipe, DATE_PIPE_DEFAULT_OPTIONS, DATE_PIPE_DEFAULT_TIMEZONE } from '@angular/common'; import { Inject, LOCALE_ID, Optional, Pipe } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; import { gettext } from '../i18n/gettext'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; /** * The range of times supported by ECMAScript Date objects in milliseconds. * @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1 */ export const ES_MAX_TIME_MILLISECONDS = 8640000000000000; /** * Formats a date value according to locale rules. If no other format specified it defaults to `medium` * used as standard date/time format. * * Extends Angular's DatePipe in a way so that date values exceeding the range supported by ECMAScript * are displayed as earliest/latest supported point in time printed in the desired format pre- or postfixed * by the word `before` or `after`, respectively. * In all other cases the pipe behaves as the standard [DatePipe]{@link https://angular.io/api/common/DatePipe}. * * ```html * <span class="highlight">{{ deadline | c8yDate }}</span> <!-- e.g. 7 May 2020, 17:45:19 (en-GB) or 07.05.2020, 17:45:19 (de) --> * <span>{{ lastUpdated | c8yDate: 'a h:MM:ss' }}</span> <!-- e.g. pm 5:45:19 --> * <span>{{ 8640000000000000 + 1 | c8yDate }}</span> <!-- e.g. after 13 Sep 275760, 03:00:00 --> * ``` */ export class DatePipe extends NgDatePipe { constructor(locale, translateService, defaultTimezone, defaultOptions) { super(locale, defaultTimezone, { dateFormat: 'medium', ...defaultOptions }); this.translateService = translateService; } transform(value, format, timezone, locale) { let valueInBounds = value; let valueBefore = false; let valueBeyond = false; if (typeof value === 'number' && !isNaN(value)) { valueInBounds = Math.min(value, ES_MAX_TIME_MILLISECONDS); valueInBounds = Math.max(valueInBounds, -ES_MAX_TIME_MILLISECONDS); valueBefore = value < -ES_MAX_TIME_MILLISECONDS; valueBeyond = value > ES_MAX_TIME_MILLISECONDS; } let result = super.transform(valueInBounds, format, timezone, locale); if (valueBefore) { result = this.translateService.instant(gettext(`before {{date}}`), { date: result }); } else if (valueBeyond) { result = this.translateService.instant(gettext(`after {{date}}`), { date: result }); } return result; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePipe, deps: [{ token: LOCALE_ID }, { token: i1.TranslateService }, { token: DATE_PIPE_DEFAULT_TIMEZONE, optional: true }, { token: DATE_PIPE_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: DatePipe, isStandalone: true, name: "c8yDate" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatePipe, decorators: [{ type: Pipe, args: [{ name: 'c8yDate', standalone: true }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }, { type: i1.TranslateService }, { type: undefined, decorators: [{ type: Inject, args: [DATE_PIPE_DEFAULT_TIMEZONE] }, { type: Optional }] }, { type: undefined, decorators: [{ type: Inject, args: [DATE_PIPE_DEFAULT_OPTIONS] }, { type: Optional }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZGF0ZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLElBQUksVUFBVSxFQUV0Qix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUUxQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUV6RDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE1BQU0sT0FBTyxRQUFTLFNBQVEsVUFBVTtJQUN0QyxZQUNxQixNQUFjLEVBQ3pCLGdCQUFrQyxFQUNNLGVBQStCLEVBQ2hDLGNBQXNDO1FBRXJGLEtBQUssQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFKcEUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtJQUs1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVUsRUFBRSxNQUFlLEVBQUUsUUFBaUIsRUFBRSxNQUFlO1FBQ3ZFLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFDMUQsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUVuRSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsd0JBQXdCLENBQUM7WUFDaEQsV0FBVyxHQUFHLEtBQUssR0FBRyx3QkFBd0IsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsSUFBSSxNQUFNLEdBQVcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU5RSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQzthQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdkIsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0EvQlUsUUFBUSxrQkFFVCxTQUFTLDZDQUVULDBCQUEwQiw2QkFDMUIseUJBQXlCOzZHQUx4QixRQUFROzs0RkFBUixRQUFRO2tCQURwQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOzswQkFHdEMsTUFBTTsyQkFBQyxTQUFTOzswQkFFaEIsTUFBTTsyQkFBQywwQkFBMEI7OzBCQUFHLFFBQVE7OzBCQUM1QyxNQUFNOzJCQUFDLHlCQUF5Qjs7MEJBQUcsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGVQaXBlIGFzIE5nRGF0ZVBpcGUsXG4gIERhdGVQaXBlQ29uZmlnLFxuICBEQVRFX1BJUEVfREVGQVVMVF9PUFRJT05TLFxuICBEQVRFX1BJUEVfREVGQVVMVF9USU1FWk9ORVxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBMT0NBTEVfSUQsIE9wdGlvbmFsLCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcblxuLyoqXG4gKiBUaGUgcmFuZ2Ugb2YgdGltZXMgc3VwcG9ydGVkIGJ5IEVDTUFTY3JpcHQgRGF0ZSBvYmplY3RzIGluIG1pbGxpc2Vjb25kcy5cbiAqIEBzZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTE1LjkuMS4xXG4gKi9cbmV4cG9ydCBjb25zdCBFU19NQVhfVElNRV9NSUxMSVNFQ09ORFMgPSA4NjQwMDAwMDAwMDAwMDAwO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBkYXRlIHZhbHVlIGFjY29yZGluZyB0byBsb2NhbGUgcnVsZXMuIElmIG5vIG90aGVyIGZvcm1hdCBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gYG1lZGl1bWBcbiAqIHVzZWQgYXMgc3RhbmRhcmQgZGF0ZS90aW1lIGZvcm1hdC5cbiAqXG4gKiBFeHRlbmRzIEFuZ3VsYXIncyBEYXRlUGlwZSBpbiBhIHdheSBzbyB0aGF0IGRhdGUgdmFsdWVzIGV4Y2VlZGluZyB0aGUgcmFuZ2Ugc3VwcG9ydGVkIGJ5IEVDTUFTY3JpcHRcbiAqIGFyZSBkaXNwbGF5ZWQgYXMgZWFybGllc3QvbGF0ZXN0IHN1cHBvcnRlZCBwb2ludCBpbiB0aW1lIHByaW50ZWQgaW4gdGhlIGRlc2lyZWQgZm9ybWF0IHByZS0gb3IgcG9zdGZpeGVkXG4gKiBieSB0aGUgd29yZCBgYmVmb3JlYCBvciBgYWZ0ZXJgLCByZXNwZWN0aXZlbHkuXG4gKiBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIHBpcGUgYmVoYXZlcyBhcyB0aGUgc3RhbmRhcmQgW0RhdGVQaXBlXXtAbGluayBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvbW1vbi9EYXRlUGlwZX0uXG4gKlxuICogYGBgaHRtbFxuICogPHNwYW4gY2xhc3M9XCJoaWdobGlnaHRcIj57eyBkZWFkbGluZSB8IGM4eURhdGUgfX08L3NwYW4+IDwhLS0gZS5nLiA3IE1heSAyMDIwLCAxNzo0NToxOSAoZW4tR0IpIG9yIDA3LjA1LjIwMjAsIDE3OjQ1OjE5IChkZSkgLS0+XG4gKiA8c3Bhbj57eyBsYXN0VXBkYXRlZCB8IGM4eURhdGU6ICdhIGg6TU06c3MnIH19PC9zcGFuPiA8IS0tIGUuZy4gcG0gNTo0NToxOSAtLT5cbiAqIDxzcGFuPnt7IDg2NDAwMDAwMDAwMDAwMDAgKyAxIHwgYzh5RGF0ZSB9fTwvc3Bhbj4gPCEtLSBlLmcuIGFmdGVyIDEzIFNlcCAyNzU3NjAsIDAzOjAwOjAwIC0tPlxuICogYGBgXG4gKi9cbkBQaXBlKHsgbmFtZTogJ2M4eURhdGUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgRGF0ZVBpcGUgZXh0ZW5kcyBOZ0RhdGVQaXBlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBASW5qZWN0KERBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FKSBAT3B0aW9uYWwoKSBkZWZhdWx0VGltZXpvbmU/OiBzdHJpbmcgfCBudWxsLFxuICAgIEBJbmplY3QoREFURV9QSVBFX0RFRkFVTFRfT1BUSU9OUykgQE9wdGlvbmFsKCkgZGVmYXVsdE9wdGlvbnM/OiBEYXRlUGlwZUNvbmZpZyB8IG51bGxcbiAgKSB7XG4gICAgc3VwZXIobG9jYWxlLCBkZWZhdWx0VGltZXpvbmUsIHsgZGF0ZUZvcm1hdDogJ21lZGl1bScsIC4uLmRlZmF1bHRPcHRpb25zIH0pO1xuICB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdD86IHN0cmluZywgdGltZXpvbmU/OiBzdHJpbmcsIGxvY2FsZT86IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IHZhbHVlSW5Cb3VuZHMgPSB2YWx1ZTtcbiAgICBsZXQgdmFsdWVCZWZvcmUgPSBmYWxzZTtcbiAgICBsZXQgdmFsdWVCZXlvbmQgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgIHZhbHVlSW5Cb3VuZHMgPSBNYXRoLm1pbih2YWx1ZSwgRVNfTUFYX1RJTUVfTUlMTElTRUNPTkRTKTtcbiAgICAgIHZhbHVlSW5Cb3VuZHMgPSBNYXRoLm1heCh2YWx1ZUluQm91bmRzLCAtRVNfTUFYX1RJTUVfTUlMTElTRUNPTkRTKTtcblxuICAgICAgdmFsdWVCZWZvcmUgPSB2YWx1ZSA8IC1FU19NQVhfVElNRV9NSUxMSVNFQ09ORFM7XG4gICAgICB2YWx1ZUJleW9uZCA9IHZhbHVlID4gRVNfTUFYX1RJTUVfTUlMTElTRUNPTkRTO1xuICAgIH1cbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgPSBzdXBlci50cmFuc2Zvcm0odmFsdWVJbkJvdW5kcywgZm9ybWF0LCB0aW1lem9uZSwgbG9jYWxlKTtcblxuICAgIGlmICh2YWx1ZUJlZm9yZSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dChgYmVmb3JlIHt7ZGF0ZX19YCksIHsgZGF0ZTogcmVzdWx0IH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWVCZXlvbmQpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoYGFmdGVyIHt7ZGF0ZX19YCksIHsgZGF0ZTogcmVzdWx0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==