UI Conversion: use DetailsSidebar from "flipper-plugin"
Summary: Use DetailsSidebar from "flipper-plugin" Reviewed By: mweststrate Differential Revision: D28110484 fbshipit-source-id: 0b9e3c07fc642242f2846f024895e740078779f7
This commit is contained in:
committed by
Facebook GitHub Bot
parent
368dd4a5ab
commit
45397fd2f4
@@ -8,15 +8,16 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React, {useMemo, useState, useEffect, useReducer} from 'react';
|
import React, {useMemo, useState, useEffect, useReducer} from 'react';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Input,
|
|
||||||
DetailSidebar,
|
|
||||||
Panel,
|
Panel,
|
||||||
ManagedDataInspector,
|
DetailSidebar,
|
||||||
|
DataInspector as ManagedDataInspector,
|
||||||
|
theme,
|
||||||
styled,
|
styled,
|
||||||
produce,
|
produce,
|
||||||
colors,
|
Layout,
|
||||||
} from 'flipper';
|
} from 'flipper-plugin';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Value,
|
Value,
|
||||||
@@ -24,7 +25,7 @@ import {
|
|||||||
renderValue,
|
renderValue,
|
||||||
} from './TypeBasedValueRenderer';
|
} from './TypeBasedValueRenderer';
|
||||||
|
|
||||||
import {Button} from 'antd';
|
import {Button, Input} from 'antd';
|
||||||
|
|
||||||
type TableRow = {
|
type TableRow = {
|
||||||
col: string;
|
col: string;
|
||||||
@@ -48,7 +49,7 @@ const EditTriggerSection = styled.div({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const TableDetailRow = styled.div({
|
const TableDetailRow = styled.div({
|
||||||
borderBottom: `1px solid ${colors.blackAlpha10}`,
|
borderBottom: `1px solid ${theme.dividerColor}`,
|
||||||
padding: 8,
|
padding: 8,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -58,7 +59,7 @@ const TableDetailRowTitle = styled.div({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const TableDetailRowType = styled.span({
|
const TableDetailRowType = styled.span({
|
||||||
color: colors.light20,
|
color: theme.white,
|
||||||
marginLeft: 8,
|
marginLeft: 8,
|
||||||
fontWeight: 'normal',
|
fontWeight: 'normal',
|
||||||
});
|
});
|
||||||
@@ -185,29 +186,29 @@ export default React.memo(function DatabaseDetailSidebar(
|
|||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<DetailSidebar>
|
<DetailSidebar>
|
||||||
<Panel
|
<Panel title="Row details" collapsible={true}>
|
||||||
heading="Row details"
|
|
||||||
floating={false}
|
|
||||||
collapsable={true}
|
|
||||||
padded={false}>
|
|
||||||
{onSave ? (
|
{onSave ? (
|
||||||
<EditTriggerSection>
|
<Layout.Right>
|
||||||
|
<div />
|
||||||
{editing ? (
|
{editing ? (
|
||||||
<>
|
<Layout.Horizontal pad gap>
|
||||||
|
<Button onClick={() => setEditing(false)}>Close</Button>
|
||||||
<Button
|
<Button
|
||||||
disabled={!rowState.updated}
|
disabled={!rowState.updated}
|
||||||
|
type="primary"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onSave(rowState.changes);
|
onSave(rowState.changes);
|
||||||
setEditing(false);
|
setEditing(false);
|
||||||
}}>
|
}}>
|
||||||
Save
|
Save
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => setEditing(false)}>Close</Button>
|
</Layout.Horizontal>
|
||||||
</>
|
|
||||||
) : (
|
) : (
|
||||||
|
<Layout.Horizontal pad>
|
||||||
<Button onClick={() => setEditing(true)}>Edit</Button>
|
<Button onClick={() => setEditing(true)}>Edit</Button>
|
||||||
|
</Layout.Horizontal>
|
||||||
)}
|
)}
|
||||||
</EditTriggerSection>
|
</Layout.Right>
|
||||||
) : null}
|
) : null}
|
||||||
<div>
|
<div>
|
||||||
{rows.map((row) => (
|
{rows.map((row) => (
|
||||||
|
|||||||
@@ -8,16 +8,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import {
|
import {
|
||||||
styled,
|
|
||||||
produce,
|
|
||||||
ManagedTable,
|
ManagedTable,
|
||||||
getStringFromErrorLike,
|
|
||||||
TableBodyColumn,
|
TableBodyColumn,
|
||||||
TableRows,
|
TableRows,
|
||||||
TableBodyRow,
|
TableBodyRow,
|
||||||
TableRowSortOrder,
|
TableRowSortOrder,
|
||||||
TableHighlightedRows,
|
TableHighlightedRows,
|
||||||
} from 'flipper';
|
} from 'flipper';
|
||||||
|
import {getStringFromErrorLike} from './utils';
|
||||||
import {Value, renderValue} from './TypeBasedValueRenderer';
|
import {Value, renderValue} from './TypeBasedValueRenderer';
|
||||||
import React, {KeyboardEvent, ChangeEvent, useState, useCallback} from 'react';
|
import React, {KeyboardEvent, ChangeEvent, useState, useCallback} from 'react';
|
||||||
import {Methods, Events} from './ClientProtocol';
|
import {Methods, Events} from './ClientProtocol';
|
||||||
@@ -40,6 +38,8 @@ import {
|
|||||||
useMemoize,
|
useMemoize,
|
||||||
Toolbar,
|
Toolbar,
|
||||||
theme,
|
theme,
|
||||||
|
styled,
|
||||||
|
produce,
|
||||||
} from 'flipper-plugin';
|
} from 'flipper-plugin';
|
||||||
import {
|
import {
|
||||||
Select,
|
Select,
|
||||||
|
|||||||
26
desktop/plugins/public/databases/utils.tsx
Normal file
26
desktop/plugins/public/databases/utils.tsx
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) Facebook, Inc. and its 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 function getStringFromErrorLike(e: any): string {
|
||||||
|
if (Array.isArray(e)) {
|
||||||
|
return e.map(getStringFromErrorLike).join(' ');
|
||||||
|
} else if (typeof e == 'string') {
|
||||||
|
return e;
|
||||||
|
} else if (e instanceof Error) {
|
||||||
|
return e.message || e.toString();
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
return JSON.stringify(e);
|
||||||
|
} catch (e) {
|
||||||
|
// Stringify might fail on arbitrary structures
|
||||||
|
// Last resort: toString it.
|
||||||
|
return '' + e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user