Skip to main content

Recipes

The Action Menu can accept an array of menu item data as a prop ([{ id, onClick, children }]) to render a simple, customizable list of actions.

Live Editor
function ActionMenuItemsAsPropExample() {
  const handleOnClick = (e, label) => {
    console.log(`${label} clicked`);
  };

  const itemsAsProp = [
    {
      id: "compose",
      onClick: (e) => handleOnClick(e, "Compose"),
      children: "Compose",
    },
    {
      id: "view-messages",
      onClick: (e) => handleOnClick(e, "View Messages"),
      children: "View Messages",
    },
    {
      id: "analyze-post",
      onClick: (e) => handleOnClick(e, "Analyze post"),
      children: "Analyze post",
    },
  ];

  return (
    <Box display="flex" justifyContent="center" alignItems="center" height="100%">
      <ActionMenu
        menuToggleElement={
          <MenuToggleButton>
            Open Menu
          </MenuToggleButton>
        }
        menuItems={itemsAsProp}
      />
    </Box>
  );
}

Composable Action Menu

For more customization and control, the Action Menu can also be composed using menu primitives. This approach allows you to define custom layouts, add icons, or integrate with other components while keeping the menu behavior consistent.

Live Editor
function ActionMenuComposableExample() {
  return (
    <Box display="flex" justifyContent="center" alignItems="center" height="100%">
      <ActionMenu
        menuToggleElement={
          <MenuToggleButton>
            Open Menu
          </MenuToggleButton>
        }
      >
        <MenuContent>
          <MenuGroup title="Publishing" id="post-management">
            <MenuItem id="1">Schedule a New Post</MenuItem>
            <MenuItem id="2">View Drafts</MenuItem>
          </MenuGroup>
          <MenuGroup title="Listening" id="analytics-insights">
            <MenuItem id="3">View Analytics</MenuItem>
          </MenuGroup>
        </MenuContent>
      </ActionMenu>
    </Box>
  );
}

Popout placement

You can control the placement of the Action Menu popout using the popoutProps prop.

Live Editor
function ActionMenuPopoutPlacementExample() {
  return (
    <Box display="flex" justifyContent="center" alignItems="center" height="100%">
      <ActionMenu
        popoutProps={{
          placement: "top"
        }}
        menuToggleElement={
          <MenuToggleButton>
            Open Menu
          </MenuToggleButton>
        }
      >
        <MenuContent>
          <MenuGroup title="Publishing" id="post-management">
            <MenuItem id="1">Schedule a New Post</MenuItem>
            <MenuItem id="2">View Drafts</MenuItem>
          </MenuGroup>
          <MenuGroup title="Listening" id="analytics-insights">
            <MenuItem id="3">View Analytics</MenuItem>
          </MenuGroup>
        </MenuContent>
      </ActionMenu>
    </Box>
  );
}