Add padding and refactor our controls component

Summary: also made the controls component full width to push down the visualiser

Reviewed By: lblasa

Differential Revision: D41548665

fbshipit-source-id: 2bca527e70c92bc0ded120e51a0880f76f7cca87
This commit is contained in:
Luke De Feo
2022-11-28 05:09:20 -08:00
committed by Facebook GitHub Bot
parent a93d571dc0
commit b214806325
3 changed files with 83 additions and 45 deletions

View File

@@ -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 (
<Layout.Horizontal pad="small" gap="small">
<Input
value={searchTerm}
onChange={(e) => instance.uiState.searchTerm.set(e.target.value)}
/>
<Button
type="default"
shape="circle"
onClick={() => instance.setPlayPause(!instance.uiState.isPaused.get())}
icon={
<Tooltip
title={isPaused ? 'Resume live updates' : 'Pause incoming updates'}>
{isPaused ? <PlayCircleOutlined /> : <PauseCircleOutlined />}
</Tooltip>
}></Button>
</Layout.Horizontal>
);
};

View File

@@ -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<MetadataId, Metadata>,
@@ -53,46 +51,31 @@ export function Component() {
if (rootId) {
return (
<Layout.Horizontal grow>
<Layout.Container grow pad="medium" gap="small">
<Layout.Horizontal padh="small" gap="small">
<Input
value={searchTerm}
onChange={(e) => instance.uiState.searchTerm.set(e.target.value)}
/>
<Button
type="default"
shape="circle"
onClick={() =>
instance.setPlayPause(!instance.uiState.isPaused.get())
}
icon={
<Tooltip
title={
isPaused ? 'Resume live updates' : 'Pause incoming updates'
}>
{isPaused ? <PlayCircleOutlined /> : <PauseCircleOutlined />}
</Tooltip>
}></Button>
</Layout.Horizontal>
<Layout.ScrollContainer>
<Tree
selectedNode={selectedNode}
onSelectNode={setSelectedNode}
nodes={nodes}
rootId={rootId}
/>
</Layout.ScrollContainer>
</Layout.Container>
<Visualization2D
rootId={rootId}
nodes={nodes}
selectedNode={selectedNode}
onSelectNode={setSelectedNode}
modifierPressed={ctrlPressed}
/>
{selectedNode && renderSidebar(nodes.get(selectedNode), metadata)}
</Layout.Horizontal>
<Layout.Container grow padh="small" padv="medium">
<Controls />
<Layout.Horizontal grow pad="small" gap="small">
<Layout.Container grow gap="small">
<Layout.ScrollContainer>
<Tree
selectedNode={selectedNode}
onSelectNode={setSelectedNode}
nodes={nodes}
rootId={rootId}
/>
</Layout.ScrollContainer>
</Layout.Container>
<Visualization2D
rootId={rootId}
nodes={nodes}
selectedNode={selectedNode}
onSelectNode={setSelectedNode}
modifierPressed={ctrlPressed}
/>
{selectedNode && renderSidebar(nodes.get(selectedNode), metadata)}
</Layout.Horizontal>
</Layout.Container>
);
}

View File

@@ -32,6 +32,15 @@ type LiveClientState = {
nodes: Map<Id, UINode>;
};
type UIState = {
isPaused: Atom<boolean>;
searchTerm: Atom<string>;
isContextMenuOpen: Atom<boolean>;
hoveredNodes: Atom<Id[]>;
focusedNode: Atom<Id | undefined>;
treeState: Atom<TreeState>;
};
export function plugin(client: PluginClient<Events>) {
const rootId = createState<Id | undefined>(undefined);
const metadata = createState<Map<MetadataId, Metadata>>(new Map());
@@ -63,7 +72,7 @@ export function plugin(client: PluginClient<Events>) {
const nodes = createState<Map<Id, UINode>>(new Map());
const snapshot = createState<SnapshotInfo | null>(null);
const uiState = {
const uiState: UIState = {
//used to disabled hover effects which cause rerenders and mess up the existing context menu
isContextMenuOpen: createState<boolean>(false),