Skip to content

Data UI required fixes#94

Merged
caverav merged 43 commits intodevelopmentfrom
data-ui-required-fixes
Oct 4, 2024
Merged

Data UI required fixes#94
caverav merged 43 commits intodevelopmentfrom
data-ui-required-fixes

Conversation

@sealra
Copy link
Copy Markdown
Collaborator

@sealra sealra commented Sep 11, 2024

Descripción

Se agregan required en CRUD de Data, y se modifica el componente FileInput para que también sea capaz de gestionar required. Además, se arregla comportamiento buggy en Clients.

Destacar que no soluciona problemas de ESLint warns del issue #52

Motivación y Contexto

Mejora UI/UX, soluciona issue #63

¿Cómo ha sido probado?

A través del uso de los modales, no afecta otras áreas.

Capturas de pantalla (si es apropiado):

Tipos de cambios

  • Bugfix (cambio que no interrumpe el funcionamiento y que soluciona un problema)
  • New feature (cambio que no interrumpe el funcionamiento y que añade funcionalidad)
  • Breaking change (corrección o funcionalidad que podría causar que la funcionalidad existente cambie)

Lista de verificación:

  • Mi código sigue el estilo de código de este proyecto.
  • Mi cambio requiere una modificación en la documentación.
  • He actualizado la documentación en consecuencia.
  • Requiere nuevos tests.

Summary by CodeRabbit

  • Nuevas Funciones

    • Se han agregado nuevos props opcionales en el componente de entrada de archivos para indicar campos obligatorios y mostrar alertas visuales.
    • Nuevos mensajes de error específicos para validaciones de campos duplicados (correo electrónico, nombre de colaborador, nombre de empresa y nombre de plantilla).
  • Mejoras en la Experiencia del Usuario

    • Indicadores claros para campos obligatorios, incluyendo asteriscos y alertas visuales en los campos de entrada.
    • Validaciones mejoradas en los formularios de adición y edición de colaboradores, con notificaciones de error adecuadas y requisitos de complejidad de contraseña.
    • Se ha mejorado la gestión del estado y la retroalimentación del usuario en los formularios mediante la incorporación de nuevos estados de alerta.

@sealra sealra linked an issue Sep 11, 2024 that may be closed by this pull request
Copy link
Copy Markdown
Collaborator

@iTzGooDLife iTzGooDLife left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La regex implementada en la creación de colaboradores no es correcta, debería coincidir con la del backend:

/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}/

Se muestra un ejemplo en el screeenshot adjunto de como una contraseña que deberia ser valida, no lo es, mientras que al usar la regex mencionada pasa sin problemas (no pongo un screenshot de esto pq sería solamente el toast xd).

Regex actual:
image

Comment thread frontend/src/routes/data/Collaborators.tsx Outdated
@iTzGooDLife
Copy link
Copy Markdown
Collaborator

No se verifican los campos requeridos durante la creación del cliente. En la primera imagen se ven los campos requeridos, pero al editar, estos ya no lo son (segunda imagen) y en la tercera imagen se puede ver que los cambios se guardan aunque no se tengan esos campos (excepto el email).
Lo dejé como comentario y no como cambios solicitados pq el backend permite el cambio, asi que se debería conversar que hacer en tal situación.

image

image

image

@iTzGooDLife
Copy link
Copy Markdown
Collaborator

No permite eliminar Clientes ni Compañias, no sé si es por que no está actualizado con la rama development o hay otros endpoints rotos con la actualización de dependencias. Revisar @sealra @caverav

image

@iTzGooDLife
Copy link
Copy Markdown
Collaborator

No permite eliminar Clientes ni Compañias, no sé si es por que no está actualizado con la rama development o hay otros endpoints rotos con la actualización de dependencias.

Está actualizado, hay que arreglar eso. Se hará issue.

image

@iTzGooDLife
Copy link
Copy Markdown
Collaborator

Está actualizado, hay que arreglar eso. Se hará issue.

El problema era que development estaba desactualizado en comparación con main, el problema ya no está presente.

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Sep 12, 2024

No se verifican los campos requeridos durante la creación del cliente. En la primera imagen se ven los campos requeridos, pero al editar, estos ya no lo son (segunda imagen) y en la tercera imagen se puede ver que los cambios se guardan aunque no se tengan esos campos (excepto el email). Lo dejé como comentario y no como cambios solicitados pq el backend permite el cambio, asi que se debería conversar que hacer en tal situación.

image

image

image

En efecto, únicamente gestioné los errores del back en el caso de editar, dado que el resto de acciones sí era posible, podemos discutir en la próxima daily el comportamiento deseado.

