import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { taskApi } from './taskApi' export function useTaskQueue(assignee?: string, includeClosed?: boolean) { return useQuery({ queryKey: ['recruitmatch', 'task-queue', assignee ?? '', includeClosed ?? false], queryFn: () => taskApi.queue(assignee, includeClosed), }) } export function useTasksFor(scope: { candidate_id?: string; requisition_id?: string; application_id?: string }) { return useQuery({ queryKey: ['recruitmatch', 'tasks', scope], queryFn: () => taskApi.list(scope), }) } function useInvalidate() { const qc = useQueryClient() return () => { void qc.invalidateQueries({ queryKey: ['recruitmatch', 'task-queue'] }) void qc.invalidateQueries({ queryKey: ['recruitmatch', 'tasks'] }) } } export function useCreateTask() { const inv = useInvalidate() return useMutation({ mutationFn: taskApi.create, onSuccess: inv }) } export function useUpdateTask() { const inv = useInvalidate() return useMutation({ mutationFn: (v: { id: string; patch: Record }) => taskApi.update(v.id, v.patch), onSuccess: inv, }) } // Changing the timezone moves what "today" means for every count in the product, so everything that // buckets by day is invalidated, not just the queue. export function useSetTimeZone() { const qc = useQueryClient() return useMutation({ mutationFn: (tz: string) => taskApi.setTimeZone(tz), onSuccess: () => qc.invalidateQueries({ queryKey: ['recruitmatch'] }), }) }