Skip to content

feat: added customSections on audits#146

Merged
caverav merged 10 commits intodevelopmentfrom
feature/audit-customSections
Oct 16, 2024
Merged

feat: added customSections on audits#146
caverav merged 10 commits intodevelopmentfrom
feature/audit-customSections

Conversation

@sealra
Copy link
Copy Markdown
Collaborator

@sealra sealra commented Oct 14, 2024

Descripción

Se agregan vistas para la edición de customSections en audits.

Motivación y Contexto

Permite la modificación específica para cada audit de los customSections (asociados a uno o varios customField)

¿Cómo ha sido probado?

npm run build
A través de la misma vista, editando cada campo.

El flujo para agregar un Custom Section al Audit es:
creas customSection -> creas customField con la section, con Audit Section como Select View -> agregar la section a un auditType -> crear el audit con ese auditType

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

Resumen por CodeRabbit

  • Nuevas Funcionalidades

    • Se ha añadido un panel lateral de auditoría que permite gestionar la visibilidad de secciones y añadir secciones personalizadas.
    • Se ha implementado un nuevo componente para manejar secciones dentro de auditorías, mejorando la navegación.
    • Se han introducido nuevos tipos para manejar secciones y campos personalizados en auditorías.
  • Mejoras en la Interfaz de Usuario

    • Se han agregado botones para alternar la visibilidad de las secciones y para añadir secciones personalizadas, mejorando la interacción del usuario.
    • Se ha añadido un menú desplegable para secciones personalizadas en el panel lateral.
  • Actualizaciones en la Documentación

    • Se han actualizado las exportaciones para incluir nuevos componentes y tipos relevantes.
    • Se han añadido nuevos mensajes para mejorar la retroalimentación al usuario sobre el guardado de secciones personalizadas.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Oct 14, 2024

📝 Walkthrough
📝 Walkthrough

Walkthrough

Los cambios en este pull request introducen nuevas funcionalidades y modificaciones en varios componentes relacionados con la gestión de auditorías. Se han agregado propiedades al tipo AuditSidebarProps, se ha implementado un nuevo componente Sections para manejar secciones específicas de auditorías y se han creado nuevos tipos para gestionar campos personalizados. Además, se han realizado ajustes en los componentes existentes para integrar estas nuevas características, mejorando la estructura de enrutamiento y la interacción del usuario.

Changes

Archivo Resumen de cambios
frontend/src/components/navbar/AuditSidebar.tsx Se añadieron propiedades al tipo AuditSidebarProps y se modificó la lógica de renderizado para incluir secciones personalizadas y un botón de alternancia para la visibilidad.
frontend/src/routes/audits/edit/AuditRoot.tsx Se añadieron nuevas variables de estado y se actualizaron los hooks useEffect para gestionar secciones personalizadas y datos de auditoría.
frontend/src/services/audits.ts Se introdujeron nuevos tipos relacionados con secciones de auditoría y se actualizaron tipos existentes para reflejar cambios en la estructura de datos.
frontend/src/i18n/en-US/index.ts Se añadieron nuevos mensajes para el éxito y error en el guardado de secciones personalizadas.
frontend/src/routes/audits/edit/sections/sections.tsx Se añadió un nuevo componente Sections que gestiona el estado y el ciclo de vida de las secciones de auditoría, incluyendo la recuperación de datos y la gestión de campos personalizados.

Possibly related PRs

  • Data UI required fixes #94: Los cambios en AuditSidebar.tsx y AuditRoot.tsx están relacionados con la gestión de secciones de auditoría y secciones personalizadas, lo que se alinea con las actualizaciones realizadas en este PR sobre el tipo AuditSidebarProps y la gestión de secciones personalizadas.
  • ✨ feat: Add functionality to add new findings in audits #128: Esta PR mejora el componente AuditSidebar al añadir nuevas propiedades y funcionalidades relacionadas con los hallazgos, lo que se conecta con las modificaciones en este PR que también involucran actualizaciones en el componente AuditSidebar.
  • feat: Add remediationComplexity and priority props to audits services #138: La adición de propiedades remediationComplexity y priority al tipo Finding en el servicio de auditorías es relevante, ya que se basa en el aspecto de gestión de hallazgos que también se aborda en las actualizaciones de los componentes AuditSidebar y AuditRoot.

Suggested labels

enhancement

Suggested reviewers

  • jllanosg
  • Icksir
  • massi-ponce

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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: 23

🧹 Outside diff range comments (2)
frontend/src/routes/audits/edit/AuditRoot.tsx (2)

Line range hint 62-92: Asegurar orden correcto de las dependencias en useEffect

El segundo useEffect depende de sections, pero si sections aún no está cargado cuando se ejecuta este efecto, podrías enfrentar problemas de datos incompletos. Considera enlazar las llamadas a getCustomSections y getAuditById, o asegurarte de que sections esté completamente cargado antes de procesar audit.datas.sections.


Line range hint 78-83: Eliminar valor 'severity' hardcodeado y utilizar datos reales

En el mapeo de los hallazgos, estás asignando severity: 'L', lo cual es un valor hardcodeado. Deberías utilizar el valor real de severidad del objeto finding.

¿Quieres que te ayude a modificar el código para utilizar el valor real de severidad? Puedo ofrecer una solución si lo deseas.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between 4ef39a0 and 3a180e2.

📒 Files selected for processing (8)
  • frontend/src/components/navbar/AuditSidebar.tsx (4 hunks)
  • frontend/src/main.tsx (2 hunks)
  • frontend/src/routes/audits/edit/AuditRoot.tsx (4 hunks)
  • frontend/src/routes/audits/edit/sections/AuditCustomFields.tsx (1 hunks)
  • frontend/src/routes/audits/edit/sections/sections.tsx (1 hunks)
  • frontend/src/routes/audits/index.tsx (1 hunks)
  • frontend/src/services/audits.ts (4 hunks)
  • frontend/src/services/data.ts (2 hunks)
🧰 Additional context used
🪛 Biome
frontend/src/components/navbar/AuditSidebar.tsx

[error] 266-266: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

🔇 Additional comments (7)
frontend/src/main.tsx (1)

24-31: Importación correcta del nuevo componente.

La adición de la importación de 'Sections' es coherente con la nueva ruta que se está agregando. La declaración de importación está correctamente formateada y sigue el patrón existente.

frontend/src/services/data.ts (2)

Line range hint 1-1: Actualización del tipo NewCustomSection

Según el resumen de IA, has modificado el tipo NewCustomSection para incluir un campo icon opcional. Esta es una buena adición que proporciona más flexibilidad. Sin embargo, no puedo ver esta modificación en el fragmento de código proporcionado.

Asegúrate de que esta modificación se haya aplicado correctamente y que sea consistente con la nueva definición del tipo Section.

Ejecuta el siguiente script para verificar la definición actualizada de NewCustomSection:

#!/bin/bash
# Descripción: Verifica la definición actualizada de NewCustomSection

# Prueba: Busca la definición de NewCustomSection
rg --type typescript 'export type NewCustomSection'

