UNPKG

ng-devui

Version:

DevUI components based on Angular

119 lines (114 loc) 6.13 kB
import * as i0 from '@angular/core'; import { Pipe, NgModule } from '@angular/core'; import * as i1 from 'ng-devui/i18n'; import * as datefns from 'date-fns'; import { Subject, of } from 'rxjs'; import { map, takeUntil } from 'rxjs/operators'; 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 }] }); class RelativeTimeModule { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimeModule, declarations: [RelativeTimePipe], exports: [RelativeTimePipe] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimeModule }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RelativeTimeModule, decorators: [{ type: NgModule, args: [{ declarations: [ RelativeTimePipe ], exports: [ RelativeTimePipe ] }] }] }); /** * Generated bundle index. Do not edit. */ export { RelativeTimeModule, RelativeTimePipe }; //# sourceMappingURL=ng-devui-relative-time.mjs.map