From 5108dd474114495547e4f0fb90604bf7268401df Mon Sep 17 00:00:00 2001 From: juccul Date: Sat, 14 Nov 2026 19:21:22 +0100 Subject: [PATCH] fix(mobile): outdated pull request approvals are labeled, not shown as current --- .../pull-requests/PullRequestStatusRows.tsx | 7 +++++-- .../pull-requests/pullRequestStatus.test.ts | 1 + .../features/pull-requests/pullRequestStatus.ts | 15 +++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/mobile/src/features/pull-requests/PullRequestStatusRows.tsx b/apps/mobile/src/features/pull-requests/PullRequestStatusRows.tsx index 805d61c928378..b309d31f4ed42 100644 --- a/apps/mobile/src/features/pull-requests/PullRequestStatusRows.tsx +++ b/apps/mobile/src/features/pull-requests/PullRequestStatusRows.tsx @@ -282,7 +282,7 @@ export function PullRequestReviewersRow(props: RowProps) { {summary.reviews.map((review) => ( {review.author?.login ?? "Unknown reviewer"} + {review.outdated ? ( + Outdated + ) : null} ))} {props.pr.reviewers diff --git a/apps/mobile/src/features/pull-requests/pullRequestStatus.test.ts b/apps/mobile/src/features/pull-requests/pullRequestStatus.test.ts index e5cb4551db56b..d25dfd621b84c 100644 --- a/apps/mobile/src/features/pull-requests/pullRequestStatus.test.ts +++ b/apps/mobile/src/features/pull-requests/pullRequestStatus.test.ts @@ -59,6 +59,7 @@ describe("mobile overview review status", () => { }, ); expect(result.title).toBe("Awaiting review"); + expect(result.reviews.map((review) => review.outdated)).toEqual([true]); }); it("keeps an approval when a later review only comments, and normalizes provider spelling", () => { diff --git a/apps/mobile/src/features/pull-requests/pullRequestStatus.ts b/apps/mobile/src/features/pull-requests/pullRequestStatus.ts index d664aef1fc015..f521a4a147849 100644 --- a/apps/mobile/src/features/pull-requests/pullRequestStatus.ts +++ b/apps/mobile/src/features/pull-requests/pullRequestStatus.ts @@ -165,17 +165,20 @@ export function pullRequestReviewSummary( if (!previous || Date.parse(review.createdAt) >= Date.parse(previous.createdAt)) latest.set(key, { ...review, reviewState: state }); } - const reviews = [ - ...[...latest.values()].filter((review) => review.reviewState !== "DISMISSED"), - ...[...comments.entries()].filter(([key]) => !latest.has(key)).map(([, review]) => review), - ]; - const requested = reviews.filter((review) => review.reviewState === "CHANGES_REQUESTED"); const newestCommit = Math.max( 0, ...(activity?.commits.map((commit) => Date.parse(commit.committedDate)) ?? []), ); + const reviews = [ + ...[...latest.values()].filter((review) => review.reviewState !== "DISMISSED"), + ...[...comments.entries()].filter(([key]) => !latest.has(key)).map(([, review]) => review), + ].map((review) => ({ + ...review, + outdated: review.reviewState === "APPROVED" && Date.parse(review.createdAt) < newestCommit, + })); + const requested = reviews.filter((review) => review.reviewState === "CHANGES_REQUESTED"); const approved = reviews.filter( - (review) => review.reviewState === "APPROVED" && Date.parse(review.createdAt) >= newestCommit, + (review) => review.reviewState === "APPROVED" && !review.outdated, ); if (requested.length) return {