586-586: Actualización correcta del tipo de retorno en getCustomSections

Has actualizado correctamente el tipo de retorno de la función getCustomSections para usar el nuevo tipo Section. Esto mejora la consistencia y la seguridad de tipos en tu código.

Sin embargo, asegúrate de que el backend esté devolviendo datos que coincidan exactamente con esta estructura. Si hay alguna discrepancia, podrías enfrentar errores en tiempo de ejecución.

Ejecuta el siguiente script para verificar la estructura de los datos devueltos por el endpoint:

✅ Verification successful

Verificación exitosa de la estructura de los datos devueltos

Se ha comprobado que la función getCustomSections maneja correctamente la estructura de los datos, utilizando Section[] en múltiples ubicaciones del código. No se encontraron discrepancias que puedan causar errores en tiempo de ejecución.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Descripción: Verifica la estructura de los datos devueltos por el endpoint de secciones personalizadas

# Prueba: Busca el uso de la función getCustomSections y su manejo de datos
rg --type typescript 'getCustomSections\(' -A 10

Length of output: 253


Script:

#!/bin/bash
# Descripción: Verifica la estructura de los datos devueltos por el endpoint de secciones personalizadas

# Prueba: Busca el uso de la función getCustomSections y su manejo de datos en archivos TypeScript
rg 'getCustomSections\(' --glob '*.ts' --glob '*.tsx' -A 10

Length of output: 4430

frontend/src/routes/audits/edit/AuditRoot.tsx (1)

222-231: Verificar que AuditSidebar acepte las nuevas propiedades

Estás pasando nuevas propiedades al componente AuditSidebar. Asegúrate de que AuditSidebar esté actualizado para manejar auditSections, isListVisible, sections y otras propiedades que le estás proporcionando.

frontend/src/services/audits.ts (3)

124-124: Verificar la adición de sections en el tipo AuditById.

Se ha añadido sections: AuditSection[]; al tipo AuditById. Asegúrate de que este campo esté correctamente inicializado y utilizado en todas las partes del código donde se maneja AuditById.


136-159: Revisión del tipo UpdateAuditCustomFields.

La definición del tipo UpdateAuditCustomFields parece correcta, pero verifica que todos los campos opcionales y obligatorios estén correctamente especificados y que se alineen con las estructuras de datos que maneja el backend.


160-175: Revisión del tipo SectionCustomField.

Asegúrate de que este tipo refleje todas las propiedades necesarias y que esté en consonancia con los datos que se reciben del backend.

Comment thread frontend/src/routes/audits/index.tsx
Comment thread frontend/src/main.tsx
Comment thread frontend/src/services/data.ts
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx Outdated
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/AuditCustomFields.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx Outdated
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/routes/audits/edit/sections/AuditCustomFields.tsx
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
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: 8

🧹 Outside diff range and nitpick comments (5)
frontend/src/routes/audits/edit/sections/sections.tsx (1)

47-201: Evaluación general del componente Sections

El componente Sections maneja de manera efectiva la gestión de estado complejo y la obtención de datos para las secciones de auditoría. Sin embargo, hay varias áreas que podrían mejorarse para aumentar la legibilidad, mantenibilidad y robustez del código.

Considera las siguientes mejoras:

  1. Extrae las funciones de transformación de datos a utilidades separadas para reducir la complejidad del componente principal.
  2. Implementa un manejo de errores más robusto que informe al usuario sobre los resultados de las operaciones.
  3. Utiliza valores por defecto para los estados iniciales para evitar problemas con valores undefined.
  4. Considera dividir este componente en subcomponentes más pequeños si la complejidad aumenta.
  5. Agrega comentarios explicativos para las partes más complejas del código, especialmente en las funciones de transformación de datos.
  6. Implementa pruebas unitarias para las funciones de transformación y los efectos secundarios.

Estas mejoras harán que el código sea más fácil de mantener y entender para futuros desarrolladores que trabajen en este componente.

frontend/src/routes/audits/edit/AuditRoot.tsx (3)

1-1: Importaciones y variables de estado añadidas correctamente.

Las nuevas importaciones y variables de estado se han agregado de manera adecuada para soportar la funcionalidad de secciones personalizadas. Sin embargo, considera agrupar las importaciones relacionadas para mejorar la legibilidad del código.

Considera reorganizar las importaciones de la siguiente manera:

import { toast } from 'sonner';
import { getCustomSections, Section } from '@/services/data';
import { AuditSection, Finding, getAuditById } from '../../../services/audits';

Also applies to: 6-8, 43-45


Line range hint 61-92: Lógica de mapeo mejorada, pero persiste el problema de manejo de errores.

La nueva lógica para mapear las secciones de auditoría y emparejarlas con secciones personalizadas es correcta y mejora la funcionalidad. Sin embargo, el manejo de errores sigue siendo insuficiente.

Implementa un manejo de errores más robusto:

useEffect(() => {
  getAuditById(auditId)
    .then(audit => {
      setAuditSections(
        audit.datas.sections.map((section: AuditSection) => {
          const matchingSection = sections.find(
            s => s.field === section.field && s.name === section.name
          );

          return {
            field: section.field,
            name: section.name,
            _id: section._id,
            customFields: section.customFields,
            icon: matchingSection?.icon ?? undefined,
          };
        })
      );
      setFindings(
        audit.datas.findings.map((finding: Finding) => ({
          id: finding.identifier,
          name: finding.title,
          category: 'No Category',
          severity: 'L', //TODO: it's harcoded
        }))
      );
      setAuditName(audit.datas.name);
    })
    .catch(error => {
      console.error('Error al obtener datos de la auditoría:', error);
      toast.error('No se pudieron cargar los datos de la auditoría. Por favor, intente de nuevo más tarde.');
    });
}, [auditId, sections]);

Además, es necesario abordar el TODO sobre la severidad codificada. Implementa una lógica adecuada para determinar la severidad en lugar de usar un valor fijo.


Line range hint 1-253: Revisión general: Implementación de secciones personalizadas con áreas de mejora.

La implementación de secciones personalizadas es generalmente correcta y añade funcionalidad valiosa al componente. Sin embargo, hay varias áreas que requieren atención:

  1. Manejo de errores: Es necesario implementar un manejo de errores más robusto en todas las operaciones asíncronas.
  2. Organización del código: Considera extraer la lógica de fetching de datos a funciones separadas para mejorar la legibilidad y mantenibilidad.
  3. Tipado: Asegúrate de que todos los tipos estén correctamente definidos, especialmente para las nuevas estructuras de datos introducidas.
  4. Rendimiento: Evalúa si es necesario memoizar algunos cálculos o componentes para optimizar el rendimiento.

Considera implementar un custom hook para manejar la lógica de fetching y procesamiento de datos, lo que podría mejorar la organización y reutilización del código:

function useAuditData(auditId: string) {
  const [auditSections, setAuditSections] = useState<AuditSection[]>([]);
  const [sections, setSections] = useState<Section[]>([]);
  // ... otros estados

  useEffect(() => {
    // Lógica para obtener secciones personalizadas
  }, []);

  useEffect(() => {
    // Lógica para obtener datos de la auditoría
  }, [auditId, sections]);

  return { auditSections, sections, /* ... otros estados y funciones */ };
}

