import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { requisitionsApi } from './requisitionsApi' type ListParams = { client_id?: string; status?: string; owner?: string; q?: string } export function useRequisitions(p: ListParams) { return useQuery({ queryKey: ['recruitmatch', 'requisitions', p.client_id ?? '', p.status ?? '', p.owner ?? '', p.q ?? ''], queryFn: () => requisitionsApi.list(p), }) } export function useRequisition(id: string | null) { return useQuery({ queryKey: ['recruitmatch', 'requisition', id], queryFn: () => requisitionsApi.get(id as string), enabled: !!id, }) } // A status change alters the row in the list, the detail, its history, and the dashboard counts, so all // four are invalidated. Leaving any of them stale shows an order as open seconds after it was filled. function useInvalidate() { const qc = useQueryClient() return (id?: string) => { void qc.invalidateQueries({ queryKey: ['recruitmatch', 'requisitions'] }) void qc.invalidateQueries({ queryKey: ['recruitmatch', 'dashboard'] }) if (id) void qc.invalidateQueries({ queryKey: ['recruitmatch', 'requisition', id] }) } } export function useCreateRequisition() { const inv = useInvalidate() return useMutation({ mutationFn: requisitionsApi.create, onSuccess: () => inv() }) } export function useUpdateRequisition() { const inv = useInvalidate() return useMutation({ mutationFn: (v: { id: string; patch: Record }) => requisitionsApi.update(v.id, v.patch), onSuccess: (_d, v) => inv(v.id), }) } export function useChangeStatus() { const inv = useInvalidate() return useMutation({ mutationFn: (v: { id: string; expected_updated_at: string; status: string; note?: string }) => requisitionsApi.changeStatus(v.id, { expected_updated_at: v.expected_updated_at, status: v.status, note: v.note, }), onSuccess: (_d, v) => inv(v.id), }) } export function useClaimRequisition() { const inv = useInvalidate() return useMutation({ mutationFn: (id: string) => requisitionsApi.claim(id), onSuccess: (_d, id) => inv(id) }) } export function useReleaseRequisition() { const inv = useInvalidate() return useMutation({ mutationFn: (id: string) => requisitionsApi.release(id), onSuccess: (_d, id) => inv(id) }) }