diff --git a/packages/web/src/datagrid/ColumnManager.js b/packages/web/src/datagrid/ColumnManager.js index 73164a68f..2073f5233 100644 --- a/packages/web/src/datagrid/ColumnManager.js +++ b/packages/web/src/datagrid/ColumnManager.js @@ -14,6 +14,7 @@ const Row = styled.div` margin-left: 5px; margin-right: 5px; cursor: pointer; + white-space: nowrap; &:hover { background-color: lightblue; } @@ -103,7 +104,7 @@ export default function ColumnManager(props) { display.hideAllColumns()}>Hide display.showAllColumns()}>Show - + {display .getColumns(columnFilter) .filter((column) => filterName(columnFilter, column.columnName)) diff --git a/packages/web/src/datagrid/DataGrid.js b/packages/web/src/datagrid/DataGrid.js index cd66c7dcc..a7bf2c5f4 100644 --- a/packages/web/src/datagrid/DataGrid.js +++ b/packages/web/src/datagrid/DataGrid.js @@ -14,6 +14,7 @@ import { WidgetTitle, } from './ManagerStyles'; import ReferenceManager from './ReferenceManager'; +import { HorizontalSplitter } from '../widgets/Splitter'; const MainContainer = styled.div` position: absolute; @@ -32,6 +33,7 @@ const ColumnManagerContainer = styled.div` const LeftContainer = styled.div` background-color: white; display: flex; + flex: 1; `; const DataGridContainer = styled.div` @@ -42,27 +44,47 @@ const DataGridContainer = styled.div` /** @param props {import('./types').DataGridProps} */ export default function DataGrid(props) { const Container1 = props.showReferences ? ManagerOuterContainer1 : ManagerOuterContainerFull; + const [managerSize, setManagerSize] = React.useState(0); return ( - + - + {props.showReferences && ( - + )} - {/* - - */} - + + + // + // + // + // + // + // + // {props.showReferences && ( + // + // + // + // )} + // + // + + // {/* + // + // */} + // + // + // + // ); } diff --git a/packages/web/src/datagrid/ManagerStyles.js b/packages/web/src/datagrid/ManagerStyles.js index 8516b9744..8c16fbf9d 100644 --- a/packages/web/src/datagrid/ManagerStyles.js +++ b/packages/web/src/datagrid/ManagerStyles.js @@ -37,7 +37,8 @@ export const ManagerOuterContainerFull = styled(ManagerOuterContainer)` export const ManagerInnerContainer = styled.div` flex: 1 1; - overflow-y: scroll; + overflow-y: auto; + overflow-x: auto; `; export const Input = styled.input` diff --git a/packages/web/src/datagrid/ReferenceManager.js b/packages/web/src/datagrid/ReferenceManager.js index 0f4a4210b..06b5fdc1f 100644 --- a/packages/web/src/datagrid/ReferenceManager.js +++ b/packages/web/src/datagrid/ReferenceManager.js @@ -23,10 +23,12 @@ const LinkContainer = styled.div` } cursor: pointer; display: flex; + flex-wrap: nowrap; `; const NameContainer = styled.div` margin-left: 5px; + white-space: nowrap; `; function ManagerRow({ tableName, columns, Icon, onClick }) { @@ -55,7 +57,7 @@ export default function ReferenceManager(props) { - + {foreignKeys && foreignKeys.length > 0 && ( <>
References tables ({foreignKeys.length})
diff --git a/packages/web/src/datagrid/types.ts b/packages/web/src/datagrid/types.ts index 55fce0d00..65a591ada 100644 --- a/packages/web/src/datagrid/types.ts +++ b/packages/web/src/datagrid/types.ts @@ -13,5 +13,6 @@ export interface DataGridProps { onReferenceClick?: (def: GridReferenceDefinition) => void; onReferenceSourceChanged?: Function; refReloadToken?: string; - masterLoadedTime?: number + masterLoadedTime?: number; + managerSize?: number; } diff --git a/packages/web/src/widgets/Splitter.js b/packages/web/src/widgets/Splitter.js index d3d666e5a..d95a2bacc 100644 --- a/packages/web/src/widgets/Splitter.js +++ b/packages/web/src/widgets/Splitter.js @@ -4,12 +4,17 @@ import styled from 'styled-components'; import useDimensions from '../utility/useDimensions'; import theme from '../theme'; -const MainContainer = styled.div` +const VerticalMainContainer = styled.div` flex: 1; display: flex; flex-direction: column; `; +const HorizontalMainContainer = styled.div` + flex: 1; + display: flex; +`; + export const VerticalSplitHandle = styled.div` background-color: #ccc; height: ${theme.splitter.thickness}px; @@ -74,27 +79,72 @@ export function useSplitterDrag(axes, onResize) { return handleResizeDown; } -export function VerticalSplitter({ children }) { +function SplitterCore({ + children, + eventField, + dimensionField, + styleField, + Handle, + Main, + initialValue = undefined, + size = undefined, + setSize = undefined, +}) { const childrenArray = _.isArray(children) ? children : [children]; if (childrenArray.length !== 1 && childrenArray.length != 2) { throw new Error('Splitter must have 1 or 2 children'); } const [refNode, dimensions] = useDimensions(); - const [height1, setHeight1] = React.useState(0); + const [mySize, setMySize] = React.useState(0); + const size1 = size === undefined ? mySize : size; + const setSize1 = setSize === undefined ? setMySize : setSize; React.useEffect(() => { - setHeight1(dimensions.height / 2); + if (_.isString(initialValue) && initialValue.endsWith('px')) setSize1(parseInt(initialValue.slice(0, -2))); + else if (_.isString(initialValue) && initialValue.endsWith('%')) + setSize1((dimensions[dimensionField] * parseFloat(initialValue.slice(0, -1))) / 100); + else setSize1(dimensions[dimensionField] / 2); }, [dimensions]); - const handleResizeDown = useSplitterDrag('clientY', (diff) => setHeight1((v) => v + diff)); + const handleResizeDown = useSplitterDrag(eventField, (diff) => setSize1((v) => v + diff)); const isSplitter = !!childrenArray[1]; return ( - - {childrenArray[0]} - {isSplitter && } +
+ {childrenArray[0]} + {isSplitter && } {isSplitter && {childrenArray[1]}} - +
+ ); +} + +export function VerticalSplitter({ children, ...other }) { + return ( + + {children} + + ); +} + +export function HorizontalSplitter({ children, ...other }) { + return ( + + {children} + ); }