Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-19 20:11:21 +00:00
co-authored by renee-png
parent 3927ba0370
commit 5c3731528f
@@ -63,25 +63,54 @@ export function QuickAddCallLog() {
useEffect(() => {
if (!open) return;
(async () => {
const [{ data: cs }, { data: ks }, { data: ct }] = await Promise.all([
const [{ data: cs }, { data: ks }] = await Promise.all([
supabase.from("clients").select("id, name").is("archived_at", null).order("name"),
supabase
.from("cases")
.select("id, case_number, title, client_id")
.is("archived_at", null)
.order("case_number", { ascending: false }),
supabase
.from("contacts")
.select("id, name, phone")
.is("archived_at", null)
.order("name"),
]);
setClients(cs ?? []);
setCases((ks ?? []) as CaseOpt[]);
setContacts((ct ?? []) as ContactOpt[]);
})();
}, [open]);
// Server-side contact search (debounced). No preloaded list — every keystroke queries the DB.
const [contactQuery, setContactQuery] = useState("");
const [contactResults, setContactResults] = useState<ContactOpt[]>([]);
const [contactSearching, setContactSearching] = useState(false);
const [selectedContact, setSelectedContact] = useState<ContactOpt | null>(null);
const [contactPopoverOpen, setContactPopoverOpen] = useState(false);
useEffect(() => {
if (!open) return;
const term = contactQuery.trim();
setContactSearching(true);
let cancelled = false;
const handle = setTimeout(async () => {
let q = supabase
.from("contacts")
.select("id, name, phone")
.is("archived_at", null)
.order("name")
.limit(25);
if (term) {
const esc = term.replace(/[%,]/g, " ");
q = q.or(`name.ilike.%${esc}%,phone.ilike.%${esc}%,email.ilike.%${esc}%,company.ilike.%${esc}%`);
}
const { data } = await q;
if (!cancelled) {
setContactResults((data ?? []) as ContactOpt[]);
setContactSearching(false);
}
}, 200);
return () => {
cancelled = true;
clearTimeout(handle);
};
}, [open, contactQuery]);
const filteredCases = useMemo(
() => (clientId ? cases.filter((k) => k.client_id === clientId) : cases),
[cases, clientId],