From d9d086ee383c87779ba93b91bc7a339be31bdb1a Mon Sep 17 00:00:00 2001 From: Trevor Walker Date: Thu, 24 Sep 2026 06:44:12 -0600 Subject: [PATCH] Use PR summary for hover previews --- .../pullRequest/PullRequestLinkPreview.tsx | 94 +++++++++---------- 1 file changed, 46 insertions(+), 48 deletions(-) diff --git a/apps/web/src/components/pullRequest/PullRequestLinkPreview.tsx b/apps/web/src/components/pullRequest/PullRequestLinkPreview.tsx index 23fe9e6553..dac5c1fe2a 100644 --- a/apps/web/src/components/pullRequest/PullRequestLinkPreview.tsx +++ b/apps/web/src/components/pullRequest/PullRequestLinkPreview.tsx @@ -10,7 +10,7 @@ import { } from "react"; import { formatRelativeTimeLabel } from "~/timestampFormat"; -import { pullRequestEnvironment } from "~/state/pullRequests"; +import { linkedPullRequestDetailAtom } from "~/state/pullRequests"; import { useAtomQueryRunner } from "~/state/use-atom-query-runner"; import { useEnvironmentQuery } from "~/state/query"; @@ -45,15 +45,8 @@ export function PullRequestLinkPreview({ }) { const [open, setOpen] = useState(false); const [resolvingClick, setResolvingClick] = useState(false); - const detailQuery = useEnvironmentQuery( - open - ? pullRequestEnvironment.detail({ - environmentId: target.environmentId, - input: target.input, - }) - : null, - ); - const readDetail = useAtomQueryRunner(pullRequestEnvironment.detail, { + const summaryQuery = useEnvironmentQuery(open ? linkedPullRequestDetailAtom(target) : null); + const readSummary = useAtomQueryRunner(linkedPullRequestDetailAtom, { reportFailure: false, reportDefect: false, }); @@ -68,7 +61,7 @@ export function PullRequestLinkPreview({ if (resolvingClick) return; setOpen(false); setResolvingClick(true); - void readDetail({ environmentId: target.environmentId, input: target.input }) + void readSummary(target) .then(async (result) => { if (isAtomCommandInterrupted(result)) return; if (result._tag === "Success" && onOpenPullRequest?.(result.value.url)) return; @@ -81,53 +74,58 @@ export function PullRequestLinkPreview({ }, }) : link; - const detail = detailQuery.data; + const summary = summaryQuery.data; const state = - detail === null + summary === null ? null - : resolvePullRequestState({ state: detail.state, isDraft: detail.isDraft }); + : resolvePullRequestState({ state: summary.state, isDraft: summary.isDraft ?? false }); + const author = summary?.author ?? null; const authorLabel = - detail?.author === null + author === null ? "ghost" - : detail?.author.name && detail.author.name !== detail.author.login - ? `${detail.author.name} (@${detail.author.login})` - : (detail?.author.login ?? null); + : author.name && author.name !== author.login + ? `${author.name} (@${author.login})` + : author.login; return ( - - {detail === null ? ( - (fallback ?? ( -

- {detailQuery.isPending ? "Loading pull request details…" : originalUrl} -

- )) - ) : ( -
-
- {detail.repository} - #{detail.number} - · - {state === null ? null : ( - - - {state.label} + {summary !== null || summaryQuery.error !== null ? ( + + {summary === null ? ( + (fallback ?? ( +

+ {originalUrl} +

+ )) + ) : ( +
+
+ {summary.repository} + #{summary.number} + · + {state === null ? null : ( + + + {state.label} + + )} +
+

+ {summary.title} +

+
+ + {authorLabel} + · + + updated {formatRelativeTimeLabel(summary.updatedAt)} - )} -
-

- {detail.title} -

-
- - {authorLabel} - · - opened {formatRelativeTimeLabel(detail.createdAt)} +
-
- )} - + )} + + ) : null} ); }