From 2a237a51db0a57b0de83695d5d1a4140d78efee0 Mon Sep 17 00:00:00 2001 From: Alexis Date: Mon, 6 Apr 2026 12:34:42 +0200 Subject: [PATCH] =?UTF-8?q?add:=20a=C3=B1adir=20modo=20rango=20en=20el=20m?= =?UTF-8?q?odal=20para=20la=20subescala?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/editor/SubscaleModal.jsx | 114 ++++++++++++++++-- 1 file changed, 101 insertions(+), 13 deletions(-) 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 (
-
+
@@ -47,34 +86,83 @@ export default function SubscaleModal({ onClose, onSave, targetInfo }) {
- {/* Tablero */} + {/* Tablero de Cartas */}
+ {Array.from({ length: cardsCount }).map((_, index) => ( + {/* CARTA DE REFERENCIA */}
{cardsCount > 2 && index === cardsCount - 1 && ( - + )} {index + 1}
+ + {/* HUECO ENTRE CARTAS: Representación y Controles */} {index < cardsCount - 1 && ( - +
+ + {/* Representación visual de las cartas blancas Sólidas / Fantasmas */} +
+ {Array.from({ length: blankCards[index].min }).map((_, i) => ( +
+ ))} + {blankCards[index].isRange && Array.from({ length: blankCards[index].max - blankCards[index].min }).map((_, i) => ( +
+ ? +
+ ))} +
+ + {/* Controles de números */} + {blankCards[index].isRange ? ( + // MODO RANGO +
+
+ MÍN + handleMinChange(idx, delta)} /> +
+
+ MÁX + handleMaxChange(idx, delta)} /> +
+
+ ) : ( + // MODO EXACTO +
+ CARTAS + handleExactChange(idx, delta)} /> +
+ )} + + {/* Botón Toggle */} + + +
)} ))} + {/* Botón Añadir Carta */}
-
+
- {/* Botones */} + {/* Botones de Acción */}