import { useParams, useNavigate } from 'react-router'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useTranslation } from 'react-i18next'; import { partnerApi } from '../api/partners'; import { campaignsApi } from '../api/campaigns'; import { AdminBackButton } from '../components/admin'; export default function AdminPartnerCampaignAssign() { const { t } = useTranslation(); const { userId } = useParams<{ userId: string }>(); const navigate = useNavigate(); const queryClient = useQueryClient(); // Fetch partner detail to know already assigned campaign IDs const { data: partner } = useQuery({ queryKey: ['admin-partner-detail', userId], queryFn: () => partnerApi.getPartnerDetail(Number(userId)), enabled: !!userId, }); // Fetch all campaigns const { data: campaignsData, isLoading } = useQuery({ queryKey: ['admin-campaigns-all'], queryFn: () => campaignsApi.getCampaigns(true, 0, 100), }); const assignMutation = useMutation({ mutationFn: (campaignId: number) => partnerApi.assignCampaign(Number(userId), campaignId), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['admin-partner-detail', userId] }); navigate(`/admin/partners/${userId}`); }, }); const assignedIds = new Set(partner?.campaigns.map((c) => c.id) ?? []); const available = campaignsData?.campaigns.filter((c) => !assignedIds.has(c.id) && c.partner_user_id === null) ?? []; const takenByOthers = campaignsData?.campaigns.filter((c) => !assignedIds.has(c.id) && c.partner_user_id !== null) ?? []; const partnerName = partner ? partner.first_name || partner.username || `#${partner.user_id}` : ''; return (
{partnerName}
}