1import type { ThreadPullRequestLink } from "@t3tools/contracts";
2
3import { resolveThreadCurrentPullRequestLink } from "./threadPullRequests.ts";
4
5export interface ThreadReferenceCopyTarget {
6 readonly kind: "pull-request" | "thread";
7 readonly value: string;
8 readonly clipboardTarget: string;
9 readonly successTitle: string;
10 readonly failureTitle: string;
11}
12
13export function resolveThreadReferenceCopyTarget(input: {
14 readonly threadId: string;
15 /** Undefined means no PR panel; null means its URL is not available yet. */
16 readonly openPanelPullRequestUrl?: string | null | undefined;
17 readonly pullRequests?: ReadonlyArray<ThreadPullRequestLink> | undefined;
18 readonly linkedPullRequestUrl?: string | null;
19}): ThreadReferenceCopyTarget | null {
20 if (input.openPanelPullRequestUrl === null) return null;
21 const pullRequestUrl =
22 input.openPanelPullRequestUrl ??
23 resolveThreadCurrentPullRequestLink(input.pullRequests ?? [])?.url ??
24 input.linkedPullRequestUrl;
25 return pullRequestUrl
26 ? {
27 kind: "pull-request",
28 value: pullRequestUrl,
29 clipboardTarget: "pull request link",
30 successTitle: "PR link copied",
31 failureTitle: "Failed to copy PR link",
32 }
33 : {
34 kind: "thread",
35 value: input.threadId,
36 clipboardTarget: "thread ID",
37 successTitle: "Thread ID copied",
38 failureTitle: "Failed to copy thread ID",
39 };
40}