import { useState } from 'react'; import { useParams, useNavigate, useLocation } from 'react-router'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { partnerApi, type AdminPartnerApplicationItem } from '../api/partners'; import { AdminBackButton } from '../components/admin'; export default function AdminApplicationReview() { const { t } = useTranslation(); const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); const location = useLocation(); const queryClient = useQueryClient(); const [commission, setCommission] = useState('10'); const [rejectComment, setRejectComment] = useState(''); // Try to get application from navigate state, fallback to fetching const passedApp = (location.state as { application?: AdminPartnerApplicationItem } | null) ?.application; const { data: fetchedApps } = useQuery({ queryKey: ['admin-partner-applications'], queryFn: () => partnerApi.getApplications({ status: 'pending' }), enabled: !passedApp && !!id, }); const app = passedApp ?? fetchedApps?.items.find((a) => a.id === Number(id)); const approveMutation = useMutation({ mutationFn: ({ appId, commissionPercent }: { appId: number; commissionPercent: number }) => partnerApi.approveApplication(appId, { commission_percent: commissionPercent }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-partner-applications'] }); queryClient.invalidateQueries({ queryKey: ['admin-partners'] }); queryClient.invalidateQueries({ queryKey: ['admin-partner-stats'] }); navigate('/admin/partners'); }, }); const rejectMutation = useMutation({ mutationFn: ({ appId, comment }: { appId: number; comment?: string }) => partnerApi.rejectApplication(appId, { comment }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-partner-applications'] }); queryClient.invalidateQueries({ queryKey: ['admin-partner-stats'] }); navigate('/admin/partners'); }, }); if (!app) { return (

{t('admin.partners.approveDialog.title')}

); } const displayName = app.first_name || app.username || `#${app.user_id}`; return (
{/* Header */}

{t('admin.partners.actions.review')}

{displayName}

{/* Application Details */}

{t('admin.partners.tabs.applications')}

{displayName} {app.username && @{app.username}}
{app.company_name && (
{t('admin.partners.applicationFields.companyName')}: {' '} {app.company_name}
)} {app.website_url && (
{t('admin.partners.applicationFields.website')}: {' '} {app.website_url}
)} {app.telegram_channel && (
{t('admin.partners.applicationFields.channel')}: {' '} {app.telegram_channel}
)} {app.description && (
{t('admin.partners.applicationFields.description')}: {' '} {app.description}
)} {app.expected_monthly_referrals != null && (
{t('admin.partners.applicationFields.expectedReferrals')}: {' '} {app.expected_monthly_referrals}
)} {app.desired_commission_percent != null && (
{t('admin.partners.applicationFields.desiredCommission')}: {' '} {app.desired_commission_percent}%
)}
{/* Approve Section */}

{t('admin.partners.approveDialog.title')}

{t('admin.partners.approveDialog.description', { name: displayName })}

setCommission(e.target.value)} className="mb-4 w-full rounded-lg border border-dark-600 bg-dark-700 px-3 py-2 text-dark-100 outline-none focus:border-accent-500" placeholder="10" />
{approveMutation.isError && (
{t('common.error')}
)} {/* Reject Section */}

{t('admin.partners.rejectDialog.title')}

{t('admin.partners.rejectDialog.description', { name: displayName })}