一些检查失败了
automerge / automerge (push) Has been cancelled
react-native-android-build-apk / AssembleRelease (push) Has been cancelled
Build macOS M1 / Main (push) Has been cancelled
Joplin Continuous Integration / Main (macos-15-intel) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / Main (ubuntu-22.04-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-11-vs2026-arm) (push) Has been cancelled
Joplin Continuous Integration / Main (windows-2025) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04) (push) Has been cancelled
Joplin Continuous Integration / ServerDockerImage (ubuntu-22.04-arm) (push) Has been cancelled
Joplin UI tests / Main (ubuntu-22.04) (push) Has been cancelled
Joplin UI tests / Main (windows-2025) (push) Has been cancelled
Joplin UI tests / Mobile (push) Has been cancelled
Close stale issues / ProcessStaleIssues (push) Has been cancelled
45 行
1.1 KiB
TypeScript
45 行
1.1 KiB
TypeScript
import * as React from 'react';
|
|
import { useCallback, useState } from 'react';
|
|
import { themeStyle } from '../global-style';
|
|
import { TouchableRipple } from 'react-native-paper';
|
|
import BottomDrawerMenu, { MenuOption } from '../BottomDrawerMenu';
|
|
import { MenuAlignment } from '../BottomDrawer';
|
|
|
|
interface Props {
|
|
themeId: number;
|
|
options: MenuOption[];
|
|
children: React.ReactNode;
|
|
}
|
|
|
|
const MenuComponent: React.FC<Props> = props => {
|
|
const theme = themeStyle(props.themeId);
|
|
|
|
const [open, setOpen] = useState(false);
|
|
|
|
const onMenuClosed = useCallback(() => {
|
|
setOpen(false);
|
|
}, []);
|
|
|
|
return <>
|
|
<TouchableRipple
|
|
borderless={true}
|
|
onPress={() => setOpen(true)}
|
|
rippleColor={theme.backgroundColorTransparent2}
|
|
role='button'
|
|
testID='screen-header-menu-trigger'
|
|
>
|
|
{props.children}
|
|
</TouchableRipple>
|
|
<BottomDrawerMenu
|
|
visible={open}
|
|
onDismiss={onMenuClosed}
|
|
// To match the side of the screen with the action button:
|
|
alignment={MenuAlignment.Right}
|
|
themeId={props.themeId}
|
|
options={props.options}
|
|
/>
|
|
</>;
|
|
};
|
|
|
|
export default MenuComponent;
|