import clsx from 'clsx' import {type Stats} from 'common/stats' import {useEffect, useState} from 'react' import {Col} from 'web/components/layout/col' import {PageBase} from 'web/components/page-base' import {SEO} from 'web/components/SEO' import ChartMembers from 'web/components/widgets/charts' import StatBox from 'web/components/widgets/stat-box' import {api} from 'web/lib/api' import {useT} from 'web/lib/locale' import {getCount} from 'web/lib/supabase/users' export default function Stats() { const t = useT() const [data, setData] = useState>({}) const [statsData, setStatsData] = useState(undefined) useEffect(() => { async function load() { const tables = [ 'profiles', 'active_members', 'bookmarked_searches', 'private_user_message_channels', 'profile_comments', 'compatibility_prompts', 'compatibility_answers', 'votes', 'vote_results', ] as const const [settled, statsResult] = await Promise.allSettled([ Promise.allSettled(tables.map((t) => getCount(t))), api('stats', {}), ]) const result: Record = {} if (settled.status === 'fulfilled') { settled.value.forEach((res, i) => { const key = tables[i] if (res.status === 'fulfilled') result[key] = res.value else result[key] = null }) } if (statsResult.status === 'fulfilled') { setStatsData(statsResult.value) } setData(result) } void load() }, []) return (

{t('stats.title', 'Growth & Stats')}

{!!data.profiles && ( )} {!!data.active_members && ( )} {!!data.private_user_message_channels && ( )} {!!statsData?.messages && ( )} {!!data.compatibility_prompts && ( )} {!!data.compatibility_answers && ( )} {!!data.votes && } {!!data.vote_results && ( )} {!!data.bookmarked_searches && ( )} {!!data.profile_comments && ( )} {!!statsData?.genderRatio && ( )}
) }