UNPKG

@accounter/client

Version:
58 lines (49 loc) 1.53 kB
import { useEffect, useMemo } from 'react'; import { toast } from 'sonner'; import { useQuery } from 'urql'; import { AllAdminBusinessesDocument, type AllAdminBusinessesQuery } from '../gql/graphql.js'; // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- used by codegen /* GraphQL */ ` query AllAdminBusinesses { allAdminBusinesses { id name governmentId } } `; export type AdminBusinesses = NonNullable<AllAdminBusinessesQuery['allAdminBusinesses']>; type UseGetAdminBusinesses = { fetching: boolean; refresh: () => void; adminBusinesses: AdminBusinesses; selectableAdminBusinesses: Array<{ value: string; label: string }>; }; export const useGetAdminBusinesses = (): UseGetAdminBusinesses => { const [{ data, fetching, error }, fetch] = useQuery({ query: AllAdminBusinessesDocument, }); useEffect(() => { if (error) { console.error(`Error fetching admin businesses: ${error}`); toast.error('Error', { description: 'Unable to fetch admin businesses', }); } }, [error]); const adminBusinesses = useMemo(() => { return data?.allAdminBusinesses?.slice().sort((a, b) => a.name.localeCompare(b.name)) ?? []; }, [data]); const selectableAdminBusinesses = useMemo(() => { return adminBusinesses.map(entity => ({ value: entity.id, label: entity.name, })); }, [adminBusinesses]); return { fetching, refresh: () => fetch(), adminBusinesses, selectableAdminBusinesses, }; };