import React from 'react' import { useGridRow, useGridRowMeta } from '../context/grid-context' import { GridCellDropdownMenu } from '../components/cell-dropdown-menu' import { DotsVertical } from '@planview/pv-icons' import { defineMessages, useIntl } from 'react-intl' import type { GridRowId } from '../types' import { GridCellBase } from '../components' import type { GridActionsMenuBridge } from '../context/grid-actions-menu-context' import { useGridActionsMenu } from '../context/grid-actions-menu-context' export const gridActionsMenuMessages = defineMessages({ label: { id: 'pvds.grid.actionsMenu.label', defaultMessage: 'More actions', description: 'An accessibility label and tooltip for the actions menu that appears on a grid row or on right click of a row', }, }) export type GridCellActionsMenuProps = { rowId: GridRowId tabIndex: number } export const GridCellActionsMenu = ({ rowId, tabIndex, }: GridCellActionsMenuProps) => { const { ActionsMenu, ActionsMenuItems, visible } = useGridActionsMenu() const intl = useIntl() const label = intl.formatMessage(gridActionsMenuMessages.label) const [open, setOpen] = React.useState(false) const row = useGridRow(rowId) const rowMeta = useGridRowMeta(rowId) const isButtonVisible = React.useMemo( () => visible({ row, rowMeta }), [row, rowMeta, visible] ) const handleOpen = React.useCallback(() => setOpen(true), []) const handleClose = React.useCallback(() => setOpen(false), []) const trigger = React.useMemo( () => ({ icon: , tooltip: label, }), [label] ) const menuProps = React.useMemo>( () => ({ label, filterMode: 'off', row, rowMeta }), [label, row, rowMeta] ) if (!isButtonVisible) { return ( <> ) } if (ActionsMenuItems) { return ( {open && } ) } if (ActionsMenu) { return ( ) } return null } export const GridCellActionsMenuMemo = React.memo( GridCellActionsMenu ) as typeof GridCellActionsMenu