import { getUser } from '@/api/user/query'; import { STALE_TIME } from '@/constants/request'; import type { Process, ProcessContext } from '@/process/types'; import { useStore } from '@/stores/hooks'; import { trpcPureClient } from '@/trpc/client'; import { useApolloClient } from '@apollo/client'; import { useQuery, useQueryClient } from '@tanstack/react-query'; export function useProcess({ reactions }: Process) { const context = useProcessContext(); Object.keys(reactions).forEach((name) => { const injector = reactions[name]; injector(context); }); } export function useProcessContext(): ProcessContext { const store = useStore(); const apolloClient = useApolloClient(); const queryClient = useQueryClient(); const { data: user } = useQuery(['user'], ({ signal }) => getUser({ signal }), { staleTime: STALE_TIME, }); return { apolloClient, queryClient, store, trpcClient: trpcPureClient, user, }; }