xref: /expo/home/menu/DevMenuModule.ts (revision e270611f)
1import { NativeModules, EventSubscription } from 'react-native';
2
3import MockKernel from '../kernel/MockKernel';
4import addListenerWithNativeCallback from '../utils/addListenerWithNativeCallback';
5
6const NativeKernel = NativeModules.ExponentKernel || MockKernel;
7
8export type DevMenuSettings = {
9  motionGestureEnabled?: boolean;
10  touchGestureEnabled?: boolean;
11};
12
13export type DevMenuItem = {
14  label: string;
15  isEnabled: boolean;
16  detail?: string;
17};
18
19export async function getSettingsAsync(): Promise<DevMenuSettings | null> {
20  if (!NativeKernel.getDevMenuSettingsAsync) {
21    return null;
22  }
23  return await NativeKernel.getDevMenuSettingsAsync();
24}
25
26export async function setSettingAsync(key: keyof DevMenuSettings, value?: boolean): Promise<void> {
27  await NativeKernel.setDevMenuSettingAsync(key, value);
28}
29
30export async function doesCurrentTaskEnableDevtoolsAsync(): Promise<boolean> {
31  return await NativeKernel.doesCurrentTaskEnableDevtoolsAsync();
32}
33
34export async function closeAsync(): Promise<void> {
35  return await NativeKernel.closeDevMenuAsync();
36}
37
38export async function getItemsToShowAsync(): Promise<{ [key: string]: DevMenuItem }> {
39  return await NativeKernel.getDevMenuItemsToShowAsync();
40}
41
42export async function isOnboardingFinishedAsync(): Promise<boolean> {
43  return await NativeKernel.getIsOnboardingFinishedAsync();
44}
45
46export async function setOnboardingFinishedAsync(finished: boolean): Promise<void> {
47  await NativeKernel.setIsOnboardingFinishedAsync(finished);
48}
49
50export async function selectItemWithKeyAsync(key: string): Promise<void> {
51  await NativeKernel.selectDevMenuItemWithKeyAsync(key);
52}
53
54export async function reloadAppAsync(): Promise<void> {
55  await NativeKernel.reloadAppAsync();
56}
57
58export async function goToHomeAsync(): Promise<void> {
59  await NativeKernel.goToHomeAsync();
60}
61
62export function listenForCloseRequests(listener: (event: any) => Promise<any>): EventSubscription {
63  return addListenerWithNativeCallback('ExponentKernel.requestToCloseDevMenu', listener);
64}
65