Add Detail to Selected Row
Summary: - Add detail sidebar to data tab. This reuses `renderSidebar` from SQL tab - `renderTable` function is moved into the component to easier access `renderSidebar` Reviewed By: mweststrate Differential Revision: D21406942 fbshipit-source-id: 5c79489a80931b1133c0a28ca5897a27ba9dd6b8
This commit is contained in:
committed by
Facebook GitHub Bot
parent
cfc569e07c
commit
736d681562
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
styled,
|
styled,
|
||||||
|
produce,
|
||||||
Toolbar,
|
Toolbar,
|
||||||
Select,
|
Select,
|
||||||
FlexColumn,
|
FlexColumn,
|
||||||
@@ -91,6 +92,7 @@ type Page = {
|
|||||||
start: number;
|
start: number;
|
||||||
count: number;
|
count: number;
|
||||||
total: number;
|
total: number;
|
||||||
|
highlightedRows: Array<number>;
|
||||||
};
|
};
|
||||||
|
|
||||||
type Structure = {
|
type Structure = {
|
||||||
@@ -255,40 +257,6 @@ function transformRow(
|
|||||||
return {key: String(index), columns: transformedColumns};
|
return {key: String(index), columns: transformedColumns};
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderTable(page: Page | null, component: DatabasesPlugin) {
|
|
||||||
if (!page) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return (
|
|
||||||
<ManagedTable
|
|
||||||
tableKey={`databases-${page.databaseId}-${page.table}`}
|
|
||||||
floating={false}
|
|
||||||
columnOrder={page.columns.map((name) => ({
|
|
||||||
key: name,
|
|
||||||
visible: true,
|
|
||||||
}))}
|
|
||||||
columns={page.columns.reduce(
|
|
||||||
(acc, val) =>
|
|
||||||
Object.assign({}, acc, {
|
|
||||||
[val]: {value: val, resizable: true, sortable: true},
|
|
||||||
}),
|
|
||||||
{},
|
|
||||||
)}
|
|
||||||
zebra={true}
|
|
||||||
rows={page.rows}
|
|
||||||
horizontallyScrollable={true}
|
|
||||||
multiHighlight={true}
|
|
||||||
onSort={(sortOrder: TableRowSortOrder) => {
|
|
||||||
component.dispatchAction({
|
|
||||||
type: 'SortByChanged',
|
|
||||||
sortOrder,
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
initialSortOrder={component.state.currentSort ?? undefined}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderDatabaseColumns(structure: Structure | null) {
|
function renderDatabaseColumns(structure: Structure | null) {
|
||||||
if (!structure) {
|
if (!structure) {
|
||||||
return null;
|
return null;
|
||||||
@@ -566,6 +534,7 @@ export default class DatabasesPlugin extends FlipperPlugin<
|
|||||||
rows: event.values.map((row: Array<Value>, index: number) =>
|
rows: event.values.map((row: Array<Value>, index: number) =>
|
||||||
transformRow(event.columns, row, index),
|
transformRow(event.columns, row, index),
|
||||||
),
|
),
|
||||||
|
highlightedRows: [],
|
||||||
...event,
|
...event,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@@ -1198,6 +1167,54 @@ export default class DatabasesPlugin extends FlipperPlugin<
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderTable(page: Page | null) {
|
||||||
|
if (!page) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<FlexRow grow={true}>
|
||||||
|
<ManagedTable
|
||||||
|
tableKey={`databases-${page.databaseId}-${page.table}`}
|
||||||
|
floating={false}
|
||||||
|
columnOrder={page.columns.map((name) => ({
|
||||||
|
key: name,
|
||||||
|
visible: true,
|
||||||
|
}))}
|
||||||
|
columns={page.columns.reduce(
|
||||||
|
(acc, val) =>
|
||||||
|
Object.assign({}, acc, {
|
||||||
|
[val]: {value: val, resizable: true, sortable: true},
|
||||||
|
}),
|
||||||
|
{},
|
||||||
|
)}
|
||||||
|
zebra={true}
|
||||||
|
rows={page.rows}
|
||||||
|
horizontallyScrollable={true}
|
||||||
|
multiHighlight={true}
|
||||||
|
onRowHighlighted={(highlightedRows) =>
|
||||||
|
this.setState(
|
||||||
|
produce((draftState: DatabasesPluginState) => {
|
||||||
|
if (draftState.currentPage !== null) {
|
||||||
|
draftState.currentPage.highlightedRows = highlightedRows.map(
|
||||||
|
parseInt,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
onSort={(sortOrder: TableRowSortOrder) => {
|
||||||
|
this.dispatchAction({
|
||||||
|
type: 'SortByChanged',
|
||||||
|
sortOrder,
|
||||||
|
});
|
||||||
|
}}
|
||||||
|
initialSortOrder={this.state.currentSort ?? undefined}
|
||||||
|
/>
|
||||||
|
{this.renderSidebar(page)}
|
||||||
|
</FlexRow>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
renderQuery(query: QueryResult | null) {
|
renderQuery(query: QueryResult | null) {
|
||||||
if (!query || query === null) {
|
if (!query || query === null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -1427,7 +1444,7 @@ export default class DatabasesPlugin extends FlipperPlugin<
|
|||||||
<FlexRow grow={true}>
|
<FlexRow grow={true}>
|
||||||
<FlexColumn grow={true}>
|
<FlexColumn grow={true}>
|
||||||
{this.state.viewMode === 'data'
|
{this.state.viewMode === 'data'
|
||||||
? renderTable(this.state.currentPage, this)
|
? this.renderTable(this.state.currentPage)
|
||||||
: null}
|
: null}
|
||||||
{this.state.viewMode === 'structure'
|
{this.state.viewMode === 'structure'
|
||||||
? this.renderStructure()
|
? this.renderStructure()
|
||||||
|
|||||||
Reference in New Issue
Block a user