mirror of
https://github.com/prowler-cloud/prowler.git
synced 2026-11-09 04:38:49 +00:00
Co-authored-by: alejandrobailo <alejandrobailo94@gmail.com>
102 lines
2.7 KiB
TypeScript
102 lines
2.7 KiB
TypeScript
"use client";
|
|
|
|
import type { ReactNode } from "react";
|
|
|
|
import { findingToFindingResourceRow } from "@/lib/finding-detail";
|
|
import type { FindingProps } from "@/types/components";
|
|
|
|
import {
|
|
ResourceDetailDrawer,
|
|
useResourceDetailDrawer,
|
|
} from "./resource-detail-drawer";
|
|
import { ResourceDetailDrawerContent } from "./resource-detail-drawer/resource-detail-drawer-content";
|
|
|
|
interface FindingDetailDrawerProps {
|
|
finding: FindingProps;
|
|
trigger?: ReactNode;
|
|
defaultOpen?: boolean;
|
|
inline?: boolean;
|
|
onOpenChange?: (open: boolean) => void;
|
|
onMuteComplete?: () => void;
|
|
}
|
|
|
|
export function FindingDetailDrawer({
|
|
finding,
|
|
trigger,
|
|
defaultOpen = false,
|
|
inline = false,
|
|
onOpenChange,
|
|
onMuteComplete,
|
|
}: FindingDetailDrawerProps) {
|
|
const drawer = useResourceDetailDrawer({
|
|
resources: [findingToFindingResourceRow(finding)],
|
|
totalResourceCount: 1,
|
|
initialIndex: defaultOpen || inline ? 0 : null,
|
|
});
|
|
|
|
const handleOpen = () => {
|
|
drawer.openDrawer(0);
|
|
onOpenChange?.(true);
|
|
};
|
|
|
|
const handleOpenChange = (open: boolean) => {
|
|
if (open) {
|
|
drawer.openDrawer(0);
|
|
} else {
|
|
drawer.closeDrawer();
|
|
}
|
|
|
|
onOpenChange?.(open);
|
|
};
|
|
|
|
const handleMuteComplete = () => {
|
|
drawer.refetchCurrent();
|
|
onMuteComplete?.();
|
|
};
|
|
|
|
if (inline) {
|
|
return (
|
|
<ResourceDetailDrawerContent
|
|
isLoading={drawer.isLoading}
|
|
isNavigating={drawer.isNavigating}
|
|
checkMeta={drawer.checkMeta}
|
|
currentIndex={drawer.currentIndex}
|
|
totalResources={drawer.totalResources}
|
|
currentResource={drawer.currentResource}
|
|
currentFinding={drawer.currentFinding}
|
|
otherFindings={drawer.otherFindings}
|
|
onNavigatePrev={drawer.navigatePrev}
|
|
onNavigateNext={drawer.navigateNext}
|
|
onMuteComplete={handleMuteComplete}
|
|
onTriageUpdate={drawer.patchTriageUpdate}
|
|
/>
|
|
);
|
|
}
|
|
|
|
return (
|
|
<>
|
|
{trigger ? (
|
|
<button type="button" className="contents" onClick={handleOpen}>
|
|
{trigger}
|
|
</button>
|
|
) : null}
|
|
<ResourceDetailDrawer
|
|
open={drawer.isOpen}
|
|
onOpenChange={handleOpenChange}
|
|
isLoading={drawer.isLoading}
|
|
isNavigating={drawer.isNavigating}
|
|
checkMeta={drawer.checkMeta}
|
|
currentIndex={drawer.currentIndex}
|
|
totalResources={drawer.totalResources}
|
|
currentResource={drawer.currentResource}
|
|
currentFinding={drawer.currentFinding}
|
|
otherFindings={drawer.otherFindings}
|
|
onNavigatePrev={drawer.navigatePrev}
|
|
onNavigateNext={drawer.navigateNext}
|
|
onMuteComplete={handleMuteComplete}
|
|
onTriageUpdate={drawer.patchTriageUpdate}
|
|
/>
|
|
</>
|
|
);
|
|
}
|