Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / frontend/src/tools/recruitmatch/requisitionQueries.ts |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | frontend/src/tools/recruitmatch/requisitionQueries.ts |
| Original SHA-256 | 33571d6966e379531e72406c7cb6fb8287d5cfeca0ef138cac76ff5adac5c500 |
| Git blob SHA | ee0a77469d3ed07d053cfe5a12a91435404edc29 |
| Reading-copy SHA-256 | 33571d6966e379531e72406c7cb6fb8287d5cfeca0ef138cac76ff5adac5c500 |
Every recorded occurrence
These 2 records contain identical original source bytes. Their paths and revisions remain part of the archive.
| Original record | Branch or archive | Revision / identifier | Original location |
|---|---|---|---|
| Janady13/missionmatch / frontend/src/tools/recruitmatch/requisitionQueries.ts | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / frontend/src/tools/recruitmatch/requisitionQueries.ts | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
Recovered source transcript
Download complete source text ↓68 lines · 2.3 KB
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<string, unknown> }) => 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) })
}