diff --git a/frontend/src/components/editor/SubscaleModal.jsx b/frontend/src/components/editor/SubscaleModal.jsx index 70bb4ce..0980b37 100644 --- a/frontend/src/components/editor/SubscaleModal.jsx +++ b/frontend/src/components/editor/SubscaleModal.jsx @@ -4,11 +4,20 @@ import BlankCardsCounter from '../BlankCardsCounter'; export default function SubscaleModal({ onClose, onSave, targetInfo }) { const [cardsCount, setCardsCount] = useState(targetInfo?.initialData?.cardsCount || 2); - const [blankCards, setBlankCards] = useState(targetInfo?.initialData?.blankCards || [0]); + + const [blankCards, setBlankCards] = useState(() => { + const initialBlanks = targetInfo?.initialData?.blankCards || [0]; + return initialBlanks.map(b => { + if (Array.isArray(b)) { + return { min: b[0], max: b[1], isRange: true }; + } + return { min: b, max: b, isRange: false }; + }); + }); const handleAddCard = () => { setCardsCount(prev => prev + 1); - setBlankCards([...blankCards, 0]); + setBlankCards([...blankCards, { min: 0, max: 0, isRange: false }]); }; const handleRemoveCard = () => { @@ -17,16 +26,46 @@ export default function SubscaleModal({ onClose, onSave, targetInfo }) { setBlankCards(blankCards.slice(0, -1)); }; - const handleBlankCardChange = (index, delta) => { + const handleExactChange = (index, delta) => { const newBlanks = [...blankCards]; - if (newBlanks[index] + delta >= 0) { - newBlanks[index] += delta; + const newVal = newBlanks[index].min + delta; + if (newVal >= 0) { + newBlanks[index].min = newVal; + newBlanks[index].max = newVal; setBlankCards(newBlanks); } }; + const handleMinChange = (index, delta) => { + const newBlanks = [...blankCards]; + const newVal = newBlanks[index].min + delta; + if (newVal >= 0 && newVal <= newBlanks[index].max) { + newBlanks[index].min = newVal; + setBlankCards(newBlanks); + } + }; + + const handleMaxChange = (index, delta) => { + const newBlanks = [...blankCards]; + const newVal = newBlanks[index].max + delta; + if (newVal >= newBlanks[index].min) { + newBlanks[index].max = newVal; + setBlankCards(newBlanks); + } + }; + + const toggleRangeMode = (index) => { + const newBlanks = [...blankCards]; + newBlanks[index].isRange = !newBlanks[index].isRange; + if (!newBlanks[index].isRange) { + newBlanks[index].max = newBlanks[index].min; + } + setBlankCards(newBlanks); + }; + const handleSave = () => { - onSave(targetInfo.term, targetInfo.side, { cardsCount, blankCards }); + const payloadBlanks = blankCards.map(b => b.isRange ? [b.min, b.max] : b.min); + onSave(targetInfo.term, targetInfo.side, { cardsCount, blankCards: payloadBlanks }); }; const handleDelete = () => { @@ -35,7 +74,7 @@ export default function SubscaleModal({ onClose, onSave, targetInfo }) { return (