ngx-timeago
Version:
Live updating timestamps in Angular 6+.
81 lines • 9.81 kB
JavaScript
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==