import { useState } from 'react'; import { GlassSurface, Button, Input, Modal } from './ui'; const RARITY_OPTIONS = [ { value: 'common', label: 'Common' }, { value: 'uncommon', label: 'Uncommon' }, { value: 'rare', label: 'Rare' }, { value: 'mythic', label: 'Mythic' }, { value: 'special', label: 'Special' }, { value: 'bonus', label: 'Bonus' } ]; const GAME_OPTIONS = [ { value: 'mtg', label: 'Magic: The Gathering' }, { value: 'pokemon', label: 'Pokémon TCG' }, { value: 'lorcana', label: 'Disney Lorcana' } ]; const LAYOUT_OPTIONS = [ { value: 'normal', label: 'Normal' }, { value: 'transform', label: 'Transform' }, { value: 'modal_dfc', label: 'Modal DFC' }, { value: 'meld', label: 'Meld' }, { value: 'split', label: 'Split' }, { value: 'flip', label: 'Flip' }, { value: 'leveler', label: 'Leveler' }, { value: 'saga', label: 'Saga' }, { value: 'class', label: 'Class' }, { value: 'adventure', label: 'Adventure' }, { value: 'planar', label: 'Planar' }, { value: 'scheme', label: 'Scheme' }, { value: 'vanguard', label: 'Vanguard' }, { value: 'token', label: 'Token' }, { value: 'emblem', label: 'Emblem' }, { value: 'augment', label: 'Augment' }, { value: 'host', label: 'Host' }, { value: 'art_series', label: 'Art Series' } ]; export default function BatchEditModal({ isOpen, onClose, onSubmit, loading, error, selectedCount }) { const [formData, setFormData] = useState({ rarity: '', verified: '', game: '', mana_cost: '', cmc: '', card_type: '', edhrec_rank: '', layout: '', released_at: '', reserved: '', reprint: '' }); const [dirtyFields, setDirtyFields] = useState(new Set()); const handleChange = (field, value) => { setFormData(prev => ({ ...prev, [field]: value })); setDirtyFields(prev => new Set([...prev, field])); }; const handleBlur = (field) => { // Keep track of touched fields }; const getFieldsToSubmit = () => { const updates = {}; dirtyFields.forEach(field => { const value = formData[field]; if (value === '') return; if (field === 'verified' || field === 'reserved' || field === 'reprint') { updates[field] = value === 'true'; } else if (field === 'cmc' || field === 'edhrec_rank') { updates[field] = value === '' ? null : parseInt(value, 10); } else { updates[field] = value; } }); return updates; }; const hasChanges = dirtyFields.size > 0; const handleSubmit = (e) => { e.preventDefault(); const updates = getFieldsToSubmit(); if (Object.keys(updates).length > 0) { onSubmit(updates); } }; if (!isOpen) return null; return (
Fields to update:
    {Array.from(dirtyFields).map(field => (
  • {field}: {field === 'verified' || field === 'reserved' || field === 'reprint' ? (formData[field] === 'true' ? 'Yes' : 'No') : formData[field] || '(cleared)'}
  • ))} {dirtyFields.size === 0 && (
  • No fields changed yet
  • )}
handleChange('rarity', e.target.value)} options={RARITY_OPTIONS.map(o => ({ value: o.value, label: o.label }))} placeholder="Select rarity" dirty={dirtyFields.has('rarity')} />
handleChange('game', e.target.value)} options={GAME_OPTIONS.map(o => ({ value: o.value, label: o.label }))} placeholder="Select game" dirty={dirtyFields.has('game')} /> handleChange('layout', e.target.value)} options={LAYOUT_OPTIONS.map(o => ({ value: o.value, label: o.label }))} placeholder="Select layout" dirty={dirtyFields.has('layout')} /> handleChange('mana_cost', e.target.value)} placeholder="{2}{W}{W}" dirty={dirtyFields.has('mana_cost')} /> handleChange('cmc', e.target.value)} placeholder="3" dirty={dirtyFields.has('cmc')} /> handleChange('card_type', e.target.value)} placeholder="Creature — Human Wizard" dirty={dirtyFields.has('card_type')} /> handleChange('edhrec_rank', e.target.value)} placeholder="12345" dirty={dirtyFields.has('edhrec_rank')} /> handleChange('released_at', e.target.value)} dirty={dirtyFields.has('released_at')} />
{error && (
{error}
)}
); }