Esto permitiría simplificar el componente principal y mejorar la separación de responsabilidades.

frontend/src/components/navbar/AuditSidebar.tsx (1)

235-236: Manejar valores 'undefined' o 'null' en 'section.icon' al renderizar el icono

Cuando section.icon es null o undefined, el elemento <i className="material-icons">{section.icon}</i> en la línea 235 podría renderizar un valor no deseado en la interfaz de usuario. Considera proporcionar un valor predeterminado o manejar este caso para asegurar una representación adecuada.

Puedes ajustar el código de la siguiente manera:

-<i className="material-icons">{section.icon}</i>
+<i className="material-icons">{section.icon || 'default_icon'}</i>

Donde 'default_icon' es el nombre del icono que deseas mostrar por defecto.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 3a180e2 and bb40221.

📒 Files selected for processing (3)
  • frontend/src/components/navbar/AuditSidebar.tsx (4 hunks)
  • frontend/src/routes/audits/edit/AuditRoot.tsx (4 hunks)
  • frontend/src/routes/audits/edit/sections/sections.tsx (1 hunks)
🧰 Additional context used
🔇 Additional comments (2)
frontend/src/routes/audits/edit/sections/sections.tsx (1)

53-54: ⚠️ Potential issue

Inicializa currentLanguage con un valor por defecto

No has proporcionado un valor inicial para currentLanguage. Esto podría causar problemas si intentas acceder a sus propiedades antes de que se establezca un valor.

Modifica la declaración de estado para incluir un valor inicial:

- const [currentLanguage, setCurrentLanguage] = useState<ListItem>();
+ const [currentLanguage, setCurrentLanguage] = useState<ListItem | null>(null);

Asegúrate de manejar el caso en que currentLanguage sea null en el resto del componente.

Likely invalid or redundant comment.

frontend/src/routes/audits/edit/AuditRoot.tsx (1)

222-231: Propiedades del componente AuditSidebar actualizadas correctamente.

Las nuevas propiedades añadidas al componente AuditSidebar son coherentes con la nueva funcionalidad de secciones personalizadas. La implementación parece correcta y no se observan problemas evidentes.

Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx Outdated
Comment thread frontend/src/components/navbar/AuditSidebar.tsx Outdated
Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
@jllanosg
Copy link
Copy Markdown
Collaborator

@sealra resolver conflictos pls

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 15, 2024

@sealra resolver conflictos pls

listo 👍

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: 6

🧹 Outside diff range and nitpick comments (7)
frontend/src/routes/audits/edit/AuditRoot.tsx (4)

76-78: Nuevas variables de estado añadidas correctamente.

Las nuevas variables de estado son necesarias para manejar las secciones personalizadas y su visibilidad. Sin embargo, considera usar nombres más descriptivos para mejorar la legibilidad del código. Por ejemplo, isCustomSectionsListVisible en lugar de isListVisible.


Line range hint 94-126: Manejo de errores inadecuado en la obtención de datos de auditoría.

La lógica actualizada para obtener y procesar los datos de auditoría es correcta, pero el manejo de errores es insuficiente. Es imperativo proporcionar retroalimentación al usuario en caso de error.

Modifica el código para mejorar el manejo de errores:

useEffect(() => {
  getAuditById(auditId)
    .then(audit => {
      // ... (código existente)
    })
    .catch(error => {
      console.error('Error al obtener datos de auditoría:', error);
      toast.error('No se pudieron cargar los datos de la auditoría. Por favor, intente de nuevo más tarde.');
    });
}, [auditId, sections]);

239-249: Mejorar la claridad en los nombres de las props.

Las nuevas props se han añadido correctamente al componente AuditSidebar. Sin embargo, los nombres isListVisible y setIsListVisible son poco descriptivos. Considera usar nombres más específicos para mejorar la legibilidad y mantenibilidad del código.

Sugerencia de cambio:

isListVisible={isCustomSectionsListVisible}
setIsListVisible={setIsCustomSectionsListVisible}

Asegúrate de actualizar estos nombres en toda la aplicación para mantener la consistencia.


Line range hint 1-270: Revisión general: Implementación de secciones personalizadas

La implementación de secciones personalizadas es generalmente correcta y coherente. Sin embargo, hay áreas que requieren atención:

  1. Manejo de errores: Es crucial mejorar el manejo de errores en todas las operaciones asíncronas. Utiliza toast.error para informar al usuario sobre los problemas.

  2. Nombres de variables y props: Considera usar nombres más descriptivos para isListVisible y setIsListVisible para mejorar la claridad del código.

  3. Tipado: Asegúrate de que todos los tipos nuevos (AuditSection, Section) estén correctamente definidos y utilizados de manera consistente en todo el componente.

Aborda estos puntos para mejorar la robustez y mantenibilidad del código.

frontend/src/components/navbar/AuditSidebar.tsx (3)

58-61: Propiedades añadidas correctamente a AuditSidebarProps

Las nuevas propiedades son necesarias para la gestión de secciones personalizadas. Sin embargo, sería beneficioso añadir comentarios JSDoc para explicar el propósito de cada nueva propiedad, especialmente para auditSections y sections.

Ejemplo:

/**
 * Array de secciones de auditoría personalizadas seleccionadas
 */
auditSections: AuditSection[];

/**
 * Array de todas las secciones disponibles
 */
sections: Section[];

Esto mejoraría la comprensión del código para otros desarrolladores.


238-246: Botón para mostrar/ocultar la lista de secciones

El botón para mostrar/ocultar la lista de secciones está implementado correctamente. Sin embargo, su visibilidad depende de isCollapsed, lo que podría llevar a una experiencia de usuario inconsistente. Considera permitir que este botón esté siempre visible, ajustando su posición o tamaño cuando la barra lateral esté colapsada.


Line range hint 1-359: Sugerencias para mejorar la estructura y rendimiento del componente

El componente AuditSidebar ha crecido significativamente en complejidad. Considera las siguientes mejoras:

  1. Extrae la lógica de renderizado de las secciones personalizadas a un componente separado para mejorar la legibilidad y mantenibilidad.

  2. Utiliza useMemo para memoizar las listas renderizadas (findings, connectedUsers, sections) para evitar recálculos innecesarios en cada renderizado.

  3. Considera usar useCallback para las funciones de manejo de eventos para prevenir recreaciones innecesarias.

  4. Evalúa la posibilidad de implementar virtualización para las listas largas (como findings o connectedUsers) para mejorar el rendimiento con grandes conjuntos de datos.

  5. Revisa el uso de clsx y considera consolidar las clases condicionales para mejorar la legibilidad.

Ejemplo de memoización:

const memoizedFindings = useMemo(() => findings.map(/* ... */), [findings, sortOrder]);

Implementar estas sugerencias ayudará a mejorar el rendimiento y la mantenibilidad del componente a largo plazo.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between bb40221 and 2330dc8.

