zapishis-client/apps/web/hooks/contacts/use-customer-contacts.ts
2025-01-14 15:40:31 +03:00

44 lines
1.2 KiB
TypeScript

/* eslint-disable promise/prefer-await-to-then */
'use client';
import { getContacts } from '@/actions/contacts';
import { ContactsFilterContext } from '@/context/contacts-filter';
import type * as GQL from '@repo/graphql/types';
import { sift } from 'radash';
import { use, useEffect, useMemo, useState } from 'react';
type Clients = NonNullable<GQL.GetCustomerClientsQuery['customers'][0]>['clients'];
type Masters = NonNullable<GQL.GetCustomerMastersQuery['customers'][0]>['masters'];
export function useCustomerContacts() {
const [contacts, setContacts] = useState<{ clients: Clients; masters: Masters }>({
clients: [],
masters: [],
});
const { filter } = use(ContactsFilterContext);
useEffect(() => {
getContacts().then((response) => {
setContacts({
clients: response?.clients || [],
masters: response?.masters || [],
});
});
}, []);
const filteredContacts = useMemo(() => {
const { clients, masters } = contacts;
switch (filter) {
case 'clients':
return sift(clients);
case 'masters':
return sift(masters);
default:
return [...sift(clients), ...sift(masters)];
}
}, [contacts, filter]);
return { contacts: filteredContacts };
}