import React, { useEffect, useState } from 'react'; import { CheckCircle, Clock, Search, XCircle } from 'lucide-react'; import { axiosInstance } from '../../services/axios'; import { motion, AnimatePresence } from 'framer-motion'; interface PendingPartner { id: string; email: string; createdAt: string; acceptances: Array<{ id: string; signatureHash: string | null; documentUrl: string | null; document: { type: string; version: string; } }>; } export const ApprovalsPage: React.FC = () => { const [partners, setPartners] = useState([]); const [loading, setLoading] = useState(true); const [processingId, setProcessingId] = useState(null); useEffect(() => { fetchPending(); }, []); const fetchPending = async () => { try { const res = await axiosInstance.get('/legal/pending'); setPartners(res.data); } catch (err) { console.error('Failed to fetch pending partners', err); } finally { setLoading(false); } }; const approvePartner = async (partnerId: string) => { setProcessingId(partnerId); try { await axiosInstance.post(`/legal/approve/${partnerId}`); setPartners(partners.filter(p => p.id !== partnerId)); } catch (err) { console.error('Failed to approve', err); } finally { setProcessingId(null); } }; if (loading) { return (
); } return (
{/* Header */}

Approvals Queue {partners.length} Pending

Review and approve partner legal documents to grant platform access.

{/* List */}
{partners.length === 0 ? ( ) : ( partners.map(partner => { const nda = partner.acceptances.find(a => a.document.type === 'NDA'); const msa = partner.acceptances.find(a => a.document.type === 'MSA'); return ( ); }) )}
Partner NDA Status MSA Status Actions

Queue is empty

All partners have been reviewed.

{partner.email.charAt(0).toUpperCase()}

{partner.email}

{new Date(partner.createdAt).toLocaleDateString()}

{nda ? (
{nda.documentUrl ? 'Uploaded PDF' : 'Digital Sign'} {nda.documentUrl && ( View )}
) : (
Missing
)}
{msa ? (
{msa.documentUrl ? 'Uploaded PDF' : 'Digital Sign'} {msa.documentUrl && ( View )}
) : (
Missing
)}
); }; export default ApprovalsPage;