import React, { forwardRef, useCallback } from "react"; import cx from "classnames"; import { getTestId } from "../../../tests/test-ids-utils"; import { ComponentDefaultTestId } from "../../../tests/constants"; import styles from "./TableRowMenu.module.scss"; import MenuButton from "../../MenuButton/MenuButton"; import { Menu } from "../../Menu"; import { createPortal } from "react-dom"; import { useTable } from "../context/TableContext/TableContext"; import { getStyle } from "../../../helpers/typesciptCssModulesHelper"; import { useTableRowMenu } from "../context/TableRowMenuContext/TableRowMenuContext"; import { useTableContainer } from "../context/TableContainerContext/TableContainerContext"; import { TableMenuProps } from "./TableRowMenu.types"; const TableRowMenu = forwardRef( ( { rowId, className, id, "data-testid": dataTestId, children }: TableMenuProps, ref: React.ForwardedRef ) => { const { menuContainerRef } = useTableContainer(); const { size } = useTable(); const { hoveredRowId, setTableMenuHidden, setTableMenuShown, menuButtonPosition, onMouseOverRowMenu, onMouseLeaveRowMenu } = useTableRowMenu(); const onMenuHide = useCallback(() => { setTableMenuHidden(); }, [setTableMenuHidden]); const onMenuShow = useCallback(() => { setTableMenuShown(); }, [setTableMenuShown]); const shouldShowMenu = menuContainerRef.current && hoveredRowId && hoveredRowId === rowId; if (!shouldShowMenu) return null; return ( <> {createPortal(
{children}
, menuContainerRef.current )} ); } ); export default TableRowMenu;