Add the React Query hooks needed by later phases. No consumer changes; store is untouched.
New hooks
Add to src/browser/lib/queries.ts (or a new sibling file if it grows):
useViewerPermissions(owner, repo, prNumber) — one query returning viewerPermission, viewerCanMergeAsAdmin, repoAllowMergeCommit, repoAllowSquashMerge, repoAllowRebaseMerge, repoHasMergeQueue, prInMergeQueue. Move fetch logic out of PRReviewStore.loadOverviewData into a plain fetch function.
useBranchStatus(owner, repo, branch) — for branchDeleted. Short staleTime, refetch on window focus.
useCommitChangeId(owner, repo, sha, prKey) — per-SHA, staleTime: Infinity, meta: { immutable: true }. Extract the parsing/fetch logic from PRReviewStore.getCommitChangeId.
useParentCommitMessages(owner, repo, sha, prKey) — per-SHA, immutable. Extract from PRReviewStore.loadParentCommitMessages.
- Derived interdiff hooks (built as pure functions +
useMemo over existing per-SHA queries, no new network calls):
useCommitVersionHistory(...), useCommitsByVersion(...) — reshape pushVersions + commits.
useVersionDiffCounts(...), useVersionRebaseInfo(...) — reshape per-SHA file data.
useVersionCompareNoChangeFiles(...), useInterdiffLoadedDiffs(...) — reshape raw diff / file data.
Files
src/browser/lib/queries.ts — new query hooks.
src/browser/lib/pr-review-derived.ts (new) — pure derivation functions for interdiff data, exported so they can be tested directly and reused by hooks.
Tests
- Unit test each new RQ hook with
QueryClientProvider + mocked fetch: loading, success, error, cache-key stability across renders.
- Unit test each pure derivation function in
pr-review-derived.ts with fixture data (reuse fixtures from contexts/pr-review/index.test.ts).
- Verify SHA-keyed queries are shared across hooks (no duplicate network calls when two derived hooks read the same underlying commit).
Out of scope
No consumer refactors. No deletions from PRReviewStore. Only additive.
Part of #351
Add the React Query hooks needed by later phases. No consumer changes; store is untouched.
New hooks
Add to
src/browser/lib/queries.ts(or a new sibling file if it grows):useViewerPermissions(owner, repo, prNumber)— one query returningviewerPermission,viewerCanMergeAsAdmin,repoAllowMergeCommit,repoAllowSquashMerge,repoAllowRebaseMerge,repoHasMergeQueue,prInMergeQueue. Move fetch logic out ofPRReviewStore.loadOverviewDatainto a plain fetch function.useBranchStatus(owner, repo, branch)— forbranchDeleted. ShortstaleTime, refetch on window focus.useCommitChangeId(owner, repo, sha, prKey)— per-SHA,staleTime: Infinity,meta: { immutable: true }. Extract the parsing/fetch logic fromPRReviewStore.getCommitChangeId.useParentCommitMessages(owner, repo, sha, prKey)— per-SHA, immutable. Extract fromPRReviewStore.loadParentCommitMessages.useMemoover existing per-SHA queries, no new network calls):useCommitVersionHistory(...),useCommitsByVersion(...)— reshapepushVersions+commits.useVersionDiffCounts(...),useVersionRebaseInfo(...)— reshape per-SHA file data.useVersionCompareNoChangeFiles(...),useInterdiffLoadedDiffs(...)— reshape raw diff / file data.Files
src/browser/lib/queries.ts— new query hooks.src/browser/lib/pr-review-derived.ts(new) — pure derivation functions for interdiff data, exported so they can be tested directly and reused by hooks.Tests
QueryClientProvider+ mocked fetch: loading, success, error, cache-key stability across renders.pr-review-derived.tswith fixture data (reuse fixtures fromcontexts/pr-review/index.test.ts).Out of scope
No consumer refactors. No deletions from
PRReviewStore. Only additive.Part of #351