feat: add TanStack Query hooks for all domain modules#28
Conversation
📝 WalkthroughWalkthroughThis PR adds four new React Query hook files that wrap data-access patterns for contracts, expectations, payloads, and tasks. Each file exports typed query hooks for fetching data and mutation hooks for modifying data, with consistent cache-staleness configurations and automatic cache invalidation on mutations. ChangesReact Query Data Layer Hooks
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@nexus-frontend/src/hooks/usePayloads.ts`:
- Around line 22-28: The mutation in useSubmitPayload (mutationFn ->
payloadsApi.submit) currently only invalidates ['payloads'] onSuccess; also call
qc.invalidateQueries for the deviations cache so dependent hooks
usePayloadDeviations and useDeviationsByContract refresh — e.g., add
qc.invalidateQueries({ queryKey: ['deviations'] }) (or a more specific queryKey
pattern you use for deviations) in the onSuccess handler after invalidating
['payloads'] so deviation data is refetched after a submit.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: db547619-e48c-4cdd-ab9f-7f78ef231793
📒 Files selected for processing (5)
nexus-frontend/src/hooks/.gitkeepnexus-frontend/src/hooks/useContracts.tsnexus-frontend/src/hooks/useExpectations.tsnexus-frontend/src/hooks/usePayloads.tsnexus-frontend/src/hooks/useTasks.ts
| export function useSubmitPayload() { | ||
| const qc = useQueryClient(); | ||
| return useMutation({ | ||
| mutationFn: (data: SubmitPayloadRequest) => payloadsApi.submit(data), | ||
| onSuccess: () => qc.invalidateQueries({ queryKey: ['payloads'] }), | ||
| }); | ||
| } |
There was a problem hiding this comment.
Consider invalidating deviation queries after payload submission.
If submitting a payload can create or modify deviations, the deviation queries (usePayloadDeviations, useDeviationsByContract) will not refresh because they use a separate ['deviations'] cache key. With a 60-second staleTime on deviations, users could see stale deviation data after submission.
🔄 Proposed fix to invalidate deviation queries
export function useSubmitPayload() {
const qc = useQueryClient();
return useMutation({
mutationFn: (data: SubmitPayloadRequest) => payloadsApi.submit(data),
- onSuccess: () => qc.invalidateQueries({ queryKey: ['payloads'] }),
+ onSuccess: () => {
+ qc.invalidateQueries({ queryKey: ['payloads'] });
+ qc.invalidateQueries({ queryKey: ['deviations'] });
+ },
});
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| export function useSubmitPayload() { | |
| const qc = useQueryClient(); | |
| return useMutation({ | |
| mutationFn: (data: SubmitPayloadRequest) => payloadsApi.submit(data), | |
| onSuccess: () => qc.invalidateQueries({ queryKey: ['payloads'] }), | |
| }); | |
| } | |
| export function useSubmitPayload() { | |
| const qc = useQueryClient(); | |
| return useMutation({ | |
| mutationFn: (data: SubmitPayloadRequest) => payloadsApi.submit(data), | |
| onSuccess: () => { | |
| qc.invalidateQueries({ queryKey: ['payloads'] }); | |
| qc.invalidateQueries({ queryKey: ['deviations'] }); | |
| }, | |
| }); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@nexus-frontend/src/hooks/usePayloads.ts` around lines 22 - 28, The mutation
in useSubmitPayload (mutationFn -> payloadsApi.submit) currently only
invalidates ['payloads'] onSuccess; also call qc.invalidateQueries for the
deviations cache so dependent hooks usePayloadDeviations and
useDeviationsByContract refresh — e.g., add qc.invalidateQueries({ queryKey:
['deviations'] }) (or a more specific queryKey pattern you use for deviations)
in the onSuccess handler after invalidating ['payloads'] so deviation data is
refetched after a submit.
Description
Add TanStack Query hooks for all domain modules — contracts, expectations, tasks, and payloads/deviations. Each hook handles caching, stale times, and cache invalidation on mutations.
Changes
src/hooks/useContracts.ts— useContracts, useContract, useCreateContract, useUpdateContract, usePublishContract (staleTime: 30s)src/hooks/useExpectations.ts— useExpectations, useExpectation, useCreateExpectation, useUpdateExpectation, useActivateExpectation, useDeactivateExpectation (staleTime: 30s)src/hooks/useTasks.ts— useTasks (with status filter), useTask, useCreateTask, useTransitionTaskStatus (staleTime: 15s)src/hooks/usePayloads.ts— usePayloads, usePayload, useSubmitPayload, usePayloadDeviations, useDeviationsByContract (staleTime: 15s payloads, 60s deviations)Testing done
npx tsc --noEmitpassesChecklist
Summary by CodeRabbit