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 (
{displayName}
{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" />{t('admin.partners.rejectDialog.description', { name: displayName })}