import React from "react"; import { MoreHorizontal } from "lucide-react"; import { Button } from "@/components/ui"; import { useSmartPosition } from "@/hooks/useSmartPosition"; export interface ResourceAction { label: string; icon: React.ElementType; onClick: () => void; variant?: "default" | "destructive"; disabled?: boolean; hidden?: boolean; } interface ResourceActionMenuProps { actions: ResourceAction[]; triggerLabel?: string; } export function ResourceActionMenu({ actions, triggerLabel = "Actions" }: ResourceActionMenuProps) { const [open, setOpen] = React.useState(false); const ref = React.useRef(null); const contentRef = React.useRef(null); const flipUpward = useSmartPosition(open, contentRef); const visible = actions.filter((a) => !a.hidden); React.useEffect(() => { if (!open) return; const handler = (e: MouseEvent) => { if (ref.current && !ref.current.contains(e.target as Node)) { setOpen(false); } }; document.addEventListener("mousedown", handler); return () => document.removeEventListener("mousedown", handler); }, [open]); if (visible.length === 0) return null; return (
{open && (
{visible.map((action, idx) => { const Icon = action.icon; return ( ); })}
)}
); }