feat: Open card actions on right-click

This commit is contained in:
Maksim Eltyshev
2025-07-17 17:43:01 +02:00
parent e659ed4a2d
commit fdac299fc7
2 changed files with 33 additions and 7 deletions
+16 -4
View File
@@ -4,7 +4,7 @@
*/
import { ResizeObserver } from '@juggle/resize-observer';
import React, { useCallback, useMemo, useRef, useState } from 'react';
import React, { useCallback, useImperativeHandle, useMemo, useRef, useState } from 'react';
import PropTypes from 'prop-types';
import { Button, Popup as SemanticUIPopup } from 'semantic-ui-react';
@@ -12,13 +12,13 @@ import styles from './Popup.module.css';
export default (Step, { position, onOpen, onClose } = {}) => {
return useMemo(() => {
const Popup = React.memo(({ children, ...stepProps }) => {
const Popup = React.forwardRef(({ children, ...stepProps }, ref) => {
const [isOpened, setIsOpened] = useState(false);
const wrapperRef = useRef(null);
const resizeObserverRef = useRef(null);
const handleOpen = useCallback(() => {
const open = useCallback(() => {
setIsOpened(true);
if (onOpen) {
@@ -26,6 +26,10 @@ export default (Step, { position, onOpen, onClose } = {}) => {
}
}, []);
const handleOpen = useCallback(() => {
open();
}, [open]);
const handleClose = useCallback(() => {
setIsOpened(false);
}, []);
@@ -73,6 +77,14 @@ export default (Step, { position, onOpen, onClose } = {}) => {
resizeObserverRef.current.observe(element);
}, []);
useImperativeHandle(
ref,
() => ({
open,
}),
[open],
);
const tigger = React.cloneElement(children, {
onClick: handleTriggerClick,
});
@@ -116,6 +128,6 @@ export default (Step, { position, onOpen, onClose } = {}) => {
children: PropTypes.node.isRequired,
};
return Popup;
return React.memo(Popup);
}, [position, onOpen, onClose]);
};