add manual addtiona of RH as these sometimes are missed
This commit is contained in:
@@ -9,7 +9,10 @@ import { useUsdGbpRate } from '@/lib/useExchangeRate';
|
||||
export default function CardItem({ card, checked, onToggle }:{ card: TcgCard; checked: VariantState; onToggle: (id:string, key: VariantKey)=>void }) {
|
||||
const rate = useUsdGbpRate();
|
||||
const hasHolo = !!(card.variants?.holofoil || (card.tcgplayer as any)?.prices?.holofoil);
|
||||
const hasReverse = !!(card.variants?.reverseHolofoil || (card.tcgplayer as any)?.prices?.reverseHolofoil);
|
||||
const hasReverseDetected = !!(card.variants?.reverseHolofoil || (card.tcgplayer as any)?.prices?.reverseHolofoil);
|
||||
const [reverseOverride, setReverseOverride] = React.useState<boolean>(false);
|
||||
const [reverseRemoved, setReverseRemoved] = React.useState<boolean>(false);
|
||||
const hasReverse = (hasReverseDetected && !reverseRemoved) || reverseOverride;
|
||||
const prices = (card as any).tcgplayer?.prices || {};
|
||||
const rarityFull = card.rarity || '';
|
||||
const rarityAbbr = (() => {
|
||||
@@ -34,6 +37,28 @@ export default function CardItem({ card, checked, onToggle }:{ card: TcgCard; ch
|
||||
// Fallback: first letter of first word uppercased
|
||||
return rarityFull ? rarityFull.charAt(0).toUpperCase() : '';
|
||||
})();
|
||||
|
||||
// Initialize local override based on server overrides to show the − toggle on reloads
|
||||
React.useEffect(() => {
|
||||
let cancelled = false;
|
||||
(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 || {};
|
||||
if (!cancelled && map && typeof map === 'object') {
|
||||
if (map[card.id]) {
|
||||
setReverseOverride(true);
|
||||
setReverseRemoved(false);
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
})();
|
||||
return () => { cancelled = true; };
|
||||
}, [card.id]);
|
||||
const getPrice = (key: VariantKey): number | undefined => {
|
||||
const map: Record<VariantKey, string> = {
|
||||
base: 'normal',
|
||||
@@ -66,15 +91,61 @@ export default function CardItem({ card, checked, onToggle }:{ card: TcgCard; ch
|
||||
/>
|
||||
</div>
|
||||
<div className="p-3 flex flex-col gap-2">
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center justify-between gap-2">
|
||||
{(() => {
|
||||
const titleText = `${card.name} #${card.number}`;
|
||||
const len = titleText.length;
|
||||
const size = len > 34 ? 'text-xs' : len > 24 ? 'text-sm' : 'text-base';
|
||||
return (
|
||||
<h3 className={`font-medium ${size} leading-tight`} title={titleText}>
|
||||
{card.name} <span className="text-slate-500">#{card.number}</span>
|
||||
</h3>
|
||||
<div className="flex items-center gap-1 min-w-0">
|
||||
<h3 className={`font-medium ${size} leading-tight truncate`} title={titleText}>
|
||||
{card.name} <span className="text-slate-500">#{card.number}</span>
|
||||
</h3>
|
||||
{/* Show + only if no detected reverse and no override; show − only if override currently active */}
|
||||
{(!hasReverseDetected && !reverseOverride) && (
|
||||
<button
|
||||
type="button"
|
||||
title="Add Reverse variant"
|
||||
aria-label="Add Reverse variant"
|
||||
className="ml-1 inline-flex h-5 w-5 items-center justify-center rounded border border-slate-300 text-slate-600 hover:bg-slate-50 text-xs flex-shrink-0"
|
||||
onClick={async (e) => {
|
||||
e.stopPropagation();
|
||||
try {
|
||||
await fetch('/api/magikarp/override', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ id: card.id, reverseHolofoil: true }),
|
||||
});
|
||||
setReverseOverride(true);
|
||||
} catch {}
|
||||
}}
|
||||
>
|
||||
+
|
||||
</button>
|
||||
)}
|
||||
{reverseOverride && (
|
||||
<button
|
||||
type="button"
|
||||
title="Remove Reverse variant"
|
||||
aria-label="Remove Reverse variant"
|
||||
className="ml-1 inline-flex h-5 w-5 items-center justify-center rounded border border-slate-300 text-slate-600 hover:bg-slate-50 text-xs flex-shrink-0"
|
||||
onClick={async (e) => {
|
||||
e.stopPropagation();
|
||||
try {
|
||||
await fetch('/api/magikarp/override', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ id: card.id, reverseHolofoil: false }),
|
||||
});
|
||||
setReverseOverride(false);
|
||||
setReverseRemoved(true);
|
||||
} catch {}
|
||||
}}
|
||||
>
|
||||
−
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
})()}
|
||||
{rarityFull ? (
|
||||
|
||||
Reference in New Issue
Block a user