📒 Files selected for processing (5)
  • frontend/src/components/navbar/AuditSidebar.tsx (4 hunks)
  • frontend/src/main.tsx (2 hunks)
  • frontend/src/routes/audits/edit/AuditRoot.tsx (4 hunks)
  • frontend/src/routes/audits/edit/sections/sections.tsx (1 hunks)
  • frontend/src/routes/audits/index.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • frontend/src/main.tsx
  • frontend/src/routes/audits/index.tsx
🧰 Additional context used
🔇 Additional comments (7)
frontend/src/routes/audits/edit/sections/sections.tsx (3)

84-95: ⚠️ Potential issue

Verifica la existencia de auditId y sectionId antes de usarlos

En la función fetchAuditSections, no estás verificando si auditId o sectionId están definidos antes de utilizarlos. Esto podría provocar errores si estos parámetros son undefined.

Modifica la función para incluir una verificación:

  const fetchAuditSections = useCallback(async () => {
+   if (!auditId || !sectionId) {
+     console.error('auditId o sectionId no definidos');
+     return;
+   }
    try {
      const auditSectionResponse = await getAuditSectionById(
        auditId,
        sectionId,
      );

      setDataAuditSection(auditSectionResponse.datas);
    } catch (error) {
      console.error('Error:', error);
    }
  }, [auditId, sectionId]);

Esto evitará llamadas innecesarias a la API y potenciales errores.

Likely invalid or redundant comment.


1-1: ⚠️ Potential issue

Elimina el comentario de desactivación de ESLint y corrige la configuración del proyecto

El uso de eslint-disable para import/extensions indica un problema en la configuración del proyecto que debe ser abordado directamente. En lugar de desactivar la regla, debes corregir la causa raíz del problema.

Acciones recomendadas:

  1. Revisa y ajusta la configuración de ESLint para manejar correctamente las extensiones de archivo.
  2. Si estás utilizando TypeScript, asegúrate de que el compilador esté configurado adecuadamente para las extensiones de archivo.
  3. Actualiza las importaciones para incluir las extensiones de archivo si es necesario.

Una vez resuelto, elimina esta línea:

- /* eslint-disable import/extensions */

Likely invalid or redundant comment.


183-187: ⚠️ Potential issue

Mejora el manejo de errores para informar al usuario

Actualmente, si ocurre un error durante la actualización, solo se registra en la consola. El usuario no recibe ninguna notificación sobre el fallo de la operación. Esto es inaceptable desde el punto de vista de la experiencia del usuario.

Implementa un mecanismo para informar al usuario sobre el resultado de la operación. Por ejemplo:

  try {
    await updateAuditSectionById(auditId, sectionId, payload);
+   // Muestra un mensaje de éxito al usuario
+   showSuccessMessage('La sección se ha actualizado correctamente');
  } catch (error) {
    console.error(error);
+   // Muestra un mensaje de error al usuario
+   showErrorMessage('No se pudo actualizar la sección. Por favor, inténtalo de nuevo.');
  }

Asegúrate de implementar las funciones showSuccessMessage y showErrorMessage de acuerdo con el sistema de notificaciones de tu aplicación. No informar al usuario sobre errores críticos es una mala práctica que debe corregirse inmediatamente.

Likely invalid or redundant comment.

frontend/src/routes/audits/edit/AuditRoot.tsx (2)

9-10: Importaciones correctas para la nueva funcionalidad.

Las nuevas importaciones son necesarias y están correctamente implementadas para manejar las secciones personalizadas.


15-15: Importación actualizada correctamente.

La importación se ha actualizado para incluir AuditSection, lo cual es coherente con la nueva funcionalidad de secciones personalizadas.

frontend/src/components/navbar/AuditSidebar.tsx (2)

5-12: Importaciones correctamente actualizadas

Las nuevas importaciones de iconos y tipos son coherentes con las funcionalidades añadidas para las secciones personalizadas. Buen trabajo en mantener las importaciones organizadas y relevantes.

Also applies to: 15-16


Line range hint 1-359: Conclusión de la revisión

En general, las modificaciones introducen funcionalidades valiosas para manejar secciones personalizadas en la barra lateral de auditoría. Sin embargo, también aumentan significativamente la complejidad del componente.

Puntos clave a abordar:

  1. Implementar la lógica faltante para añadir/eliminar secciones personalizadas.
  2. Corregir posibles errores en el manejo de iconos.
  3. Mejorar la estructura del componente extrayendo lógica a subcomponentes.
  4. Optimizar el rendimiento mediante memoización y posible virtualización.
  5. Mejorar la consistencia en el manejo de la visibilidad de elementos UI.

Abordar estos puntos mejorará significativamente la calidad, mantenibilidad y rendimiento del componente. Buen trabajo en la implementación de las nuevas características, pero asegúrate de refinar estos aspectos antes de finalizar.

Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/routes/audits/edit/sections/sections.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: 7

🧹 Outside diff range and nitpick comments (5)
frontend/src/services/vulnerabilities.ts (1)

Line range hint 235-255: La implementación de postDescriptionCWE es correcta, pero hay un problema con la URL del comentario.

La función postDescriptionCWE está bien implementada y sigue el patrón de otras llamadas API en el archivo. Sin embargo, hay un problema con el comentario en la línea 235:

// Agregar el endpoint al backend https://localhost:8000/classify

Este comentario contiene una URL de localhost, lo cual no es apropiado para código de producción. Las URLs de desarrollo no deberían estar en el código fuente, ya que pueden causar confusión y potencialmente llevar a errores si alguien las utiliza accidentalmente.

Realiza las siguientes acciones:

  1. Elimina o modifica el comentario para que no contenga una URL específica.
  2. Considera utilizar variables de entorno para manejar diferentes URLs de API en distintos entornos (desarrollo, staging, producción).

Ejemplo de cómo podrías modificar el comentario:

// Endpoint para clasificar descripciones de vulnerabilidades
frontend/src/routes/audits/edit/AuditRoot.tsx (3)

9-10: Importación innecesaria de tipo Section

Has importado el tipo Section pero no lo estás utilizando en este archivo. Elimina las importaciones no utilizadas para mantener el código limpio y mejorar el rendimiento.

Aplica este cambio:

-import { getCustomSections, Section } from '@/services/data';
+import { getCustomSections } from '@/services/data';

Line range hint 97-126: Manejo de errores insuficiente y posible problema de rendimiento

El manejo de errores en este useEffect es tan inadecuado como en el anterior. Además, la dependencia sections en el array de dependencias podría causar renderizaciones innecesarias.

  1. Implementa un manejo de errores robusto.
  2. Considera mover la lógica de mapeo fuera del useEffect para evitar recálculos innecesarios.

Aquí tienes un ejemplo de cómo podrías mejorarlo:

