1import { DeviceEventEmitter } from 'react-native'; 2 3import ExpoDevMenu from './ExpoDevMenu'; 4import { ExpoDevMenuItem } from './ExpoDevMenu.types'; 5 6export function openMenu(): void { 7 ExpoDevMenu.openMenu(); 8} 9 10let hasRegisteredCallbackListener = false; 11 12function registerCallbackListener() { 13 if (!hasRegisteredCallbackListener) { 14 DeviceEventEmitter.addListener('registeredCallbackFired', (name: string) => { 15 hasRegisteredCallbackListener = true; 16 const handler = handlers.get(name); 17 18 if (handler != null) { 19 handler(); 20 } 21 }); 22 } 23} 24 25registerCallbackListener(); 26 27let handlers = new Map<string, () => void>(); 28 29export async function registerDevMenuItems(items: ExpoDevMenuItem[]) { 30 if (!__DEV__) { 31 // resolve undefined 32 return; 33 } 34 35 handlers = new Map(); 36 const callbackNames: string[] = []; 37 38 items.forEach((item) => { 39 handlers.set(item.name, item.callback); 40 callbackNames.push(item.name); 41 }); 42 43 return await ExpoDevMenu.addDevMenuCallbacks(callbackNames); 44} 45