Skip to content

Phase 0: Fill React Query gaps for PRReviewStore migration #352

Description

@jennings

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Default priorityimplementedVerified locally; awaiting merge to main

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions