UNPKG

@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
/** * 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