diff --git a/data/overrides.json b/data/overrides.json index 29bac2f..a5dadc7 100644 --- a/data/overrides.json +++ b/data/overrides.json @@ -1,3 +1,5 @@ { - "reverseHolofoil": {} + "reverseHolofoil": { + "dp7-65": true + } } \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index ffa2f1c..623e244 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -20,6 +20,7 @@ export default function Page() { const [updatedAt, setUpdatedAt] = useState(null); const [cachedFlag, setCachedFlag] = useState(null); const [toast, setToast] = useState(null); + const [overrides, setOverrides] = useState>({}); useEffect(() => { (async () => { @@ -28,6 +29,30 @@ export default function Page() { })(); }, []); + // Load reverse overrides at start + useEffect(() => { + (async () => { + try { + const res = await fetch('/api/magikarp/override', { cache: 'no-store' }); + if (!res.ok) return; + const json = await res.json(); + const map = (json?.data?.reverseHolofoil || {}) as Record; + if (map && typeof map === 'object') setOverrides(map); + } catch {} + })(); + // Listen for UI-initiated override changes + function onOverrideChanged(ev: Event) { + try { + const ce = ev as CustomEvent<{ id: string; reverse: boolean }>; + const { id, reverse } = ce.detail || ({} as any); + if (!id) return; + setOverrides((prev) => ({ ...prev, [id]: !!reverse })); + } catch {} + } + window.addEventListener('reverse-override-changed', onOverrideChanged as EventListener); + return () => window.removeEventListener('reverse-override-changed', onOverrideChanged as EventListener); + }, []); + useEffect(() => { async function load() { setLoading(true); @@ -121,7 +146,7 @@ export default function Page() { function availableVariants(card: TcgCard): VariantKey[] { const list: VariantKey[] = ['base']; const hasHolo = !!(card.variants?.holofoil || (card as any).tcgplayer?.prices?.holofoil); - const hasReverse = !!(card.variants?.reverseHolofoil || (card as any).tcgplayer?.prices?.reverseHolofoil); + const hasReverse = !!(card.variants?.reverseHolofoil || (card as any).tcgplayer?.prices?.reverseHolofoil) || !!overrides[card.id]; if (hasHolo) list.push('holofoil'); if (hasReverse) list.push('reverseHolofoil'); return list; diff --git a/src/components/CardItem.tsx b/src/components/CardItem.tsx index 589e748..85ff0a7 100644 --- a/src/components/CardItem.tsx +++ b/src/components/CardItem.tsx @@ -117,6 +117,8 @@ export default function CardItem({ card, checked, onToggle }:{ card: TcgCard; ch body: JSON.stringify({ id: card.id, reverseHolofoil: true }), }); setReverseOverride(true); + // Notify app to recompute availableVariants immediately + try { window.dispatchEvent(new CustomEvent('reverse-override-changed', { detail: { id: card.id, reverse: true } })); } catch {} } catch {} }} > @@ -139,6 +141,8 @@ export default function CardItem({ card, checked, onToggle }:{ card: TcgCard; ch }); setReverseOverride(false); setReverseRemoved(true); + // Notify app to recompute availableVariants immediately + try { window.dispatchEvent(new CustomEvent('reverse-override-changed', { detail: { id: card.id, reverse: false } })); } catch {} } catch {} }} >