seti-ramesesv1
Version:
Reusable components and context for Next.js apps
35 lines (32 loc) • 1.53 kB
JavaScript
import { jsxs, jsx } from 'react/jsx-runtime';
import { MoreHorizontal } from 'lucide-react';
import { useState, useRef, useEffect } from 'react';
import '../../styles/DatalistMoreMenu.css.js';
import { IconButton } from './IconButton.js';
const MoreMenu = ({ actions, item }) => {
const [open, setOpen] = useState(false);
const menuRef = useRef(null);
useEffect(() => {
const handleClickOutside = (e) => {
if (menuRef.current && !menuRef.current.contains(e.target)) {
setOpen(false);
}
};
if (open) {
document.addEventListener("mousedown", handleClickOutside);
}
return () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, [open]);
return (jsxs("div", { className: "moremenu-container", ref: menuRef, children: [jsx(IconButton, { icon: jsx(MoreHorizontal, { size: 16 }), onClick: (e) => {
e.stopPropagation();
setOpen((prev) => !prev);
} }), open && (jsx("div", { className: "moremenu-dropdown", children: actions.map((action) => (jsxs("div", { onClick: (e) => {
e.stopPropagation();
action.onClick(item);
setOpen(false);
}, className: "moremenu-item", children: [action.icon, jsx("span", { children: action.name })] }, action.name))) }))] }));
};
export { MoreMenu as default };
//# sourceMappingURL=DatalistMoreMenu.js.map