2022-02-21 22:33:03 +04:00
|
|
|
import { Pipe, PipeTransform } from '@angular/core';
|
|
|
|
|
|
|
|
@Pipe({
|
|
|
|
name: 'amountShortener'
|
|
|
|
})
|
|
|
|
export class AmountShortenerPipe implements PipeTransform {
|
2022-04-05 00:36:00 +09:00
|
|
|
transform(num: number, ...args: any[]): unknown {
|
2022-08-12 15:35:00 +02:00
|
|
|
const digits = args[0] ?? 1;
|
2022-04-05 00:36:00 +09:00
|
|
|
const unit = args[1] || undefined;
|
2022-09-08 18:56:25 +02:00
|
|
|
const isMoney = args[2] || false;
|
2022-03-25 11:38:36 +09:00
|
|
|
|
2022-03-14 20:00:19 +01:00
|
|
|
if (num < 1000) {
|
2022-03-25 11:38:36 +09:00
|
|
|
return num.toFixed(digits);
|
2022-03-13 11:37:56 +01:00
|
|
|
}
|
|
|
|
|
2022-03-14 20:00:19 +01:00
|
|
|
const lookup = [
|
|
|
|
{ value: 1, symbol: '' },
|
|
|
|
{ value: 1e3, symbol: 'k' },
|
|
|
|
{ value: 1e6, symbol: 'M' },
|
2022-09-08 18:56:25 +02:00
|
|
|
{ value: 1e9, symbol: isMoney ? 'B' : 'G' },
|
2022-03-14 20:00:19 +01:00
|
|
|
{ value: 1e12, symbol: 'T' },
|
|
|
|
{ value: 1e15, symbol: 'P' },
|
|
|
|
{ value: 1e18, symbol: 'E' }
|
|
|
|
];
|
|
|
|
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
2022-04-05 00:36:00 +09:00
|
|
|
const item = lookup.slice().reverse().find((item) => num >= item.value);
|
|
|
|
|
|
|
|
if (unit !== undefined) {
|
|
|
|
return item ? (num / item.value).toFixed(digits).replace(rx, '$1') + ' ' + item.symbol + unit : '0';
|
|
|
|
} else {
|
|
|
|
return item ? (num / item.value).toFixed(digits).replace(rx, '$1') + item.symbol : '0';
|
|
|
|
}
|
2022-02-21 22:33:03 +04:00
|
|
|
}
|
2022-03-13 11:37:56 +01:00
|
|
|
}
|