import React, { useMemo, useState } from 'react'; import SymbolBadge from './SymbolBadge'; import { detectHands, resolveCombine, HAND_DEFS } from '../engine/hands'; import './CombinePanel.css'; // 합본 결재 (§5) — 책상에서 카드를 다중 선택하면 성립 가능한 족보를 자동 판정해 보여준다. // 여러 족보가 동시 성립하면 최고 족보를 기본값으로 보여주되, 하위 족보도 선택할 수 있게 한다 (§5.3) — // 명분 종류를 고르기 위해 일부러 하위 족보를 쓰는 선택이 존재해야 하기 때문이다. export default function CombinePanel({ deskCards, onConfirm, onClose }) { const [selectedIds, setSelectedIds] = useState([]); const selection = useMemo( () => deskCards.filter((c) => selectedIds.includes(c.id)), [deskCards, selectedIds] ); const matches = useMemo(() => detectHands(selection), [selection]); const toggle = (id) => { setSelectedIds((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id])); }; const confirm = (patternId) => { const result = resolveCombine(selection, patternId); if (result) onConfirm(result); }; return (
책상에서 카드를 선택하면 성립하는 족보를 판정합니다.
책상이 비어 있습니다.
} {deskCards.map((c) => ( ))}선택한 {selection.length}장은 성립하는 족보가 없습니다.
)} {matches.map((patternId) => { const def = HAND_DEFS[patternId]; return ( ); })}