import { FileText, Calendar, Eye } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { useState, useEffect } from 'react'; import { API } from '@/api/API'; import { toast } from 'sonner'; import { User as UserType } from '@/lib/mock-data'; import { formatDateTime } from '@/components/ui/utils'; import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination"; interface ResignationPageProps { currentUser: UserType | null; onViewDetails: (id: string) => void; } const getStatusColor = (status: string) => { if (status.includes('Approved') || status.includes('Completed')) return 'bg-green-100 text-green-700 border-green-300'; if (status.includes('Review') || status.includes('Pending')) return 'bg-yellow-100 text-yellow-700 border-yellow-300'; if (status.includes('Rejected')) return 'bg-red-100 text-red-700 border-red-300'; return 'bg-blue-100 text-blue-700 border-blue-300'; }; export function ResignationPage({ currentUser, onViewDetails }: ResignationPageProps) { const [resignations, setResignations] = useState([]); const [loading, setLoading] = useState(true); const [currentPage, setCurrentPage] = useState(1); const [statusTab, setStatusTab] = useState('all'); const [paginationMeta, setPaginationMeta] = useState(null); const itemsPerPage = 10; const fetchResignations = async () => { setLoading(true); try { const response = await API.getResignations({ page: currentPage, limit: itemsPerPage, status: statusTab === 'all' ? undefined : statusTab === 'open' ? 'open' : 'Completed,Closed' }); const data = response.data as any; if (data?.success) { setResignations(data.requests || data.resignations?.rows || data.resignations || []); setPaginationMeta(data.meta); } } catch (error) { console.error('Error fetching resignations:', error); toast.error('Failed to fetch resignation requests'); } finally { setLoading(false); } }; useEffect(() => { fetchResignations(); }, [currentPage, statusTab]); const handleTabChange = (value: string) => { setStatusTab(value); setCurrentPage(1); }; const openRequests = statusTab === 'open' ? resignations : []; const completedRequests = statusTab === 'completed' ? resignations : []; return (
{/* Header Stats */}
All Requests {paginationMeta?.total || 0}

Total Requests

Open {statusTab === 'open' ? paginationMeta?.total || 0 : '...'}

Requires Your Action

Completed {statusTab === 'completed' ? paginationMeta?.total || 0 : '...'}

Finalized

{/* Main Content */}
Resignation Requests Track and manage dealer resignation requests • Note: Resignation requests are initiated by the dealer or via ASM.
All Requests Open Completed
{loading ? (
Loading requests...
) : resignations.length > 0 ? ( <> {resignations.map((request) => (

{request.resignationId}

{request.status}

Dealer Name

{request.dealer?.dealerProfile?.businessName || request.outlet?.name || 'N/A'}

Dealer Code

{request.dealer?.dealerProfile?.dealerCode?.dealerCode || request.outlet?.code || 'N/A'}

Location

{request.dealer?.dealerProfile?.registeredAddress || (request.outlet?.city && request.outlet?.state ? `${request.outlet.city}, ${request.outlet.state}` : 'N/A')}

Type

{request.resignationType}

Reason

{request.reason}

Current Stage

{request.currentStage}

Submitted On

{formatDateTime(request.submittedOn)}

))} {paginationMeta && paginationMeta.totalPages > 1 && (
setCurrentPage(prev => Math.max(1, prev - 1))} className={currentPage === 1 ? "pointer-events-none opacity-50" : "cursor-pointer"} /> {[...Array(paginationMeta.totalPages)].map((_, i) => { const pageNum = i + 1; if ( pageNum === 1 || pageNum === paginationMeta.totalPages || (pageNum >= currentPage - 1 && pageNum <= currentPage + 1) ) { return ( setCurrentPage(pageNum)} className="cursor-pointer" > {pageNum} ); } if ( (pageNum === 2 && currentPage > 3) || (pageNum === paginationMeta.totalPages - 1 && currentPage < paginationMeta.totalPages - 2) ) { return ; } return null; })} setCurrentPage(prev => Math.min(paginationMeta.totalPages, prev + 1))} className={currentPage === paginationMeta.totalPages ? "pointer-events-none opacity-50" : "cursor-pointer"} />
)} ) : (

No resignation requests found

)}
{/* Open Tab */}
{openRequests.length > 0 ? ( openRequests.map((request) => (

{request.resignationId}

{request.status}

Dealer Name

{request.dealer?.dealerProfile?.businessName || request.outlet?.name || 'N/A'}

Location

{request.dealer?.dealerProfile?.registeredAddress || (request.outlet?.city && request.outlet?.state ? `${request.outlet.city}, ${request.outlet.state}` : 'N/A')}

Current Stage

{request.currentStage}

Submitted On

{formatDateTime(request.submittedOn)}

)) ) : (

No requests requiring your action

)}
{/* Completed Tab */}
{completedRequests.length > 0 ? ( completedRequests.map((request) => (

{request.resignationId}

{request.status}

Dealer Name

{request.dealer?.dealerProfile?.businessName || request.outlet?.name || 'N/A'}

Location

{request.dealer?.dealerProfile?.registeredAddress || request.outlet?.city || 'N/A'}

Final Stage

{request.currentStage}

Submitted On

{formatDateTime(request.submittedOn)}

)) ) : (

No completed resignations to display

)}
); }