import { AlertCircle } from "lucide-react";
import { useCardHover } from "@/components/HoverCardPreview";
import { ManaCost } from "@/components/ManaCost";
import { getPrimaryFace } from "@/lib/card-faces";
import type { Card, ScryfallId } from "@/lib/scryfall-types";
export type PreviewLine =
| { type: "empty"; lineKey: string }
| { type: "pending"; lineKey: string; name: string }
| {
type: "resolved";
lineKey: string;
scryfallId: ScryfallId;
quantity: number;
cardData: Card;
isNew?: boolean;
isImperfect?: boolean;
}
| { type: "error"; lineKey: string; message: string };
interface BulkEditPreviewProps {
lines: PreviewLine[];
}
export function BulkEditPreview({ lines }: BulkEditPreviewProps) {
return (
{lines.map((line) => (
))}
);
}
const ROW_CLASS =
"font-mono text-sm leading-[1.5] whitespace-nowrap [font-variant-ligatures:none]";
function PreviewRow({ line }: { line: PreviewLine }) {
switch (line.type) {
case "empty":
return
;
case "pending":
return (
{line.name}...
);
case "error":
return (
);
case "resolved":
return ;
}
}
function ResolvedCardRow({
line,
}: {
line: Extract;
}) {
const hoverProps = useCardHover(line.scryfallId);
const primaryFace = getPrimaryFace(line.cardData);
const bgClass = line.isImperfect
? "bg-amber-50 dark:bg-amber-900/40 hover:bg-amber-100 dark:hover:bg-amber-900/50"
: line.isNew
? "bg-green-50 dark:bg-green-900/40 hover:bg-green-100 dark:hover:bg-green-900/50"
: "hover:bg-gray-100 dark:hover:bg-zinc-800";
return (
{line.quantity}
{primaryFace?.name ?? "Unknown"}
{primaryFace?.mana_cost && (
)}
);
}