diff --git a/components/AdminBulkSelectionToolbar.js b/components/AdminBulkSelectionToolbar.js new file mode 100644 index 0000000..0bda817 --- /dev/null +++ b/components/AdminBulkSelectionToolbar.js @@ -0,0 +1,101 @@ +import { useState } from 'react'; +import { Button } from './ui'; + +export default function AdminBulkSelectionToolbar({ + selectedCount, + onClearSelection, + onBatchEdit +}) { + const [showActions, setShowActions] = useState(false); + + if (selectedCount === 0) return null; + + return ( +
Loading card catalog...
+No cards found matching your filters.
+| + 0} + onChange={onSelectAll} + aria-label="Select all cards on this page" + className="w-4 h-4 rounded border-2 cursor-pointer" + style={{ + borderColor: 'var(--border)', + accentColor: 'var(--accent-ember)', + '--tw-ring-color': 'var(--accent-ember)' + }} + /> + | + ); + } + return ( + sortable && onSort(col.key)}
+ >
+
+ {col.label}
+ {sortable && sortColumn === col.key && (
+
+ )}
+
+ |
+ );
+ })}
+ ||||||||
|---|---|---|---|---|---|---|---|---|---|
| + onToggleSelect(card.id)} + aria-label={'Select ' + card.name} + className="w-4 h-4 rounded border-2 cursor-pointer" + style={{ + borderColor: 'var(--border)', + accentColor: 'var(--accent-ember)', + '--tw-ring-color': 'var(--accent-ember)' + }} + /> + | +
+
+ {card.image_url && (
+
+
+
+ + {card.name} + ++ {card.set_code?.toUpperCase() + ' ' + (card.card_number || '')} + {card.oracle_id && [' + card.oracle_id.slice(0, 8) + ']} + + |
+
+ |
+
+ + {card.set_name} + + |
+ + + {card.card_number || '—'} + + | +
+ |
+ + + {formatPrice(card.current_price)} + + | ++ + {formatPrice(card.market_price)} + + | ++ + {formatDate(card.prices_updated_at)} + + | +
+ |
+
+ Admin view: {totalCount.toLocaleString()} cards total · showing {cardCount.toLocaleString()} +
+