useEffect(() => {
  getAuditById(auditId)
    .then(audit => {
      setAuditSections(audit.datas.sections);
      setFindings(audit.datas.findings.map(mapFindingToDisplayFormat));
      setAuditName(audit.datas.name);
    })
    .catch(error => {
      console.error('Error al obtener datos de la auditoría:', error);
      toast.error('No se pudieron cargar los datos de la auditoría. Por favor, intente de nuevo más tarde.');
    });
}, [auditId]);

useEffect(() => {
  if (auditSections.length && sections.length) {
    const mappedSections = auditSections.map(section => ({
      ...section,
      icon: sections.find(s => s.field === section.field && s.name === section.name)?.icon
    }));
    setAuditSections(mappedSections);
  }
}, [auditSections, sections]);

Esto separa la lógica de obtención de datos y el mapeo de secciones, mejorando el rendimiento y la claridad del código.


Line range hint 1-274: Resumen de la revisión y sugerencias finales

Has realizado cambios significativos para manejar secciones personalizadas y mejorar la funcionalidad del componente AuditRoot. Sin embargo, hay varias áreas que requieren atención:

  1. Manejo de errores: Es crucial implementar un manejo de errores robusto en todos los efectos y llamadas a API.
  2. Gestión del estado: Considera usar useReducer o una biblioteca de gestión de estado como Redux para manejar la complejidad del estado de este componente.
  3. Rendimiento: Optimiza los efectos y las dependencias para evitar renderizaciones innecesarias.
  4. Prop drilling: Utiliza Context API para reducir el número de props pasadas a los componentes hijos.
  5. Tipado: Asegúrate de que todos los tipos estén correctamente definidos y utilizados.

Para mejorar la arquitectura general:

  1. Separa la lógica de negocio en hooks personalizados.
  2. Implementa un sistema de caché para las secciones personalizadas y los datos de auditoría.
  3. Considera la implementación de lazy loading para optimizar el rendimiento inicial.

Estas mejoras harán que tu código sea más mantenible, eficiente y robusto.

frontend/src/services/audits.ts (1)

Line range hint 1-691: Resumen de la revisión y próximos pasos

Después de revisar los cambios en frontend/src/services/audits.ts, se identificaron los siguientes puntos principales:

  1. Inconsistencias en la representación de campos personalizados y secciones de auditoría entre diferentes tipos (AuditSection, UpdateAuditCustomFields, AuditSectionById).
  2. Falta de validación de parámetros en las nuevas funciones getAuditSectionById y updateAuditSectionById.

Próximos pasos recomendados:

  1. Unifica la representación de campos personalizados en todos los tipos relacionados con auditorías. Si es necesario mantener diferentes representaciones, documenta claramente el propósito de cada una.
  2. Implementa validación de parámetros en las nuevas funciones para mejorar la robustez del código.
  3. Revisa el uso de tipos como string | string[] y considera si es posible simplificarlos o si es necesario documentar claramente cuándo se usa cada variante.
  4. Asegúrate de que estos cambios sean consistentes con la implementación en el backend y otros componentes del frontend que interactúen con estas estructuras de datos.

Implementar estas mejoras aumentará la consistencia, robustez y mantenibilidad del código.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 2330dc8 and d0fa999.

📒 Files selected for processing (3)
  • frontend/src/routes/audits/edit/AuditRoot.tsx (4 hunks)
  • frontend/src/services/audits.ts (4 hunks)
  • frontend/src/services/vulnerabilities.ts (2 hunks)
🧰 Additional context used
🔇 Additional comments (1)
frontend/src/services/vulnerabilities.ts (1)

75-80: ⚠️ Potential issue

Se ha modificado la estructura de CWEData. ¿Cuál es el motivo?

La eliminación del campo priority de los elementos del array result en el tipo CWEData podría tener implicaciones significativas:

  1. Es posible que el código existente que depende del campo priority deje de funcionar correctamente.
  2. Esta simplificación podría mejorar el rendimiento y facilitar el manejo de datos.

Es necesario que proporciones más información sobre esta modificación:

  1. ¿Por qué se ha eliminado el campo priority?
  2. ¿Se han actualizado todas las partes del código que utilizaban este campo?
  3. ¿Se han realizado pruebas para garantizar que esta modificación no cause problemas en otras áreas de la aplicación?

Ejecuta el siguiente script para verificar si hay código que aún utiliza el campo priority eliminado:

Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/services/audits.ts
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: 7

🧹 Outside diff range and nitpick comments (1)
frontend/src/routes/audits/edit/sections/sections.tsx (1)

1-201: Resumen de la revisión y sugerencias de mejora general

El componente Sections maneja una lógica compleja de gestión de estado y obtención de datos. Sin embargo, hay varias áreas que requieren mejoras significativas:

  1. Manejo de errores: Implementa un manejo de errores consistente y robusto en todas las funciones de fetch y actualización.

  2. Organización del código: Extrae lógicas complejas, como las transformaciones de datos, a funciones separadas para mejorar la legibilidad y facilitar las pruebas.

  3. Experiencia del usuario: Añade estados de carga y error en el renderizado para proporcionar feedback visual al usuario.

  4. Tipado: Asegúrate de que todos los parámetros y variables tengan tipos adecuados, especialmente los provenientes de useParams().

  5. Rendimiento: Considera la implementación de memoización para funciones y componentes que no necesitan re-renderizarse frecuentemente.

  6. Pruebas: Añade pruebas unitarias para las funciones de transformación y manejo de datos.

  7. Documentación: Agrega comentarios JSDoc para explicar la funcionalidad de las funciones complejas y los tipos personalizados.

Implementar estas mejoras aumentará significativamente la calidad, mantenibilidad y robustez del código. Es imperativo abordar estos puntos antes de considerar el código como producción-ready.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between d0fa999 and ded87c8.

📒 Files selected for processing (1)
  • frontend/src/routes/audits/edit/sections/sections.tsx (1 hunks)
🧰 Additional context used
🔇 Additional comments (1)
frontend/src/routes/audits/edit/sections/sections.tsx (1)

1-1: ⚠️ Potential issue

Elimina el comentario de desactivación de ESLint y corrige la configuración del proyecto

El uso de eslint-disable para import/extensions indica un problema en la configuración del proyecto que debe ser abordado correctamente. En lugar de desactivar la regla, debes resolver el problema subyacente.

Acciones recomendadas:

  1. Revisa y ajusta la configuración de ESLint para manejar correctamente las extensiones de archivo.
  2. Si estás utilizando TypeScript, asegúrate de que el compilador esté configurado adecuadamente para las extensiones de archivo.
  3. Actualiza las importaciones para incluir las extensiones de archivo si es necesario.

Una vez resuelto, elimina la siguiente línea:

- /* eslint-disable import/extensions */

Likely invalid or redundant comment.

@sealra sealra force-pushed the feature/audit-customSections branch from ad24c21 to 3a53e00 Compare October 15, 2024 14:15
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.

Caution

Inline review comments failed to post

Actionable comments posted: 6

🧹 Outside diff range and nitpick comments (4)
frontend/src/components/navbar/AuditSidebar.tsx (3)

Line range hint 1-60: Importaciones y definiciones de tipos actualizadas correctamente

