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