import React, { useState } from 'react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { useTranslation } from 'react-i18next'; import { Shield, CheckCircle, XCircle, Clock, Users, AlertTriangle, FileText, DollarSign } from 'lucide-react'; interface Approval { id: string; proposalTitle: string; amount: number; category: string; requester: string; description: string; requiredSignatures: number; currentSignatures: number; signers: Array<{ name: string; status: 'approved' | 'rejected' | 'pending'; timestamp?: string; comment?: string; }>; deadline: string; status: 'pending' | 'approved' | 'rejected' | 'expired'; } export const MultiSigApproval: React.FC = () => { const { t } = useTranslation(); const [activeTab, setActiveTab] = useState('pending'); const [approvals] = useState([ { id: '1', proposalTitle: 'Infrastructure Upgrade - Q1 2024', amount: 45000, category: 'Infrastructure', requester: 'Tech Team', description: 'Upgrade cloud infrastructure for improved performance', requiredSignatures: 3, currentSignatures: 1, signers: [ { name: 'Alice', status: 'approved', timestamp: '2024-01-08 14:30', comment: 'Looks good' }, { name: 'Bob', status: 'pending' }, { name: 'Charlie', status: 'pending' }, { name: 'Diana', status: 'pending' } ], deadline: '2024-01-20', status: 'pending' }, { id: '2', proposalTitle: 'Developer Grants Program', amount: 100000, category: 'Development', requester: 'Dev Relations', description: 'Fund developer grants for ecosystem growth', requiredSignatures: 4, currentSignatures: 2, signers: [ { name: 'Alice', status: 'approved', timestamp: '2024-01-07 10:15' }, { name: 'Bob', status: 'approved', timestamp: '2024-01-07 11:45' }, { name: 'Charlie', status: 'pending' }, { name: 'Diana', status: 'pending' }, { name: 'Eve', status: 'pending' } ], deadline: '2024-01-25', status: 'pending' } ]); const pendingApprovals = approvals.filter(a => a.status === 'pending'); const approvedApprovals = approvals.filter(a => a.status === 'approved'); const rejectedApprovals = approvals.filter(a => a.status === 'rejected'); const getStatusIcon = (status: string) => { switch (status) { case 'approved': return ; case 'rejected': return ; case 'pending': return ; default: return null; } }; const ApprovalCard = ({ approval }: { approval: Approval }) => { const progress = (approval.currentSignatures / approval.requiredSignatures) * 100; return (
{approval.proposalTitle} {approval.description}
{approval.category}
${approval.amount.toLocaleString()}
Deadline: {approval.deadline}
Approval Progress {approval.currentSignatures}/{approval.requiredSignatures} signatures

Signers

{approval.signers.map((signer, index) => (
{signer.name[0]}
{signer.name} {getStatusIcon(signer.status)}
))}
); }; return (
{/* Stats Overview */}

Pending Approvals

{pendingApprovals.length}

Total Value

${(pendingApprovals.reduce((sum, a) => sum + a.amount, 0) / 1000).toFixed(0)}k

Active Signers

5

Expiring Soon

2

{/* Approvals Tabs */} Pending ({pendingApprovals.length}) Approved ({approvedApprovals.length}) Rejected ({rejectedApprovals.length}) {pendingApprovals.map(approval => ( ))} {approvedApprovals.length === 0 ? ( No approved proposals yet ) : ( approvedApprovals.map(approval => ( )) )} {rejectedApprovals.length === 0 ? ( No rejected proposals ) : ( rejectedApprovals.map(approval => ( )) )}
); };