xref: /expo/home/menu/DevMenuModule.ts (revision 8b9cba7e)
124a0cefbSTomasz Sapetaimport { NativeModules, EventSubscription } from 'react-native';
224a0cefbSTomasz Sapeta
324a0cefbSTomasz Sapetaimport MockKernel from '../kernel/MockKernel';
424a0cefbSTomasz Sapetaimport addListenerWithNativeCallback from '../utils/addListenerWithNativeCallback';
524a0cefbSTomasz Sapeta
624a0cefbSTomasz Sapetaconst NativeKernel = NativeModules.ExponentKernel || MockKernel;
724a0cefbSTomasz Sapeta
8f67462bcSTomasz Sapetaexport type DevMenuSettings = {
9*8b9cba7eSEvan Bacon  motionGestureEnabled?: boolean;
10*8b9cba7eSEvan Bacon  touchGestureEnabled?: boolean;
11f67462bcSTomasz Sapeta};
12f67462bcSTomasz Sapeta
1324a0cefbSTomasz Sapetaexport type DevMenuItem = {
1424a0cefbSTomasz Sapeta  label: string;
1524a0cefbSTomasz Sapeta  isEnabled: boolean;
1624a0cefbSTomasz Sapeta  detail?: string;
1724a0cefbSTomasz Sapeta};
1824a0cefbSTomasz Sapeta
19f67462bcSTomasz Sapetaexport async function getSettingsAsync(): Promise<DevMenuSettings | null> {
20f67462bcSTomasz Sapeta  if (!NativeKernel.getDevMenuSettingsAsync) {
21f67462bcSTomasz Sapeta    return null;
22f67462bcSTomasz Sapeta  }
23f67462bcSTomasz Sapeta  return await NativeKernel.getDevMenuSettingsAsync();
24f67462bcSTomasz Sapeta}
25f67462bcSTomasz Sapeta
26*8b9cba7eSEvan Baconexport async function setSettingAsync(key: keyof DevMenuSettings, value?: boolean): Promise<void> {
27f67462bcSTomasz Sapeta  await NativeKernel.setDevMenuSettingAsync(key, value);
28f67462bcSTomasz Sapeta}
29f67462bcSTomasz Sapeta
3024a0cefbSTomasz Sapetaexport async function doesCurrentTaskEnableDevtoolsAsync(): Promise<boolean> {
3124a0cefbSTomasz Sapeta  return await NativeKernel.doesCurrentTaskEnableDevtoolsAsync();
3224a0cefbSTomasz Sapeta}
3324a0cefbSTomasz Sapeta
3424a0cefbSTomasz Sapetaexport async function closeAsync(): Promise<void> {
3524a0cefbSTomasz Sapeta  return await NativeKernel.closeDevMenuAsync();
3624a0cefbSTomasz Sapeta}
3724a0cefbSTomasz Sapeta
3824a0cefbSTomasz Sapetaexport async function getItemsToShowAsync(): Promise<{ [key: string]: DevMenuItem }> {
3924a0cefbSTomasz Sapeta  return await NativeKernel.getDevMenuItemsToShowAsync();
4024a0cefbSTomasz Sapeta}
4124a0cefbSTomasz Sapeta
4224a0cefbSTomasz Sapetaexport async function isOnboardingFinishedAsync(): Promise<boolean> {
4324a0cefbSTomasz Sapeta  return await NativeKernel.getIsOnboardingFinishedAsync();
4424a0cefbSTomasz Sapeta}
4524a0cefbSTomasz Sapeta
4624a0cefbSTomasz Sapetaexport async function setOnboardingFinishedAsync(finished: boolean): Promise<void> {
4724a0cefbSTomasz Sapeta  await NativeKernel.setIsOnboardingFinishedAsync(finished);
4824a0cefbSTomasz Sapeta}
4924a0cefbSTomasz Sapeta
5024a0cefbSTomasz Sapetaexport async function selectItemWithKeyAsync(key: string): Promise<void> {
5124a0cefbSTomasz Sapeta  await NativeKernel.selectDevMenuItemWithKeyAsync(key);
5224a0cefbSTomasz Sapeta}
5324a0cefbSTomasz Sapeta
5424a0cefbSTomasz Sapetaexport async function reloadAppAsync(): Promise<void> {
5524a0cefbSTomasz Sapeta  await NativeKernel.reloadAppAsync();
5624a0cefbSTomasz Sapeta}
5724a0cefbSTomasz Sapeta
5824a0cefbSTomasz Sapetaexport async function goToHomeAsync(): Promise<void> {
5924a0cefbSTomasz Sapeta  await NativeKernel.goToHomeAsync();
6024a0cefbSTomasz Sapeta}
6124a0cefbSTomasz Sapeta
62*8b9cba7eSEvan Baconexport function listenForCloseRequests(listener: (event: any) => Promise<any>): EventSubscription {
6324a0cefbSTomasz Sapeta  return addListenerWithNativeCallback('ExponentKernel.requestToCloseDevMenu', listener);
6424a0cefbSTomasz Sapeta}
65