UI Conversion: Use Select from antd

Summary: Used Antd's Select component instead of the old one. In addition to that also enabled search in Select which can be quite handly as there might be many databases / tables.

Reviewed By: mweststrate

Differential Revision: D28068179

fbshipit-source-id: 4ff337a532e035c8b53a23858b5ba6d900e65ebd
This commit is contained in:
Anton Nikolaev
2021-04-29 12:02:54 -07:00
committed by Facebook GitHub Bot
parent 24ac075d76
commit f743bd68a1
2 changed files with 63 additions and 30 deletions

View File

@@ -11,7 +11,6 @@ import {
styled, styled,
produce, produce,
Toolbar, Toolbar,
Select,
ManagedTable, ManagedTable,
Text, Text,
Button, Button,
@@ -47,7 +46,11 @@ import {
usePlugin, usePlugin,
useValue, useValue,
Layout, Layout,
useMemoize,
} from 'flipper-plugin'; } from 'flipper-plugin';
import {Select} from 'antd';
const {Option} = Select;
const PAGE_SIZE = 50; const PAGE_SIZE = 50;
@@ -1040,14 +1043,49 @@ export function Component() {
[instance], [instance],
); );
const tableOptions = const databaseOptions = useMemoize(
(state.selectedDatabase && (databases) =>
state.databases[state.selectedDatabase - 1] && databases.map((x) => (
state.databases[state.selectedDatabase - 1].tables.reduce( <Option key={x.name} value={x.name} label={x.name}>
(options, tableName) => ({...options, [tableName]: tableName}), {x.name}
{}, </Option>
)) || )),
{}; [state.databases],
);
const selectedDatabaseName = useMemoize(
(selectedDatabase: number, databases: DatabaseEntry[]) =>
selectedDatabase && databases[state.selectedDatabase - 1]
? databases[selectedDatabase - 1].name
: undefined,
[state.selectedDatabase, state.databases],
);
const tableOptions = useMemoize(
(selectedDatabase: number, databases: DatabaseEntry[]) =>
selectedDatabase && databases[state.selectedDatabase - 1]
? databases[selectedDatabase - 1].tables.map((tableName) => (
<Option key={tableName} value={tableName} label={tableName}>
{tableName}
</Option>
))
: [],
[state.selectedDatabase, state.databases],
);
const selectedTableName = useMemoize(
(
selectedDatabase: number,
databases: DatabaseEntry[],
selectedDatabaseTable: string | null,
) =>
selectedDatabase && databases[selectedDatabase - 1]
? databases[selectedDatabase - 1].tables.find(
(t) => t === selectedDatabaseTable,
) ?? databases[selectedDatabase - 1].tables[0]
: undefined,
[state.selectedDatabase, state.databases, state.selectedDatabaseTable],
);
return ( return (
<Layout.Container grow> <Layout.Container grow>
@@ -1092,23 +1130,20 @@ export function Component() {
<Toolbar position="top" style={{paddingLeft: 16}}> <Toolbar position="top" style={{paddingLeft: 16}}>
<BoldSpan style={{marginRight: 16}}>Database</BoldSpan> <BoldSpan style={{marginRight: 16}}>Database</BoldSpan>
<Select <Select
options={state.databases showSearch
.map((x) => x.name) value={selectedDatabaseName}
.reduce(
(obj, item) => Object.assign({}, obj, {[item]: item}),
{},
)}
selected={state.databases[state.selectedDatabase - 1]?.name}
onChange={onDatabaseSelected} onChange={onDatabaseSelected}
style={{maxWidth: 300}} style={{width: 200}}>
/> {databaseOptions}
</Select>
<BoldSpan style={{marginLeft: 16, marginRight: 16}}>Table</BoldSpan> <BoldSpan style={{marginLeft: 16, marginRight: 16}}>Table</BoldSpan>
<Select <Select
options={tableOptions} showSearch
selected={state.selectedDatabaseTable} value={selectedTableName}
onChange={onDatabaseTableSelected} onChange={onDatabaseTableSelected}
style={{maxWidth: 300}} style={{width: 200}}>
/> {tableOptions}
</Select>
<div /> <div />
<Button onClick={onRefreshClicked}>Refresh</Button> <Button onClick={onRefreshClicked}>Refresh</Button>
</Toolbar> </Toolbar>
@@ -1118,15 +1153,12 @@ export function Component() {
<Toolbar position="top" style={{paddingLeft: 16}}> <Toolbar position="top" style={{paddingLeft: 16}}>
<BoldSpan style={{marginRight: 16}}>Database</BoldSpan> <BoldSpan style={{marginRight: 16}}>Database</BoldSpan>
<Select <Select
options={state.databases showSearch
.map((x) => x.name) value={selectedDatabaseName}
.reduce(
(obj, item) => Object.assign({}, obj, {[item]: item}),
{},
)}
selected={state.databases[state.selectedDatabase - 1]?.name}
onChange={onDatabaseSelected} onChange={onDatabaseSelected}
/> style={{width: 200}}>
{databaseOptions}
</Select>
</Toolbar> </Toolbar>
{ {
<Textarea <Textarea

View File

@@ -23,6 +23,7 @@
"redux-mock-store": "^1.0.1" "redux-mock-store": "^1.0.1"
}, },
"peerDependencies": { "peerDependencies": {
"antd": "*",
"flipper-plugin": "*" "flipper-plugin": "*"
}, },
"bugs": { "bugs": {