import { useMemo } from 'react';
import { Button } from '../ui';
import ReviewCardItem from './ReviewCardItem';
export default function ScannerReview({
queue,
collections,
decks,
deckMode,
onContinueScanning,
onNewSession,
sessionDestination,
}) {
const { scannedCards } = queue;
const unprocessedCards = useMemo(
() => scannedCards.filter((c) => !c.processed),
[scannedCards]
);
const processedCards = useMemo(
() => scannedCards.filter((c) => c.processed),
[scannedCards]
);
const deckProgress = deckMode
? { current: scannedCards.length, target: deckMode.targetSize }
: null;
const handleConfirmAll = () => {
if (unprocessedCards.length === 0) return;
const unprocessedIds = unprocessedCards.map((c) => c.id);
unprocessedIds.forEach((id) => queue.toggleCardSelection(id));
setTimeout(() => queue.handleBulkAction('owned'), 0);
};
if (scannedCards.length === 0) {
return (
No cards to review
Scan some cards first, then come back to review and confirm them.
);
}
return (
{/* Header */}
Review{' '}
({scannedCards.length} {scannedCards.length === 1 ? 'card' : 'cards'})
{/* Deck progress (if applicable) */}
{deckProgress && (
Deck progress
{deckProgress.current} / {deckProgress.target}
)}
{/* Scrollable card list */}
{/* Unprocessed cards first */}
{unprocessedCards.length > 0 && (
Pending ({unprocessedCards.length})
{unprocessedCards.map((card) => (
queue.incrementCardQuantity(card.id)}
onDecrement={() => queue.decrementCardQuantity(card.id)}
onUpdateMetadata={(patch) => queue.updateCardMetadata(card.id, patch)}
onRemove={() => queue.removeScannedCard(card.id)}
isAdding={false}
sessionDestination={sessionDestination}
/>
))}
)}
{/* Processed cards */}
{processedCards.length > 0 && (
0 ? 'mt-4' : ''}>
Confirmed ({processedCards.length})
{processedCards.map((card) => (
{}}
onDecrement={() => {}}
onUpdateMetadata={() => {}}
onRemove={() => {}}
onUndo={() => queue.updateCardMetadata(card.id, { processed: false, processedAction: null })}
isAdding={false}
sessionDestination={sessionDestination}
/>
))}
)}
{/* Sticky bottom action bar */}
);
}