ng-devui
Version:
DevUI components based on Angular
95 lines • 17 kB
JavaScript
import { Pipe } from '@angular/core';
import { I18nService } from 'ng-devui/i18n';
import * as datefns from 'date-fns';
import { Subject, of } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/i18n";
export class RelativeTimePipe {
constructor(i18n) {
this.i18n = i18n;
this._destroyed$ = new Subject();
}
transform(value, limit, compareDate, weekStartsOn = 1) {
if (!value) {
return of('');
}
const threshold = {
month: 3, // at least 3 months using year.
week: 4, // at least 4 weeks using month.
day: 6, // at least 6 days using weeks.
hour: 6, // at least 6 hours using day.
minute: 59, // at least 59 minutes using hour.
second: 59, // at least 59 seconds using minute.
};
if (!datefns.isDate(value)) {
value = new Date(value);
}
const now = compareDate ? new Date(compareDate) : Date.now();
const startOfYearForTarget = datefns.startOfYear(value);
const startOfYearForToday = datefns.startOfYear(now);
const diffYears = datefns.differenceInYears(startOfYearForToday, startOfYearForTarget);
const absDiffYears = Math.abs(diffYears);
const startOfMonthForTarget = datefns.startOfMonth(value);
const startOfMonthForToday = datefns.startOfMonth(now);
const diffMonths = datefns.differenceInMonths(startOfMonthForToday, startOfMonthForTarget);
const absDiffMonths = Math.abs(diffMonths);
const startOfWeekForTarget = datefns.startOfWeek(value, { weekStartsOn });
const startOfWeekForToday = datefns.startOfWeek(now, { weekStartsOn });
const diffWeeks = datefns.differenceInWeeks(startOfWeekForToday, startOfWeekForTarget);
const absDiffWeeks = Math.abs(diffWeeks);
const startOfDayForTarget = datefns.startOfDay(value);
const startOfDayForToday = datefns.startOfDay(now);
const diffDays = datefns.differenceInDays(startOfDayForToday, startOfDayForTarget);
const absDiffDays = Math.abs(diffDays);
const diffHours = datefns.differenceInHours(now, value);
const absDiffHours = Math.abs(diffHours);
const diffMinutes = datefns.differenceInMinutes(now, value);
const absDiffMinutes = Math.abs(diffMinutes);
const diffSeconds = datefns.differenceInSeconds(now, value);
const absDiffSeconds = Math.abs(diffSeconds);
return this.i18n.langChange().pipe(map((data) => {
if (absDiffSeconds > limit) {
return new Date(value);
}
const i18nCommonText = data.relativeTime;
if (absDiffYears > 0 && absDiffMonths > threshold.month) {
return diffYears > 0 ? i18nCommonText.yearsAgo(absDiffYears) : i18nCommonText.yearsLater(absDiffYears);
}
else if (absDiffMonths > 0 && absDiffWeeks >= threshold.week) {
return diffMonths > 0 ? i18nCommonText.monthsAgo(absDiffMonths) : i18nCommonText.monthsLater(absDiffMonths);
}
else if (absDiffWeeks > 0 && absDiffDays > threshold.day) {
return diffWeeks > 0 ? i18nCommonText.weeksAgo(absDiffWeeks) : i18nCommonText.weeksLater(absDiffWeeks);
}
else if (absDiffDays > 0 && absDiffHours > threshold.hour) {
return diffDays > 0 ? i18nCommonText.daysAgo(absDiffDays) : i18nCommonText.daysLater(absDiffDays);
}
else if (absDiffHours > 0 && absDiffMinutes > threshold.minute) {
return diffHours > 0 ? i18nCommonText.hoursAgo(absDiffHours) : i18nCommonText.hoursLater(absDiffHours);
}
else if (absDiffMinutes > 0 && absDiffSeconds > threshold.second) {
return diffMinutes > 0 ? i18nCommonText.minutesAgo(absDiffMinutes) : i18nCommonText.minutesLater(absDiffMinutes);
}
else if (diffSeconds || diffSeconds === 0) {
return diffSeconds >= 0 ? i18nCommonText.justnow : i18nCommonText.later;
}
else {
return '';
}
}), takeUntil(this._destroyed$));
}
ngOnDestroy() {
this._destroyed$.next();
this._destroyed$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimePipe, deps: [{ token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Pipe }); }
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimePipe, name: "dRelativeTime" }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimePipe, decorators: [{
type: Pipe,
args: [{
name: 'dRelativeTime',
}]
}], ctorParameters: () => [{ type: i1.I18nService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRpdmUtdGltZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvcmVsYXRpdmUtdGltZS9yZWxhdGl2ZS10aW1lLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQWMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLaEQsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBRDdCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNGLENBQUM7SUFFekMsU0FBUyxDQUNQLEtBQTZCLEVBQzdCLEtBQWEsRUFDYixXQUFvQyxFQUNwQyxlQUEwQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRztZQUNoQixLQUFLLEVBQUUsQ0FBQyxFQUFFLGdDQUFnQztZQUMxQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdDQUFnQztZQUN6QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLCtCQUErQjtZQUN2QyxJQUFJLEVBQUUsQ0FBQyxFQUFFLDhCQUE4QjtZQUN2QyxNQUFNLEVBQUUsRUFBRSxFQUFFLGtDQUFrQztZQUM5QyxNQUFNLEVBQUUsRUFBRSxFQUFFLG9DQUFvQztTQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVB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WSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekcsQ0FBQztpQkFBTSxJQUFJLGNBQWMsR0FBRyxDQUFDLElBQUksY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbkUsT0FBTyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ25ILENBQUM7aUJBQU0sSUFBSSxXQUFXLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDMUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDOytHQXhGVSxnQkFBZ0I7NkdBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFINUIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtpQkFDdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkRlc3Ryb3ksIFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcclxuaW1wb3J0ICogYXMgZGF0ZWZucyBmcm9tICdkYXRlLWZucyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdkUmVsYXRpdmVUaW1lJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlbGF0aXZlVGltZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaTE4bjogSTE4blNlcnZpY2UpIHt9XHJcblxyXG4gIHRyYW5zZm9ybShcclxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlLFxyXG4gICAgbGltaXQ6IG51bWJlcixcclxuICAgIGNvbXBhcmVEYXRlPzogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSxcclxuICAgIHdlZWtTdGFydHNPbjogMCB8IDEgfCAyIHwgMyB8IDQgfCA2IHwgNSA9IDFcclxuICApOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bWJlciB8IERhdGU+IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG9mKCcnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHtcclxuICAgICAgbW9udGg6IDMsIC8vIGF0IGxlYXN0IDMgbW9udGhzIHVzaW5nIHllYXIuXHJcbiAgICAgIHdlZWs6IDQsIC8vIGF0IGxlYXN0IDQgd2Vla3MgdXNpbmcgbW9udGguXHJcbiAgICAgIGRheTogNiwgLy8gYXQgbGVhc3QgNiBkYXlzIHVzaW5nIHdlZWtzLlxyXG4gICAgICBob3VyOiA2LCAvLyBhdCBsZWFzdCA2IGhvdXJzIHVzaW5nIGRheS5cclxuICAgICAgbWludXRlOiA1OSwgLy8gYXQgbGVhc3QgNTkgbWludXRlcyB1c2luZyBob3VyLlxyXG4gICAgICBzZWNvbmQ6IDU5LCAvLyBhdCBsZWFzdCA1OSBzZWNvbmRzIHVzaW5nIG1pbnV0ZS5cclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFkYXRlZm5zLmlzRGF0ZSh2YWx1ZSkpIHtcclxuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gY29tcGFyZURhdGUgPyBuZXcgRGF0ZShjb21wYXJlRGF0ZSkgOiBEYXRlLm5vdygpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0T2ZZZWFyRm9yVGFyZ2V0ID0gZGF0ZWZucy5zdGFydE9mWWVhcig8RGF0ZT52YWx1ZSk7XHJcbiAgICBjb25zdCBzdGFydE9mWWVhckZvclRvZGF5ID0gZGF0ZWZucy5zdGFydE9mWWVhcihub3cpO1xyXG4gICAgY29uc3QgZGlmZlllYXJzID0gZGF0ZWZucy5kaWZmZXJlbmNlSW5ZZWFycyhzdGFydE9mWWVhckZvclRvZGF5LCBzdGFydE9mWWVhckZvclRhcmdldCk7XHJcbiAgICBjb25zdCBhYnNEaWZmWWVhcnMgPSBNYXRoLmFicyhkaWZmWWVhcnMpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0T2ZNb250aEZvclRhcmdldCA9IGRhdGVmbnMuc3RhcnRPZk1vbnRoKDxEYXRlPnZhbHVlKTtcclxuICAgIGNvbnN0IHN0YXJ0T2ZNb250aEZvclRvZGF5ID0gZGF0ZWZucy5zdGFydE9mTW9udGgobm93KTtcclxuICAgIGNvbnN0IGRpZmZNb250aHMgPSBkYXRlZm5zLmRpZmZlcmVuY2VJbk1vbnRocyhzdGFydE9mTW9udGhGb3JUb2RheSwgc3RhcnRPZk1vbnRoRm9yVGFyZ2V0KTtcclxuICAgIGNvbnN0IGFic0RpZmZNb250aHMgPSBNYXRoLmFicyhkaWZmTW9udGhzKTtcclxuXHJcbiAgICBjb25zdCBzdGFydE9mV2Vla0ZvclRhcmdldCA9IGRhdGVmbnMuc3RhcnRPZldlZWsoPERhdGU+dmFsdWUsIHsgd2Vla1N0YXJ0c09uIH0pO1xyXG4gICAgY29uc3Qgc3RhcnRPZldlZWtGb3JUb2RheSA9IGRhdGVmbnMuc3RhcnRPZldlZWsobm93LCB7IHdlZWtTdGFydHNPbiB9KTtcclxuICAgIGNvbnN0IGRpZmZXZWVrcyA9IGRhdGVmbnMuZGlmZmVyZW5jZUluV2Vla3Moc3RhcnRPZldlZWtGb3JUb2RheSwgc3RhcnRPZldlZWtGb3JUYXJnZXQpO1xyXG4gICAgY29uc3QgYWJzRGlmZldlZWtzID0gTWF0aC5hYnMoZGlmZldlZWtzKTtcclxuXHJcbiAgICBjb25zdCBzdGFydE9mRGF5Rm9yVGFyZ2V0ID0gZGF0ZWZucy5zdGFydE9mRGF5KDxEYXRlPnZhbHVlKTtcclxuICAgIGNvbnN0IHN0YXJ0T2ZEYXlGb3JUb2RheSA9IGRhdGVmbnMuc3RhcnRPZkRheShub3cpO1xyXG4gICAgY29uc3QgZGlmZkRheXMgPSBkYXRlZm5zLmRpZmZlcmVuY2VJbkRheXMoc3RhcnRPZkRheUZvclRvZGF5LCBzdGFydE9mRGF5Rm9yVGFyZ2V0KTtcclxuICAgIGNvbnN0IGFic0RpZmZEYXlzID0gTWF0aC5hYnMoZGlmZkRheXMpO1xyXG5cclxuICAgIGNvbnN0IGRpZmZIb3VycyA9IGRhdGVmbnMuZGlmZmVyZW5jZUluSG91cnMobm93LCA8RGF0ZT52YWx1ZSk7XHJcbiAgICBjb25zdCBhYnNEaWZmSG91cnMgPSBNYXRoLmFicyhkaWZmSG91cnMpO1xyXG5cclxuICAgIGNvbnN0IGRpZmZNaW51dGVzID0gZGF0ZWZucy5kaWZmZXJlbmNlSW5NaW51dGVzKG5vdywgPERhdGU+dmFsdWUpO1xyXG4gICAgY29uc3QgYWJzRGlmZk1pbnV0ZXMgPSBNYXRoLmFicyhkaWZmTWludXRlcyk7XHJcblxyXG4gICAgY29uc3QgZGlmZlNlY29uZHMgPSBkYXRlZm5zLmRpZmZlcmVuY2VJblNlY29uZHMobm93LCA8RGF0ZT52YWx1ZSk7XHJcbiAgICBjb25zdCBhYnNEaWZmU2Vjb25kcyA9IE1hdGguYWJzKGRpZmZTZWNvbmRzKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5pMThuLmxhbmdDaGFuZ2UoKS5waXBlKFxyXG4gICAgICBtYXAoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoYWJzRGlmZlNlY29uZHMgPiBsaW1pdCkge1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaTE4bkNvbW1vblRleHQgPSBkYXRhLnJlbGF0aXZlVGltZTtcclxuICAgICAgICBpZiAoYWJzRGlmZlllYXJzID4gMCAmJiBhYnNEaWZmTW9udGhzID4gdGhyZXNob2xkLm1vbnRoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGlmZlllYXJzID4gMCA/IGkxOG5Db21tb25UZXh0LnllYXJzQWdvKGFic0RpZmZZZWFycykgOiBpMThuQ29tbW9uVGV4dC55ZWFyc0xhdGVyKGFic0RpZmZZZWFycyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhYnNEaWZmTW9udGhzID4gMCAmJiBhYnNEaWZmV2Vla3MgPj0gdGhyZXNob2xkLndlZWspIHtcclxuICAgICAgICAgIHJldHVybiBkaWZmTW9udGhzID4gMCA/IGkxOG5Db21tb25UZXh0Lm1vbnRoc0FnbyhhYnNEaWZmTW9udGhzKSA6IGkxOG5Db21tb25UZXh0Lm1vbnRoc0xhdGVyKGFic0RpZmZNb250aHMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYWJzRGlmZldlZWtzID4gMCAmJiBhYnNEaWZmRGF5cyA+IHRocmVzaG9sZC5kYXkpIHtcclxuICAgICAgICAgIHJldHVybiBkaWZmV2Vla3MgPiAwID8gaTE4bkNvbW1vblRleHQud2Vla3NBZ28oYWJzRGlmZldlZWtzKSA6IGkxOG5Db21tb25UZXh0LndlZWtzTGF0ZXIoYWJzRGlmZldlZWtzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFic0RpZmZEYXlzID4gMCAmJiBhYnNEaWZmSG91cnMgPiB0aHJlc2hvbGQuaG91cikge1xyXG4gICAgICAgICAgcmV0dXJuIGRpZmZEYXlzID4gMCA/IGkxOG5Db21tb25UZXh0LmRheXNBZ28oYWJzRGlmZkRheXMpIDogaTE4bkNvbW1vblRleHQuZGF5c0xhdGVyKGFic0RpZmZEYXlzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGFic0RpZmZIb3VycyA+IDAgJiYgYWJzRGlmZk1pbnV0ZXMgPiB0aHJlc2hvbGQubWludXRlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGlmZkhvdXJzID4gMCA/IGkxOG5Db21tb25UZXh0LmhvdXJzQWdvKGFic0RpZmZIb3VycykgOiBpMThuQ29tbW9uVGV4dC5ob3Vyc0xhdGVyKGFic0RpZmZIb3Vycyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChhYnNEaWZmTWludXRlcyA+IDAgJiYgYWJzRGlmZlNlY29uZHMgPiB0aHJlc2hvbGQuc2Vjb25kKSB7XHJcbiAgICAgICAgICByZXR1cm4gZGlmZk1pbnV0ZXMgPiAwID8gaTE4bkNvbW1vblRleHQubWludXRlc0FnbyhhYnNEaWZmTWludXRlcykgOiBpMThuQ29tbW9uVGV4dC5taW51dGVzTGF0ZXIoYWJzRGlmZk1pbnV0ZXMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlmZlNlY29uZHMgfHwgZGlmZlNlY29uZHMgPT09IDApIHtcclxuICAgICAgICAgIHJldHVybiBkaWZmU2Vjb25kcyA+PSAwID8gaTE4bkNvbW1vblRleHQuanVzdG5vdyA6IGkxOG5Db21tb25UZXh0LmxhdGVyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl9kZXN0cm95ZWQkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19