Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UX-283 & UX-285 Add new alignY prop to Table.Row & Fix element overflow on Table #561

Merged
merged 2 commits into from
Jul 23, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion packages/matchbox/src/components/Table/Table.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ function Table(props) {
const marginProps = pick(rest, margin.propNames);

return (
<Wrapper onScroll={freezeFirstColumn ? handleScroll : null} {...marginProps}>
<Wrapper
freezeFirstColumn={freezeFirstColumn}
onScroll={freezeFirstColumn ? handleScroll : null}
{...marginProps}
>
<StyledTable freezeFirstColumn={freezeFirstColumn} isScrolled={isScrolled} {...rest}>
<TablePaddingContext.Provider value={{ px, py, ...paddingProps }}>
{title && (
Expand Down
13 changes: 10 additions & 3 deletions packages/matchbox/src/components/Table/TableElements.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import styled from 'styled-components';
import { cell, row, headerCell } from './styles';
import { cell, row, headerCell, verticalAlignment } from './styles';
import { TablePaddingContext } from './context';
import { padding } from 'styled-system';
import { createPropTypes } from '@styled-system/prop-types';
Expand All @@ -19,6 +19,9 @@ const StyledHeaderCell = styled('th')`
const StyledRow = styled('tr')`
${row}
${padding}
td, th {
${verticalAlignment}
}
`;

const Cell = ({ value, children, className, ...rest }) => {
Expand Down Expand Up @@ -54,19 +57,23 @@ HeaderCell.propTypes = {
};
HeaderCell.displayName = 'Table.HeaderCell';

const Row = ({ rowData, children, className, ...rest }) => {
const Row = ({ alignY, rowData, children, className, ...rest }) => {
return (
<StyledRow className={className} {...rest}>
<StyledRow alignY={alignY} className={className} {...rest}>
{rowData ? rowData.map((value, i) => <Cell value={value} key={`Cell-${i}`} />) : children}
</StyledRow>
);
};

Row.propTypes = {
alignY: PropTypes.oneOf(['top', 'bottom', 'center']),
rowData: PropTypes.array,
className: PropTypes.string,
children: PropTypes.node,
};
Row.defaultProps = {
alignY: 'center',
};
Row.displayName = 'Table.Row';

export { Cell, HeaderCell, Row };
18 changes: 14 additions & 4 deletions packages/matchbox/src/components/Table/styles.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { tokens } from '@sparkpost/design-tokens';
import { system } from 'styled-system';

export const table = () => `
position: relative;
Expand All @@ -12,7 +13,6 @@ export const headerCell = () => `
font-size: ${tokens.fontSize_200};
line-height: ${tokens.lineHeight_300};
font-weight: ${tokens.fontWeight_semibold};
vertical-align: top;
`;

export const sticky = ({ isScrolled, freezeFirstColumn }) => {
Expand All @@ -35,7 +35,6 @@ export const sticky = ({ isScrolled, freezeFirstColumn }) => {

export const cell = () => `
word-break: break-all;
vertical-align: top;
`;

export const row = () => `
Expand All @@ -51,6 +50,17 @@ export const row = () => `
}
`;

export const wrapper = () => `
overflow: auto;
export const verticalAlignment = system({
alignY: {
property: 'verticalAlign',
defaultScale: {
center: 'middle',
top: 'top',
bottom: 'bottom',
},
},
});

export const wrapper = ({ freezeFirstColumn }) => `
${freezeFirstColumn ? 'overflow: auto;' : ''}
`;
47 changes: 46 additions & 1 deletion stories/layout/Table.stories.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React from 'react';
import { withInfo } from '@storybook/addon-info';
import { Table, Panel, Box } from '@sparkpost/matchbox';
import { Table, Panel, Box, Popover, Button } from '@sparkpost/matchbox';

export default {
title: 'Layout|Table',
Expand All @@ -10,10 +10,16 @@ const Node = ({ children = 'A react component' }) => <Box minWidth="900">{childr
const NodeLong = ({
children = 'A really longgggggggggggggggggggggggggggggggggggggggg react component',
}) => <Box minWidth="900">{children}</Box>;
const PopoverNode = () => (
<Popover sectioned trigger={<Button>Click</Button>}>
Content
</Popover>
);
const data = [
['Foo', 'Bar', 'Baz', 'Foo'],
[<Node />, <Node />, <NodeLong />, <Node />],
[1, 2, 3, 4],
[<PopoverNode />, <PopoverNode />, <PopoverNode />, <PopoverNode />],
];

export const TableComponents = withInfo({ propTablesExclude: [Panel] })(() => (
Expand Down Expand Up @@ -86,3 +92,42 @@ export const SystemProps = withInfo()(() => (
</Table>
</Panel>
));

export const WithOverflowingElement = () => (
<Panel>
<Table p="200" data={data} />
</Panel>
);

export const VerticalAligntment = withInfo()(() => (
<Panel>
<Table>
<thead>
<Table.Row header alignY="bottom">
<Table.HeaderCell>Lorem ipsum</Table.HeaderCell>
<Table.HeaderCell>
Lorem ipsum A really longgggggggggggggggggggggggggggggg
</Table.HeaderCell>
<Table.HeaderCell>Lorem ipsum</Table.HeaderCell>
</Table.Row>
</thead>
<tbody>
<Table.Row alignY="top">
<Table.Cell>Top Aligned</Table.Cell>
<Table.Cell>Top Aligned</Table.Cell>
<Table.Cell>Top Aligned</Table.Cell>
</Table.Row>
<Table.Row alignY="center">
<Table.Cell>Center Aligned</Table.Cell>
<Table.Cell>Center Aligned</Table.Cell>
<Table.Cell>Center Aligned</Table.Cell>
</Table.Row>
<Table.Row alignY="bottom">
<Table.Cell>Bottom Aligned</Table.Cell>
<Table.Cell>Bottom Aligned</Table.Cell>
<Table.Cell>Bottom Aligned</Table.Cell>
</Table.Row>
</tbody>
</Table>
</Panel>
));