"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; } export default function VendorsCard() { const [vendors, setVendors] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [resetTokens, setResetTokens] = useState>({}); useEffect(() => { let mounted = true; (async () => { try { const data = await fetchClient("/admin/vendors"); if (mounted) setVendors(data); } catch (e: any) { if (mounted) setError(e?.message || "Failed to load vendors"); } finally { if (mounted) setLoading(false); } })(); return () => { mounted = false; }; }, []); 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
)}
))}
)}
); }