Changes
Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
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],
|
||||
|
||||
Reference in New Issue
Block a user