"use client"; import { useEffect, useState } from "react"; import { fetchClient } from "@/lib/api-client"; interface Vendor { _id: string; username: string; isAdmin: boolean; createdAt: string; lastLogin?: string; } interface PaginationResponse { success: boolean; vendors: Vendor[]; pagination: { page: number; limit: number; total: number; totalPages: number; hasNextPage: boolean; hasPrevPage: boolean; }; } export default function VendorsCard() { const [vendors, setVendors] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [resetTokens, setResetTokens] = useState>({}); const [page, setPage] = useState(1); const [pagination, setPagination] = useState(null); useEffect(() => { let mounted = true; (async () => { try { setLoading(true); const data = await fetchClient(`/admin/vendors?page=${page}&limit=10`); if (mounted) { setVendors(data.vendors); setPagination(data.pagination); } } catch (e: any) { if (mounted) setError(e?.message || "Failed to load vendors"); } finally { if (mounted) setLoading(false); } })(); return () => { mounted = false; }; }, [page]); async function generateResetToken(vendorId: string) { try { const res = await fetchClient<{ token: string; expiresAt: string }>("/admin/password-reset-token", { method: "POST", body: { vendorId } }); setResetTokens(prev => ({ ...prev, [vendorId]: res.token })); } catch (e: any) { setError(e?.message || "Failed to generate reset token"); } } return (

Vendors

Manage vendor accounts and access

{loading ? (

Loading...

) : error ? (

{error}

) : vendors.length === 0 ? (

No vendors found

) : ( <>
{vendors.map((vendor) => (
{vendor.username}
Created: {new Date(vendor.createdAt).toLocaleDateString()} {vendor.lastLogin && ` ยท Last login: ${new Date(vendor.lastLogin).toLocaleDateString()}`}
{vendor.isAdmin && ( Admin )}
{resetTokens[vendor._id] && (
{resetTokens[vendor._id]}
Copy this token to share with the vendor
)}
))}
{pagination && pagination.totalPages > 1 && (
Page {pagination.page} of {pagination.totalPages} ({pagination.total} total)
)} )}
); }