diff --git a/desktop/plugins/public/ui-debugger/components/Controls.tsx b/desktop/plugins/public/ui-debugger/components/Controls.tsx new file mode 100644 index 000000000..6a5d5fdd9 --- /dev/null +++ b/desktop/plugins/public/ui-debugger/components/Controls.tsx @@ -0,0 +1,46 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ +import React from 'react'; +import {plugin} from '../index'; +import {Button, Input, Tooltip} from 'antd'; +import {PauseCircleOutlined, PlayCircleOutlined} from '@ant-design/icons'; +import {usePlugin, useValue, Layout} from 'flipper-plugin'; + +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +export const Controls: React.FC = () => { + const instance = usePlugin(plugin); + const searchTerm = useValue(instance.uiState.searchTerm); + const isPaused = useValue(instance.uiState.isPaused); + return ( + + instance.uiState.searchTerm.set(e.target.value)} + /> + + + ); +}; diff --git a/desktop/plugins/public/ui-debugger/components/main.tsx b/desktop/plugins/public/ui-debugger/components/main.tsx index 7d4fb19a9..0d24585b3 100644 --- a/desktop/plugins/public/ui-debugger/components/main.tsx +++ b/desktop/plugins/public/ui-debugger/components/main.tsx @@ -17,8 +17,8 @@ import {Tree} from './Tree'; import {Visualization2D} from './Visualization2D'; import {useKeyboardModifiers} from '../hooks/useKeyboardModifiers'; import {Inspector} from './sidebar/Inspector'; -import {Button, Input, Spin, Tooltip} from 'antd'; -import {PauseCircleOutlined, PlayCircleOutlined} from '@ant-design/icons'; +import {Spin} from 'antd'; +import {Controls} from './Controls'; export function Component() { const instance = usePlugin(plugin); @@ -31,10 +31,8 @@ export function Component() { useHotkeys('ctrl+i', () => setShowPerfStats((show) => !show)); - const searchTerm = useValue(instance.uiState.searchTerm); const {ctrlPressed} = useKeyboardModifiers(); - const isPaused = useValue(instance.uiState.isPaused); function renderSidebar( node: UINode | undefined, metadata: Map, @@ -53,46 +51,31 @@ export function Component() { if (rootId) { return ( - - - - instance.uiState.searchTerm.set(e.target.value)} - /> - - - - - - - - {selectedNode && renderSidebar(nodes.get(selectedNode), metadata)} - + + + + + + + + + + + + {selectedNode && renderSidebar(nodes.get(selectedNode), metadata)} + + ); } diff --git a/desktop/plugins/public/ui-debugger/index.tsx b/desktop/plugins/public/ui-debugger/index.tsx index 9e1f09d87..441a3c900 100644 --- a/desktop/plugins/public/ui-debugger/index.tsx +++ b/desktop/plugins/public/ui-debugger/index.tsx @@ -32,6 +32,15 @@ type LiveClientState = { nodes: Map; }; +type UIState = { + isPaused: Atom; + searchTerm: Atom; + isContextMenuOpen: Atom; + hoveredNodes: Atom; + focusedNode: Atom; + treeState: Atom; +}; + export function plugin(client: PluginClient) { const rootId = createState(undefined); const metadata = createState>(new Map()); @@ -63,7 +72,7 @@ export function plugin(client: PluginClient) { const nodes = createState>(new Map()); const snapshot = createState(null); - const uiState = { + const uiState: UIState = { //used to disabled hover effects which cause rerenders and mess up the existing context menu isContextMenuOpen: createState(false),