UNPKG

@accounter/client

Version:
57 lines (48 loc) 1.51 kB
import { useMemo } from 'react'; import { toast } from 'sonner'; import { useQuery } from 'urql'; import { AllFinancialAccountsDocument, type AllFinancialAccountsQuery } from '../gql/graphql.js'; // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen /* GraphQL */ ` query AllFinancialAccounts { allFinancialAccounts { id name } } `; type AllFinancialAccounts = Array< NonNullable<AllFinancialAccountsQuery['allFinancialAccounts']>[number] >; type UseGetFinancialAccounts = { fetching: boolean; refresh: () => void; financialAccounts: AllFinancialAccounts; selectableFinancialAccounts: Array<{ value: string; label: string }>; }; export const useGetFinancialAccounts = (): UseGetFinancialAccounts => { const [{ data, fetching, error }, fetch] = useQuery({ query: AllFinancialAccountsDocument, }); if (error) { console.error(`Error fetching financial accounts: ${error}`); toast.error('Error', { description: 'Unable to fetch financial accounts', }); } const financialAccounts = useMemo(() => { return data?.allFinancialAccounts?.sort((a, b) => (a.name > b.name ? 1 : -1)) ?? []; }, [data]); const selectableFinancialAccounts = useMemo(() => { return financialAccounts.map(account => ({ value: account.id, label: account.name, })); }, [financialAccounts]); return { fetching, refresh: () => fetch(), financialAccounts, selectableFinancialAccounts, }; };