import { Anchor } from "@mantine/core";
import {
githubReferenceAccessibleLabel,
githubReferenceDisplayLabels,
referenceSegments,
} from "../../github-links.js";
import type { Task } from "../types";
interface ReferenceSegment {
kind: "ambiguous" | "link" | "text";
label?: string;
owner?: string;
reason?: string;
repository?: string;
text: string;
type?: "generic" | "issue" | "pull" | "repository";
url?: string;
}
export function LinkedText({ task, text }: { task: Task; text: string }) {
const segments = referenceSegments(text, {
projectRepositories: task.project.githubRepos,
taskRepository: task.relatedGitHubRepository,
}) as ReferenceSegment[];
const links = segments.filter((segment) => segment.kind === "link");
const displayLabels = githubReferenceDisplayLabels(links) as string[];
let linkIndex = 0;
return segments.map((segment, index) => {
if (segment.kind === "text") return segment.text;
if (segment.kind === "ambiguous") {
return (
{segment.text}
);
}
const displayLabel = displayLabels[linkIndex];
linkIndex += 1;
const kind = segment.type === "pull"
? ", GitHub pull request"
: segment.type === "issue"
? ", GitHub issue"
: segment.owner ? " on GitHub" : "";
return (
{displayLabel}
);
});
}