UNPKG

ngx-moment

Version:

Moment.JS pipes for Angular (timeago and more)

98 lines 11.7 kB
/* ngx-moment (c) 2015, 2016 Uri Shaked / MIT Licence */ import { Pipe } from '@angular/core'; import moment from 'moment'; import * as i0 from "@angular/core"; export class TimeAgoPipe { constructor(cdRef, ngZone) { this.cdRef = cdRef; this.ngZone = ngZone; } format(m) { return m.from(moment(), this.lastOmitSuffix); } transform(value, omitSuffix, formatFn) { if (this.hasChanged(value, omitSuffix)) { this.lastTime = this.getTime(value); this.lastValue = value; this.lastOmitSuffix = omitSuffix; this.lastLocale = this.getLocale(value); this.formatFn = formatFn || this.format.bind(this); this.removeTimer(); this.createTimer(); this.lastText = this.formatFn(moment(value)); } else { this.createTimer(); } return this.lastText; } ngOnDestroy() { this.removeTimer(); } createTimer() { if (this.currentTimer) { return; } const momentInstance = moment(this.lastValue); const timeToUpdate = this.getSecondsUntilUpdate(momentInstance) * 1000; this.currentTimer = this.ngZone.runOutsideAngular(() => { if (typeof window !== 'undefined') { return window.setTimeout(() => { this.lastText = this.formatFn(moment(this.lastValue)); this.currentTimer = null; this.ngZone.run(() => this.cdRef.markForCheck()); }, timeToUpdate); } else { return null; } }); } removeTimer() { if (this.currentTimer) { window.clearTimeout(this.currentTimer); this.currentTimer = null; } } getSecondsUntilUpdate(momentInstance) { const howOld = Math.abs(moment().diff(momentInstance, 'minute')); if (howOld < 1) { return 1; } else if (howOld < 60) { return 30; } else if (howOld < 180) { return 300; } else { return 3600; } } hasChanged(value, omitSuffix) { return (this.getTime(value) !== this.lastTime || this.getLocale(value) !== this.lastLocale || omitSuffix !== this.lastOmitSuffix); } getTime(value) { if (moment.isDate(value)) { return value.getTime(); } else if (moment.isMoment(value)) { return value.valueOf(); } else { return moment(value).valueOf(); } } getLocale(value) { return moment.isMoment(value) ? value.locale() : moment.locale(); } } TimeAgoPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: TimeAgoPipe, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Pipe }); TimeAgoPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: TimeAgoPipe, name: "amTimeAgo", pure: false }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: TimeAgoPipe, decorators: [{ type: Pipe, args: [{ name: 'amTimeAgo', pure: false }] }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1hZ28ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90aW1lLWFnby5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUV4RCxPQUFPLEVBQUUsSUFBSSxFQUF1RCxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7O0FBRzVCLE1BQU0sT0FBTyxXQUFXO0lBVXRCLFlBQW9CLEtBQXdCLEVBQVUsTUFBYztRQUFoRCxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7SUFBRyxDQUFDO0lBRXhFLE1BQU0sQ0FBQyxDQUFnQjtRQUNyQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQ1AsS0FBeUIsRUFDekIsVUFBb0IsRUFDcEIsUUFBdUM7UUFFdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFB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QUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkUsQ0FBQzs7d0dBdkdVLFdBQVc7c0dBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUR2QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogbmd4LW1vbWVudCAoYykgMjAxNSwgMjAxNiBVcmkgU2hha2VkIC8gTUlUIExpY2VuY2UgKi9cblxuaW1wb3J0IHsgUGlwZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbkBQaXBlKHsgbmFtZTogJ2FtVGltZUFnbycsIHB1cmU6IGZhbHNlIH0pXG5leHBvcnQgY2xhc3MgVGltZUFnb1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGN1cnJlbnRUaW1lcjogbnVtYmVyIHwgbnVsbDtcblxuICBwcml2YXRlIGxhc3RUaW1lOiBOdW1iZXI7XG4gIHByaXZhdGUgbGFzdFZhbHVlOiBtb21lbnQuTW9tZW50SW5wdXQ7XG4gIHByaXZhdGUgbGFzdE9taXRTdWZmaXg6IGJvb2xlYW47XG4gIHByaXZhdGUgbGFzdExvY2FsZT86IHN0cmluZztcbiAgcHJpdmF0ZSBsYXN0VGV4dDogc3RyaW5nO1xuICBwcml2YXRlIGZvcm1hdEZuOiAobTogbW9tZW50Lk1vbWVudCkgPT4gc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIG5nWm9uZTogTmdab25lKSB7fVxuXG4gIGZvcm1hdChtOiBtb21lbnQuTW9tZW50KSB7XG4gICAgcmV0dXJuIG0uZnJvbShtb21lbnQoKSwgdGhpcy5sYXN0T21pdFN1ZmZpeCk7XG4gIH1cblxuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IG1vbWVudC5Nb21lbnRJbnB1dCxcbiAgICBvbWl0U3VmZml4PzogYm9vbGVhbixcbiAgICBmb3JtYXRGbj86IChtOiBtb21lbnQuTW9tZW50KSA9PiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaGFzQ2hhbmdlZCh2YWx1ZSwgb21pdFN1ZmZpeCkpIHtcbiAgICAgIHRoaXMubGFzdFRpbWUgPSB0aGlzLmdldFRpbWUodmFsdWUpO1xuICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMubGFzdE9taXRTdWZmaXggPSBvbWl0U3VmZml4O1xuICAgICAgdGhpcy5sYXN0TG9jYWxlID0gdGhpcy5nZXRMb2NhbGUodmFsdWUpO1xuICAgICAgdGhpcy5mb3JtYXRGbiA9IGZvcm1hdEZuIHx8IHRoaXMuZm9ybWF0LmJpbmQodGhpcyk7XG4gICAgICB0aGlzLnJlbW92ZVRpbWVyKCk7XG4gICAgICB0aGlzLmNyZWF0ZVRpbWVyKCk7XG4gICAgICB0aGlzLmxhc3RUZXh0ID0gdGhpcy5mb3JtYXRGbihtb21lbnQodmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVUaW1lcigpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmxhc3RUZXh0O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUaW1lcigpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtb21lbnRJbnN0YW5jZSA9IG1vbWVudCh0aGlzLmxhc3RWYWx1ZSk7XG4gICAgY29uc3QgdGltZVRvVXBkYXRlID0gdGhpcy5nZXRTZWNvbmRzVW50aWxVcGRhdGUobW9tZW50SW5zdGFuY2UpICogMTAwMDtcblxuICAgIHRoaXMuY3VycmVudFRpbWVyID0gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXN0VGV4dCA9IHRoaXMuZm9ybWF0Rm4obW9tZW50KHRoaXMubGFzdFZhbHVlKSk7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCkpO1xuICAgICAgICB9LCB0aW1lVG9VcGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVRpbWVyKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUaW1lcikge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRUaW1lcik7XG4gICAgICB0aGlzLmN1cnJlbnRUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWNvbmRzVW50aWxVcGRhdGUobW9tZW50SW5zdGFuY2U6IG1vbWVudC5Nb21lbnQpIHtcbiAgICBjb25zdCBob3dPbGQgPSBNYXRoLmFicyhtb21lbnQoKS5kaWZmKG1vbWVudEluc3RhbmNlLCAnbWludXRlJykpO1xuICAgIGlmIChob3dPbGQgPCAxKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGhvd09sZCA8IDYwKSB7XG4gICAgICByZXR1cm4gMzA7XG4gICAgfSBlbHNlIGlmIChob3dPbGQgPCAxODApIHtcbiAgICAgIHJldHVybiAzMDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAzNjAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzQ2hhbmdlZCh2YWx1ZTogbW9tZW50Lk1vbWVudElucHV0LCBvbWl0U3VmZml4PzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmdldFRpbWUodmFsdWUpICE9PSB0aGlzLmxhc3RUaW1lIHx8XG4gICAgICB0aGlzLmdldExvY2FsZSh2YWx1ZSkgIT09IHRoaXMubGFzdExvY2FsZSB8fFxuICAgICAgb21pdFN1ZmZpeCAhPT0gdGhpcy5sYXN0T21pdFN1ZmZpeFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRpbWUodmFsdWU6IG1vbWVudC5Nb21lbnRJbnB1dCk6IG51bWJlciB7XG4gICAgaWYgKG1vbWVudC5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xuICAgIH0gZWxzZSBpZiAobW9tZW50LmlzTW9tZW50KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxlKHZhbHVlOiBtb21lbnQuTW9tZW50SW5wdXQpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gbW9tZW50LmlzTW9tZW50KHZhbHVlKSA/IHZhbHVlLmxvY2FsZSgpIDogbW9tZW50LmxvY2FsZSgpO1xuICB9XG59XG4iXX0=