UNPKG

@accounter/client

Version:
53 lines (45 loc) 1.35 kB
import { useMemo } from 'react'; import { toast } from 'sonner'; import { useQuery } from 'urql'; import { AllOpenContractsDocument, type AllOpenContractsQuery } from '../gql/graphql.js'; export type AllOpenContracts = Array< NonNullable<AllOpenContractsQuery['allOpenContracts']>[number] >; type UseGetContracts = { fetching: boolean; refresh: () => void; openContracts: AllOpenContracts; selectableOpenContracts: Array<{ value: string; label: string }>; }; export const useGetOpenContracts = (): UseGetContracts => { const [{ data, fetching, error }, fetch] = useQuery({ query: AllOpenContractsDocument, }); if (error) { console.error(`Error fetching contracts: ${error}`); toast.error('Error', { description: 'Unable to fetch contracts', }); } const openContracts = useMemo(() => { return ( data?.allOpenContracts ?.slice() .sort((a, b) => a.client.originalBusiness.name > b.client.originalBusiness.name ? 1 : -1, ) ?? [] ); }, [data]); const selectableOpenContracts = useMemo(() => { return openContracts.map(entity => ({ value: entity.id, label: entity.client.originalBusiness.name, })); }, [openContracts]); return { fetching, refresh: () => fetch(), openContracts, selectableOpenContracts, }; };