UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

115 lines 14.5 kB
/** * @packageDocumentation * @module utils */ import { ChangeDetectorRef, Injectable, Pipe, } from '@angular/core'; import dayjs from 'dayjs'; import { Subject, takeUntil } from 'rxjs'; import { TranslateService } from '../../translate/public-api'; import { DATE_FORMAT, DATE_TIME_FORMAT } from '../constants/public-api'; import { TimeService } from '../services/public-api'; import { FIELD_NOT_AVAILABLE_PLACEHOLDER, isFieldNotAvailable, } from './field-not-available.pipe'; import * as i0 from "@angular/core"; import * as i1 from "../services/public-api"; import * as i2 from "../../translate/public-api"; const MILLISECONDS_SECOND = 1000; const MILLISECONDS_MINUTE = MILLISECONDS_SECOND * 60; const MILLISECONDS_HOUR = MILLISECONDS_MINUTE * 60; const MILLISECONDS_DAY = MILLISECONDS_HOUR * 24; const MILLISECONDS_WEEK = MILLISECONDS_DAY * 7; export class RelativeTimePipe { constructor(cdr, time, translate) { this.cdr = cdr; this.time = time; this.translate = translate; this.destroy$$ = new Subject(); this.translate.locale$ .pipe(takeUntil(this.destroy$$)) .subscribe(() => this.cdr.markForCheck()); } ngOnDestroy() { this.destroy$$.next(); this.destroy$$.complete(); if (this.timerId) { clearTimeout(this.timerId); } } transform(value) { if (isFieldNotAvailable(value)) { return FIELD_NOT_AVAILABLE_PLACEHOLDER; } const currentTime = Date.now(); const givenTime = dayjs(value).valueOf(); const distance = currentTime - givenTime; if (distance >= MILLISECONDS_WEEK) { return this.time.format(value, DATE_FORMAT); } this.checkDistance(distance); return distance < MILLISECONDS_MINUTE ? this.translate.get('just_now') : this.time.distance(givenTime, currentTime); } checkDistance(distance) { if (distance < MILLISECONDS_MINUTE) { return this.startTimer(MILLISECONDS_SECOND); } if (distance < MILLISECONDS_HOUR) { return this.startTimer(MILLISECONDS_MINUTE); } if (distance < MILLISECONDS_DAY) { return this.startTimer(MILLISECONDS_HOUR); } return this.startTimer(MILLISECONDS_DAY); } startTimer(timeout) { clearTimeout(this.timerId); this.timerId = window.setTimeout(() => this.cdr.markForCheck(), timeout); } static { this.ɵfac = function RelativeTimePipe_Factory(t) { return new (t || RelativeTimePipe)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef, 16), i0.ɵɵdirectiveInject(i1.TimeService, 16), i0.ɵɵdirectiveInject(i2.TranslateService, 16)); }; } static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclRelativeTime", type: RelativeTimePipe, pure: false, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RelativeTimePipe, [{ type: Pipe, args: [{ name: 'aclRelativeTime', pure: false, standalone: true }] }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.TimeService }, { type: i2.TranslateService }], null); })(); export class DateTimePipe { constructor(time) { this.time = time; } transform(value, utc = false) { if (!value?.toString().trim()) { return FIELD_NOT_AVAILABLE_PLACEHOLDER; } return this.time.format(utc ? dayjs.utc(value) : value, this.format); } static { this.ɵfac = function DateTimePipe_Factory(t) { return new (t || DateTimePipe)(i0.ɵɵinject(i1.TimeService)); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DateTimePipe, factory: DateTimePipe.ɵfac }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DateTimePipe, [{ type: Injectable }], () => [{ type: i1.TimeService }], null); })(); export class StandardTimePipe extends DateTimePipe { constructor() { super(...arguments); this.format = DATE_TIME_FORMAT; } static { this.ɵfac = /*@__PURE__*/ (() => { let ɵStandardTimePipe_BaseFactory; return function StandardTimePipe_Factory(t) { return (ɵStandardTimePipe_BaseFactory || (ɵStandardTimePipe_BaseFactory = i0.ɵɵgetInheritedFactory(StandardTimePipe)))(t || StandardTimePipe); }; })(); } static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclStandardTime", type: StandardTimePipe, pure: true, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StandardTimePipe, [{ type: Pipe, args: [{ name: 'aclStandardTime', standalone: true }] }], null, null); })(); export class StandardDatePipe extends DateTimePipe { constructor() { super(...arguments); this.format = DATE_FORMAT; } static { this.ɵfac = /*@__PURE__*/ (() => { let ɵStandardDatePipe_BaseFactory; return function StandardDatePipe_Factory(t) { return (ɵStandardDatePipe_BaseFactory || (ɵStandardDatePipe_BaseFactory = i0.ɵɵgetInheritedFactory(StandardDatePipe)))(t || StandardDatePipe); }; })(); } static { this.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "aclStandardDate", type: StandardDatePipe, pure: true, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StandardDatePipe, [{ type: Pipe, args: [{ name: 'aclStandardDate', standalone: true }] }], null, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2NvcmUvcGlwZXMvdGltZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsVUFBVSxFQUVWLElBQUksR0FFTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQXFCLE1BQU0sT0FBTyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsT0FBTyxFQUNMLCtCQUErQixFQUMvQixtQkFBbUIsR0FDcEIsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUVwQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUNyRCxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUNuRCxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNoRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUcvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSzNCLFlBQ21CLEdBQXNCLEVBQ3RCLElBQWlCLEVBQ2pCLFNBQTJCO1FBRjNCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFQN0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENB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QUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7NkVBWG1CLFlBQVk7dUVBQVosWUFBWSxXQUFaLFlBQVk7O2lGQUFaLFlBQVk7Y0FEakMsVUFBVTs7QUFnQlgsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFEbEQ7O1FBRVcsV0FBTSxHQUFHLGdCQUFnQixDQUFDO0tBQ3BDO29PQUZZLGdCQUFnQixTQUFoQixnQkFBZ0I7eUZBQWhCLGdCQUFnQjs7aUZBQWhCLGdCQUFnQjtjQUQ1QixJQUFJO2VBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUFNbkQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLFlBQVk7SUFEbEQ7O1FBRVcsV0FBTSxHQUFHLFdBQVcsQ0FBQztLQUMvQjtvT0FGWSxnQkFBZ0IsU0FBaEIsZ0JBQWdCO3lGQUFoQixnQkFBZ0I7O2lGQUFoQixnQkFBZ0I7Y0FENUIsSUFBSTtlQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSB1dGlsc1xuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3ksXG4gIFBpcGUsXG4gIFBpcGVUcmFuc2Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGRheWpzLCB7IENvbmZpZ1R5cGUgfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IERBVEVfRk9STUFULCBEQVRFX1RJTUVfRk9STUFUIH0gZnJvbSAnLi4vY29uc3RhbnRzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgVGltZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHtcbiAgRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUixcbiAgaXNGaWVsZE5vdEF2YWlsYWJsZSxcbn0gZnJvbSAnLi9maWVsZC1ub3QtYXZhaWxhYmxlLnBpcGUnO1xuXG5jb25zdCBNSUxMSVNFQ09ORFNfU0VDT05EID0gMTAwMDtcbmNvbnN0IE1JTExJU0VDT05EU19NSU5VVEUgPSBNSUxMSVNFQ09ORFNfU0VDT05EICogNjA7XG5jb25zdCBNSUxMSVNFQ09ORFNfSE9VUiA9IE1JTExJU0VDT05EU19NSU5VVEUgKiA2MDtcbmNvbnN0IE1JTExJU0VDT05EU19EQVkgPSBNSUxMSVNFQ09ORFNfSE9VUiAqIDI0O1xuY29uc3QgTUlMTElTRUNPTkRTX1dFRUsgPSBNSUxMSVNFQ09ORFNfREFZICogNztcblxuQFBpcGUoeyBuYW1lOiAnYWNsUmVsYXRpdmVUaW1lJywgcHVyZTogZmFsc2UsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBSZWxhdGl2ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgdGltZXJJZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRpbWU6IFRpbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5sb2NhbGUkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkJC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JCQuY29tcGxldGUoKTtcblxuICAgIGlmICh0aGlzLnRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogQ29uZmlnVHlwZSkge1xuICAgIGlmIChpc0ZpZWxkTm90QXZhaWxhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIEZJRUxEX05PVF9BVkFJTEFCTEVfUExBQ0VIT0xERVI7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGdpdmVuVGltZSA9IGRheWpzKHZhbHVlKS52YWx1ZU9mKCk7XG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGN1cnJlbnRUaW1lIC0gZ2l2ZW5UaW1lO1xuXG4gICAgaWYgKGRpc3RhbmNlID49IE1JTExJU0VDT05EU19XRUVLKSB7XG4gICAgICByZXR1cm4gdGhpcy50aW1lLmZvcm1hdCh2YWx1ZSwgREFURV9GT1JNQVQpO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tEaXN0YW5jZShkaXN0YW5jZSk7XG5cbiAgICByZXR1cm4gZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfTUlOVVRFXG4gICAgICA/IHRoaXMudHJhbnNsYXRlLmdldCgnanVzdF9ub3cnKVxuICAgICAgOiB0aGlzLnRpbWUuZGlzdGFuY2UoZ2l2ZW5UaW1lLCBjdXJyZW50VGltZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tEaXN0YW5jZShkaXN0YW5jZTogbnVtYmVyKSB7XG4gICAgaWYgKGRpc3RhbmNlIDwgTUlMTElTRUNPTkRTX01JTlVURSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lcihNSUxMSVNFQ09ORFNfU0VDT05EKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfSE9VUikge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhcnRUaW1lcihNSUxMSVNFQ09ORFNfTUlOVVRFKTtcbiAgICB9XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBNSUxMSVNFQ09ORFNfREFZKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGFydFRpbWVyKE1JTExJU0VDT05EU19IT1VSKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydFRpbWVyKE1JTExJU0VDT05EU19EQVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKHRpbWVvdXQ6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVySWQpO1xuICAgIHRoaXMudGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLCB0aW1lb3V0KTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0ZVRpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGFic3RyYWN0IGZvcm1hdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGltZTogVGltZVNlcnZpY2UpIHt9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBDb25maWdUeXBlLCB1dGMgPSBmYWxzZSkge1xuICAgIGlmICghdmFsdWU/LnRvU3RyaW5nKCkudHJpbSgpKSB7XG4gICAgICByZXR1cm4gRklFTERfTk9UX0FWQUlMQUJMRV9QTEFDRUhPTERFUjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aW1lLmZvcm1hdCh1dGMgPyBkYXlqcy51dGModmFsdWUpIDogdmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdhY2xTdGFuZGFyZFRpbWUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRUaW1lUGlwZSBleHRlbmRzIERhdGVUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBvdmVycmlkZSBmb3JtYXQgPSBEQVRFX1RJTUVfRk9STUFUO1xufVxuXG5AUGlwZSh7IG5hbWU6ICdhY2xTdGFuZGFyZERhdGUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgU3RhbmRhcmREYXRlUGlwZSBleHRlbmRzIERhdGVUaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBvdmVycmlkZSBmb3JtYXQgPSBEQVRFX0ZPUk1BVDtcbn1cbiJdfQ==