mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-10-11 05:54:17 +00:00
66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
"use client";
|
|
|
|
import { useState } from "react";
|
|
|
|
import { LighthouseContextContributor } from "@/components/lighthouse/context-contributor";
|
|
import { ResourceDetailsSheet } from "@/components/resources/resource-details-sheet";
|
|
import { DataTable } from "@/components/shadcn/table";
|
|
import { buildResourceSummaryContext } from "@/lib/lighthouse/context/contributions";
|
|
import { MetaDataProps, ResourceProps } from "@/types";
|
|
|
|
import { getColumnResources } from "./column-resources";
|
|
|
|
interface ResourcesTableWithSelectionProps {
|
|
data: ResourceProps[];
|
|
metadata?: MetaDataProps;
|
|
initialResource?: ResourceProps | null;
|
|
}
|
|
|
|
export function ResourcesTableWithSelection({
|
|
data,
|
|
metadata,
|
|
initialResource = null,
|
|
}: ResourcesTableWithSelectionProps) {
|
|
const safeData = data ?? [];
|
|
|
|
const [selectedResource, setSelectedResource] =
|
|
useState<ResourceProps | null>(initialResource);
|
|
const [drawerOpen, setDrawerOpen] = useState(Boolean(initialResource));
|
|
|
|
const openDrawer = (resource: ResourceProps) => {
|
|
setSelectedResource(resource);
|
|
setDrawerOpen(true);
|
|
};
|
|
|
|
const columns = getColumnResources({ onViewDetails: openDrawer });
|
|
|
|
return (
|
|
<>
|
|
{metadata?.pagination.count !== undefined && (
|
|
<LighthouseContextContributor
|
|
key={`resources-summary-${metadata.pagination.count}`}
|
|
contributorId="resources-summary"
|
|
item={buildResourceSummaryContext(metadata.pagination.count)}
|
|
/>
|
|
)}
|
|
<DataTable
|
|
columns={columns}
|
|
data={safeData}
|
|
metadata={metadata}
|
|
showSearch
|
|
onRowClick={(row) => openDrawer(row.original)}
|
|
/>
|
|
{selectedResource && (
|
|
<ResourceDetailsSheet
|
|
resource={selectedResource}
|
|
open={drawerOpen}
|
|
onOpenChange={(open) => {
|
|
setDrawerOpen(open);
|
|
if (!open) setSelectedResource(null);
|
|
}}
|
|
/>
|
|
)}
|
|
</>
|
|
);
|
|
}
|