"use client"; import { ColumnDef } from "@tanstack/react-table"; import { Database } from "lucide-react"; import { useSearchParams } from "next/navigation"; import { InfoIcon } from "@/components/icons"; import { EntityInfo, SnippetChip } from "@/components/ui/entities"; import { TriggerSheet } from "@/components/ui/sheet"; import { DataTableColumnHeader } from "@/components/ui/table"; import { ProviderType, ResourceProps } from "@/types"; import { ResourceDetail } from "./resource-detail"; const getResourceData = ( row: { original: ResourceProps }, field: keyof ResourceProps["attributes"], ) => { return row.original.attributes?.[field]; }; const getChipStyle = (count: number) => { if (count === 0) return "bg-green-100 text-green-800"; if (count >= 10) return "bg-red-100 text-red-800"; if (count >= 1) return "bg-yellow-100 text-yellow-800"; }; const getProviderData = ( row: { original: ResourceProps }, field: keyof ResourceProps["relationships"]["provider"]["data"]["attributes"], ) => { return ( row.original.relationships?.provider?.data?.attributes?.[field] ?? `No ${field} found in provider` ); }; const ResourceDetailsCell = ({ row }: { row: any }) => { const searchParams = useSearchParams(); const resourceId = searchParams.get("resourceId"); const isOpen = resourceId === row.original.id; return (
} title="Resource Details" description="View the Resource details" defaultOpen={isOpen} >
); }; export const ColumnResources: ColumnDef[] = [ { id: "moreInfo", header: ({ column }) => ( ), cell: ({ row }) => , enableSorting: false, }, { accessorKey: "resourceName", header: ({ column }) => ( ), cell: ({ row }) => { const resourceName = getResourceData(row, "name"); const displayName = typeof resourceName === "string" && resourceName.trim().length > 0 ? resourceName : "Unnamed resource"; return ( } /> ); }, enableSorting: false, }, { accessorKey: "failedFindings", header: ({ column }) => ( ), cell: ({ row }) => { const failedFindingsCount = getResourceData( row, "failed_findings_count", ) as number; return ( {failedFindingsCount} ); }, enableSorting: false, }, { accessorKey: "region", header: ({ column }) => ( ), cell: ({ row }) => { const region = getResourceData(row, "region"); return (
{typeof region === "string" ? region : "Invalid region"}
); }, }, { accessorKey: "type", header: ({ column }) => ( ), cell: ({ row }) => { const type = getResourceData(row, "type"); return (
{typeof type === "string" ? type : "Invalid type"}
); }, }, { accessorKey: "service", header: ({ column }) => ( ), cell: ({ row }) => { const service = getResourceData(row, "service"); return (
{typeof service === "string" ? service : "Invalid region"}
); }, }, { accessorKey: "provider", header: ({ column }) => ( ), cell: ({ row }) => { const provider = getProviderData(row, "provider"); const alias = getProviderData(row, "alias"); const uid = getProviderData(row, "uid"); return ( <> ); }, enableSorting: false, }, ];