44 lines
1.2 KiB
TypeScript
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 };
|
|
}
|