From cc5ebe285e612c050e96bff1ee67ab3e9522a1f4 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:33:17 -0400 Subject: [PATCH 1/6] refactor: update terminology for artifacts and requirements in controls view - Renamed "Mapped Requirements" to "Linked Requirements" in controls table and related components. - Updated error logging message for fetching artifacts to reflect new terminology. - Adjusted localization strings to replace "related artifacts" with "Linked Artifacts". --- .../controls/[controlId]/components/SingleControl.tsx | 2 -- .../controls/[controlId]/data/getRelatedArtifacts.ts | 2 +- .../controls/components/controls-table-columns.tsx | 6 +++--- apps/app/src/locales/features/controls.ts | 2 +- apps/app/src/locales/features/frameworks.ts | 8 ++++---- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx index 4e728d5867..52cff1bdae 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx @@ -68,8 +68,6 @@ export const SingleControl = ({ requirements={control.requirementsMapped} orgId={orgId} /> - - ( - + ), cell: ({ row }) => { const control = row.original; @@ -94,8 +94,8 @@ export function getControlColumns(): ColumnDef< ); }, meta: { - label: "Mapped Requirements", - placeholder: "Search mapped requirements...", + label: "Linked Requirements", + placeholder: "Search Linked Requirements...", variant: "text", }, }, diff --git a/apps/app/src/locales/features/controls.ts b/apps/app/src/locales/features/controls.ts index f58e4791a6..71183ec873 100644 --- a/apps/app/src/locales/features/controls.ts +++ b/apps/app/src/locales/features/controls.ts @@ -14,6 +14,6 @@ export const controls = { no_requirements_mapped: "No requirements mapped to this control.", }, artifacts: { - no_artifacts: "No related artifacts found", + no_artifacts: "No Linked Artifacts found", }, } as const; diff --git a/apps/app/src/locales/features/frameworks.ts b/apps/app/src/locales/features/frameworks.ts index 19e7cfc779..4443fe4117 100644 --- a/apps/app/src/locales/features/frameworks.ts +++ b/apps/app/src/locales/features/frameworks.ts @@ -39,7 +39,7 @@ export const frameworks = { control: "Control", artifacts: "Artifacts", actions: "Actions", - requirements: "Mapped Requirements", + requirements: "Linked Requirements", }, statuses: { completed: "Completed", @@ -49,7 +49,7 @@ export const frameworks = { }, requirements: { requirement: "Requirement", - title: "Requirements", + title: "Linked Requirements", description: "Review and manage compliance requirements", table: { id: "ID", @@ -64,7 +64,7 @@ export const frameworks = { }, }, artifacts: { - title: "Related Artifacts", + title: "Linked Artifacts", table: { id: "ID", name: "Name", @@ -77,6 +77,6 @@ export const frameworks = { type_placeholder: "Filter by type...", universal_placeholder: "Search artifacts...", }, - no_artifacts: "No related artifacts found", + no_artifacts: "No Linked Artifacts found", }, } as const; From aef0550d8c255ef64f3f8b147b6b6293a7ed06b0 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:42:49 -0400 Subject: [PATCH 2/6] refactor: enhance control details view with framework instance integration - Updated RequirementsTable to include framework instance details in the requirements mapping. - Modified SingleControl component to reflect changes in requirementsMapped structure. - Adjusted getControl function to include framework instance in the requirements mapping. - Updated localization strings to include new framework and requirement identifiers. --- .../components/RequirementsTable.tsx | 40 +++++++++++++++++-- .../[controlId]/components/SingleControl.tsx | 10 ++++- .../controls/[controlId]/data/getControl.ts | 6 ++- .../[orgId]/controls/[controlId]/page.tsx | 2 +- apps/app/src/locales/features/frameworks.ts | 2 + 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx index 661c5f1853..4c9d85f33c 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx @@ -5,16 +5,21 @@ import { DataTableColumnHeader } from "@/components/data-table/data-table-column import { DataTableSortList } from "@/components/data-table/data-table-sort-list"; import { useDataTable } from "@/hooks/use-data-table"; import { useI18n } from "@/locales/client"; -import type { FrameworkId, RequirementMap } from "@comp/db/types"; +import type { + FrameworkId, + FrameworkInstance, + RequirementMap, +} from "@comp/db/types"; import { Input } from "@comp/ui/input"; import { ColumnDef } from "@tanstack/react-table"; import { useMemo, useState } from "react"; import { getRequirementDetails } from "../../../frameworks/lib/getRequirementDetails"; import { Card, CardTitle, CardHeader } from "@comp/ui/card"; import { CardContent } from "@comp/ui/card"; +import { getFrameworkDetails } from "../../../frameworks/lib/getFrameworkDetails"; interface RequirementsTableProps { - requirements: RequirementMap[]; + requirements: (RequirementMap & { frameworkInstance: FrameworkInstance })[]; orgId: string; } @@ -26,14 +31,40 @@ export function RequirementsTable({ const [searchTerm, setSearchTerm] = useState(""); // Define columns for requirements table - const columns = useMemo[]>( + const columns = useMemo< + ColumnDef[] + >( () => [ + { + accessorKey: "framework", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const requirementId = row.original.requirementId.split("_").pop(); + const frameworkDetails = getFrameworkDetails( + row.original.frameworkInstance.frameworkId, + ); + return ( + {frameworkDetails?.name} + ); + }, + enableSorting: true, + sortingFn: (rowA, rowB, columnId) => { + const a = rowA.original.requirementId.split("_").pop() || ""; + const b = rowB.original.requirementId.split("_").pop() || ""; + return a.localeCompare(b); + }, + }, { accessorKey: "requirementId", header: ({ column }) => ( ), cell: ({ row }) => { @@ -147,6 +178,7 @@ export function RequirementsTable({ // Search in ID, name, and description return ( + frameworkId.toLowerCase().includes(searchLower) || requirementId.toLowerCase().includes(searchLower) || details?.name?.toLowerCase().includes(searchLower) || false || diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx index 52cff1bdae..b53ddd5d27 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx @@ -1,7 +1,11 @@ "use client"; import { DisplayFrameworkStatus } from "@/components/frameworks/framework-status"; -import type { Control } from "@comp/db/types"; +import type { + Control, + FrameworkInstance, + RequirementMap, +} from "@comp/db/types"; import { Card, CardContent, CardHeader, CardTitle } from "@comp/ui/card"; import { useMemo } from "react"; import type { ControlProgressResponse } from "../data/getOrganizationControlProgress"; @@ -15,7 +19,9 @@ import { Separator } from "@comp/ui/separator"; interface SingleControlProps { control: Control & { - requirementsMapped: any[]; + requirementsMapped: (RequirementMap & { + frameworkInstance: FrameworkInstance; + })[]; }; controlProgress: ControlProgressResponse; relatedArtifacts: RelatedArtifact[]; diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/data/getControl.ts b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/data/getControl.ts index 296a8517e3..3b7a067f73 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/data/getControl.ts +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/data/getControl.ts @@ -25,7 +25,11 @@ export const getControl = async (id: string) => { id, }, include: { - requirementsMapped: true, + requirementsMapped: { + include: { + frameworkInstance: true, + }, + }, }, }); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx index 044cc750ff..76b8694424 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx @@ -6,7 +6,7 @@ import { getOrganizationControlProgress } from "./data/getOrganizationControlPro import type { ControlProgressResponse } from "./data/getOrganizationControlProgress"; import { headers } from "next/headers"; import PageWithBreadcrumb from "@/components/pages/PageWithBreadcrumb"; -import { getRelatedArtifacts } from "./data/getRelatedArtifacts"; +import { getRelatedArtifacts } from "@/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/data/getRelatedArtifacts"; interface ControlPageProps { params: { diff --git a/apps/app/src/locales/features/frameworks.ts b/apps/app/src/locales/features/frameworks.ts index 4443fe4117..02a66fe0d1 100644 --- a/apps/app/src/locales/features/frameworks.ts +++ b/apps/app/src/locales/features/frameworks.ts @@ -55,6 +55,8 @@ export const frameworks = { id: "ID", name: "Name", description: "Description", + frameworkId: "Framework", + requirementId: "Requirement ID", }, search: { id_placeholder: "Search by ID...", From f5b4aefaaeec527d429557ff084f0908b5fbbc4f Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:47:39 -0400 Subject: [PATCH 3/6] refactor: update RequirementsTable to streamline data display and sorting - Refactored RequirementsTable to replace requirementId with id for improved clarity. - Enhanced cell rendering to display both framework and requirement names. - Removed unnecessary sorting logic for framework and requirementId columns. - Updated initial sorting state to reflect new id accessor. --- .../components/RequirementsTable.tsx | 62 ++++--------------- 1 file changed, 13 insertions(+), 49 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx index 4c9d85f33c..87a90c4ba9 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/RequirementsTable.tsx @@ -10,13 +10,12 @@ import type { FrameworkInstance, RequirementMap, } from "@comp/db/types"; +import { Card, CardContent, CardHeader, CardTitle } from "@comp/ui/card"; import { Input } from "@comp/ui/input"; import { ColumnDef } from "@tanstack/react-table"; import { useMemo, useState } from "react"; -import { getRequirementDetails } from "../../../frameworks/lib/getRequirementDetails"; -import { Card, CardTitle, CardHeader } from "@comp/ui/card"; -import { CardContent } from "@comp/ui/card"; import { getFrameworkDetails } from "../../../frameworks/lib/getFrameworkDetails"; +import { getRequirementDetails } from "../../../frameworks/lib/getRequirementDetails"; interface RequirementsTableProps { requirements: (RequirementMap & { frameworkInstance: FrameworkInstance })[]; @@ -36,50 +35,7 @@ export function RequirementsTable({ >( () => [ { - accessorKey: "framework", - header: ({ column }) => ( - - ), - cell: ({ row }) => { - const requirementId = row.original.requirementId.split("_").pop(); - const frameworkDetails = getFrameworkDetails( - row.original.frameworkInstance.frameworkId, - ); - return ( - {frameworkDetails?.name} - ); - }, - enableSorting: true, - sortingFn: (rowA, rowB, columnId) => { - const a = rowA.original.requirementId.split("_").pop() || ""; - const b = rowB.original.requirementId.split("_").pop() || ""; - return a.localeCompare(b); - }, - }, - { - accessorKey: "requirementId", - header: ({ column }) => ( - - ), - cell: ({ row }) => { - const requirementId = row.original.requirementId.split("_").pop(); - return {requirementId}; - }, - enableSorting: true, - sortingFn: (rowA, rowB, columnId) => { - const a = rowA.original.requirementId.split("_").pop() || ""; - const b = rowB.original.requirementId.split("_").pop() || ""; - return a.localeCompare(b); - }, - }, - { - accessorKey: "name", + accessorKey: "id", header: ({ column }) => ( {details?.name}; + + const frameworkDetails = getFrameworkDetails( + row.original.frameworkInstance.frameworkId, + ); + return ( + + {frameworkDetails?.name} - {details?.name} + + ); }, enableSorting: true, sortingFn: (rowA, rowB, columnId) => { @@ -196,7 +160,7 @@ export function RequirementsTable({ shallow: false, getRowId: (row) => row.id, initialState: { - sorting: [{ id: "requirementId", desc: false }], + sorting: [{ id: "id", desc: false }], }, tableId: "r", }); From f51fbf5d85b38baf7d8959569937df5a59de7bf0 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:56:16 -0400 Subject: [PATCH 4/6] refactor: update ArtifactsTable and related components for improved artifact handling - Refactored ArtifactsTable to utilize a new structure for artifacts, integrating evidence and policy details. - Updated SingleControl component to reflect changes in relatedArtifacts structure. - Simplified getRelatedArtifacts function to return artifacts directly without transformation. - Enhanced sorting and filtering logic in ArtifactsTable for better user experience. --- .../[controlId]/components/ArtifactsTable.tsx | 54 ++++++++++++++++--- .../[controlId]/components/SingleControl.tsx | 21 ++++---- .../[controlId]/data/getRelatedArtifacts.ts | 35 +++--------- .../data-table/data-table-sort-list.tsx | 11 ---- 4 files changed, 66 insertions(+), 55 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/ArtifactsTable.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/ArtifactsTable.tsx index 6b0498456e..df5c868e28 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/ArtifactsTable.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/ArtifactsTable.tsx @@ -8,11 +8,14 @@ import { useI18n } from "@/locales/client"; import { Input } from "@comp/ui/input"; import { ColumnDef } from "@tanstack/react-table"; import { useMemo, useState } from "react"; -import type { RelatedArtifact } from "../data/getRelatedArtifacts"; import { Card, CardTitle, CardHeader, CardContent } from "@comp/ui/card"; +import { Artifact, Evidence, Policy } from "@comp/db/types"; interface ArtifactsTableProps { - artifacts: RelatedArtifact[]; + artifacts: (Artifact & { + evidence: Evidence | null; + policy: Policy | null; + })[]; orgId: string; controlId: string; } @@ -26,7 +29,14 @@ export function ArtifactsTable({ const [searchTerm, setSearchTerm] = useState(""); // Define columns for artifacts table - const columns = useMemo[]>( + const columns = useMemo< + ColumnDef< + Artifact & { + evidence: Evidence | null; + policy: Policy | null; + } + >[] + >( () => [ { accessorKey: "name", @@ -36,10 +46,24 @@ export function ArtifactsTable({ title={t("frameworks.artifacts.table.name")} /> ), - cell: ({ row }) => {row.original.name}, + cell: ({ row }) => { + const name = + row.original.type === "evidence" + ? row.original.evidence?.name + : row.original.policy?.name; + return {name}; + }, enableSorting: true, sortingFn: (rowA, rowB, columnId) => { - return rowA.original.name.localeCompare(rowB.original.name); + const nameA = + rowA.original.type === "evidence" + ? rowA.original.evidence?.name || "" + : rowA.original.policy?.name || ""; + const nameB = + rowB.original.type === "evidence" + ? rowB.original.evidence?.name || "" + : rowB.original.policy?.name || ""; + return nameA.localeCompare(nameB); }, }, { @@ -88,7 +112,11 @@ export function ArtifactsTable({ return artifacts.filter( (artifact) => artifact.id.toLowerCase().includes(searchLower) || - artifact.name.toLowerCase().includes(searchLower) || + (artifact.type === "evidence" + ? artifact.evidence?.name?.toLowerCase().includes(searchLower) || + false + : artifact.policy?.name?.toLowerCase().includes(searchLower) || + false) || artifact.type.toLowerCase().includes(searchLower), ); }, [artifacts, searchTerm]); @@ -127,8 +155,18 @@ export function ArtifactsTable({ row.id} + rowClickBasePath={`/${orgId}/`} + getRowId={(row) => { + if (row.type === "policy") { + return `/policies/${row.policyId}`; + } + + if (row.type === "evidence") { + return `/evidence/${row.evidenceId}`; + } + + return `/artifacts/${row.id}`; + }} tableId={"a"} /> diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx index b53ddd5d27..5ccab53d03 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx @@ -1,21 +1,21 @@ "use client"; import { DisplayFrameworkStatus } from "@/components/frameworks/framework-status"; +import { useI18n } from "@/locales/client"; import type { + Artifact, Control, + Evidence, FrameworkInstance, + Policy, RequirementMap, } from "@comp/db/types"; import { Card, CardContent, CardHeader, CardTitle } from "@comp/ui/card"; +import { useParams } from "next/navigation"; import { useMemo } from "react"; import type { ControlProgressResponse } from "../data/getOrganizationControlProgress"; -import { SingleControlSkeleton } from "./SingleControlSkeleton"; -import { useI18n } from "@/locales/client"; -import { useParams } from "next/navigation"; -import { RequirementsTable } from "./RequirementsTable"; import { ArtifactsTable } from "./ArtifactsTable"; -import type { RelatedArtifact } from "../data/getRelatedArtifacts"; -import { Separator } from "@comp/ui/separator"; +import { SingleControlSkeleton } from "./SingleControlSkeleton"; interface SingleControlProps { control: Control & { @@ -24,7 +24,10 @@ interface SingleControlProps { })[]; }; controlProgress: ControlProgressResponse; - relatedArtifacts: RelatedArtifact[]; + relatedArtifacts: (Artifact & { + evidence: Evidence | null; + policy: Policy | null; + })[]; } export const SingleControl = ({ @@ -69,11 +72,11 @@ export const SingleControl = ({

{control.description}

- + {/* + /> */} => { + }: GetRelatedArtifactsParams): Promise< + (Artifact & { + evidence: Evidence | null; + policy: Policy | null; + })[] + > => { try { const session = await auth.api.getSession({ headers: await headers(), @@ -52,25 +51,7 @@ export const getRelatedArtifacts = cache( } // Transform the artifacts into the format expected by the UI - return control.artifacts.map((artifact) => { - let name = "Unknown"; - let displayType = artifact.type; - - if (artifact.policy) { - name = artifact.policy.name; - displayType = "policy"; - } else if (artifact.evidence) { - name = artifact.evidence.name; - displayType = "evidence"; - } - - return { - id: artifact.id, - name, - type: displayType, - createdAt: artifact.createdAt.toISOString(), - }; - }); + return control.artifacts; } catch (error) { console.error("Error fetching Linked Artifacts:", error); return []; diff --git a/apps/app/src/components/data-table/data-table-sort-list.tsx b/apps/app/src/components/data-table/data-table-sort-list.tsx index 40f517f05a..d3d0b2b267 100644 --- a/apps/app/src/components/data-table/data-table-sort-list.tsx +++ b/apps/app/src/components/data-table/data-table-sort-list.tsx @@ -152,12 +152,6 @@ export function DataTableSortList({ for (const column of table.getAllColumns()) { if (!column.getCanSort()) continue; - // Debug column definitions - console.log(`Column ID: ${column.id}`, { - meta: column.columnDef.meta, - def: column.columnDef, - }); - // Use a safe way to get the label let label = column.columnDef.meta?.label; if (!label) { @@ -171,11 +165,6 @@ export function DataTableSortList({ } } - // Debug all labels and available columns - console.log("Column Labels:", Object.fromEntries(labels)); - console.log("Available Columns:", availableColumns); - console.log("Current Sorting:", sorting); - return { columnLabels: labels, columns: availableColumns, From 2078b519910bf9ed1bbe295fd41964d3e6e5ec17 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:57:43 -0400 Subject: [PATCH 5/6] refactor: simplify EvidenceDetails and ReviewSection components for improved clarity - Removed Alert component from EvidenceDetails to streamline the display of evidence information. - Updated ReviewSection to show evidence name in the header and description in the subtitle for better context. --- .../evidence/[evidenceId]/components/EvidenceDetails.tsx | 7 ------- .../evidence/[evidenceId]/components/ReviewSection.tsx | 5 ++--- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceDetails.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceDetails.tsx index 09fc3f9426..639253827d 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceDetails.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/evidence/[evidenceId]/components/EvidenceDetails.tsx @@ -16,13 +16,6 @@ export function EvidenceDetails({ assignees, evidence }: EvidenceDetailsProps) { in compliance reports. )} - - - {evidence.name} Evidence - - {evidence.description || "No description provided."} - -
-

Evidence Overview

+

{evidence.name}

- Manage review frequency, department assignment, and track upcoming - review dates + {evidence.description}

From 809827df5b7a139dee4b7bb616f51c07aaad5b95 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 17:58:09 -0400 Subject: [PATCH 6/6] refactor: integrate RequirementsTable into SingleControl for improved data display - Added RequirementsTable component to SingleControl for displaying control requirements. - Removed commented-out code for RequirementsTable to clean up the component structure. --- .../[orgId]/controls/[controlId]/components/SingleControl.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx index 5ccab53d03..17c0f3a1c4 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/components/SingleControl.tsx @@ -15,6 +15,7 @@ import { useParams } from "next/navigation"; import { useMemo } from "react"; import type { ControlProgressResponse } from "../data/getOrganizationControlProgress"; import { ArtifactsTable } from "./ArtifactsTable"; +import { RequirementsTable } from "./RequirementsTable"; import { SingleControlSkeleton } from "./SingleControlSkeleton"; interface SingleControlProps { @@ -72,11 +73,10 @@ export const SingleControl = ({

{control.description}

- {/* */} + />