'use client'; import { Box } from '@/ui/Box'; import { Stack } from '@/ui/Stack'; import { Text } from '@/ui/Text'; import { Icon } from '@/ui/Icon'; import { ProgressLine } from '@/components/shared/ProgressLine'; import { ShieldAlert } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { ClientWrapperProps } from '@/lib/contracts/components/ComponentContracts'; import type { Result } from '@/lib/contracts/Result'; import type { SponsorshipRequestsViewData } from '@/lib/view-data/SponsorshipRequestsViewData'; import { SponsorshipRequestsTemplate } from '@/templates/SponsorshipRequestsTemplate'; interface SponsorshipRequestsClientProps extends ClientWrapperProps { onAccept: (requestId: string) => Promise>; onReject: (requestId: string, reason?: string) => Promise>; } export function SponsorshipRequestsClient({ viewData, onAccept, onReject }: SponsorshipRequestsClientProps) { const router = useRouter(); const [isProcessing, setIsProcessing] = useState(null); const [error, setError] = useState(null); const handleAccept = async (requestId: string) => { setIsProcessing(requestId); setError(null); const result = await onAccept(requestId); if (result.isErr()) { setError(result.getError()); setIsProcessing(null); } else { router.refresh(); setIsProcessing(null); } }; const handleReject = async (requestId: string, reason?: string) => { setIsProcessing(requestId); setError(null); const result = await onReject(requestId, reason); if (result.isErr()) { setError(result.getError()); setIsProcessing(null); } else { router.refresh(); setIsProcessing(null); } }; return ( <> {error && ( Action Failed {error} )} ); }