From fa200acbfdd037474aa4aa04688e45b7bdcb2d5f Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Wed, 4 Mar 2026 14:53:23 -0600 Subject: [PATCH] =?UTF-8?q?fix=20#148:=20Refactorizaci=C3=B3n=20para=20lim?= =?UTF-8?q?pieza=20y=20generalidad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detalle/AsignaturaDetailPage.tsx | 81 +++++++++++-------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/src/components/asignaturas/detalle/AsignaturaDetailPage.tsx b/src/components/asignaturas/detalle/AsignaturaDetailPage.tsx index 6b5503a..b37c96b 100644 --- a/src/components/asignaturas/detalle/AsignaturaDetailPage.tsx +++ b/src/components/asignaturas/detalle/AsignaturaDetailPage.tsx @@ -94,9 +94,10 @@ function DatosGenerales({ }: { onPersistDato: (clave: string, value: string) => void }) { - const { asignaturaId } = useParams({ + const { asignaturaId, planId } = useParams({ from: '/planes/$planId/asignaturas/$asignaturaId', }) + const navigate = useNavigate() const { data: data, isLoading: isLoading } = useSubject(asignaturaId) const updateAsignatura = useUpdateAsignatura() @@ -228,11 +229,29 @@ function DatosGenerales({ clave={key} title={cardTitle} initialContent={currentContent} - xColumn={xColumn} placeholder={placeholder} description={description} - onPersist={(clave, value) => onPersistDato(clave, value)} - onOpenEvaluationEditor={openEvaluationEditor} + onPersist={({ clave, value }) => + onPersistDato(String(clave ?? key), String(value ?? '')) + } + onClickEditButton={({ startEditing }) => { + switch (xColumn) { + case 'contenido_tematico': { + navigate({ + to: '/planes/$planId/asignaturas/$asignaturaId/contenido', + params: { planId, asignaturaId }, + }) + return + } + case 'criterios_de_evaluacion': { + openEvaluationEditor() + return + } + default: { + startEditing() + } + } + }} /> ) }, @@ -268,8 +287,7 @@ function DatosGenerales({ containerRef={evaluationCardRef} forceEditToken={evaluationForceEditToken} highlightToken={evaluationHighlightToken} - onOpenEvaluationEditor={openEvaluationEditor} - onPersistEvaluation={persistCriteriosEvaluacion} + onPersist={({ value }) => persistCriteriosEvaluacion(value)} /> @@ -285,13 +303,15 @@ interface InfoCardProps { initialContent: any placeholder?: string description?: string - xColumn?: string required?: boolean // Nueva prop para el asterisco type?: 'text' | 'requirements' | 'evaluation' onEnhanceAI?: (content: any) => void - onPersist?: (clave: string, value: string) => void - onPersistEvaluation?: (rows: Array) => Promise - onOpenEvaluationEditor?: () => void + onPersist?: (payload: { + type: NonNullable + clave?: string + value: any + }) => void | Promise + onClickEditButton?: (helpers: { startEditing: () => void }) => void containerRef?: React.RefObject forceEditToken?: number @@ -305,12 +325,10 @@ function InfoCard({ initialContent, placeholder, description, - xColumn, required, type = 'text', onPersist, - onPersistEvaluation, - onOpenEvaluationEditor, + onClickEditButton, containerRef, forceEditToken, highlightToken, @@ -401,15 +419,15 @@ function InfoCard({ ) setIsEditing(false) - void onPersistEvaluation?.(cleaned) + void onPersist?.({ type, clave, value: cleaned }) return } setData(tempText) setIsEditing(false) - if (type === 'text' && clave && onPersist) { - onPersist(clave, String(tempText ?? '')) + if (type === 'text') { + void onPersist?.({ type, clave, value: String(tempText ?? '') }) } } @@ -499,22 +517,14 @@ function InfoCard({ size="icon" className="h-8 w-8 text-slate-400" onClick={() => { - switch (xColumn) { - case 'contenido_tematico': { - navigate({ - to: '/planes/$planId/asignaturas/$asignaturaId/contenido', - params: { planId, asignaturaId: asignaturaId! }, - }) - return - } - case 'criterios_de_evaluacion': { - onOpenEvaluationEditor?.() - return - } - default: { - setIsEditing(true) - } + const startEditing = () => setIsEditing(true) + + if (onClickEditButton) { + onClickEditButton({ startEditing }) + return } + + startEditing() }} > @@ -537,7 +547,7 @@ function InfoCard({ {evalRows.map((row) => (
+
+ % +
+