import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { adminApi } from './adminApi.js'; import Modal from './Modal.jsx'; import StatusBadge from './StatusBadge.jsx'; const FIELDS = [ ['full_name', 'Name'], ['email', 'Email'], ['agreement_date', 'Agreement date'], ['age', 'Age'], ['address', 'Address'], ['registration_no', 'Registration number'], ['medical_council', 'Medical council'], ['pan', 'PAN'], ['gstin', 'GSTIN'], ['bank_name', 'Bank'], ['account_holder', 'Account holder'], ['account_number', 'Account number'], ['ifsc', 'IFSC'], ['rejection_reason', 'Rejection reason'], ]; export default function ApplicationDetailPage() { const { id } = useParams(); const [application, setApplication] = useState(null); const [error, setError] = useState(''); const [confirming, setConfirming] = useState(false); const [rejecting, setRejecting] = useState(false); const [reason, setReason] = useState(''); const [busy, setBusy] = useState(false); useEffect(() => { adminApi(`/api/admin/applications/${id}`) .then(setApplication) .catch((loadError) => setError(loadError.message)); }, [id]); async function resendSurveyLink() { setBusy(true); setError(''); try { setApplication( await adminApi(`/api/admin/applications/${id}/resend-survey-link`, { method: 'POST' }), ); } catch (resendError) { setError(resendError.message); } finally { setBusy(false); } } async function approve() { setBusy(true); setError(''); try { setApplication(await adminApi(`/api/admin/applications/${id}/approve`, { method: 'POST' })); setConfirming(false); } catch (approveError) { setError(approveError.message); } finally { setBusy(false); } } async function reject(event) { event.preventDefault(); setBusy(true); setError(''); try { setApplication( await adminApi(`/api/admin/applications/${id}/reject`, { method: 'POST', body: { reason }, }), ); setRejecting(false); setReason(''); } catch (rejectError) { setError(rejectError.message); } finally { setBusy(false); } } if (!application && !error) { return
Loading application…
; } if (!application) { return{error}
; } const canDecide = application.status === 'SUBMITTED'; return ({error}
: null}
{application.signature.type} at {application.signature.signedAt}
IP {application.signature.ip || '—'}
{application.signature.userAgent || 'Device not recorded'}
No signature
)} {canDecide ? (An email bounced or was dropped. Check the address before sending again.
) : null}No PDF yet
)}This adds the CREST signature and emails the survey link.