import CameraScanner from './CameraScanner'; import ScannerDestinationPicker from './ScannerDestinationPicker'; import ScannedCardItem, { CONDITION_OPTIONS } from './ScannedCardItem'; import OCRSettings from './OCRSettings'; import { Modal, Input, Button } from './ui'; import { VOCAB } from '../lib/collection-vocabulary.js'; export default function ScannerPageView({ gameFilter, onGameFilterChange, sessionDestination, onDestinationChange, scanDefaults, onScanDefaultsChange, queue, showOCRSettings, onOpenOCRSettings, onCloseOCRSettings, onScannerError, }) { return (

🃏 Card Scanner

Pick a destination once — every scan lands there until you change it

{queue.autoRouteError && (
{queue.autoRouteError}
)}

Defaults for new scans

Applied to each card when it enters the queue

Camera Scanner

Scanned Cards

{queue.scannedCards.length} cards
{queue.scannedCards.length > 0 && ( )}
{queue.scannedCards.length === 0 ? (
No cards scanned yet
Start scanning to see cards here
) : (
    {queue.scannedCards.map((card) => (
  • queue.toggleCardSelection(card.id)} onIncrement={() => queue.incrementCardQuantity(card.id)} onDecrement={() => queue.decrementCardQuantity(card.id)} onUpdateMetadata={(patch) => queue.updateCardMetadata(card.id, patch)} onMarkOwned={() => queue.addSingleCardToOwned(card)} onAddToCollection={(collectionId) => queue.addSingleCardToCollection(card, collectionId)} onAddToDeck={(deckId) => queue.addSingleCardToDeck(card, deckId)} onRemove={() => queue.removeScannedCard(card.id)} isAdding={queue.addingCardIds.has(card.id)} />
  • ))}
)}
{queue.selectedCards.size > 0 && (
{queue.selectedCards.size}
{queue.selectedCards.size === 1 ? 'card selected' : 'cards selected'}
{queue.collections.length > 0 && ( )} {queue.decks.length > 0 && ( )}
)} queue.setShowCreateCollection(false)} title="Create New List" size="md" > queue.setNewCollectionName(e.target.value)} onKeyPress={(e) => { if (e.key === 'Enter') { queue.createCollection(); } }} className="mb-4" />
{showOCRSettings && }
); }