mirror of
https://github.com/BlueWallet/BlueWallet.git
synced 2024-11-19 18:00:17 +01:00
72 lines
2.5 KiB
TypeScript
72 lines
2.5 KiB
TypeScript
import React, { useCallback, useContext, useEffect } from 'react';
|
|
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
import * as NavigationService from '../NavigationService';
|
|
import { CommonActions } from '@react-navigation/native';
|
|
import { BlueStorageContext } from '../blue_modules/storage-context';
|
|
|
|
/*
|
|
Component for iPadOS and macOS menu items with keyboard shortcuts.
|
|
EventEmitter on the native side should receive a payload and rebuild menus.
|
|
*/
|
|
|
|
const eventEmitter = Platform.OS === 'ios' || Platform.OS === 'macos' ? new NativeEventEmitter(NativeModules.EventEmitter) : undefined;
|
|
const MenuElements = () => {
|
|
const { walletsInitialized, reloadTransactionsMenuActionFunction } = useContext(BlueStorageContext);
|
|
|
|
// BlueWallet -> Settings
|
|
const openSettings = useCallback(() => {
|
|
dispatchNavigate('Settings');
|
|
}, []);
|
|
|
|
// File -> Add Wallet
|
|
const addWalletMenuAction = useCallback(() => {
|
|
dispatchNavigate('AddWalletRoot');
|
|
}, []);
|
|
|
|
// File -> Add Wallet
|
|
const importWalletMenuAction = useCallback(() => {
|
|
dispatchNavigate('AddWalletRoot', 'ImportWallet');
|
|
}, []);
|
|
|
|
const dispatchNavigate = (routeName: string, screen?: string) => {
|
|
const action = screen
|
|
? CommonActions.navigate({
|
|
name: routeName,
|
|
params: { screen },
|
|
})
|
|
: CommonActions.navigate({
|
|
name: routeName,
|
|
});
|
|
|
|
NavigationService.dispatch(action);
|
|
};
|
|
|
|
const reloadTransactionsMenuElementsFunction = useCallback(() => {
|
|
if (reloadTransactionsMenuActionFunction && typeof reloadTransactionsMenuActionFunction === 'function') {
|
|
reloadTransactionsMenuActionFunction();
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
console.log('MenuElements: useEffect');
|
|
if (walletsInitialized) {
|
|
eventEmitter?.addListener('openSettings', openSettings);
|
|
eventEmitter?.addListener('addWalletMenuAction', addWalletMenuAction);
|
|
eventEmitter?.addListener('importWalletMenuAction', importWalletMenuAction);
|
|
eventEmitter?.addListener('reloadTransactionsMenuAction', reloadTransactionsMenuElementsFunction);
|
|
}
|
|
return () => {
|
|
eventEmitter?.removeAllListeners('openSettings');
|
|
eventEmitter?.removeAllListeners('addWalletMenuAction');
|
|
eventEmitter?.removeAllListeners('importWalletMenuAction');
|
|
eventEmitter?.removeAllListeners('reloadTransactionsMenuAction');
|
|
};
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [walletsInitialized]);
|
|
|
|
return <></>;
|
|
};
|
|
|
|
export default MenuElements;
|