@mikezimm/fps-core-v7
Version:
Library of reusable core interfaces, types and constants migrated from fps-library-v2
84 lines (83 loc) • 3.77 kB
JavaScript
/**
* CodeAnalizerComment: Updated 2 imports on 2024-09-21 23:07:24
* Update:: import { ITrimNumbers } to '@mikezimm/fps-core-v7/lib/components/molecules/source-props/Lists/getVX/IGetInterfaceV2;'
* Update:: import { getCountLabel } to '@mikezimm/fps-core-v7/lib/logic/Math/labels;'
*/
import { getCountLabel } from "../../Math/labels";
/**
* Created for Drilldown to convert numbers: https://github.com/mikezimm/drilldown7/issues/371
* Always convert rightSide to lower case before passing in.
* Best if using createItemFunctionProp because it will already do that.
* Will return using browser settings for thousands seperator: .toLocaleString()
*
* @param value
* @param rightSide
* @returns
*/
export function convertNumbers(value, rightSide) {
const useValue = typeof value === 'string' ? parseFloat(value) :
typeof value === 'bigint' || typeof value === 'number' ? value : value;
if (useValue === null || useValue === undefined)
return value;
if (rightSide === 'BestNumber'.toLowerCase())
return getCountLabel(useValue, 1);
let newNumber = null;
const decimals = rightSide.indexOf('1') > -1 ? 1 : 0;
let result = null;
let label = '';
try {
switch (rightSide) {
case 'billions':
case 'billions1d':
newNumber = useValue / 1e9;
label = 'B';
break;
case 'millions':
case 'millions1d':
newNumber = useValue / 1e6;
label = 'M';
break;
case 'thousands':
case 'thousands1d':
newNumber = useValue / 1e3;
label = 'k';
break;
case 'hundreds':
case 'hundreds1d':
newNumber = useValue / 1e2;
label = 'c';
break;
case 'number1d':
newNumber = Math.round(useValue * 10) / 10; // https://github.com/mikezimm/drilldown7/issues/444
break;
case 'number2d':
newNumber = Math.round(useValue * 100) / 100; // https://github.com/mikezimm/drilldown7/issues/444
break;
case 'number3d':
newNumber = Math.round(useValue * 1000) / 1000; // https://github.com/mikezimm/drilldown7/issues/444
break;
case 'DaysToHours1D'.toLocaleLowerCase(): // https://github.com/mikezimm/drilldown7/issues/444
newNumber = useValue * 24;
newNumber = Math.round(newNumber * 10) / 10;
break;
case 'DaysToMinutes0D'.toLocaleLowerCase(): // https://github.com/mikezimm/drilldown7/issues/444
newNumber = useValue * 24 * 60;
newNumber = Math.round(newNumber * 10) / 10;
break;
case 'HoursToDays2D'.toLocaleLowerCase(): // https://github.com/mikezimm/drilldown7/issues/444
newNumber = useValue / 24;
newNumber = Math.round(newNumber * 100) / 100;
break;
case 'MinutesToDays2D'.toLocaleLowerCase(): // https://github.com/mikezimm/drilldown7/issues/444
newNumber = useValue / (24 * 60);
newNumber = Math.round(newNumber * 100) / 100;
break;
}
result = `${decimals === 1 ? (Math.round(!newNumber ? 0 : newNumber * 10) / 10).toLocaleString() : (Math.round(newNumber ? newNumber : 0)).toLocaleString()} ${label}`;
}
catch (e) {
console.log(`Unexpected error: convertNumbers error ~ 50: `, useValue);
}
return result;
}
//# sourceMappingURL=convertNumbers.js.map