import { useTranslation } from 'react-i18next';
import { useQuery } from '@tanstack/react-query';
import { referralNetworkApi } from '@/api/referralNetwork';
import { CloseIcon } from '@/components/icons';
import { useReferralNetworkStore } from '@/store/referralNetwork';
import { formatKopeksToRubles, getSubscriptionStatusColor } from '../utils';
interface UserDetailPanelProps {
userId: number;
className?: string;
}
export function UserDetailPanel({ userId, className }: UserDetailPanelProps) {
const { t } = useTranslation();
const setSelectedNode = useReferralNetworkStore((s) => s.setSelectedNode);
const {
data: user,
isLoading,
isError,
} = useQuery({
queryKey: ['referral-network-user', userId],
queryFn: () => referralNetworkApi.getUserDetail(userId),
staleTime: 60_000,
});
function handleClose() {
setSelectedNode(null);
}
return (
{/* Header */}
{user?.display_name ?? '...'}
{/* Content */}
{isLoading && (
)}
{isError && (
{t('admin.referralNetwork.error')}
)}
{user && (
{/* Identity */}
{user.username && (
@
{user.username}
)}
{user.tg_id && (
{t('admin.referralNetwork.user.tgId')}
{user.tg_id}
)}
{user.email && (
{t('admin.referralNetwork.user.email')}
{user.email}
)}
{user.is_partner && (
{t('admin.referralNetwork.user.partner')}
)}
{/* Subscription */}
{t('admin.referralNetwork.user.subscription')}
{user.subscription_name ? (
{user.subscription_name}
{user.subscription_status && (
{t(
`admin.referralNetwork.user.subscriptionStatus.${user.subscription_status}`,
)}
)}
{user.subscription_end && (
{t('admin.referralNetwork.user.validUntil', {
date: new Date(user.subscription_end).toLocaleDateString(),
})}
)}
) : (
{t('admin.referralNetwork.user.noSubscription')}
)}
{/* Personal stats */}
{t('admin.referralNetwork.user.personalStats')}
{t('admin.referralNetwork.user.totalSpent')}
{formatKopeksToRubles(user.personal_spent_kopeks)} ₽
{t('admin.referralNetwork.user.referralEarnings')}
{formatKopeksToRubles(user.personal_revenue_kopeks)} ₽
{/* Referral branch */}
{t('admin.referralNetwork.user.referralBranch')}
{t('admin.referralNetwork.user.directReferrals')}
{user.direct_referrals}
{t('admin.referralNetwork.user.branchSize')}
{user.total_branch_users}
{t('admin.referralNetwork.user.branchRevenue')}
{formatKopeksToRubles(user.branch_revenue_kopeks)} ₽
{/* Source */}
{t('admin.referralNetwork.user.source')}
{t('admin.referralNetwork.user.referredBy')}
{user.referrer_display_name ?? t('admin.referralNetwork.user.organic')}
{user.campaign_name && (
{t('admin.referralNetwork.user.fromCampaign')}
{user.campaign_name}
)}
)}
);
}