import type { ReactNode } from "react"; import type { Issue } from "@paperclipai/shared"; import { Link } from "@/lib/router"; import { cn } from "../lib/utils"; import { PriorityIcon } from "./PriorityIcon"; import { StatusIcon } from "./StatusIcon"; type UnreadState = "hidden" | "visible" | "fading"; interface IssueRowProps { issue: Issue; issueLinkState?: unknown; mobileLeading?: ReactNode; desktopMetaLeading?: ReactNode; desktopLeadingSpacer?: boolean; mobileMeta?: ReactNode; desktopTrailing?: ReactNode; trailingMeta?: ReactNode; unreadState?: UnreadState | null; onMarkRead?: () => void; className?: string; } export function IssueRow({ issue, issueLinkState, mobileLeading, desktopMetaLeading, desktopLeadingSpacer = false, mobileMeta, desktopTrailing, trailingMeta, unreadState = null, onMarkRead, className, }: IssueRowProps) { const issuePathId = issue.identifier ?? issue.id; const identifier = issue.identifier ?? issue.id.slice(0, 8); const showUnreadSlot = unreadState !== null; const showUnreadDot = unreadState === "visible" || unreadState === "fading"; return ( {mobileLeading ?? } {issue.title} {desktopLeadingSpacer ? ( ) : null} {desktopMetaLeading ?? ( <> {identifier} )} {mobileMeta ? ( <> {mobileMeta} ) : null} {(desktopTrailing || trailingMeta) ? ( {desktopTrailing} {trailingMeta ? ( {trailingMeta} ) : null} ) : null} {showUnreadSlot ? ( {showUnreadDot ? ( ) : ( ) : null} ); }