Source identity
| Field | Recorded value |
|---|---|
| Source type | GitHub source |
| Original record | Janady13/missionmatch / frontend/src/tools/recruitmatch/assignmentQueries.ts |
| Date | Not specified in source |
| Repository | Janady13/missionmatch |
| Revision | 720d47fae476b0d38477ae4401697d372b1ea2bc |
| Branch | feature/opportunity-to-outcome |
| Path or archive member | frontend/src/tools/recruitmatch/assignmentQueries.ts |
| Original SHA-256 | fae14dbcaa2de69e07b2fa3930a4a9ada952700e230564f1ac69cb818e386264 |
| Git blob SHA | 2cd11cf5bfef6a7bf22c06562689cd22a871c443 |
| Reading-copy SHA-256 | fae14dbcaa2de69e07b2fa3930a4a9ada952700e230564f1ac69cb818e386264 |
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/assignmentQueries.ts | feature/opportunity-to-outcome | 720d47fae476b0d38477ae4401697d372b1ea2bc | Open original |
| Janady13/missionmatch / frontend/src/tools/recruitmatch/assignmentQueries.ts | feature/aioe-upgrade | 2178e7298d0e5d9af83afa12402fd587f0ba6ed8 | Open original |
Recovered source transcript
Download complete source text ↓86 lines · 2.8 KB
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { assignmentApi } from './assignmentApi'
export function useAssignment(appId: string | null) {
return useQuery({
queryKey: ['recruitmatch', 'assignment', appId],
queryFn: () => assignmentApi.get(appId as string),
enabled: !!appId,
})
}
export function usePlacements(status?: string) {
return useQuery({
queryKey: ['recruitmatch', 'placements', status ?? ''],
queryFn: () => assignmentApi.placements(status),
})
}
// A placement changes the assignment, the pipeline board, the job order's seats and the dashboard,
// because creating one moves the application's stage. All four are invalidated.
function useInvalidate(appId?: string) {
const qc = useQueryClient()
return () => {
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'assignment', appId] })
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'pipeline'] })
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'placements'] })
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'requisitions'] })
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'application', appId] })
void qc.invalidateQueries({ queryKey: ['recruitmatch', 'dashboard'] })
}
}
export function useScheduleInterview(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: Record<string, unknown>) => assignmentApi.scheduleInterview(appId, v),
onSuccess: inv,
})
}
export function useUpdateInterview(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: { id: string; patch: Record<string, unknown> }) => assignmentApi.updateInterview(v.id, v.patch),
onSuccess: inv,
})
}
export function useExtendOffer(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: Record<string, unknown>) => assignmentApi.extendOffer(appId, v),
onSuccess: inv,
})
}
export function useRespondToOffer(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: { id: string; expected_status: string; status: string; decline_reason?: string }) =>
assignmentApi.respondToOffer(v.id, {
expected_status: v.expected_status,
status: v.status,
decline_reason: v.decline_reason,
}),
onSuccess: inv,
})
}
export function useCreatePlacement(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: Record<string, unknown>) => assignmentApi.createPlacement(appId, v),
onSuccess: inv,
})
}
export function useEndPlacement(appId: string) {
const inv = useInvalidate(appId)
return useMutation({
mutationFn: (v: { id: string; patch: Record<string, unknown> }) => assignmentApi.endPlacement(v.id, v.patch),
onSuccess: inv,
})
}