Files
ColdBreeze-chat-web/src/common/component/ContextMenu.js
T
2022-03-18 16:34:36 +08:00

50 lines
1.1 KiB
JavaScript

import { useRef } from "react";
import styled from "styled-components";
import { useOutsideClick } from "rooks";
import StyledMenu from "./StyledMenu";
const StyledWrapper = styled(StyledMenu)`
z-index: 999;
position: fixed;
left: ${({ x }) => `${x}px`};
top: ${({ y }) => `${y}px`};
`;
export default function ContextMenu({
posX = 0,
posY = 0,
items = [],
hideMenu,
}) {
const wrapperRef = useRef(null);
useOutsideClick(wrapperRef, hideMenu);
return (
<StyledWrapper ref={wrapperRef} x={posX} y={posY}>
{items.map((item) => {
if (!item) return null;
const {
title,
handler = (evt) => {
evt.preventDefault();
hideMenu();
},
underline = false,
danger = false,
} = item;
return (
<li
className={`item ${underline ? "underline" : ""} ${
danger ? "danger" : ""
}`}
key={title}
onClick={(evt) => {
handler(evt);
hideMenu();
}}
>
{title}
</li>
);
})}
</StyledWrapper>
);
}