MCPcopy
hub / github.com/adobe/react-spectrum / useMenuItem

Function useMenuItem

packages/react-aria/src/menu/useMenuItem.ts:142–408  ·  view source on GitHub ↗
(
  props: AriaMenuItemProps,
  state: TreeState<T>,
  ref: RefObject<FocusableElement | null>
)

Source from the content-addressed store, hash-verified

140 * @param state - State for the menu, as returned by `useTreeState`.
141 */
142export function useMenuItem<T>(
143 props: AriaMenuItemProps,
144 state: TreeState<T>,
145 ref: RefObject<FocusableElement | null>
146): MenuItemAria {
147 let {
148 id,
149 key,
150 closeOnSelect,
151 shouldCloseOnSelect,
152 isVirtualized,
153 'aria-haspopup': hasPopup,
154 onPressStart,
155 onPressUp: pressUpProp,
156 onPress,
157 onPressChange: pressChangeProp,
158 onPressEnd,
159 onClick: onClickProp,
160 onHoverStart: hoverStartProp,
161 onHoverChange,
162 onHoverEnd,
163 onKeyDown,
164 onKeyUp,
165 onFocus,
166 onFocusChange,
167 onBlur,
168 selectionManager = state.selectionManager
169 } = props;
170
171 let isTrigger = !!hasPopup;
172 let isTriggerExpanded = isTrigger && props['aria-expanded'] === 'true';
173 let isDisabled = props.isDisabled ?? selectionManager.isDisabled(key);
174 let isSelected = props.isSelected ?? selectionManager.isSelected(key);
175 let data = menuData.get(state)!;
176 let item = state.collection.getItem(key);
177 let onClose = props.onClose || data.onClose;
178 let router = useRouter();
179 let performAction = () => {
180 if (isTrigger) {
181 return;
182 }
183
184 if (item?.props?.onAction) {
185 item.props.onAction();
186 } else if (props.onAction) {
187 props.onAction(key);
188 }
189
190 if (data.onAction) {
191 // Must reassign to variable otherwise `this` binding gets messed up. Something to do with WeakMap.
192 let onAction = data.onAction;
193 onAction(key, item?.value);
194 }
195 };
196
197 let role = 'menuitem';
198 if (!isTrigger) {
199 if (selectionManager.selectionMode === 'single') {

Callers 5

MenuItemFunction · 0.90
VirtualizedMenuItemFunction · 0.90
MenuItemFunction · 0.90
Menu.tsxFile · 0.90
MenuItemFunction · 0.90

Calls 15

useRouterFunction · 0.90
useSlotIdFunction · 0.90
getItemCountFunction · 0.90
useSelectableItemFunction · 0.90
usePressFunction · 0.90
useHoverFunction · 0.90
useKeyboardFunction · 0.90
getEventTargetFunction · 0.90
setInteractionModalityFunction · 0.90
useFocusableFunction · 0.90
filterDOMPropsFunction · 0.90
useLinkPropsFunction · 0.90

Tested by 2

MenuItemFunction · 0.72
VirtualizedMenuItemFunction · 0.72