UNPKG

ngx-timeago

Version:

Live updating timestamps in Angular 6+.

81 lines 9.81 kB
import { Injectable, Pipe, Optional } from '@angular/core'; import { Subject } from 'rxjs'; import { isDefined, coerceBooleanProperty, dateParser } from './util'; import { filter } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "./timeago.intl"; import * as i2 from "./timeago.formatter"; import * as i3 from "./timeago.clock"; class TimeagoPipe { constructor(intl, cd, formatter, clock) { this.clock = clock; this.live = true; /** * Emits on: * - Input change * - Intl change * - Clock tick */ this.stateChanges = new Subject(); if (intl) { this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next()); } this.stateChanges.subscribe(() => { this.value = formatter.format(this.date); cd.markForCheck(); }); } transform(date, ...args) { const _date = dateParser(date).valueOf(); let _live; _live = isDefined(args[0]) ? coerceBooleanProperty(args[0]) : this.live; if (this.date === _date && this.live === _live) { return this.value; } this.date = _date; this.live = _live; if (this.date) { if (this.clockSubscription) { this.clockSubscription.unsubscribe(); this.clockSubscription = undefined; } this.clockSubscription = this.clock.tick(this.date) .pipe(filter(() => this.live, this)) .subscribe(() => this.stateChanges.next()); this.stateChanges.next(); } else { throw new SyntaxError(`Wrong parameter in TimeagoPipe. Expected a valid date, received: ${date}`); } return this.value; } ngOnDestroy() { if (this.intlSubscription) { this.intlSubscription.unsubscribe(); this.intlSubscription = undefined; } if (this.clockSubscription) { this.clockSubscription.unsubscribe(); this.clockSubscription = undefined; } this.stateChanges.complete(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TimeagoPipe, deps: [{ token: i1.TimeagoIntl, optional: true }, { token: i0.ChangeDetectorRef }, { token: i2.TimeagoFormatter }, { token: i3.TimeagoClock }], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.1.1", ngImport: i0, type: TimeagoPipe, name: "timeago", pure: false }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TimeagoPipe }); } } export { TimeagoPipe }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TimeagoPipe, decorators: [{ type: Injectable }, { type: Pipe, args: [{ name: 'timeago', pure: false, // required to update the value when stateChanges emits }] }], ctorParameters: function () { return [{ type: i1.TimeagoIntl, decorators: [{ type: Optional }] }, { type: i0.ChangeDetectorRef }, { type: i2.TimeagoFormatter }, { type: i3.TimeagoClock }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWFnby5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NyYy90aW1lYWdvLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxJQUFJLEVBQWlCLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUV4QyxNQUthLFdBQVc7SUFnQnRCLFlBQXdCLElBQWlCLEVBQ3ZDLEVBQXFCLEVBQ3JCLFNBQTJCLEVBQ25CLEtBQW1CO1FBQW5CLFVBQUssR0FBTCxLQUFLLENBQWM7UUFickIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUVwQjs7Ozs7VUFLRTtRQUNGLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQU1qQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDaEY7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVMsRUFBRSxHQUFHLElBQVc7UUFDakMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pDLElBQUksS0FBYyxDQUFDO1FBRW5CLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFZCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztTQUNuQjtRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWxCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNMLE1BQU0sSUFBSSxXQUFXLENBQUMsb0VBQW9FLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbkc7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztTQUNuQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDOzhHQXRFVSxXQUFXOzRHQUFYLFdBQVc7a0hBQVgsV0FBVzs7U0FBWCxXQUFXOzJGQUFYLFdBQVc7a0JBTHZCLFVBQVU7O2tCQUNWLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLEtBQUssRUFBRSx1REFBdUQ7aUJBQ3JFOzswQkFpQmMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgUGlwZSwgUGlwZVRyYW5zZm9ybSwgT3B0aW9uYWwsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpbWVhZ29DbG9jayB9IGZyb20gJy4vdGltZWFnby5jbG9jayc7XG5pbXBvcnQgeyBUaW1lYWdvRm9ybWF0dGVyIH0gZnJvbSAnLi90aW1lYWdvLmZvcm1hdHRlcic7XG5pbXBvcnQgeyBUaW1lYWdvSW50bCB9IGZyb20gJy4vdGltZWFnby5pbnRsJztcbmltcG9ydCB7IGlzRGVmaW5lZCwgY29lcmNlQm9vbGVhblByb3BlcnR5LCBkYXRlUGFyc2VyIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoKVxuQFBpcGUoe1xuICBuYW1lOiAndGltZWFnbycsXG4gIHB1cmU6IGZhbHNlLCAvLyByZXF1aXJlZCB0byB1cGRhdGUgdGhlIHZhbHVlIHdoZW4gc3RhdGVDaGFuZ2VzIGVtaXRzXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVhZ29QaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBpbnRsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY2xvY2tTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIGRhdGU6IG51bWJlcjtcbiAgcHJpdmF0ZSB2YWx1ZTogc3RyaW5nO1xuICBwcml2YXRlIGxpdmUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBvbjpcbiAgICogLSBJbnB1dCBjaGFuZ2VcbiAgICogLSBJbnRsIGNoYW5nZVxuICAgKiAtIENsb2NrIHRpY2tcbiAgKi9cbiAgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBpbnRsOiBUaW1lYWdvSW50bCxcbiAgICBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgZm9ybWF0dGVyOiBUaW1lYWdvRm9ybWF0dGVyLFxuICAgIHByaXZhdGUgY2xvY2s6IFRpbWVhZ29DbG9jaykge1xuICAgIGlmIChpbnRsKSB7XG4gICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24gPSBpbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gZm9ybWF0dGVyLmZvcm1hdCh0aGlzLmRhdGUpO1xuICAgICAgY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICB0cmFuc2Zvcm0oZGF0ZTogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IF9kYXRlID0gZGF0ZVBhcnNlcihkYXRlKS52YWx1ZU9mKCk7XG4gICAgbGV0IF9saXZlOiBib29sZWFuO1xuXG4gICAgX2xpdmUgPSBpc0RlZmluZWQoYXJnc1swXSlcbiAgICAgID8gY29lcmNlQm9vbGVhblByb3BlcnR5KGFyZ3NbMF0pXG4gICAgICA6IHRoaXMubGl2ZTtcblxuICAgIGlmICh0aGlzLmRhdGUgPT09IF9kYXRlICYmIHRoaXMubGl2ZSA9PT0gX2xpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZSA9IF9kYXRlO1xuICAgIHRoaXMubGl2ZSA9IF9saXZlO1xuXG4gICAgaWYgKHRoaXMuZGF0ZSkge1xuICAgICAgaWYgKHRoaXMuY2xvY2tTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5jbG9ja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNsb2NrU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9ja1N1YnNjcmlwdGlvbiA9IHRoaXMuY2xvY2sudGljayh0aGlzLmRhdGUpXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmxpdmUsIHRoaXMpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgV3JvbmcgcGFyYW1ldGVyIGluIFRpbWVhZ29QaXBlLiBFeHBlY3RlZCBhIHZhbGlkIGRhdGUsIHJlY2VpdmVkOiAke2RhdGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5pbnRsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvY2tTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==