Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ import {
FaCoins,
} from "react-icons/fa";
import { Card, Badge } from "@/shared";
import type { ConfigurationActivity } from "../../../types/Configuration.type";
import type { SubjectResponseDto } from "@/admin";
import type { ConfigurationActivity } from "../../../types/Configuration.type";
import { formatDate } from "@/shared/utils/format";
import styles from "./ConfigurationPreview.module.css";

interface ConfigurationPreviewProps {
Expand All @@ -32,17 +33,6 @@ const ConfigurationPreview: React.FC<ConfigurationPreviewProps> = ({
return option ? option.label : value;
};

const formatDate = (dateString: string) => {
if (!dateString) return "Sin fecha";
return new Date(dateString).toLocaleString("es-AR", {
day: "2-digit",
month: "2-digit",
year: "numeric",
hour: "2-digit",
minute: "2-digit",
});
};

const previewItems = [
{
icon: FaInfoCircle,
Expand All @@ -53,7 +43,7 @@ const ConfigurationPreview: React.FC<ConfigurationPreviewProps> = ({
icon: FaCalendarAlt,
title: "Período",
value: `${formatDate(configuration.startDate)} - ${formatDate(
configuration.endDate
configuration.endDate,
)}`,
},
{
Expand Down
50 changes: 25 additions & 25 deletions src/activity/components/createMemorama/pairCreator/PairCreator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ const PairCreator: React.FC = () => {
} = useCreateMemorama();

const [formData, setFormData] = useState<MemoramaPair>(
pairs[currentPairIndex]
pairs[currentPairIndex],
);

const itemVariants = {
Expand All @@ -53,7 +53,7 @@ const PairCreator: React.FC = () => {

// Función para validar la pareja actual
const validateCurrentPair = (
pairData: MemoramaPair
pairData: MemoramaPair,
): { [key: string]: string } => {
const validationErrors: { [key: string]: string } = {};

Expand Down Expand Up @@ -116,7 +116,7 @@ const PairCreator: React.FC = () => {
.map((item) => item.index + 1)
.join(", ");
alert(
`No puedes finalizar hasta completar todas las parejas. Parejas incompletas: ${incompleteNumbers}`
`No puedes finalizar hasta completar todas las parejas. Parejas incompletas: ${incompleteNumbers}`,
);
return;
}
Expand All @@ -137,42 +137,42 @@ const PairCreator: React.FC = () => {
};

// Función debug para llenar automáticamente
const handleDebugFill = async () => {
try {
const response = await fetch("/preview.png");
const blob = await response.blob();
const file = new File([blob], "preview.png", {
type: blob.type || "image/png",
});
// const handleDebugFill = async () => {
// try {
// const response = await fetch("/preview.png");
// const blob = await response.blob();
// const file = new File([blob], "preview.png", {
// type: blob.type || "image/png",
// });

const debugPair: MemoramaPair = {
concept: `Concepto`,
image: file,
};
setFormData(debugPair);
} catch (error) {
const debugPair: MemoramaPair = {
concept: `Concepto`,
image: null,
};
setFormData(debugPair);
}
};
// const debugPair: MemoramaPair = {
// concept: `Concepto`,
// image: file,
// };
// setFormData(debugPair);
// } catch (error) {
// const debugPair: MemoramaPair = {
// concept: `Concepto`,
// image: null,
// };
// setFormData(debugPair);
// }
// };

return (
<motion.div variants={itemVariants} className={styles.container}>
{/* Navegador de parejas */}
<Card className={styles.navigatorCard}>
<div className={styles.navigatorHeader}>
<h4 className={styles.navigatorTitle}>Navegador de Parejas</h4>
<Button
{/* <Button
variant="outline"
size="sm"
onClick={handleDebugFill}
className={styles.debugButton}
>
DEBUG
</Button>
</Button> */}
</div>
<div className={styles.questionTabs}>
{pairs.map((pair, index) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@
margin: 0;
}

/* ========== INICIO ESTILOS DEBUG ========== */
/* TODO: Comentar o eliminar esta sección en producción */
/* ========== INICIO ESTILOS DEBUG ==========
.debugButton {
display: flex;
align-items: center;
Expand All @@ -53,7 +52,7 @@
.debugButton:active {
transform: translateY(0);
}
/* ========== FIN ESTILOS DEBUG ========== */
========== FIN ESTILOS DEBUG ========== */

.questionTabs {
display: flex;
Expand Down Expand Up @@ -600,11 +599,10 @@
gap: 0.5rem;
}

/* ========== INICIO RESPONSIVE DEBUG ========== */
/* TODO: Comentar o eliminar esta sección en producción */
/* ========== INICIO RESPONSIVE DEBUG ==========
.debugButton {
align-self: stretch;
justify-content: center;
}
/* ========== FIN RESPONSIVE DEBUG ========== */
========== FIN RESPONSIVE DEBUG ========== */
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,19 @@ import {
FaEdit,
FaExclamationTriangle,
} from "react-icons/fa";
import { Button, Card, GameType, getGameTypeFromActivityName, Input, TextArea, Tooltip } from "@/shared";
import type { PreguntadosConfigQuestion, Question } from "../../../types/Preguntados.type";
import {
Button,
Card,
GameType,
getGameTypeFromActivityName,
Input,
TextArea,
Tooltip,
} from "@/shared";
import type {
PreguntadosConfigQuestion,
Question,
} from "../../../types/Preguntados.type";
import { useCreatePreguntados } from "../../../hooks/useCreatePreguntados";
import styles from "./QuestionCreator.module.css";
import { useActividadCreada } from "@/activity/hooks/useActividadCreada";
Expand All @@ -32,11 +43,11 @@ const QuestionCreator: React.FC = () => {
getQuestionStatus,
setQuestionErrors,
clearQuestionErrors,
setQuestions
setQuestions,
} = useCreatePreguntados();
const { actividadCreada } = useActividadCreada()
const { actividadCreada } = useActividadCreada();
const [formData, setFormData] = useState<Question>(
questions[currentQuestionIndex]
questions[currentQuestionIndex],
);

const itemVariants = {
Expand All @@ -49,19 +60,20 @@ const QuestionCreator: React.FC = () => {
if (actividadCreada) {
const gameType = getGameTypeFromActivityName(actividadCreada.name);
if (gameType === GameType.PREGUNTADOS) {
const createdConfig = actividadCreada.gameConfig as PreguntadosConfigQuestion;
setQuestions(createdConfig.questions)
const createdConfig =
actividadCreada.gameConfig as PreguntadosConfigQuestion;
setQuestions(createdConfig.questions);
}
}
}, [])
}, []);
// Actualizar formData cuando cambie la pregunta
useEffect(() => {
setFormData(questions[currentQuestionIndex]);
}, [questions, currentQuestionIndex]);

// Función para validar la pregunta actual y retornar errores específicos
const validateCurrentQuestion = (
questionData: Question
questionData: Question,
): { [key: string]: string } => {
const validationErrors: { [key: string]: string } = {};

Expand All @@ -76,11 +88,13 @@ const QuestionCreator: React.FC = () => {
// Validar opciones
questionData.options.forEach((option, index) => {
if (!option.option.trim()) {
validationErrors[`option${index}`] = `La opción ${index + 1
} es obligatoria`;
validationErrors[`option${index}`] = `La opción ${
index + 1
} es obligatoria`;
} else if (option.option.length > 100) {
validationErrors[`option${index}`] = `La opción ${index + 1
} no puede tener más de 100 caracteres`;
validationErrors[`option${index}`] = `La opción ${
index + 1
} no puede tener más de 100 caracteres`;
}
});

Expand Down Expand Up @@ -143,7 +157,7 @@ const QuestionCreator: React.FC = () => {
.map((item) => item.index + 1)
.join(", ");
alert(
`No puedes finalizar hasta completar todas las preguntas. Preguntas incompletas: ${incompleteNumbers}`
`No puedes finalizar hasta completar todas las preguntas. Preguntas incompletas: ${incompleteNumbers}`,
);
return;
}
Expand All @@ -163,20 +177,19 @@ const QuestionCreator: React.FC = () => {
}
};

// TODO: DELETE - Comentar o eliminar esta sección en producción
// ========== INICIO SECCIÓN DEBUG ==========
const handleDebugFill = () => {
const debugQuestion: Question = {
question: `Pregunta ${currentQuestionIndex + 1}`,
options: [
{ option: "R1", isCorrect: true },
{ option: "R2", isCorrect: false },
{ option: "R3", isCorrect: false },
{ option: "R4", isCorrect: false },
],
};
setFormData(debugQuestion);
};
// const handleDebugFill = () => {
// const debugQuestion: Question = {
// question: `Pregunta ${currentQuestionIndex + 1}`,
// options: [
// { option: "R1", isCorrect: true },
// { option: "R2", isCorrect: false },
// { option: "R3", isCorrect: false },
// { option: "R4", isCorrect: false },
// ],
// };
// setFormData(debugQuestion);
// };
// ========== FIN SECCIÓN DEBUG ==========

const currentErrors = questionErrors[currentQuestionIndex] || {};
Expand All @@ -190,15 +203,14 @@ const QuestionCreator: React.FC = () => {
<div className={styles.navigatorHeader}>
<h4 className={styles.navigatorTitle}>Navegador de Preguntas</h4>
{/* ========== INICIO BOTÓN DEBUG ========== */}
{/* TODO: DELETE - Comentar o eliminar esta sección en producción */}
<Button
{/* <Button
variant="ghost"
size="sm"
onClick={handleDebugFill}
className={styles.debugButton}
>
DEBUG
</Button>
</Button> */}
{/* ========== FIN BOTÓN DEBUG ========== */}
</div>
<div className={styles.questionTabs}>
Expand All @@ -212,8 +224,9 @@ const QuestionCreator: React.FC = () => {
key={index}
type="button"
onClick={() => handleSaveAndGoToQuestion(index)}
className={`${styles.questionTab} ${index === currentQuestionIndex ? styles.active : ""
} ${styles[status]} ${hasTabErrors ? styles.hasErrors : ""}`}
className={`${styles.questionTab} ${
index === currentQuestionIndex ? styles.active : ""
} ${styles[status]} ${hasTabErrors ? styles.hasErrors : ""}`}
title={
hasTabErrors
? `Pregunta ${index + 1} tiene errores`
Expand Down Expand Up @@ -296,8 +309,9 @@ const QuestionCreator: React.FC = () => {
maxLength={200}
showCharCount
resize="vertical"
className={`${styles.questionInput} ${currentErrors.question ? styles.error : ""
}`}
className={`${styles.questionInput} ${
currentErrors.question ? styles.error : ""
}`}
/>
{currentErrors.question && (
<span className={styles.errorMessage}>
Expand Down Expand Up @@ -337,8 +351,9 @@ const QuestionCreator: React.FC = () => {
<Button
variant="ghost"
onClick={() => handleCorrectAnswerChange(index)}
className={`${styles.correctButton} ${option.isCorrect ? styles.selected : ""
}`}
className={`${styles.correctButton} ${
option.isCorrect ? styles.selected : ""
}`}
title={
option.isCorrect
? "Respuesta correcta seleccionada"
Expand All @@ -354,8 +369,9 @@ const QuestionCreator: React.FC = () => {
type="text"
value={option.option}
onChange={(e) => handleOptionChange(index, e.target.value)}
className={`${styles.optionInput} ${currentErrors[`option${index}`] ? styles.error : ""
} ${option.isCorrect ? styles.correct : ""}`}
className={`${styles.optionInput} ${
currentErrors[`option${index}`] ? styles.error : ""
} ${option.isCorrect ? styles.correct : ""}`}
/>
{currentErrors[`option${index}`] && (
<span className={styles.errorMessage}>
Expand Down
Loading