@sealra sealra requested a review from iTzGooDLife September 12, 2024 00:41
@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Sep 12, 2024

Pedí un nuevo review @iTzGooDLife dado que se corrigió el Regex !

@massi-ponce
Copy link
Copy Markdown
Collaborator

No se verifican los campos requeridos durante la creación del cliente. En la primera imagen se ven los campos requeridos, pero al editar, estos ya no lo son (segunda imagen) y en la tercera imagen se puede ver que los cambios se guardan aunque no se tengan esos campos (excepto el email). Lo dejé como comentario y no como cambios solicitados pq el backend permite el cambio, asi que se debería conversar que hacer en tal situación.

image

image

image

Pasa exactamente lo mismo con Collaborators. Primero cree uno, y luego lo edité limpiando todos los campos que antes eran required, y me dejó hacerlo. Adjunto fotos:

imagen

@massi-ponce
Copy link
Copy Markdown
Collaborator

Encontré otro "bug" en Clients pero no sé que tanta importancia deberíamos darle ya que igual es un poco rebuscado y, además, está muy relacionado a los ya comentados más arriba.

Pero básicamente se pueden pasar por alto los campos requeridos incluso a partir desde la creación del cliente como tal, es decir, no es necesario crear uno, luego editarlo y limpiar los campos como se indica en comentarios más arriba.

Adjunto fotos de casos, donde la primera imagen muestra como, al rellenar los campos requeridos con un espacio (menos el correo), permite crear un cliente "vacío" pasando por alto los campos requeridos. Esto se puede ver reflejado en la segunda imagen.

imagen
imagen

Intenté replicar lo mismo en Collaborators pero, por alguna razón, ahí no lo permite y sale el siguiente mensaje en el toast:

imagen

Comment thread frontend/src/routes/data/Companies.tsx Outdated
Comment thread frontend/src/routes/data/Clients.tsx Outdated
Comment thread frontend/src/routes/data/Clients.tsx Outdated
Comment thread frontend/src/routes/data/Clients.tsx Outdated
Comment thread frontend/src/routes/data/Collaborators.tsx Outdated
Comment thread frontend/src/routes/data/Collaborators.tsx Outdated
Comment thread frontend/src/routes/data/Companies.tsx Outdated
Comment thread frontend/src/routes/data/Companies.tsx Outdated
Comment thread frontend/src/routes/data/Templates.tsx Outdated
Comment thread frontend/src/routes/data/Templates.tsx Outdated
@sealra sealra dismissed caverav’s stale review September 26, 2024 23:52

Se agregó un <span/ > en vez de null dado que genera conflictos con los hooks de UITable useSortableTable y useTableFiltering, revisar si esto es un cambio adecuado o va fuera de este scope porfavor!

@Icksir
Copy link
Copy Markdown
Collaborator

Icksir commented Sep 28, 2024

No se iba a eliminar alguno de los dos asteriscos que indican obligatoriedad, de una vez que hablamos de ello? Encuentro que es algo redundante que esté tanto en el título como en la caja para rellenar

image

@Icksir
Copy link
Copy Markdown
Collaborator

Icksir commented Sep 28, 2024

Y para la creación de la contraseña en Collaborators, podría ser útil que exista una verificación de esta misma en el momento de la creación. Onda lo típico de Confirmar contraseña, por si existen errores de tipeo (q puede q pase)

@jllanosg
Copy link
Copy Markdown
Collaborator

No se iba a eliminar alguno de los dos asteriscos que indican obligatoriedad, de una vez que hablamos de ello? Encuentro que es algo redundante que esté tanto en el título como en la caja para rellenar

image

No es de este PR

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between 090fe2c and e1027f5.

📒 Files selected for processing (1)
  • frontend/src/components/input/FileInput.tsx (2 hunks)

