mirror of
https://dev.azure.com/globalhealthx/EMR/_git/helix-engage
synced 2026-05-18 20:08:19 +00:00
feat: add auth and data providers with mock data hooks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
56
src/hooks/use-leads.ts
Normal file
56
src/hooks/use-leads.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import { useMemo } from 'react';
|
||||
|
||||
import type { Lead, LeadSource, LeadStatus } from '@/types/entities';
|
||||
import { useData } from '@/providers/data-provider';
|
||||
|
||||
type UseLeadsFilters = {
|
||||
source?: LeadSource;
|
||||
status?: LeadStatus;
|
||||
search?: string;
|
||||
};
|
||||
|
||||
type UseLeadsResult = {
|
||||
leads: Lead[];
|
||||
total: number;
|
||||
updateLead: (id: string, updates: Partial<Lead>) => void;
|
||||
};
|
||||
|
||||
export const useLeads = (filters: UseLeadsFilters = {}): UseLeadsResult => {
|
||||
const { leads, updateLead } = useData();
|
||||
const { source, status, search } = filters;
|
||||
|
||||
const filteredLeads = useMemo(() => {
|
||||
return leads.filter((lead) => {
|
||||
if (source !== undefined && lead.leadSource !== source) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (status !== undefined && lead.leadStatus !== status) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (search !== undefined && search.trim() !== '') {
|
||||
const query = search.trim().toLowerCase();
|
||||
const firstName = lead.contactName?.firstName?.toLowerCase() ?? '';
|
||||
const lastName = lead.contactName?.lastName?.toLowerCase() ?? '';
|
||||
const fullName = `${firstName} ${lastName}`.trim();
|
||||
const phones = (lead.contactPhone ?? []).map((p) => p.number.toLowerCase());
|
||||
|
||||
const matchesName = firstName.includes(query) || lastName.includes(query) || fullName.includes(query);
|
||||
const matchesPhone = phones.some((phone) => phone.includes(query));
|
||||
|
||||
if (!matchesName && !matchesPhone) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}, [leads, source, status, search]);
|
||||
|
||||
return {
|
||||
leads: filteredLeads,
|
||||
total: filteredLeads.length,
|
||||
updateLead,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user