diff --git a/apps/console/src/pages/organizations/vendors/ListVendorView.tsx b/apps/console/src/pages/organizations/vendors/ListVendorView.tsx index d795b95a4..b010fc597 100644 --- a/apps/console/src/pages/organizations/vendors/ListVendorView.tsx +++ b/apps/console/src/pages/organizations/vendors/ListVendorView.tsx @@ -23,6 +23,12 @@ import { ListVendorViewPaginationQuery } from "./__generated__/ListVendorViewPag import { ListVendorView_vendors$key } from "./__generated__/ListVendorView_vendors.graphql"; import { ListVendorViewQuery } from "./__generated__/ListVendorViewQuery.graphql"; import { ListVendorViewDeleteVendorMutation } from "./__generated__/ListVendorViewDeleteVendorMutation.graphql"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; interface VendorData { name: string; @@ -86,6 +92,17 @@ const vendorListFragment = graphql` websiteUrl createdAt updatedAt + riskAssessments(first: 1, orderBy: { direction: DESC, field: ASSESSED_AT }) { + edges { + node { + id + assessedAt + expiresAt + dataSensitivity + businessImpact + } + } + } } } pageInfo { @@ -292,20 +309,42 @@ function ListVendorContent({ switch (riskLevel) { case "CRITICAL": return "bg-[#FFEFEF] text-[#CD2B31]"; - case "SIGNIFICANT": + case "HIGH": return "bg-[#FFF1E7] text-[#BD4B00]"; - default: + case "MEDIUM": + return "bg-[#FFF8E7] text-[#B54708]"; + case "LOW": return "bg-[#EEFADC] text-[#5D770D]"; + case "NONE": + return "bg-[#E6F4FF] text-[#0B4F71]"; + default: + return "bg-gray-100 text-gray-600"; } }; - // Mock risk status for demo (since the data doesn't have this field) - const getRiskStatus = (vendorId: string) => { - // Simplistic way to assign different risk levels for demo - const hash = vendorId.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0); - if (hash % 3 === 0) return "CRITICAL"; - if (hash % 3 === 1) return "SIGNIFICANT"; - return "GENERAL"; + // Get risk assessment status + const getRiskAssessmentStatus = (vendor: any) => { + const latestAssessment = vendor.riskAssessments?.edges[0]?.node; + + if (!latestAssessment) { + return { + status: "NEEDED", + dataSensitivity: null, + businessImpact: null, + isExpired: false + }; + } + + const now = new Date(); + const expiresAt = new Date(latestAssessment.expiresAt); + const isExpired = expiresAt < now; + + return { + status: isExpired ? "EXPIRED" : "VALID", + dataSensitivity: latestAssessment.dataSensitivity, + businessImpact: latestAssessment.businessImpact, + isExpired + }; }; return ( @@ -477,7 +516,7 @@ function ListVendorContent({