import { useEffect, useState } from 'react'; import { CODE_TYPE_LABELS, textColorOn, type Card } from '@cardy/shared'; import { setMaxBrightness } from '../platform.js'; import { Banner, CardBadge, CodeImage, ConfirmDialog, Icon, IconButton, Screen, TagList, useStoredImage } from '../ui.js'; export function CardScreen({ card, imageEpoch, onBack, onEdit, onDelete, }: { card: Card; imageEpoch: number; onBack: () => void; onEdit: () => void; onDelete: () => Promise; }) { const [confirmDelete, setConfirmDelete] = useState(false); const [deleting, setDeleting] = useState(false); const [error, setError] = useState(); const [viewing, setViewing] = useState(); // Scanners at the till read the code better at full brightness. useEffect(() => { void setMaxBrightness(true); return () => void setMaxBrightness(false); }, []); const remove = async () => { setConfirmDelete(false); setDeleting(true); setError(undefined); try { await onDelete(); } catch (e) { setError((e as Error).message); setDeleting(false); } }; return ( } right={ <> setConfirmDelete(true)} disabled={deleting} /> } >
{card.name}
{error && setError(undefined)}>{error}}
{card.code} {CODE_TYPE_LABELS[card.codeType]}
{card.tags?.length > 0 && } {card.comment &&

{card.comment}

} {card.images.length > 0 && (
{card.images.map((img) => ( setViewing(img.id)} /> ))}
)} {viewing && setViewing(undefined)} />} {confirmDelete && ( setConfirmDelete(false)} onConfirm={remove} /> )}
); } function Thumb({ cardId, imageId, version, onOpen }: { cardId: string; imageId: string; version: number; onOpen: () => void }) { const url = useStoredImage(cardId, imageId, version); return ( ); } function ImageViewer({ cardId, imageId, version, onClose }: { cardId: string; imageId: string; version: number; onClose: () => void }) { const url = useStoredImage(cardId, imageId, version); return (
{url && }
); }