import * as React from "react"; import { useMemo, useState } from "react"; import * as RouterDom from "react-router-dom"; import type { Issue } from "@paperclipai/shared"; import { useQuery } from "@tanstack/react-query"; import { issuesApi } from "@/api/issues"; import { queryKeys } from "@/lib/queryKeys"; import { timeAgo } from "@/lib/timeAgo"; import { createIssueDetailPath, withIssueDetailHeaderSeed } from "@/lib/issueDetailBreadcrumb"; import { cn } from "@/lib/utils"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { StatusIcon } from "@/components/StatusIcon"; function summarizeIssueDescription(description: string | null | undefined) { if (!description) return null; const summary = description .replace(/!\[[^\]]*]\([^)]+\)/g, " ") .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1") .replace(/[#>*_`~-]+/g, " ") .replace(/\s+/g, " ") .trim(); if (!summary) return null; return summary.length > 180 ? `${summary.slice(0, 177).trimEnd()}...` : summary; } export function IssueQuicklookCard({ issue, linkTo, linkState, compact = false, }: { issue: Issue; linkTo: RouterDom.To; linkState?: unknown; compact?: boolean; }) { const description = useMemo(() => summarizeIssueDescription(issue.description), [issue.description]); return (
{description}
) : null}Unable to load issue preview.
) : null}