From 216d9fab722628f97d4caf1a55c988fe9cccf096 Mon Sep 17 00:00:00 2001 From: AdalbertoCV <34152734@uaz.edu.mx> Date: Fri, 4 Oct 2024 13:02:20 -0600 Subject: [PATCH] Manejo de campo Obligatorio para elementos en dynamic forms --- .../common/utility/RenderElemento.jsx | 94 +++++++++---------- .../components/modalidades/CrearModalidad.css | 2 +- .../components/modalidades/CrearModalidad.jsx | 13 ++- .../modalidades/EditarModalidad.jsx | 29 +++++- .../src/components/modalidades/Modalidad.jsx | 45 +++++---- 5 files changed, 107 insertions(+), 76 deletions(-) diff --git a/cosiap_frontend/src/components/common/utility/RenderElemento.jsx b/cosiap_frontend/src/components/common/utility/RenderElemento.jsx index e6b4abe..6e9c491 100644 --- a/cosiap_frontend/src/components/common/utility/RenderElemento.jsx +++ b/cosiap_frontend/src/components/common/utility/RenderElemento.jsx @@ -2,7 +2,7 @@ import '@/components/modalidades/Modalidad.css' import api from "@/api"; export const renderElemento = (seccionId, elemento, handleInputChange, handleCheckboxChange) => { - const { tipo, opciones, id, nombre, formato } = elemento; + const { tipo, opciones, id, nombre, formato, obligatorio } = elemento; const handleChange = (e) => { const valor = e.target.value; @@ -12,96 +12,92 @@ export const renderElemento = (seccionId, elemento, handleInputChange, handleChe const handleDownload = async (elemento, formato) => { try { - // Realiza la petición al backend para obtener el archivo const response = await api.formatos.getById(formato, { - responseType: 'blob', // Esto asegura que obtengas los datos como un archivo binario + responseType: 'blob', }); - // Verifica si el tipo de contenido es correcto const contentType = response.headers['content-type']; - console.log('Content Type:', contentType); // Para depuración + console.log('Content Type:', contentType); if (contentType !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') { throw new Error('Tipo de archivo inesperado'); } - // Crea un Blob a partir de los datos recibidos const blob = new Blob([response.data], { type: contentType }); - - // Crea un URL para el archivo descargado const url = window.URL.createObjectURL(blob); - // Crea un enlace temporal const link = document.createElement('a'); link.href = url; - link.setAttribute('download', `${elemento.nombre}_formato.docx`); // Cambia a .docx + link.setAttribute('download', `${elemento.nombre}_formato.docx`); - // Añadir el enlace al cuerpo del documento para que sea visible en el navegador document.body.appendChild(link); - - // En lugar de hacer clic en el enlace, solo configuramos el enlace link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); - - // Dejar el enlace en el DOM para que sea visible - // document.body.removeChild(link); // No eliminar el enlace si deseas que la descarga sea visible - - // Revoca el URL del blob para liberar memoria window.URL.revokeObjectURL(url); } catch (error) { console.error('Error al descargar el formato:', error); } }; + const renderInput = (inputElement, obligatorio) => ( + <> + {inputElement} + {obligatorio && *obligatorio} + + ); switch (tipo) { case "texto_corto": - return ( + return renderInput( + />, + obligatorio ); case "texto_parrafo": - return ( + return renderInput(