diff --git a/frontend/src/components/CardEditor.jsx b/frontend/src/components/CardEditor.jsx index 77c0c73..a8fdcf7 100644 --- a/frontend/src/components/CardEditor.jsx +++ b/frontend/src/components/CardEditor.jsx @@ -1,33 +1,44 @@ -export default function CardEditor({ index, level, handleLevelChange, handleRemoveLevel, totalLevels }) { +export default function CardEditor({ index, level, handleLevelChange, handleRemoveLevel, totalLevels, error }) { return ( -
+
+
+ {/* Botón para eliminar */} + {totalLevels > 2 && ( + + )} + + {/* Detalles tipo naipe */} + {index + 1} + {index + 1} + + handleLevelChange(index, e.target.value)} + className={`w-4/5 text-center text-2xl font-bold text-slate-700 bg-transparent border-b-2 border-dashed outline-none pb-1 ${ + error ? 'border-red-300 focus:border-red-500 placeholder:text-red-200' : 'border-slate-300 focus:border-blue-500' + }`} + /> +
+ + {/* Mensaje de error */} +
+ {error && ( +

+ Escribe una etiqueta +

+ )} +
- {/* Botón Eliminar */} - {totalLevels > 2 && ( - - )} - - {/* Detalles tipo naipe */} - - {index + 1} - - - {index + 1} - - - handleLevelChange(index, e.target.value)} - className="w-4/5 text-center text-2xl font-bold text-slate-700 bg-transparent border-b-2 border-dashed border-slate-300 focus:border-blue-500 outline-none pb-1" - />
); } \ No newline at end of file diff --git a/frontend/src/components/CriterionInput.jsx b/frontend/src/components/CriterionInput.jsx index 300c2de..bc15f39 100644 --- a/frontend/src/components/CriterionInput.jsx +++ b/frontend/src/components/CriterionInput.jsx @@ -1,4 +1,4 @@ -export default function CriterionInput({ criterionName, setCriterionName }) { +export default function CriterionInput({ criterionName, setCriterionName, error }) { return (
); } \ No newline at end of file diff --git a/frontend/src/components/layout/MainLayout.jsx b/frontend/src/components/layout/MainLayout.jsx index bd75055..73cbad7 100644 --- a/frontend/src/components/layout/MainLayout.jsx +++ b/frontend/src/components/layout/MainLayout.jsx @@ -22,7 +22,7 @@ export const MainLayout = () => { }` } > - DoC Clásico + DoC Básico { + + let hasError = false; + const newErrors = { criterion: false, levels: Array(levels.length).fill(false) }; + + if (!criterionName.trim()) { + newErrors.criterion = true; + hasError = true; + } + + levels.forEach((level, idx) => { + if (!level.trim()) { + newErrors.levels[idx] = true; + hasError = true; + } + }); + + setErrors(newErrors); + + if (hasError) return; + setIsLoading(true); setResult(null); - const firstIndex = "0"; - const lastIndex = (levels.length - 1).toString(); - - const currentReferences = { - [firstIndex]: 0, - [lastIndex]: 1 - }; - const payload = { - criterion_name: criterionName || "Criterio sin nombre", - levels: levels, + criterion_name: criterionName.trim(), + levels: levels.map(l => l.trim()), blank_cards: blankCards, - references: currentReferences + references: { "0": 0, [(levels.length - 1).toString()]: 1 } }; try { @@ -43,15 +57,27 @@ export default function BasicMode() { } }; + const handleCriterionChange = (val) => { + setCriterionName(val); + if (errors.criterion) setErrors({ ...errors, criterion: false }); + }; + const handleLevelChange = (index, newValue) => { const newLevels = [...levels]; newLevels[index] = newValue; setLevels(newLevels); + + if (errors.levels[index]) { + const newErrLevels = [...errors.levels]; + newErrLevels[index] = false; + setErrors({ ...errors, levels: newErrLevels }); + } }; const handleAddLevel = () => { setLevels([...levels, '']); setBlankCards([...blankCards, 0]); + setErrors({ ...errors, levels: [...errors.levels, false] }); }; const handleRemoveLevel = (indexToRemove) => { @@ -59,8 +85,12 @@ export default function BasicMode() { const newLevels = levels.filter((_, index) => index !== indexToRemove); const blankIndexToRemove = indexToRemove === 0 ? 0 : indexToRemove - 1; const newBlankCards = blankCards.filter((_, index) => index !== blankIndexToRemove); + + const newErrLevels = errors.levels.filter((_, index) => index !== indexToRemove); + setLevels(newLevels); setBlankCards(newBlankCards); + setErrors({ ...errors, levels: newErrLevels }); }; const handleBlankCardChange = (index, delta) => { @@ -74,10 +104,11 @@ export default function BasicMode() { return (
- +
@@ -90,6 +121,7 @@ export default function BasicMode() { handleLevelChange={handleLevelChange} handleRemoveLevel={handleRemoveLevel} totalLevels={levels.length} + error={errors.levels[index]} /> {index < levels.length - 1 && ( @@ -107,18 +139,18 @@ export default function BasicMode() {
-); + ); } \ No newline at end of file