@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
71 lines • 9.91 kB
JavaScript
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==