@acorex/core 20.1.12 → 20.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/date-time/index.d.ts
CHANGED
@@ -270,8 +270,9 @@ declare module '@acorex/core/format' {
|
|
270
270
|
}
|
271
271
|
}
|
272
272
|
declare class AXTimeLeftFormatter implements AXFormatter {
|
273
|
+
private translateService;
|
273
274
|
get name(): string;
|
274
|
-
format(value: number | string, options?: AXTimeLeftFormatterOptions): string;
|
275
|
+
format(value: number | string | Date, options?: AXTimeLeftFormatterOptions): string;
|
275
276
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXTimeLeftFormatter, never>;
|
276
277
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXTimeLeftFormatter>;
|
277
278
|
}
|
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
|
|
6
6
|
import { InjectionToken, inject, Injectable, Pipe, NgModule } from '@angular/core';
|
7
7
|
import { BehaviorSubject, Subject } from 'rxjs';
|
8
8
|
import { AX_GLOBAL_CONFIG } from '@acorex/core/config';
|
9
|
-
import { defaults, orderBy, set, isNil } from 'lodash-es';
|
9
|
+
import { defaults, orderBy, set, isNil, isDate } from 'lodash-es';
|
10
10
|
import { isBrowser } from '@acorex/core/platform';
|
11
11
|
import { translateSync, AXTranslationService } from '@acorex/core/translation';
|
12
12
|
|
@@ -215,7 +215,7 @@ class AXDateTime {
|
|
215
215
|
const parts = formatter.formatToParts(new Date());
|
216
216
|
// Map parts to their respective format
|
217
217
|
const formatMap = {
|
218
|
-
day: '
|
218
|
+
day: 'DD',
|
219
219
|
month: style == 'longDate' ? 'MMMM' : 'MM',
|
220
220
|
year: 'yyyy',
|
221
221
|
hour: 'HH',
|
@@ -1489,12 +1489,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImpor
|
|
1489
1489
|
}] });
|
1490
1490
|
|
1491
1491
|
class AXTimeLeftFormatter {
|
1492
|
+
constructor() {
|
1493
|
+
this.translateService = inject(AXTranslationService);
|
1494
|
+
}
|
1492
1495
|
get name() {
|
1493
1496
|
return 'timeleft';
|
1494
1497
|
}
|
1495
1498
|
format(value, options) {
|
1496
|
-
|
1497
|
-
|
1499
|
+
if (isNil(value)) {
|
1500
|
+
return '';
|
1501
|
+
}
|
1502
|
+
let valueNumber;
|
1503
|
+
if (isDate(value)) {
|
1504
|
+
valueNumber = value.getTime() - new Date().getTime();
|
1505
|
+
}
|
1506
|
+
else {
|
1507
|
+
valueNumber = Number(value);
|
1508
|
+
}
|
1509
|
+
const sign = this.translateService.translateSync(`@acorex:time.${valueNumber >= 0 ? 'left' : 'ago'}`);
|
1498
1510
|
const milliseconds = Math.abs(valueNumber);
|
1499
1511
|
const durationInSeconds = Math.round(milliseconds / 1000);
|
1500
1512
|
let format = options?.format;
|
@@ -1502,69 +1514,74 @@ class AXTimeLeftFormatter {
|
|
1502
1514
|
if (isNil(format)) {
|
1503
1515
|
if (durationInSeconds < 45)
|
1504
1516
|
format = 's';
|
1505
|
-
else if (durationInSeconds <
|
1517
|
+
else if (durationInSeconds < 2700)
|
1506
1518
|
format = 'm';
|
1507
|
-
else if (durationInSeconds <
|
1519
|
+
else if (durationInSeconds < 79200)
|
1508
1520
|
format = 'h';
|
1509
|
-
else if (durationInSeconds <
|
1521
|
+
else if (durationInSeconds < 2246400)
|
1510
1522
|
format = 'd';
|
1511
|
-
else if (durationInSeconds <
|
1523
|
+
else if (durationInSeconds < 27648000)
|
1512
1524
|
format = 'M';
|
1513
1525
|
else
|
1514
1526
|
format = 'y';
|
1515
1527
|
}
|
1516
1528
|
// Helper function for zero-padding
|
1517
1529
|
const pad = (num) => num.toString().padStart(2, '0');
|
1530
|
+
const translate = (key, useSign = true) => {
|
1531
|
+
const translated = this.translateService.translateSync(`@acorex:time.${key}`);
|
1532
|
+
return useSign ? `${translated} ${sign}` : translated;
|
1533
|
+
};
|
1518
1534
|
switch (format) {
|
1519
1535
|
case 's':
|
1520
|
-
return `${durationInSeconds}
|
1536
|
+
return `${durationInSeconds} ${translate('seconds')}`;
|
1521
1537
|
case 'ss':
|
1522
|
-
return `${pad(durationInSeconds)}
|
1538
|
+
return `${pad(durationInSeconds)} ${translate('seconds')}`;
|
1523
1539
|
case 'm':
|
1524
|
-
return `${Math.round(durationInSeconds / 60)}
|
1540
|
+
return `${Math.round(durationInSeconds / 60)} ${translate(durationInSeconds >= 120 ? 'minutes' : 'minute')}`;
|
1525
1541
|
case 'mm':
|
1526
|
-
return `${pad(Math.round(durationInSeconds / 60))}
|
1542
|
+
return `${pad(Math.round(durationInSeconds / 60))} ${translate('minutes')}`;
|
1527
1543
|
case 'h':
|
1528
1544
|
case 'H':
|
1529
|
-
if (durationInSeconds <
|
1530
|
-
return
|
1531
|
-
return `${Math.round(durationInSeconds / 3600)}
|
1545
|
+
if (durationInSeconds < 5340)
|
1546
|
+
return translate('an-hour');
|
1547
|
+
return `${Math.round(durationInSeconds / 3600)} ${translate(durationInSeconds >= 10800 ? 'hours' : 'hour')}`;
|
1532
1548
|
case 'hh':
|
1533
1549
|
case 'HH':
|
1534
|
-
if (durationInSeconds <
|
1535
|
-
return `01
|
1536
|
-
return `${pad(Math.round(durationInSeconds / 3600))}
|
1550
|
+
if (durationInSeconds < 5340)
|
1551
|
+
return `01 ${translate('hour')}`;
|
1552
|
+
return `${pad(Math.round(durationInSeconds / 3600))} ${translate('hours')}`;
|
1537
1553
|
case 'd':
|
1538
1554
|
case 'D':
|
1539
|
-
if (durationInSeconds <
|
1540
|
-
return
|
1541
|
-
return `${Math.round(durationInSeconds / (3600 * 24))}
|
1555
|
+
if (durationInSeconds < 126000)
|
1556
|
+
return translate('a-day');
|
1557
|
+
return `${Math.round(durationInSeconds / (3600 * 24))} ${translate(durationInSeconds >= 252000 ? 'days' : 'day')}`;
|
1542
1558
|
case 'dd':
|
1543
1559
|
case 'DD':
|
1544
|
-
if (durationInSeconds <
|
1545
|
-
return `01
|
1546
|
-
return `${pad(Math.round(durationInSeconds / (3600 * 24)))}
|
1560
|
+
if (durationInSeconds < 126000)
|
1561
|
+
return `01 ${translate('day')}`;
|
1562
|
+
return `${pad(Math.round(durationInSeconds / (3600 * 24)))} ${translate('days')}`;
|
1547
1563
|
case 'M':
|
1548
|
-
if (durationInSeconds <
|
1549
|
-
return
|
1550
|
-
return `${Math.round(durationInSeconds / (3600 * 24 * 30))}
|
1564
|
+
if (durationInSeconds < 3888000)
|
1565
|
+
return translate('a-month');
|
1566
|
+
return `${Math.round(durationInSeconds / (3600 * 24 * 30))} ${translate(durationInSeconds >= 7776000 ? 'months' : 'month')}`;
|
1551
1567
|
case 'MM':
|
1552
|
-
if (durationInSeconds <
|
1553
|
-
return `01
|
1554
|
-
return `${pad(Math.round(durationInSeconds / (3600 * 24 * 30)))}
|
1568
|
+
if (durationInSeconds < 3888000)
|
1569
|
+
return `01 ${translate('month')}`;
|
1570
|
+
return `${pad(Math.round(durationInSeconds / (3600 * 24 * 30)))} ${translate('months')}`;
|
1555
1571
|
case 'y':
|
1556
1572
|
case 'Y':
|
1557
|
-
if (durationInSeconds <
|
1558
|
-
return
|
1559
|
-
return `${Math.round(durationInSeconds / (3600 * 24 * 365))}
|
1573
|
+
if (durationInSeconds < 47260800)
|
1574
|
+
return translate('a-year');
|
1575
|
+
return `${Math.round(durationInSeconds / (3600 * 24 * 365))} ${translate(durationInSeconds >= 63072000 ? 'years' : 'year')}`;
|
1560
1576
|
case 'yy':
|
1561
1577
|
case 'YY':
|
1562
1578
|
case 'yyyy':
|
1563
1579
|
case 'YYYY':
|
1564
|
-
if (durationInSeconds <
|
1565
|
-
return `01
|
1566
|
-
return `${pad(Math.round(durationInSeconds / (3600 * 24 * 365)))}
|
1580
|
+
if (durationInSeconds < 47260800)
|
1581
|
+
return `01 ${translate('year')}`;
|
1582
|
+
return `${pad(Math.round(durationInSeconds / (3600 * 24 * 365)))} ${translate('years')}`;
|
1567
1583
|
default:
|
1584
|
+
console.error('Invalid format for timeleft formatter pipe');
|
1568
1585
|
return 'Invalid format';
|
1569
1586
|
}
|
1570
1587
|
}
|