diff --git a/src/webapp/features/profile/components/profileTabs/TabItem.tsx b/src/webapp/features/profile/components/profileTabs/TabItem.tsx index e2fdfc97..9b509645 100644 --- a/src/webapp/features/profile/components/profileTabs/TabItem.tsx +++ b/src/webapp/features/profile/components/profileTabs/TabItem.tsx @@ -3,6 +3,7 @@ import { Badge, Tabs } from '@mantine/core'; import classes from './TabItem.module.css'; import { useRouter } from 'next/navigation'; +import { abbreviateNumber } from '@/lib/utils/text'; interface Props { value: string; @@ -22,7 +23,7 @@ export default function TabItem(props: Props) { rightSection={ props.count && props.count > 0 ? ( - {props.count > 99 ? '99+' : props.count} + {abbreviateNumber(props.count)} ) : undefined } diff --git a/src/webapp/features/semble/components/sembleTabs/TabItem.tsx b/src/webapp/features/semble/components/sembleTabs/TabItem.tsx index 519344a9..c08c4919 100644 --- a/src/webapp/features/semble/components/sembleTabs/TabItem.tsx +++ b/src/webapp/features/semble/components/sembleTabs/TabItem.tsx @@ -2,6 +2,7 @@ import { Badge, TabsTab } from '@mantine/core'; import classes from './TabItem.module.css'; import { track } from '@vercel/analytics'; import posthog from 'posthog-js'; +import { abbreviateNumber } from '@/lib/utils/text'; interface Props { value: string; @@ -18,7 +19,7 @@ export default function TabItem(props: Props) { rightSection={ props.count && props.count > 0 ? ( - {props.count > 99 ? '99+' : props.count} + {abbreviateNumber(props.count)} ) : undefined } diff --git a/src/webapp/lib/utils/text.ts b/src/webapp/lib/utils/text.ts index 41a1fc38..a580b7c9 100644 --- a/src/webapp/lib/utils/text.ts +++ b/src/webapp/lib/utils/text.ts @@ -14,3 +14,19 @@ export const sanitizeText = (text: string): string => { // remove known bidirectional control characters return text.replace(/[\u202E\u202D\u202B\u200F\u200E\u202C\u200C]/g, ''); }; + +export const abbreviateNumber = (num: number): string => { + if (num < 1000) { + return num.toString(); + } + + if (num < 1_000_000) { + return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'k'; + } + + if (num < 1_000_000_000) { + return (num / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M'; + } + + return (num / 1_000_000_000).toFixed(1).replace(/\.0$/, '') + 'B'; +};