Comment on lines +13 to +22
const arrayBufferToBase64 = (buffer: ArrayBuffer): string => {
let binary = '';
const bytes = new Uint8Array(buffer);
const len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Simplificar la conversión a Base64 utilizando readAsDataURL

Actualmente, estás utilizando una función personalizada arrayBufferToBase64 y readAsArrayBuffer para convertir el archivo a una cadena Base64. Puedes simplificar este proceso utilizando el método readAsDataURL de FileReader, que convierte directamente el archivo en una cadena Base64 sin necesidad de pasos intermedios.

Aplica este cambio para simplificar el código:

-const arrayBufferToBase64 = (buffer: ArrayBuffer): string => {
-  let binary = '';
-  const bytes = new Uint8Array(buffer);
-  const len = bytes.byteLength;
-  for (let i = 0; i < len; i++) {
-    binary += String.fromCharCode(bytes[i]);
-  }
-  return btoa(binary);
-};

...

reader.onloadend = () => {
-  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
-  const arrayBuffer = reader.result as ArrayBuffer;
-  const base64String = arrayBufferToBase64(arrayBuffer);
+  const base64String = reader.result as string;
  onFileSelect({ name: file.name, content: base64String });
};
-reader.readAsArrayBuffer(file);
+reader.readAsDataURL(file);

Also applies to: 41-44

};
reader.readAsArrayBuffer(file);
} else {
setFileName('');
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Notificar la deselección de archivos al componente padre

Cuando el usuario deselecciona un archivo, la función onFileSelect no se llama. Esto puede provocar que el componente padre no sea consciente de que ya no hay un archivo seleccionado.

Aplica este cambio para notificar al componente padre cuando no hay un archivo seleccionado:

} else {
  setFileName('');
+  onFileSelect({ name: '', content: '' });
}

Committable suggestion was skipped due to low confidence.

@jllanosg
Copy link
Copy Markdown
Collaborator

jllanosg commented Oct 1, 2024

@sealra por favor revisar los comentarios de coderabbit y resolver/aceptar c/u

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Outside diff range comments (2)
frontend/src/i18n/en-US/index.ts (2)

Line range hint 1-141: Estandarice el uso de comillas en todo el archivo

He observado inconsistencias en el uso de comillas simples y dobles en todo el archivo. Esto es inaceptable y debe ser corregido de inmediato. Es crucial mantener un estilo coherente en todo el código.

Ejemplos de inconsistencias:

  1. Línea 5: changeDisplayLanguageInfo: "Choose your preferred default language",
  2. Línea 135: clientEmailError: 'Client email already exists',

Debe elegir un estilo (comillas simples o dobles) y aplicarlo consistentemente en todo el archivo. Recomiendo encarecidamente usar comillas simples para todas las cadenas, ya que es el estilo predominante en el archivo.

Aplique este cambio en todo el archivo:

-    changeDisplayLanguageInfo: "Choose your preferred default language",
+    changeDisplayLanguageInfo: 'Choose your preferred default language',

No hay razón para mantener esta inconsistencia. Corríjala inmediatamente para mejorar la calidad y mantenibilidad del código.


Line range hint 1-141: Reestructure el archivo de traducciones y revise el uso de HTML en las cadenas

Este archivo es excesivamente largo y difícil de mantener. Además, el uso de etiquetas HTML dentro de las cadenas de traducción es una práctica peligrosa. Estas son las acciones que debe tomar de inmediato:

  1. Divida este archivo en módulos más pequeños y manejables. Por ejemplo, agrupe las traducciones por secciones lógicas de la aplicación (autenticación, configuración, auditorías, etc.).

  2. Elimine las etiquetas HTML de las cadenas de traducción. Estas deben manejarse en los componentes de la interfaz de usuario, no en los archivos de traducción. Por ejemplo:

- importVulnerabilitiesInfo: `Import Vulnerabilities from a .yml or .json file. (Serpico format accepted)<br />
-   This allows you to easily import a batch of vulnerabilities templates.`,
+ importVulnerabilitiesInfo: 'Import Vulnerabilities from a .yml or .json file. (Serpico format accepted). This allows you to easily import a batch of vulnerabilities templates.',
  1. Considere utilizar una biblioteca de internacionalización más robusta que permita el manejo de plurales y la interpolación de variables de manera más segura.

Estas modificaciones son cruciales para mejorar la mantenibilidad y la seguridad de su código. No hay excusa para mantener estas prácticas deficientes. Implemente estos cambios lo antes posible.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between e1027f5 and a06d6e2.

📒 Files selected for processing (3)
  • frontend/src/components/input/FileInput.tsx (2 hunks)
  • frontend/src/i18n/en-US/index.ts (1 hunks)
  • frontend/src/routes/data/Collaborators.tsx (15 hunks)

Comment thread frontend/src/i18n/en-US/index.ts
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/components/input/FileInput.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Copy link
Copy Markdown
Collaborator

@iTzGooDLife iTzGooDLife left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Al agregar y editar colaboradores, si la solicitud falla por conexión o por no rellenar algún campo requerido, si se cierra y abre el modal, la alerta de Confirmar contraseña queda activada hasta que se recargue la página (aunque se envíe una solicitud correctamente).

Editar colaborador
image

Añadir colaborador
image

@sealra sealra requested a review from iTzGooDLife October 2, 2024 02:16
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between a06d6e2 and f4e4b49.

