import { useEffect, useState } from 'react'; import { Send, Users } from 'lucide-react'; import { api } from '../lib/api.js'; function cx(...args) { return args.filter(Boolean).join(' '); } export default function CustomersManager() { const [customers, setCustomers] = useState([]); const [loading, setLoading] = useState(true); const [selectedId, setSelectedId] = useState(null); const [thread, setThread] = useState([]); const [threadLoading, setThreadLoading] = useState(false); const [reply, setReply] = useState(''); const [sending, setSending] = useState(false); async function loadCustomers() { setLoading(true); setCustomers(await api.adminGetCustomers()); setLoading(false); } useEffect(() => { loadCustomers(); }, []); async function openCustomer(id) { setSelectedId(id); setThreadLoading(true); setThread(await api.adminGetCustomerMessages(id)); setThreadLoading(false); } async function sendReply(e) { e.preventDefault(); const text = reply.trim(); if (!text || sending || !selectedId) return; setSending(true); try { const msg = await api.adminSendCustomerMessage(selectedId, text); setThread((t) => [...t, msg]); setReply(''); loadCustomers(); } finally { setSending(false); } } const selected = customers.find((c) => c.id === selectedId); if (loading) return

Загружаем клиентов...

; return (

Клиенты

Переписка из личных кабинетов зарегистрированных клиентов.

{customers.length === 0 &&

Пока нет зарегистрированных клиентов.

} {customers.map((c) => ( ))}
{!selectedId &&

Выберите клиента слева, чтобы увидеть переписку.

} {selectedId && (

{selected?.name} · {selected?.email}

{threadLoading &&

Загружаем переписку...

} {!threadLoading && thread.length === 0 &&

Сообщений пока нет.

} {thread.map((m) => (
{m.body}
))}
setReply(e.target.value)} placeholder="Ответить клиенту..." className="flex-1 rounded-md border px-3 py-2 text-sm bg-transparent border-slate-300 dark:border-slate-700" />
)}
); }