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}
)}
)}
); }