From d84fd5c80122b03dc9e1988ac11388c954cdbaa0 Mon Sep 17 00:00:00 2001 From: Yassien <11986226+YassienW@users.noreply.github.com> Date: Sat, 23 Feb 2019 22:40:05 +0200 Subject: [PATCH 1/4] CSS Animation for row expansion --- packages/react-bootstrap-table2/package.json | 1 + .../src/contexts/row-expand-context.js | 25 ++++++++++++----- .../src/row-expand/expand-row.js | 27 +++++++++++++++---- .../src/row-expand/row-consumer.js | 6 +++-- .../style/react-bootstrap-table2.scss | 25 +++++++++++++---- 5 files changed, 65 insertions(+), 19 deletions(-) diff --git a/packages/react-bootstrap-table2/package.json b/packages/react-bootstrap-table2/package.json index 5bec584..b698a93 100644 --- a/packages/react-bootstrap-table2/package.json +++ b/packages/react-bootstrap-table2/package.json @@ -37,6 +37,7 @@ ], "dependencies": { "classnames": "2.2.5", + "react-transition-group": "^2.5.3", "underscore": "1.9.1" }, "peerDependencies": { diff --git a/packages/react-bootstrap-table2/src/contexts/row-expand-context.js b/packages/react-bootstrap-table2/src/contexts/row-expand-context.js index 9c038ab..ba21d12 100644 --- a/packages/react-bootstrap-table2/src/contexts/row-expand-context.js +++ b/packages/react-bootstrap-table2/src/contexts/row-expand-context.js @@ -10,9 +10,10 @@ class RowExpandProvider extends React.Component { children: PropTypes.node.isRequired, data: PropTypes.array.isRequired, keyField: PropTypes.string.isRequired - } + }; - state = { expanded: this.props.expandRow.expanded || [] }; + state = { expanded: this.props.expandRow.expanded || [], + isClosing: this.props.expandRow.isClosing || [] }; componentWillReceiveProps(nextProps) { if (nextProps.expandRow) { @@ -22,6 +23,10 @@ class RowExpandProvider extends React.Component { } } + onClosed = (closedRow) => { + this.setState({ isClosing: this.state.isClosing.filter(value => value !== closedRow) }); + }; + handleRowExpand = (rowKey, expanded, rowIndex, e) => { const { data, keyField, expandRow: { onExpand, onlyOneExpanding, nonExpandable } } = this.props; if (nonExpandable && nonExpandable.includes(rowKey)) { @@ -29,11 +34,15 @@ class RowExpandProvider extends React.Component { } let currExpanded = [...this.state.expanded]; + let isClosing = [...this.state.isClosing]; if (expanded) { - if (onlyOneExpanding) currExpanded = [rowKey]; - else currExpanded.push(rowKey); + if (onlyOneExpanding) { + isClosing = isClosing.concat(currExpanded); + currExpanded = [rowKey]; + } else currExpanded.push(rowKey); } else { + isClosing.push(rowKey); currExpanded = currExpanded.filter(value => value !== rowKey); } @@ -41,8 +50,8 @@ class RowExpandProvider extends React.Component { const row = dataOperator.getRowByRowId(data, keyField, rowKey); onExpand(row, expanded, rowIndex, e); } - this.setState(() => ({ expanded: currExpanded })); - } + this.setState(() => ({ expanded: currExpanded, isClosing })); + }; handleAllRowExpand = (e, expandAll) => { const { @@ -68,7 +77,7 @@ class RowExpandProvider extends React.Component { } this.setState(() => ({ expanded: currExpanded })); - } + }; render() { const { data, keyField } = this.props; @@ -78,6 +87,8 @@ class RowExpandProvider extends React.Component { ...this.props.expandRow, nonExpandable: this.props.expandRow.nonExpandable, expanded: this.state.expanded, + isClosing: this.state.isClosing, + onClosed: this.onClosed, isAnyExpands: dataOperator.isAnyExpands(data, keyField, this.state.expanded), onRowExpand: this.handleRowExpand, onAllRowExpand: this.handleAllRowExpand diff --git a/packages/react-bootstrap-table2/src/row-expand/expand-row.js b/packages/react-bootstrap-table2/src/row-expand/expand-row.js index 0a89628..9505e85 100644 --- a/packages/react-bootstrap-table2/src/row-expand/expand-row.js +++ b/packages/react-bootstrap-table2/src/row-expand/expand-row.js @@ -1,18 +1,35 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { CSSTransition } from 'react-transition-group'; -const ExpandRow = ({ children, ...rest }) => ( - - { children } +const ExpandRow = ({ children, expanded, onClosed, ...rest }) => ( + + + +
+ { children } +
+
+ ); ExpandRow.propTypes = { - children: PropTypes.node + children: PropTypes.node, + expanded: PropTypes.bool, + onClosed: PropTypes.func }; ExpandRow.defaultProps = { - children: null + children: null, + expanded: false, + onClosed: null }; export default ExpandRow; diff --git a/packages/react-bootstrap-table2/src/row-expand/row-consumer.js b/packages/react-bootstrap-table2/src/row-expand/row-consumer.js index 77f5e36..92c21e7 100644 --- a/packages/react-bootstrap-table2/src/row-expand/row-consumer.js +++ b/packages/react-bootstrap-table2/src/row-expand/row-consumer.js @@ -8,8 +8,8 @@ export default (Component, visibleColumnSize) => { const key = props.value; const expanded = expandRow.expanded.includes(key); + const isClosing = expandRow.isClosing.includes(key); const expandable = !expandRow.nonExpandable || !expandRow.nonExpandable.includes(key); - return [ { expandable={ expandable } expandRow={ { ...expandRow } } />, - expanded ? expandRow.onClosed(key) } > { expandRow.renderer(props.row) } : null diff --git a/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss b/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss index 5974e45..6ec20e1 100644 --- a/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss +++ b/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss @@ -68,10 +68,6 @@ text-align: center; } - tr.expanding-row { - padding: 5px; - } - td.react-bootstrap-table-editing-cell { .animated { animation-fill-mode: both; @@ -161,4 +157,23 @@ animation-name: bounceOut; } } -} \ No newline at end of file + .reset-expansion-style{ + padding: 0 8px 0 8px; + } + .row-expand-slide-appear{ + max-height: 0; + overflow: hidden; + } + .row-expand-slide-appear-active{ + max-height: 1000px; + transition: max-height 3s linear; + } + .row-expand-slide-exit{ + max-height: 1000px; + } + .row-expand-slide-exit-active{ + max-height: 0; + overflow: hidden; + transition: max-height 400ms cubic-bezier(0, 0.95, 0, 0.95) + } +} From 33c026c7e2fe6f24431fff0ece653c7fe94b3c42 Mon Sep 17 00:00:00 2001 From: Yassien <11986226+YassienW@users.noreply.github.com> Date: Mon, 25 Feb 2019 13:01:42 +0200 Subject: [PATCH 2/4] Added original padding without breaking the animation --- packages/react-bootstrap-table2/src/row-expand/expand-row.js | 4 +++- .../react-bootstrap-table2/style/react-bootstrap-table2.scss | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/react-bootstrap-table2/src/row-expand/expand-row.js b/packages/react-bootstrap-table2/src/row-expand/expand-row.js index 9505e85..3699ada 100644 --- a/packages/react-bootstrap-table2/src/row-expand/expand-row.js +++ b/packages/react-bootstrap-table2/src/row-expand/expand-row.js @@ -13,7 +13,9 @@ const ExpandRow = ({ children, expanded, onClosed, ...rest }) => ( onExited={ onClosed } >
- { children } +
+ { children } +
diff --git a/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss b/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss index 6ec20e1..e2a0895 100644 --- a/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss +++ b/packages/react-bootstrap-table2/style/react-bootstrap-table2.scss @@ -158,7 +158,10 @@ } } .reset-expansion-style{ - padding: 0 8px 0 8px; + padding: 0; + } + .row-expansion-style{ + padding: 8px; } .row-expand-slide-appear{ max-height: 0; From 8f304a849f7840cfedcddf9e5ee7143788adc74a Mon Sep 17 00:00:00 2001 From: Yassien <11986226+YassienW@users.noreply.github.com> Date: Sat, 16 Mar 2019 19:03:22 +0200 Subject: [PATCH 3/4] Animation now works with custom expand management --- .../src/contexts/row-expand-context.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-bootstrap-table2/src/contexts/row-expand-context.js b/packages/react-bootstrap-table2/src/contexts/row-expand-context.js index ba21d12..601c338 100644 --- a/packages/react-bootstrap-table2/src/contexts/row-expand-context.js +++ b/packages/react-bootstrap-table2/src/contexts/row-expand-context.js @@ -17,8 +17,16 @@ class RowExpandProvider extends React.Component { componentWillReceiveProps(nextProps) { if (nextProps.expandRow) { + const isClosing = this.state.expanded.reduce((acc, cur) => { + if (!nextProps.expandRow.expanded.includes(cur)) { + acc.push(cur); + } + return acc; + }, []); + this.setState(() => ({ expanded: nextProps.expandRow.expanded, isClosing })); + } else { this.setState(() => ({ - expanded: nextProps.expandRow.expanded || this.state.expanded + expanded: this.state.expanded })); } } From 9f47fa009c2b1266e152d08b4a48c201233e58fa Mon Sep 17 00:00:00 2001 From: AllenFang Date: Sun, 31 Mar 2019 15:33:43 +0800 Subject: [PATCH 4/4] lock version --- packages/react-bootstrap-table2/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-bootstrap-table2/package.json b/packages/react-bootstrap-table2/package.json index 72a3170..10c281a 100644 --- a/packages/react-bootstrap-table2/package.json +++ b/packages/react-bootstrap-table2/package.json @@ -37,7 +37,7 @@ ], "dependencies": { "classnames": "2.2.5", - "react-transition-group": "^2.5.3", + "react-transition-group": "2.5.3", "underscore": "1.9.1" }, "peerDependencies": {