1import * as Haptics from "expo-haptics";
2import { cloneElement, isValidElement, type ReactElement } from "react";
3import { AndroidAnchoredMenu } from "./AndroidAnchoredMenu.android";
4import type { MenuProps } from "./Menu.types";
5
6export function Menu(props: MenuProps) {
7 if (props.shouldOpenOnLongPress && isValidElement(props.children)) {
8 const child = props.children as ReactElement<{ onLongPress?: () => void }>;
9 return (
10 <AndroidAnchoredMenu
11 actions={props.actions}
12 className={props.className}
13 title={props.title}
14 style={props.style}
15 onPressAction={props.onPressAction}
16 >
17 {(open) =>
18 cloneElement(child, {
19 onLongPress: () => {
20 void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
21 open();
22 },
23 })
24 }
25 </AndroidAnchoredMenu>
26 );
27 }
28 return (
29 <AndroidAnchoredMenu
30 actions={props.actions}
31 className={props.className}
32 title={props.title}
33 style={props.style}
34 onPressAction={props.onPressAction}
35 >
36 {props.children}
37 </AndroidAnchoredMenu>
38 );
39}