xref: /expo/home/menu/DevMenuModule.ts (revision 83d491c0)
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 DevMenuItem = {
9  label: string;
10  isEnabled: boolean;
11  detail?: string;
12};
13
14export async function doesCurrentTaskEnableDevtoolsAsync(): Promise<boolean> {
15  return await NativeKernel.doesCurrentTaskEnableDevtoolsAsync();
16}
17
18export async function closeAsync(): Promise<void> {
19  return await NativeKernel.closeDevMenuAsync();
20}
21
22export async function getItemsToShowAsync(): Promise<{ [key: string]: DevMenuItem }> {
23  return await NativeKernel.getDevMenuItemsToShowAsync();
24}
25
26export async function isOnboardingFinishedAsync(): Promise<boolean> {
27  return await NativeKernel.getIsOnboardingFinishedAsync();
28}
29
30export async function setOnboardingFinishedAsync(finished: boolean): Promise<void> {
31  await NativeKernel.setIsOnboardingFinishedAsync(finished);
32}
33
34export async function selectItemWithKeyAsync(key: string): Promise<void> {
35  await NativeKernel.selectDevMenuItemWithKeyAsync(key);
36}
37
38export async function reloadAppAsync(): Promise<void> {
39  await NativeKernel.reloadAppAsync();
40}
41
42export async function goToHomeAsync(): Promise<void> {
43  await NativeKernel.goToHomeAsync();
44}
45
46export function listenForCloseRequests(listener: () => void): EventSubscription {
47  return addListenerWithNativeCallback('ExponentKernel.requestToCloseDevMenu', listener);
48}
49