From 3a78daf03d655c9fdd8402fcd9ce56491a3bf22b Mon Sep 17 00:00:00 2001 From: MyNameIsBatman Date: Thu, 16 Sep 2021 09:35:19 -0300 Subject: [PATCH] Purse Short Number toggle --- public/ui-config.json | 1 + src/api/utils/LocalizeFormattedNumber.ts | 6 ++++++ src/api/utils/index.ts | 1 + src/views/purse/PurseView.tsx | 11 +++++++--- .../purse/views/currency/CurrencyView.tsx | 21 ++++++++++++------- .../views/currency/CurrencyView.types.ts | 1 + .../purse/views/seasonal/SeasonalView.tsx | 4 ++-- 7 files changed, 33 insertions(+), 12 deletions(-) create mode 100644 src/api/utils/LocalizeFormattedNumber.ts diff --git a/public/ui-config.json b/public/ui-config.json index 1cf49b7a..58dfdcc7 100644 --- a/public/ui-config.json +++ b/public/ui-config.json @@ -45,6 +45,7 @@ 5, 101 ], + "currency.display.number.short": false, "currency.asset.icon.url": "${images.url}/wallet/%type%.png", "catalog.asset.url": "${image.library.url}catalogue", "catalog.asset.image.url": "${catalog.asset.url}/%name%.gif", diff --git a/src/api/utils/LocalizeFormattedNumber.ts b/src/api/utils/LocalizeFormattedNumber.ts new file mode 100644 index 00000000..fab30d46 --- /dev/null +++ b/src/api/utils/LocalizeFormattedNumber.ts @@ -0,0 +1,6 @@ +export function LocalizeFormattedNumber(number: number): string +{ + if(!number || isNaN(number)) return '0'; + + return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' '); +}; diff --git a/src/api/utils/index.ts b/src/api/utils/index.ts index 3125981d..2ef88a1e 100644 --- a/src/api/utils/index.ts +++ b/src/api/utils/index.ts @@ -1,6 +1,7 @@ export * from './ColorUtils'; export * from './LocalizeBadgeDescription'; export * from './LocalizeBageName'; +export * from './LocalizeFormattedNumber'; export * from './LocalizeShortNumber'; export * from './LocalizeText'; export * from './Randomizer'; diff --git a/src/views/purse/PurseView.tsx b/src/views/purse/PurseView.tsx index 3b1c5c56..7a2f8028 100644 --- a/src/views/purse/PurseView.tsx +++ b/src/views/purse/PurseView.tsx @@ -29,6 +29,11 @@ export const PurseView: FC<{}> = props => return GetConfiguration('system.currency.types', []); }, []); + const currencyDisplayNumberShort = useMemo(() => + { + return GetConfiguration('currency.display.number.short', false); + }, []); + const getCurrencyElements = useCallback((offset: number, limit: number = -1, seasonal: boolean = false) => { if(!purse.activityPoints.size) return null; @@ -53,13 +58,13 @@ export const PurseView: FC<{}> = props => if((limit > -1) && (count === limit)) break; if(seasonal) elements.push(); - else elements.push(); + else elements.push(); count++; } return elements; - }, [ purse, displayedCurrencies ]); + }, [ purse, displayedCurrencies, currencyDisplayNumberShort ]); const getClubText = useCallback(() => { @@ -123,7 +128,7 @@ export const PurseView: FC<{}> = props =>
- + { getCurrencyElements(0, 2) }
diff --git a/src/views/purse/views/currency/CurrencyView.tsx b/src/views/purse/views/currency/CurrencyView.tsx index 63783a42..f4450e78 100644 --- a/src/views/purse/views/currency/CurrencyView.tsx +++ b/src/views/purse/views/currency/CurrencyView.tsx @@ -1,13 +1,23 @@ -import { FC } from 'react'; +import { FC, useMemo } from 'react'; import { OverlayTrigger, Tooltip } from 'react-bootstrap'; -import { LocalizeShortNumber } from '../../../../api'; +import { LocalizeFormattedNumber, LocalizeShortNumber } from '../../../../api'; import { CurrencyIcon } from '../../../shared/currency-icon/CurrencyIcon'; import { CurrencyViewProps } from './CurrencyView.types'; export const CurrencyView: FC = props => { - const { type = -1, amount = -1 } = props; + const { type = -1, amount = -1, short = false } = props; + const element = useMemo(() => + { + return (
+
{ short ? LocalizeShortNumber(amount) : LocalizeFormattedNumber(amount) }
+ +
); + }, [ amount, short, type ]); + + if(!short) return element; + return ( = props => { amount } }> -
-
{LocalizeShortNumber(amount)}
- -
+ { element }
); } diff --git a/src/views/purse/views/currency/CurrencyView.types.ts b/src/views/purse/views/currency/CurrencyView.types.ts index 0ff2718e..fc6684f8 100644 --- a/src/views/purse/views/currency/CurrencyView.types.ts +++ b/src/views/purse/views/currency/CurrencyView.types.ts @@ -2,4 +2,5 @@ export interface CurrencyViewProps { type: number; amount: number; + short: boolean; } diff --git a/src/views/purse/views/seasonal/SeasonalView.tsx b/src/views/purse/views/seasonal/SeasonalView.tsx index 3758c71c..804b15b4 100644 --- a/src/views/purse/views/seasonal/SeasonalView.tsx +++ b/src/views/purse/views/seasonal/SeasonalView.tsx @@ -1,5 +1,5 @@ import { FC } from 'react'; -import { LocalizeShortNumber, LocalizeText } from '../../../../api'; +import { LocalizeFormattedNumber, LocalizeText } from '../../../../api'; import { CurrencyIcon } from '../../../shared/currency-icon/CurrencyIcon'; import { SeasonalViewProps } from './SeasonalView.types'; @@ -11,7 +11,7 @@ export const SeasonalView: FC = props =>
{ LocalizeText(`purse.seasonal.currency.${ type }`) } - { LocalizeShortNumber(amount) } + { LocalizeFormattedNumber(amount) }