Las nuevas importaciones y adiciones de tipos son coherentes con los cambios descritos en el resumen de IA. Apoyan la nueva funcionalidad para secciones personalizadas. Sin embargo, hay un punto que requiere atención:

  • La importación de Section en la línea 17 utiliza una ruta relativa. Deberías considerar cambiarla a una importación absoluta para mantener la consistencia con las otras importaciones.

Considera cambiar la importación de Section a una importación absoluta:

-import { Section } from '../../services/data';
+import { Section } from '@/services/data';

280-316: Sección de usuarios conectados: mejora de accesibilidad necesaria

La implementación de la sección de usuarios conectados es coherente con el resto del componente y utiliza correctamente el estado isCollapsed para el renderizado condicional. Sin embargo, hay una mejora de accesibilidad que debes realizar:

El indicador de estado en línea (líneas 304-308) utiliza solo color para indicar si un usuario está en línea o no. Esto puede ser problemático para usuarios con daltonismo o que utilizan lectores de pantalla.

Para mejorar la accesibilidad, añade un texto alternativo al indicador de estado:

 <span
   className={clsx(
     'w-2 h-2 rounded-full flex-shrink-0',
     user.online ? 'bg-green-500' : 'bg-gray-500',
   )}
+  aria-label={user.online ? 'En línea' : 'Desconectado'}
 />

Implementa este cambio para mejorar la accesibilidad de la sección de usuarios conectados.


Line range hint 1-317: Revisión final: Mejoras significativas con áreas de optimización

El componente AuditSidebar ha sido actualizado sustancialmente para incluir nuevas características de secciones personalizadas y usuarios conectados. En general, los cambios están bien implementados y mantienen la consistencia con la estructura y el enfoque de estilo existentes. Sin embargo, hay algunas áreas que requieren atención adicional:

  1. Rendimiento: Considera memoizar los callbacks de los eventos onClick para evitar renderizados innecesarios.

  2. Mantenibilidad: Extrae la lógica compleja, como la renderización de iconos y la gestión de secciones personalizadas, en funciones o componentes separados.

  3. Accesibilidad: Asegúrate de que todos los elementos interactivos tengan etiquetas ARIA apropiadas y que la navegación por teclado funcione correctamente.

  4. Gestión de estado: La lógica para añadir/eliminar secciones personalizadas debería implementarse y probarse adecuadamente.

Para mejorar aún más este componente, considera las siguientes acciones:

  1. Implementa pruebas unitarias para las nuevas funcionalidades.
  2. Documenta las props del componente y su funcionamiento interno para facilitar el mantenimiento futuro.
  3. Evalúa si algunas partes del componente podrían extraerse en subcomponentes más pequeños y reutilizables.
  4. Implementa un manejo de errores robusto, especialmente para las interacciones con las secciones personalizadas.

Estas mejoras ayudarán a que el componente sea más robusto, mantenible y accesible en el futuro.

frontend/src/services/audits.ts (1)

39-45: Buena adición, pero considera mejorar la estructura de customFields

La nueva estructura AuditSection es una buena adición para representar secciones de auditoría. Sin embargo, la definición de customFields como un array de strings podría ser limitante.

Considera usar una estructura más robusta para customFields que permita mayor flexibilidad y detalle en el futuro. Por ejemplo:

customFields: {
  id: string;
  value: string | number | boolean;
  type: string;
}[];

Esto permitiría una representación más rica de los campos personalizados sin necesidad de cambios significativos en el futuro.

🛑 Comments failed to post (6)
frontend/src/components/navbar/AuditSidebar.tsx (3)

187-247: ⚠️ Potential issue

Implementación de secciones personalizadas requiere mejoras

La adición del botón y el desplegable para secciones personalizadas es un buen comienzo, pero hay varios problemas que necesitan ser abordados:

  1. El botón de alternancia (líneas 203-210) no tiene un aria-label, lo que afecta la accesibilidad.

  2. El desplegable (líneas 213-244) se cierra al hacer clic en cualquier sección, independientemente de si ya está seleccionada o no. Esto limita la capacidad del usuario para seleccionar múltiples secciones.

  3. No hay lógica para añadir o eliminar secciones del array auditSections cuando se hace clic en una sección.

Debes abordar estos problemas para mejorar la funcionalidad y la accesibilidad:

  1. Añade un aria-label al botón de alternancia.
  2. Implementa la lógica para añadir o eliminar secciones de auditSections cuando se hace clic en ellas.
  3. Mantén el desplegable abierto hasta que el usuario haga clic fuera de él o en un botón de cierre específico.

Ejemplo de implementación para el punto 2:

const handleSectionToggle = (section: Section) => {
  const isSelected = auditSections.some(
    auditSection => auditSection.field === section.field
  );
  if (isSelected) {
    // Eliminar la sección
    setAuditSections(auditSections.filter(
      auditSection => auditSection.field !== section.field
    ));
  } else {
    // Añadir la sección
    setAuditSections([...auditSections, section]);
  }
};

Luego, usa handleSectionToggle(section) en el onClick del botón de cada sección.


249-278: 🛠️ Refactor suggestion

Mejoras necesarias en la renderización de secciones personalizadas seleccionadas

