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 10export function openProfile(): void { 11 ExpoDevMenu.openProfile(); 12} 13 14export function openSettings(): void { 15 ExpoDevMenu.openSettings(); 16} 17 18let hasRegisteredCallbackListener = false; 19 20function registerCallbackListener() { 21 if (!hasRegisteredCallbackListener) { 22 DeviceEventEmitter.addListener('registeredCallbackFired', (name: string) => { 23 hasRegisteredCallbackListener = true; 24 const handler = handlers.get(name); 25 26 if (handler != null) { 27 handler(); 28 } 29 }); 30 } 31} 32 33registerCallbackListener(); 34 35let handlers = new Map<string, () => void>(); 36 37export async function registerDevMenuItems(items: ExpoDevMenuItem[]) { 38 if (!__DEV__) { 39 // resolve undefined 40 return; 41 } 42 43 handlers = new Map(); 44 const callbackNames: string[] = []; 45 46 items.forEach((item) => { 47 handlers.set(item.name, item.callback); 48 callbackNames.push(item.name); 49 }); 50 51 return await ExpoDevMenu.addDevMenuCallbacks(callbackNames); 52} 53