import { Users, UserCheck, UserMinus, Clock, BarChart3, TrendingUp, } from 'lucide-react'; import { getTranslations } from 'next-intl/server'; import { createMemberServices } from '@kit/member-management/services'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { AccountNotFound } from '~/components/account-not-found'; import { CmsPageShell } from '~/components/cms-page-shell'; import { StatsCard } from '~/components/stats-card'; import { StatsBarChart, StatsPieChart } from '~/components/stats-charts'; interface PageProps { params: Promise<{ account: string }>; } export default async function MemberStatisticsPage({ params }: PageProps) { const { account } = await params; const client = getSupabaseServerClient(); const t = await getTranslations('members'); const { data: acct } = await client .from('accounts') .select('id') .eq('slug', account) .single(); if (!acct) return ; const { query } = createMemberServices(client); const statsRaw = await query.getStatistics(acct.id); // Compute total from individual status counts const total = Object.values(statsRaw).reduce((a, b) => a + b, 0); const stats = { ...statsRaw, total }; const statusChartData = [ { name: t('status.active'), value: stats.active ?? 0 }, { name: t('status.inactive'), value: stats.inactive ?? 0 }, { name: t('status.pending'), value: stats.pending ?? 0 }, { name: t('status.resigned'), value: stats.resigned ?? 0 }, ]; return (
} /> } /> } /> } />
{t('statistics.title')} {t('statistics.totalMembers')}
); }