"use client"; import * as React from "react"; import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; import { Check, ChevronRight, Circle } from "lucide-react"; import { cn } from "@/lib/utils"; import { ButtonBetter } from "./button"; import { IoIosArrowDown, IoIosArrowUp } from "react-icons/io"; import { Alert } from "./alert"; import { useLocal } from "@/lib/utils/use-local"; const DropdownMenu = DropdownMenuPrimitive.Root; const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; const DropdownMenuGroup = DropdownMenuPrimitive.Group; const DropdownMenuPortal = DropdownMenuPrimitive.Portal; const DropdownMenuSub = DropdownMenuPrimitive.Sub; const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; const DropdownMenuSubTrigger = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, children, ...props }, ref) => ( {children} )); DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName; const DropdownMenuSubContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName; const DropdownMenuContent = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, sideOffset = 4, ...props }, ref) => ( )); DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; const DropdownMenuItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, ...props }, ref) => ( svg]:size-4 [&>svg]:shrink-0", inset && "pl-8", className )} {...props} /> )); DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; const DropdownMenuCheckboxItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, checked, ...props }, ref) => ( {children} )); DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName; const DropdownMenuRadioItem = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, children, ...props }, ref) => ( {children} )); DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; const DropdownMenuLabel = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef & { inset?: boolean; } >(({ className, inset, ...props }, ref) => ( )); DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; const DropdownMenuSeparator = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( )); DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; const DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes) => { return ( ); }; const DropdownHamburgerBetter: React.FC<{ children?: any; list: any[]; className?: string; classNameList?: string; alert?: boolean; message?: string; }> = ({ children, list, className, classNameList }) => { const local = useLocal({ onClick: () => {}, msg: null as any, }); const [open, setOpen] = React.useState(false as boolean); const [openAlert, setOpenAlert] = React.useState(false as boolean); const items = list?.filter((e) => typeof e?.show === "boolean" ? e?.show : true ); return ( <> { e.preventDefault(); e.stopPropagation(); if (typeof local.onClick === "function") { await local.onClick(); } setOpenAlert(false); }} mode="manual" open={openAlert} onOpenChange={(e) => { setOpenAlert(e); }} > { setOpen(e); }} > { setOpen(!open); }} > Actions {open ? : } Actions {items.map((e, idx) => { if (typeof e?.children === "function") { return ( { event.stopPropagation(); event.preventDefault(); }} className={cn( "cursor-pointer hover:bg-gray-100 rounded-md", e?.className ? e?.className : "" )} > {e.children()} ); } return ( { if (!e?.progration) { event.stopPropagation(); event.preventDefault(); } const data = { alert: e?.alert ? true : false, onClick: e?.onClick, msg: e?.msg, }; if (typeof e?.onClick === "function") { local.onClick = e?.onClick; if (!data?.alert) e?.onClick({ close: () => { setOpen(false); }, }); } if (data?.alert) { setOpen(false); setOpenAlert(e); local.msg = data?.msg; local.onClick = async () => { if (typeof data?.onClick === "function") { await data?.onClick(); } }; local.render(); } }} className={cn( "cursor-pointer hover:bg-gray-100 rounded-md", e?.className ? e?.className : "" )} > {typeof e?.label === "function" ? ( e?.label() ) : e?.label ? ( e?.label ) : ( <> )} {" "} {typeof e?.icon === "function" ? ( e?.icon() ) : e?.icon ? ( e?.icon ) : ( <> )} ); })} ); }; DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; export { DropdownHamburgerBetter, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, };