MCPcopy
hub / github.com/primer/react / ActionMenuBase

Function ActionMenuBase

packages/react/src/deprecated/ActionMenu.tsx:48–105  ·  view source on GitHub ↗
({
  anchorContent,
  renderAnchor = <T extends ButtonProps>(props: T) => <Button {...props} />,
  anchorRef: externalAnchorRef,
  onAction,
  open,
  setOpen,
  overlayProps,
  items,
  ...listProps
}: ActionMenuProps)

Source from the content-addressed store, hash-verified

46ActionMenuItem.displayName = 'ActionMenu.Item'
47
48const ActionMenuBase = ({
49 anchorContent,
50 renderAnchor = <T extends ButtonProps>(props: T) => <Button {...props} />,
51 anchorRef: externalAnchorRef,
52 onAction,
53 open,
54 setOpen,
55 overlayProps,
56 items,
57 ...listProps
58}: ActionMenuProps): JSX.Element => {
59 const [combinedOpenState, setCombinedOpenState] = useProvidedStateOrCreate(open, setOpen, false)
60 const anchorRef = useProvidedRefOrCreate(externalAnchorRef)
61 const onOpen = useCallback(() => setCombinedOpenState(true), [setCombinedOpenState])
62 const onClose = useCallback(() => setCombinedOpenState(false), [setCombinedOpenState])
63
64 const renderMenuAnchor = useMemo(() => {
65 if (renderAnchor === null) {
66 return null
67 }
68 return <T extends React.HTMLAttributes<HTMLElement>>(props: T) => {
69 return renderAnchor({
70 'aria-label': 'menu',
71 children: anchorContent,
72 ...props,
73 })
74 }
75 }, [anchorContent, renderAnchor])
76
77 const itemsToRender = useMemo(() => {
78 return items.map(item => {
79 return {
80 ...item,
81 role: 'menuitem',
82 onAction: (props, event) => {
83 const actionCallback = item.onAction ?? onAction
84 actionCallback?.(props as ItemProps, event)
85 if (!event.defaultPrevented) {
86 onClose()
87 }
88 },
89 } as ItemProps
90 })
91 }, [items, onAction, onClose])
92
93 return (
94 <AnchoredOverlay
95 renderAnchor={renderMenuAnchor}
96 anchorRef={anchorRef}
97 open={combinedOpenState}
98 onOpen={onOpen}
99 onClose={onClose}
100 overlayProps={overlayProps}
101 >
102 <List {...listProps} role="menu" items={itemsToRender} />
103 </AnchoredOverlay>
104 )
105}

Callers

nothing calls this directly

Calls 3

useProvidedStateOrCreateFunction · 0.90
useProvidedRefOrCreateFunction · 0.90
onCloseFunction · 0.85

Tested by

no test coverage detected