fix #148: Refactorización para limpieza y generalidad
This commit is contained in:
@@ -94,9 +94,10 @@ function DatosGenerales({
|
|||||||
}: {
|
}: {
|
||||||
onPersistDato: (clave: string, value: string) => void
|
onPersistDato: (clave: string, value: string) => void
|
||||||
}) {
|
}) {
|
||||||
const { asignaturaId } = useParams({
|
const { asignaturaId, planId } = useParams({
|
||||||
from: '/planes/$planId/asignaturas/$asignaturaId',
|
from: '/planes/$planId/asignaturas/$asignaturaId',
|
||||||
})
|
})
|
||||||
|
const navigate = useNavigate()
|
||||||
|
|
||||||
const { data: data, isLoading: isLoading } = useSubject(asignaturaId)
|
const { data: data, isLoading: isLoading } = useSubject(asignaturaId)
|
||||||
const updateAsignatura = useUpdateAsignatura()
|
const updateAsignatura = useUpdateAsignatura()
|
||||||
@@ -228,11 +229,29 @@ function DatosGenerales({
|
|||||||
clave={key}
|
clave={key}
|
||||||
title={cardTitle}
|
title={cardTitle}
|
||||||
initialContent={currentContent}
|
initialContent={currentContent}
|
||||||
xColumn={xColumn}
|
|
||||||
placeholder={placeholder}
|
placeholder={placeholder}
|
||||||
description={description}
|
description={description}
|
||||||
onPersist={(clave, value) => onPersistDato(clave, value)}
|
onPersist={({ clave, value }) =>
|
||||||
onOpenEvaluationEditor={openEvaluationEditor}
|
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}
|
containerRef={evaluationCardRef}
|
||||||
forceEditToken={evaluationForceEditToken}
|
forceEditToken={evaluationForceEditToken}
|
||||||
highlightToken={evaluationHighlightToken}
|
highlightToken={evaluationHighlightToken}
|
||||||
onOpenEvaluationEditor={openEvaluationEditor}
|
onPersist={({ value }) => persistCriteriosEvaluacion(value)}
|
||||||
onPersistEvaluation={persistCriteriosEvaluacion}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -285,13 +303,15 @@ interface InfoCardProps {
|
|||||||
initialContent: any
|
initialContent: any
|
||||||
placeholder?: string
|
placeholder?: string
|
||||||
description?: string
|
description?: string
|
||||||
xColumn?: string
|
|
||||||
required?: boolean // Nueva prop para el asterisco
|
required?: boolean // Nueva prop para el asterisco
|
||||||
type?: 'text' | 'requirements' | 'evaluation'
|
type?: 'text' | 'requirements' | 'evaluation'
|
||||||
onEnhanceAI?: (content: any) => void
|
onEnhanceAI?: (content: any) => void
|
||||||
onPersist?: (clave: string, value: string) => void
|
onPersist?: (payload: {
|
||||||
onPersistEvaluation?: (rows: Array<CriterioEvaluacionRow>) => Promise<void>
|
type: NonNullable<InfoCardProps['type']>
|
||||||
onOpenEvaluationEditor?: () => void
|
clave?: string
|
||||||
|
value: any
|
||||||
|
}) => void | Promise<void>
|
||||||
|
onClickEditButton?: (helpers: { startEditing: () => void }) => void
|
||||||
|
|
||||||
containerRef?: React.RefObject<HTMLDivElement | null>
|
containerRef?: React.RefObject<HTMLDivElement | null>
|
||||||
forceEditToken?: number
|
forceEditToken?: number
|
||||||
@@ -305,12 +325,10 @@ function InfoCard({
|
|||||||
initialContent,
|
initialContent,
|
||||||
placeholder,
|
placeholder,
|
||||||
description,
|
description,
|
||||||
xColumn,
|
|
||||||
required,
|
required,
|
||||||
type = 'text',
|
type = 'text',
|
||||||
onPersist,
|
onPersist,
|
||||||
onPersistEvaluation,
|
onClickEditButton,
|
||||||
onOpenEvaluationEditor,
|
|
||||||
containerRef,
|
containerRef,
|
||||||
forceEditToken,
|
forceEditToken,
|
||||||
highlightToken,
|
highlightToken,
|
||||||
@@ -401,15 +419,15 @@ function InfoCard({
|
|||||||
)
|
)
|
||||||
setIsEditing(false)
|
setIsEditing(false)
|
||||||
|
|
||||||
void onPersistEvaluation?.(cleaned)
|
void onPersist?.({ type, clave, value: cleaned })
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
setData(tempText)
|
setData(tempText)
|
||||||
setIsEditing(false)
|
setIsEditing(false)
|
||||||
|
|
||||||
if (type === 'text' && clave && onPersist) {
|
if (type === 'text') {
|
||||||
onPersist(clave, String(tempText ?? ''))
|
void onPersist?.({ type, clave, value: String(tempText ?? '') })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,22 +517,14 @@ function InfoCard({
|
|||||||
size="icon"
|
size="icon"
|
||||||
className="h-8 w-8 text-slate-400"
|
className="h-8 w-8 text-slate-400"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
switch (xColumn) {
|
const startEditing = () => setIsEditing(true)
|
||||||
case 'contenido_tematico': {
|
|
||||||
navigate({
|
if (onClickEditButton) {
|
||||||
to: '/planes/$planId/asignaturas/$asignaturaId/contenido',
|
onClickEditButton({ startEditing })
|
||||||
params: { planId, asignaturaId: asignaturaId! },
|
return
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
case 'criterios_de_evaluacion': {
|
|
||||||
onOpenEvaluationEditor?.()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
default: {
|
|
||||||
setIsEditing(true)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startEditing()
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Pencil className="h-3 w-3" />
|
<Pencil className="h-3 w-3" />
|
||||||
@@ -537,7 +547,7 @@ function InfoCard({
|
|||||||
{evalRows.map((row) => (
|
{evalRows.map((row) => (
|
||||||
<div
|
<div
|
||||||
key={row.id}
|
key={row.id}
|
||||||
className="grid grid-cols-[1fr_96px_32px] items-center gap-2"
|
className="grid grid-cols-[2fr_1fr_1ch_32px] items-center gap-2"
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
value={row.label}
|
value={row.label}
|
||||||
@@ -602,6 +612,13 @@ function InfoCard({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<div
|
||||||
|
className="flex w-[1ch] items-center justify-center text-sm text-slate-600"
|
||||||
|
aria-hidden
|
||||||
|
>
|
||||||
|
%
|
||||||
|
</div>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="icon"
|
size="icon"
|
||||||
|
|||||||
Reference in New Issue
Block a user