La implementación de la renderización de secciones personalizadas seleccionadas es funcional, pero hay áreas que requieren mejoras:

  1. Accesibilidad: Los iconos no tienen texto alternativo, lo que dificulta su interpretación por lectores de pantalla.

  2. Organización del código: La lógica para renderizar los iconos se repite en varias partes del componente. Esto viola el principio DRY (Don't Repeat Yourself).

Te sugiero las siguientes mejoras:

  1. Añade un aria-label a los iconos para mejorar la accesibilidad.

  2. Crea una función auxiliar para renderizar los iconos y utilízala en todo el componente. Por ejemplo:

const renderIcon = (icon: string) => {
  if (icon.startsWith('fa-')) {
    return <i className={`fa ${icon}`} aria-hidden="true" />;
  }
  return <i className="material-icons" aria-hidden="true">{icon}</i>;
};

Luego, usa esta función en lugar de repetir la lógica de renderizado de iconos:

-{section.icon?.startsWith('fa-') ? (
-  <i className={`fa ${section.icon}`} />
-) : (
-  <i className="material-icons">{section.icon}</i>
-)}
+{renderIcon(section.icon)}

Implementa estos cambios para mejorar la mantenibilidad y accesibilidad del código.


75-90: ⚠️ Potential issue

Inconsistencia en la desestructuración de props

Has añadido correctamente las nuevas props para manejar las secciones personalizadas. Sin embargo, hay un problema crítico:

  • Has eliminado la prop sortOptions de la desestructuración, pero aún se está utilizando en el componente (línea 157). Esto causará un error en tiempo de ejecución.

Debes volver a incluir sortOptions en la desestructuración de props:

 const AuditSidebar = ({
   activeItem,
   setActiveItem,
   auditSections,
   isCollapsed,
   setIsCollapsed,
   isListVisible,
   setIsListVisible,
   sections,
   sortBy,
   setSortBy,
   sortOrder,
   setSortOrder,
   menuItems,
   findings,
+  sortOptions,
   sortOrderOptions,
   connectedUsers,
 }: AuditSidebarProps) => (
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

  auditSections,
  isCollapsed,
  setIsCollapsed,
  isListVisible,
  setIsListVisible,
  sections,
  sortBy,
  setSortBy,
  sortOrder,
  setSortOrder,
  menuItems,
  findings,
  sortOptions,
  sortOrderOptions,
  connectedUsers,
}: AuditSidebarProps) => (
frontend/src/services/audits.ts (3)

136-174: 🛠️ Refactor suggestion

Estructuras detalladas, pero con potencial de mejora

Las nuevas estructuras UpdateAuditCustomFields y SectionCustomField proporcionan una representación detallada de los campos personalizados. Sin embargo, hay algunas áreas que podrían mejorarse:

  1. El uso de string | string[] para el campo text en UpdateAuditCustomFields puede llevar a un manejo inconsistente de los datos. Considera usar un tipo más específico o documentar claramente cuándo se usa cada variante.

  2. Hay una duplicación significativa entre UpdateAuditCustomFields y SectionCustomField. Podrías reducir esta duplicación creando un tipo base común y extendiéndolo según sea necesario.

Ejemplo de refactorización:

type BaseCustomField = {
  description: string;
  display: string;
  // ... otros campos comunes
};

type UpdateAuditCustomFields = BaseCustomField & {
  text: string | string[];
};

type SectionCustomField = BaseCustomField;

Esta estructura reducirá la duplicación y facilitará el mantenimiento futuro.


444-465: ⚠️ Potential issue

Implementación correcta, pero falta validación de parámetros

La función getAuditSectionById está bien implementada y sigue el patrón de otras llamadas API en el archivo. Sin embargo, hay una mejora importante que debes hacer:

No estás validando auditId y sectionId antes de usarlos. Si alguno de estos es undefined, podrías tener errores en tiempo de ejecución. Agrega una validación al inicio de la función:

export const getAuditSectionById = async (
  auditId: string | undefined,
  sectionId: string | undefined,
): Promise<{ status: string; datas: AuditSectionById }> => {
  if (!auditId || !sectionId) {
    throw new Error('auditId y sectionId son obligatorios');
  }
  
  // ... resto de la implementación
};

Esta validación evitará errores innecesarios y mejorará la robustez de tu código.


467-491: 🛠️ Refactor suggestion

⚠️ Potential issue

Implementación correcta, pero requiere ajustes

La función updateAuditSectionById está bien estructurada, pero hay dos puntos importantes que necesitas abordar:

  1. Al igual que en getAuditSectionById, no estás validando auditId y sectionId. Agrega una validación al inicio de la función para evitar errores en tiempo de ejecución.

  2. El parámetro auditSections es de tipo UpdateAuditCustomFields, pero este tipo incluye campos como field, name, y _id que probablemente no deberían ser modificables en una actualización. Considera crear un tipo específico para las actualizaciones, por ejemplo:

type UpdateAuditSectionFields = {
  customFields: UpdateAuditCustomFields['customFields'];
};

Luego, actualiza la firma de la función:

export const updateAuditSectionById = async (
  auditId: string | undefined,
  sectionId: string | undefined,
  updateFields: UpdateAuditSectionFields,
): Promise<{ status: string; datas: AuditSectionById }> => {
  if (!auditId || !sectionId) {
    throw new Error('auditId y sectionId son obligatorios');
  }
  
  // ... resto de la implementación
};

Estos cambios mejorarán la seguridad y la claridad de tu código.

Copy link
Copy Markdown
Owner

@caverav caverav left a comment

Choose a reason for hiding this comment

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

image
Al apretar en un custom section, no me aparece nada para editar

@caverav
Copy link
Copy Markdown
Owner

caverav commented Oct 15, 2024

image
En esta sección al apretar cualquier botón no sucede nada, cuál es la utilidad?

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 15, 2024

image Al apretar en un custom section, no me aparece nada para editar

aplicaste el flujo mencionado en la descripción del pr? editar un audit type (o custom field) de un audit ya creado no modificará para ese audit (por como funciona el back de pwndoc)

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 15, 2024

image En esta sección al apretar cualquier botón no sucede nada, cuál es la utilidad?

Esto lo comenté en algun comentario de codeRabbit, la funcionalidad de añadir directamente quedaría como issue (creo), porque requerirá modificaciones extensas al back, de momento pensaba en probablemente comentar o eliminar para este sprint esa funcionalidad.

@caverav
Copy link
Copy Markdown
Owner

caverav commented Oct 15, 2024

image Al apretar en un custom section, no me aparece nada para editar

aplicaste el flujo mencionado en la descripción del pr? editar un audit type (o custom field) de un audit ya creado no modificará para ese audit (por como funciona el back de pwndoc)

Yep

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 15, 2024

image Al apretar en un custom section, no me aparece nada para editar

aplicaste el flujo mencionado en la descripción del pr? editar un audit type (o custom field) de un audit ya creado no modificará para ese audit (por como funciona el back de pwndoc)

Yep

image

no me pasa, podríamos verificar tu flujo por discord

@caverav
Copy link
Copy Markdown
Owner

caverav commented Oct 15, 2024

image Al apretar en un custom section, no me aparece nada para editar

aplicaste el flujo mencionado en la descripción del pr? editar un audit type (o custom field) de un audit ya creado no modificará para ese audit (por como funciona el back de pwndoc)

Yep

image

no me pasa, podríamos verificar tu flujo por discord

Era que por defecto se encuentra así:
image
Faltó indicar que hay que seleccionar Audit Section, lo agregaré yo al PR, con eso me funcionó 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.

No existe un feedback (como un toast) al momento de guardar cambios en un custom section, especificamentente al apretar el botón de la imagen A:

Imagen A:

image

En caso de que se deje para un futuro debido al tiempo, crear el issue correspondiente por favor.

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.

Falta resolver los conflictos con development.

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 16, 2024

No existe un feedback (como un toast) al momento de guardar cambios en un custom section, especificamentente al apretar el botón de la imagen A:

Imagen A:

image

En caso de que se deje para un futuro debido al tiempo, crear el issue correspondiente por favor.

ya fue agregado como issue 👍

@sealra
Copy link
Copy Markdown
Collaborator Author

sealra commented Oct 16, 2024

Falta resolver los conflictos con development.

fueron resueltos 👍

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: 11

🧹 Outside diff range and nitpick comments (3)
frontend/src/routes/audits/edit/AuditRoot.tsx (3)

8-8: Importaciones y variables de estado añadidas correctamente.

Las nuevas importaciones y variables de estado son necesarias para la funcionalidad añadida. Sin embargo, considere agrupar las variables de estado relacionadas para mejorar la legibilidad del código.

Considere agrupar las variables de estado relacionadas de la siguiente manera:

const [auditState, setAuditState] = useState({
  auditSections: [],
  sections: [],
  isListVisible: false
});

Esto puede hacer que el código sea más fácil de mantener a medida que crece.

Also applies to: 70-72


Line range hint 88-119: Persistencia del manejo inadecuado de errores en la obtención de datos de auditoría.

El problema de manejo de errores insuficiente se repite en este useEffect. Es crucial implementar un manejo de errores robusto en todas las operaciones asíncronas.

Implemente un manejo de errores similar al sugerido para el useEffect anterior:

useEffect(() => {
  getAuditById(auditId)
    .then(audit => {
      // ... (código existente)
    })
    .catch(error => {
      console.error('Error al obtener datos de auditoría:', error);
      toast.error('No se pudieron cargar los datos de la auditoría. Por favor, intente de nuevo más tarde.');
      // Considere establecer un estado de error para mostrar un mensaje en la interfaz de usuario
    });
}, [auditId, sections]);

Esta implementación mejorará significativamente la robustez de su aplicación y la experiencia del usuario en caso de errores.


Line range hint 1-155: Evaluación general de los cambios en AuditRoot.tsx

Los cambios implementados añaden funcionalidad para secciones personalizadas y mejoran la estructura de datos de la auditoría. Sin embargo, hay áreas críticas que requieren atención inmediata:

  1. El manejo de errores es consistentemente inadecuado en todo el componente.
  2. La estructura del componente se está volviendo compleja, con un exceso de props pasadas a AuditSidebar.

Para mejorar la calidad y mantenibilidad del código:

  1. Implemente un manejo de errores robusto en todas las operaciones asíncronas.
  2. Considere refactorizar utilizando el Context API de React para reducir el prop drilling.
  3. Evalúe la posibilidad de dividir AuditRoot en componentes más pequeños y manejables.

Estas mejoras son cruciales para garantizar la escalabilidad y robustez de la aplicación a largo plazo.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 5c8a11e and 3e3bc2e.

📒 Files selected for processing (3)
  • frontend/src/components/navbar/AuditSidebar.tsx (4 hunks)
  • frontend/src/routes/audits/edit/AuditRoot.tsx (4 hunks)
  • frontend/src/services/audits.ts (4 hunks)
🧰 Additional context used
🔇 Additional comments (5)
frontend/src/components/navbar/AuditSidebar.tsx (2)

61-64: Aprobado: Nuevas propiedades añadidas correctamente

Las nuevas propiedades añadidas a AuditSidebarProps son apropiadas para la funcionalidad de secciones personalizadas. Los tipos están bien definidos y son coherentes con su uso previsto.


338-346: Aprobado: Implementación correcta del botón de alternancia

La implementación del botón de alternancia para la lista de secciones personalizadas es correcta. El botón se renderiza condicionalmente cuando la barra lateral no está colapsada y maneja adecuadamente la visibilidad de la lista.

frontend/src/services/audits.ts (3)

127-127: Cambio aprobado: Uso de AuditSection en AuditById

La modificación del campo sections para utilizar el nuevo tipo AuditSection[] es una mejora significativa. Este cambio proporciona una estructura más clara y seguridad de tipos para las secciones de una auditoría, lo que facilitará el manejo de datos y reducirá errores potenciales en el código que utiliza esta interfaz.


163-177: Aprobación: Estructura bien definida para SectionCustomField

La definición del tipo SectionCustomField es exhaustiva y bien estructurada. Incluye propiedades esenciales como descripción, tipo de campo, etiqueta y opciones, lo que permite una gran flexibilidad en la definición de campos personalizados. La inclusión de opciones localizadas es particularmente valiosa para la internacionalización.

Esta estructura facilitará la implementación de campos personalizados dinámicos y flexibles en las secciones de auditoría, mejorando la adaptabilidad del sistema a diferentes requisitos de auditoría.


457-478: Aprobación: Implementación correcta de getAuditSectionById

La función getAuditSectionById está bien implementada y sigue el patrón establecido para las llamadas a la API en este archivo. Puntos destacables:

  1. Manejo adecuado de errores.
  2. Uso correcto de la estructura del endpoint.
  3. Tipado correcto del valor de retorno.

Esta implementación facilitará la obtención de secciones de auditoría específicas de manera consistente con el resto del código.

Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/routes/audits/edit/AuditRoot.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/components/navbar/AuditSidebar.tsx
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
Comment thread frontend/src/services/audits.ts
coderabbitai[bot]
coderabbitai Bot previously approved these changes Oct 16, 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.

APRUEBO!

@caverav caverav merged commit 23db310 into development Oct 16, 2024
@iTzGooDLife iTzGooDLife deleted the feature/audit-customSections branch October 16, 2024 23:28
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: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Files that changed from the base of the PR and between 3e3bc2e and 672a658.

📒 Files selected for processing (2)
  • frontend/src/i18n/en-US/index.ts (2 hunks)
  • frontend/src/routes/audits/edit/sections/sections.tsx (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/src/routes/audits/edit/sections/sections.tsx
🧰 Additional context used
🔇 Additional comments (2)
frontend/src/i18n/en-US/index.ts (2)

163-164: ¡Bien hecho! La nueva entrada de mensaje es correcta.

La nueva entrada para el mensaje de éxito al guardar secciones personalizadas de auditoría está correctamente implementada y sigue las convenciones del archivo.


204-204: La nueva entrada de error es adecuada.

La entrada para el mensaje de error al fallar el guardado de secciones personalizadas de auditoría está correctamente implementada y sigue las convenciones del archivo.

Comment on lines +163 to +164
auditCustomSectionsSaveSuccess:
'The custom sections have been saved successfully',
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.

💡 Codebase verification

Asegúrate de agregar las nuevas entradas a otros archivos de idioma

Las nuevas entradas para mensajes de éxito y error al guardar secciones personalizadas de auditoría no se encuentran en los siguientes archivos de idioma:

  • frontend/src/i18n/de-DE/index.ts
  • frontend/src/i18n/fr-FR/index.ts
  • frontend/src/i18n/index.ts
  • frontend/src/i18n/zh-CN/index.ts
🔗 Analysis chain

Asegúrate de agregar estas entradas a otros archivos de idioma.

Las nuevas entradas para mensajes de éxito y error al guardar secciones personalizadas de auditoría están correctamente implementadas en el archivo de inglés (EE. UU.). Sin embargo, es crucial que estas mismas entradas se agreguen a los archivos de traducción para otros idiomas soportados por la aplicación para mantener la consistencia en la internacionalización.

Also applies to: 204-204

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Descripción: Verificar si las nuevas entradas existen en otros archivos de idioma.

# Buscar archivos de idioma similares
language_files=$(fd --type f --glob 'index.ts' --exclude 'en-US')

# Verificar la presencia de las nuevas entradas en cada archivo de idioma
for file in $language_files; do
  echo "Verificando $file:"
  grep -n 'auditCustomSectionsSaveSuccess' "$file" || echo "- Falta 'auditCustomSectionsSaveSuccess'"
  grep -n 'errorSavingAuditCustomSections' "$file" || echo "- Falta 'errorSavingAuditCustomSections'"
  echo ""
done

Length of output: 2103

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.

4 participants