Files
prowler/ui/components/providers/table/column-providers.tsx
Alan Buscaglia 4d5676f00e feat: upgrade to React 19, Next.js 15, React Compiler, HeroUI and Tailwind 4 (#8748)
Co-authored-by: Alan Buscaglia <alanbuscaglia@MacBook-Pro.local>
Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com>
Co-authored-by: César Arroba <cesar@prowler.com>
Co-authored-by: Alejandro Bailo <59607668+alejandrobailo@users.noreply.github.com>
2025-09-30 09:59:51 +02:00

124 lines
2.8 KiB
TypeScript

"use client";
import { Chip } from "@heroui/chip";
import { ColumnDef } from "@tanstack/react-table";
import { DateWithTime, SnippetChip } from "@/components/ui/entities";
import { DataTableColumnHeader } from "@/components/ui/table";
import { ProviderProps } from "@/types";
import { LinkToScans } from "../link-to-scans";
import { ProviderInfo } from "../provider-info";
import { DataTableRowActions } from "./data-table-row-actions";
interface GroupNameChipsProps {
groupNames?: string[];
}
const getProviderData = (row: { original: ProviderProps }) => {
const provider = row.original;
return {
attributes: provider.attributes,
groupNames: provider.groupNames,
};
};
export const ColumnProviders: ColumnDef<ProviderProps>[] = [
{
accessorKey: "account",
header: ({ column }) => (
<DataTableColumnHeader column={column} title={"Provider"} param="alias" />
),
cell: ({ row }) => {
const {
attributes: { connection, provider, alias, uid },
} = getProviderData(row);
return (
<ProviderInfo
connected={connection.connected}
provider={provider}
providerAlias={alias}
providerUID={uid}
/>
);
},
},
{
accessorKey: "scanJobs",
header: "Scan Jobs",
cell: ({ row }) => {
const {
attributes: { uid },
} = getProviderData(row);
return <LinkToScans providerUid={uid} />;
},
},
{
accessorKey: "groupNames",
header: "Groups",
cell: ({ row }) => {
const { groupNames } = getProviderData(row);
return <GroupNameChips groupNames={groupNames || []} />;
},
},
{
accessorKey: "uid",
header: ({ column }) => (
<DataTableColumnHeader
column={column}
title={"Provider UID"}
param="uid"
/>
),
cell: ({ row }) => {
const {
attributes: { uid },
} = getProviderData(row);
return <SnippetChip value={uid} className="h-7" />;
},
},
{
accessorKey: "added",
header: ({ column }) => (
<DataTableColumnHeader
column={column}
title={"Added"}
param="inserted_at"
/>
),
cell: ({ row }) => {
const {
attributes: { inserted_at },
} = getProviderData(row);
return <DateWithTime dateTime={inserted_at} showTime={false} />;
},
},
{
id: "actions",
cell: ({ row }) => {
return <DataTableRowActions row={row} />;
},
},
];
export const GroupNameChips: React.FC<GroupNameChipsProps> = ({
groupNames,
}) => {
return (
<div className="flex max-w-[300px] flex-wrap gap-1">
{groupNames?.map((name, index) => (
<Chip
key={index}
size="sm"
variant="flat"
classNames={{
base: "bg-default-100",
}}
>
{name}
</Chip>
))}
</div>
);
};