📒 Files selected for processing (1)
  • frontend/src/routes/data/Collaborators.tsx (15 hunks)

Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between f4e4b49 and e23753a.

📒 Files selected for processing (1)
  • frontend/src/routes/data/Collaborators.tsx (15 hunks)
🔇 Additional comments (2)
frontend/src/routes/data/Collaborators.tsx (2)

465-468: Verificar la visualización de los campos requeridos en el formulario

En los componentes de entrada, estás utilizando las propiedades requiredField y requiredAlert. Asegúrate de que el indicador de campo requerido y las alertas se muestren correctamente al usuario para mejorar la experiencia de uso.

Comprueba visualmente que los asteriscos de campo requerido y los mensajes de alerta aparecen cuando corresponden. Si hay duplicación de asteriscos o mensajes confusos, considera ajustarlos para mayor claridad.

Also applies to: 476-479, 487-490, 513-514, 524-528, 530-538


240-242: Unificar la validación de contraseñas con el backend

La función validatePassword utiliza una expresión regular para verificar la complejidad de la contraseña. Es importante asegurarse de que esta validación coincida exactamente con la que utiliza el backend para evitar inconsistencias.

Por favor, confirma que la expresión regular /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/ coincide con la del backend. Puedes ejecutar el siguiente script para verificarlo:

Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
iTzGooDLife
iTzGooDLife previously approved these changes Oct 2, 2024
Copy link
Copy Markdown
Collaborator

@iTzGooDLife iTzGooDLife left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between e23753a and dd4ffdc.

📒 Files selected for processing (1)
  • frontend/src/routes/data/Collaborators.tsx (15 hunks)
🔇 Additional comments (6)
frontend/src/routes/data/Collaborators.tsx (6)

240-242: Excelente implementación de la función de validación de contraseñas

La función validatePassword utiliza una expresión regular adecuada para asegurar que las contraseñas cumplan con los requisitos de complejidad.


246-307: Validaciones de campos requeridos implementadas correctamente

Las validaciones para los campos obligatorios en handleSubmitAddCollab están bien implementadas, garantizando que los datos esenciales sean proporcionados antes de crear un colaborador.


334-373: Validaciones adecuadas al editar un colaborador

En la función handleSubmitEditCollab, las validaciones se realizan correctamente, permitiendo la edición segura de colaboradores y garantizando la integridad de los datos.


104-133: Uso efectivo de 'useMemo' para optimizar el renderizado

La utilización de useMemo para definir las columnas de la tabla es apropiada y ayuda a optimizar el rendimiento del componente.


390-399: 🛠️ Refactor suggestion

Simplificación posible en las funciones de manejo de estado

Dado que newCollaborator se inicializa y nunca es null, las comprobaciones de prevState podrían simplificarse eliminando la verificación de null. Esto hará el código más limpio y fácil de mantener.

Aplicar este cambio en handleInputChange:

const handleInputChange = (name: string, value: string) => {
-  setNewCollaborator(prevState => {
-    if (!prevState) {
-      return null;
-    } else {
-      return {
-        ...prevState,
-        [name]: value,
-      };
-    }
-  });
+  setNewCollaborator(prevState => ({
+    ...prevState,
+    [name]: value,
+  }));
};

Y en handleRoleChange:

const handleRoleChange = (role: RoleOption) => {
  setSelectedRole(role);
-  setNewCollaborator(prevState => {
-    if (!prevState) {
-      return null;
-    } else {
-      return {
-        ...prevState,
-        role: role.value,
-      };
-    }
-  });
+  setNewCollaborator(prevState => ({
+    ...prevState,
+    role: role.value,
+  }));
};

Likely invalid or redundant comment.


241-241: Mantener la consistencia de validación de contraseñas con el backend

Asegúrate de que la expresión regular utilizada en validatePassword coincida con la que se utiliza en el backend para mantener la consistencia en la validación de contraseñas.

Verifica si la expresión regular coincide con la del backend:

Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Comment thread frontend/src/routes/data/Collaborators.tsx
Copy link
Copy Markdown
Collaborator

@Icksir Icksir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Veo todo bien

Copy link
Copy Markdown
Collaborator

@iTzGooDLife iTzGooDLife left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@caverav caverav merged commit 88306fe into development Oct 4, 2024
@coderabbitai coderabbitai Bot mentioned this pull request Oct 15, 2024
7 tasks
@caverav caverav deleted the data-ui-required-fixes branch October 16, 2024 23:32
@coderabbitai coderabbitai Bot mentioned this pull request Oct 23, 2024
7 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] Mejoras UI/UX en Sección Data

6 participants