import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card.tsx'; import { Grid } from '@/components/ui/layout'; import MetricItem from '@/components/ui/MetricItem.tsx'; import Spinner from '@/components/ui/Spinner.tsx'; import { useOrganizationStatistics } from '@/hooks/api/useAnalyticsAPI.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { Activity, DollarSign, Leaf, MapPin, Target, TrendingUp } from 'lucide-react'; import React from 'react'; import { formatCurrency, formatNumber } from '../../lib/fin'; interface OrganizationStatisticsProps { organizationId: string; } const OrganizationStatistics = ({ organizationId }: OrganizationStatisticsProps) => { const { t } = useTranslation(); const { data: stats, isLoading, error } = useOrganizationStatistics(organizationId); // use central fin utilities if (isLoading) { return ( {t('organizationPage.statistics')} ); } if (error) { return ( {t('organizationPage.statistics')} {t('organizationPage.statisticsError')} ); } if (!stats) { return null; } return ( {t('organizationPage.statistics')} } label={t('organizationPage.totalSites')} value={formatNumber(stats.total_sites)} /> } label={t('organizationPage.totalResourceFlows')} value={formatNumber(stats.total_resource_flows)} /> } label={t('organizationPage.activeMatches')} value={formatNumber(stats.active_matches)} /> } label={t('organizationPage.totalMatches')} value={formatNumber(stats.total_matches)} /> {stats.co2_savings_tonnes > 0 && ( } label={t('organizationPage.co2Savings')} value={`${formatNumber(stats.co2_savings_tonnes)} t`} /> )} {stats.economic_value_eur > 0 && ( } label={t('organizationPage.economicValue')} value={formatCurrency(stats.economic_value_eur)} /> )} ); }; export default React.memo(OrganizationStatistics);
{t('organizationPage.statisticsError')}