From 4e10bb1b431489a167a01d84889c18050bf0b3b7 Mon Sep 17 00:00:00 2001 From: Anton Kastritskiy Date: Mon, 27 Nov 2023 15:33:57 -0800 Subject: [PATCH] Back out "remove shortcuts" Summary: Original commit changeset: fbb59b416f92 Original Phabricator Diff: D51159922 Reviewed By: lblasa Differential Revision: D51586735 fbshipit-source-id: 3317b590ec72e0040a67be41e74ddb5a72722598 --- desktop/flipper-common/src/settings.tsx | 7 +++ .../src/utils/settings.tsx | 7 +++ .../src/chrome/SettingsSheet.tsx | 56 ++++++++++++++++++ .../flipper-ui-core/src/dispatcher/index.tsx | 2 + .../src/dispatcher/reactNative.tsx | 58 +++++++++++++++++++ desktop/scripts/jest-setup-after.tsx | 3 + 6 files changed, 133 insertions(+) create mode 100644 desktop/flipper-ui-core/src/dispatcher/reactNative.tsx diff --git a/desktop/flipper-common/src/settings.tsx b/desktop/flipper-common/src/settings.tsx index 14d2ae646..9568d7680 100644 --- a/desktop/flipper-common/src/settings.tsx +++ b/desktop/flipper-common/src/settings.tsx @@ -29,6 +29,13 @@ export type Settings = { */ enablePrefetching: Tristate; idbPath: string; + reactNative: { + shortcuts: { + enabled: boolean; + reload: string; + openDevMenu: string; + }; + }; darkMode: 'dark' | 'light' | 'system'; showWelcomeAtStartup: boolean; suppressPluginErrors: boolean; diff --git a/desktop/flipper-server-core/src/utils/settings.tsx b/desktop/flipper-server-core/src/utils/settings.tsx index 47a808dd6..bbc75869c 100644 --- a/desktop/flipper-server-core/src/utils/settings.tsx +++ b/desktop/flipper-server-core/src/utils/settings.tsx @@ -57,6 +57,13 @@ async function getDefaultSettings(): Promise { enablePhysicalIOS: os.platform() === 'darwin', enablePrefetching: Tristate.Unset, idbPath: '/usr/local/bin/idb', + reactNative: { + shortcuts: { + enabled: false, + reload: 'Alt+Shift+R', + openDevMenu: 'Alt+Shift+D', + }, + }, darkMode: 'light', showWelcomeAtStartup: true, suppressPluginErrors: false, diff --git a/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx b/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx index 373bf7fe5..96cf0a942 100644 --- a/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx +++ b/desktop/flipper-ui-core/src/chrome/SettingsSheet.tsx @@ -23,6 +23,7 @@ import { ConfigText, URLConfigField, } from './settings/configFields'; +import KeyboardShortcutInput from './settings/KeyboardShortcutInput'; import {isEqual, isMatch, isEmpty} from 'lodash'; import LauncherSettingsPanel from '../fb-stubs/LauncherSettingsPanel'; import { @@ -123,6 +124,7 @@ class SettingsSheet extends Component { enablePhysicalIOS, enablePrefetching, idbPath, + reactNative, darkMode, suppressPluginErrors, persistDeviceData, @@ -292,6 +294,60 @@ class SettingsSheet extends Component { Use System Setting + { + this.setState((prevState) => ({ + updatedSettings: { + ...prevState.updatedSettings, + reactNative: { + ...prevState.updatedSettings.reactNative, + shortcuts: { + ...prevState.updatedSettings.reactNative.shortcuts, + enabled, + }, + }, + }, + })); + }}> + { + this.setState((prevState) => ({ + updatedSettings: { + ...prevState.updatedSettings, + reactNative: { + ...prevState.updatedSettings.reactNative, + shortcuts: { + ...prevState.updatedSettings.reactNative.shortcuts, + reload, + }, + }, + }, + })); + }} + /> + { + this.setState((prevState) => ({ + updatedSettings: { + ...prevState.updatedSettings, + reactNative: { + ...prevState.updatedSettings.reactNative, + shortcuts: { + ...prevState.updatedSettings.reactNative.shortcuts, + openDevMenu, + }, + }, + }, + })); + }} + /> + { + const settings = store.getState().settingsState.reactNative; + + if (!settings?.shortcuts.enabled) { + return; + } + + const shortcuts: ShortcutEventCommand[] = [ + settings.shortcuts.reload && { + shortcut: settings.shortcuts.reload, + command: 'reload', + }, + settings.shortcuts.openDevMenu && { + shortcut: settings.shortcuts.openDevMenu, + command: 'devMenu', + }, + ]; + + shortcuts.forEach( + (shortcut: ShortcutEventCommand) => + shortcut && + shortcut.shortcut && + registerShortcut(shortcut.shortcut, () => { + const devices = store + .getState() + .connections.devices.filter( + (device) => device.os === 'Metro' && !device.isArchived, + ); + + devices.forEach((device) => + device.flipperServer.exec( + 'metro-command', + device.serial, + shortcut.command, + ), + ); + }), + ); +}; diff --git a/desktop/scripts/jest-setup-after.tsx b/desktop/scripts/jest-setup-after.tsx index 20e2eafc9..57a3066e7 100644 --- a/desktop/scripts/jest-setup-after.tsx +++ b/desktop/scripts/jest-setup-after.tsx @@ -184,6 +184,9 @@ function createStubRenderHost(): RenderHost { enablePhysicalIOS: false, enablePrefetching: Tristate.False, idbPath: `/dev/null`, + reactNative: { + shortcuts: {enabled: false, openDevMenu: '', reload: ''}, + }, showWelcomeAtStartup: false, suppressPluginErrors: false, persistDeviceData: false,