diff --git a/packages/patternfly-4/react-core/src/components/TextInput/TextInput.js b/packages/patternfly-4/react-core/src/components/TextInput/TextInput.js
index 2f67095347b..42742a60abd 100644
--- a/packages/patternfly-4/react-core/src/components/TextInput/TextInput.js
+++ b/packages/patternfly-4/react-core/src/components/TextInput/TextInput.js
@@ -52,7 +52,7 @@ const defaultProps = {
isDisabled: false,
isReadOnly: false,
type: 'text',
- value: null,
+ value: undefined,
onChange: () => undefined,
'aria-label': null
};
diff --git a/packages/patternfly-4/react-core/src/components/TextInput/__snapshots__/TextInput.test.js.snap b/packages/patternfly-4/react-core/src/components/TextInput/__snapshots__/TextInput.test.js.snap
index 5def5e5e6b1..2618c8e557d 100644
--- a/packages/patternfly-4/react-core/src/components/TextInput/__snapshots__/TextInput.test.js.snap
+++ b/packages/patternfly-4/react-core/src/components/TextInput/__snapshots__/TextInput.test.js.snap
@@ -23,7 +23,6 @@ exports[`disabled text input 1`] = `
readOnly={false}
required={false}
type="text"
- value={null}
/>
`;
diff --git a/packages/patternfly-4/react-table/internal/util.js b/packages/patternfly-4/react-table/internal/util.js
new file mode 100644
index 00000000000..748a4e4db86
--- /dev/null
+++ b/packages/patternfly-4/react-table/internal/util.js
@@ -0,0 +1,8 @@
+// TODO: better sharing util components between modules
+export function debounce(func, wait) {
+ let timeout;
+ return (...args) => {
+ clearTimeout(timeout);
+ timeout = setTimeout(() => func.apply(this, args), wait);
+ };
+}
diff --git a/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.js b/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.js
new file mode 100644
index 00000000000..8d0ea9c869d
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import { CloseIcon } from '@patternfly/react-icons';
+import { Button } from '@patternfly/react-core';
+
+const CancelButton = props => (
+
+);
+
+CancelButton.propTypes = {
+ ...Button.propTypes
+};
+
+CancelButton.defaultProps = {
+ ...Button.defaultProps,
+ variant: 'plain'
+};
+
+export default CancelButton;
diff --git a/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.test.js b/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.test.js
new file mode 100644
index 00000000000..93336044229
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/CancelButton/CancelButton.test.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { shallow } from 'enzyme';
+import { CancelButton } from './index';
+
+test('it renders properly', () => {
+ const component = shallow();
+
+ expect(component).toMatchSnapshot();
+});
diff --git a/packages/patternfly-4/react-table/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap b/packages/patternfly-4/react-table/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap
new file mode 100644
index 00000000000..95184fc1bc9
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap
@@ -0,0 +1,22 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`it renders properly 1`] = `
+
+`;
diff --git a/packages/patternfly-4/react-table/src/components/CancelButton/index.js b/packages/patternfly-4/react-table/src/components/CancelButton/index.js
new file mode 100644
index 00000000000..c4dc29a593a
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/CancelButton/index.js
@@ -0,0 +1 @@
+export { default as CancelButton } from './CancelButton';
diff --git a/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.js b/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.js
new file mode 100644
index 00000000000..25be8e0353f
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.js
@@ -0,0 +1,20 @@
+import React from 'react';
+import { CheckIcon } from '@patternfly/react-icons';
+import { Button } from '@patternfly/react-core';
+
+const ConfirmButton = props => (
+
+);
+
+ConfirmButton.propTypes = {
+ ...Button.propTypes
+};
+
+ConfirmButton.defaultProps = {
+ ...Button.defaultProps,
+ variant: 'primary'
+};
+
+export default ConfirmButton;
diff --git a/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.test.js b/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.test.js
new file mode 100644
index 00000000000..2cd4b86d46e
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/ConfirmButton/ConfirmButton.test.js
@@ -0,0 +1,9 @@
+import React from 'react';
+import { shallow } from 'enzyme';
+import { ConfirmButton } from './index';
+
+test('it renders properly', () => {
+ const component = shallow();
+
+ expect(component).toMatchSnapshot();
+});
diff --git a/packages/patternfly-4/react-table/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap b/packages/patternfly-4/react-table/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap
new file mode 100644
index 00000000000..c8d70e4c57a
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap
@@ -0,0 +1,22 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`it renders properly 1`] = `
+
+`;
diff --git a/packages/patternfly-4/react-table/src/components/ConfirmButton/index.js b/packages/patternfly-4/react-table/src/components/ConfirmButton/index.js
new file mode 100644
index 00000000000..4ccccc70087
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/ConfirmButton/index.js
@@ -0,0 +1 @@
+export { default as ConfirmButton } from './ConfirmButton';
diff --git a/packages/patternfly-4/react-table/src/components/Table/Body.js b/packages/patternfly-4/react-table/src/components/Table/Body.js
index cbadd6b59e7..e9cbc18dcda 100644
--- a/packages/patternfly-4/react-table/src/components/Table/Body.js
+++ b/packages/patternfly-4/react-table/src/components/Table/Body.js
@@ -8,7 +8,7 @@ const propTypes = {
className: PropTypes.string,
/** Specify key which should be used for labeling each row. */
rowKey: PropTypes.string,
- /** Function that is fired when user clicks on row. */
+ /** Function that is fired when user clicks on a row if not editing. */
onRowClick: PropTypes.func
};
@@ -18,37 +18,70 @@ const defaultProps = {
onRowClick: () => undefined
};
-class ContextBody extends React.Component {
- onRow = (row, props) => {
- const { onRowClick } = this.props;
- return ({
- isExpanded: row.isExpanded,
- isOpen: row.isOpen,
- onClick: (event) => onRowClick(event, row, props)
- });
+const onMouseDown = (event, row, rowProps, { onRowClick, editConfig }) => {
+ const cell = event.target.closest('[data-key]');
+ const cellNumber = parseInt(cell && cell.getAttribute('data-key'));
+ const hasCellNumber = !Number.isNaN(cellNumber);
+
+ let onEditCellChanged;
+ let targetsAlreadyEditedCell = false;
+
+ if (hasCellNumber && editConfig && typeof editConfig.onEditCellChanged === 'function') {
+ targetsAlreadyEditedCell = cellNumber === row.activeEditCell;
+ onEditCellChanged = () => {
+ editConfig.onEditCellChanged(event, row, {
+ rowIndex: rowProps.rowIndex,
+ columnIndex: cellNumber
+ });
+ };
}
+ // give priority to fire onChange/onBlur callbacks
+
+ setTimeout(() => {
+ if (!row.isEditing) {
+ onRowClick(event, row, rowProps);
+ if (onEditCellChanged) {
+ // edit cell after rerender
+ setTimeout(onEditCellChanged, 0);
+ }
+ } else if (onEditCellChanged && !targetsAlreadyEditedCell) {
+ onEditCellChanged();
+ }
+ }, 0);
+};
+
+class ContextBody extends React.Component {
+ onRow = (row, rowProps) => ({
+ row,
+ rowProps,
+ onMouseDown: event => onMouseDown(event, row, rowProps, this.props)
+ });
+
parentsExpanded(parentId) {
const { rows } = this.props;
return rows[parentId].hasOwnProperty('parent') ? this.parentsExpanded(rows[parentId].parent) : rows[parentId].isOpen;
}
render() {
- const { className, headerData, rows, rowKey, children, onRowClick, ...props } = this.props;
+ const { className, headerData, rows, rowKey, children, editConfig, onRowClick, ...props } = this.props;
let shiftKey = 0;
shiftKey += headerData[0] && headerData[0].extraParams.onSelect ? 1 : 0;
shiftKey += headerData[0] && headerData[0].extraParams.onCollapse ? 1 : 0;
+ const isTableEditing = rows.some(oneRow => oneRow.isEditing);
+
const mappedRows = headerData.length !== 0 && rows.map((oneRow, oneRowKey) => {
return {
...oneRow,
...oneRow && (oneRow.cells || oneRow).reduce(
(acc, curr, key) => {
+ const isCurrObject = curr === Object(curr);
return ({
...acc,
...{
[headerData[shiftKey + key].property]: {
- title: curr.title || curr,
- props: curr.props
+ title: isCurrObject ? curr.title : curr,
+ props: isCurrObject ? curr.props : undefined
}
}
})
@@ -57,6 +90,10 @@ class ContextBody extends React.Component {
...oneRow.parent !== undefined ? {
isExpanded: this.parentsExpanded(oneRow.parent) && rows[oneRow.parent].isOpen
} : {},
+ isFirst: oneRowKey === 0,
+ isLast: oneRowKey === rows.length -1,
+ editConfig,
+ isTableEditing,
}
});
return (
@@ -69,7 +106,7 @@ class ContextBody extends React.Component {
const TableBody = props => (
- {({ headerData, rows }) => }
+ {({ headerData, editConfig, rows }) => }
)
diff --git a/packages/patternfly-4/react-table/src/components/Table/RowWrapper.js b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.js
index 0fdaaa11c16..a869a33b7a0 100644
--- a/packages/patternfly-4/react-table/src/components/Table/RowWrapper.js
+++ b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.js
@@ -1,24 +1,203 @@
import React from 'react';
+import { createPortal } from 'react-dom';
import PropTypes from 'prop-types';
import { tableExpandableRow, modifiers } from '@patternfly/patternfly-next/components/Table/table.css';
import { css } from '@patternfly/react-styles';
+import { debounce } from '../../../internal/util';
+import TableConfirmButtonsRow from './TableConfirmButtonsRow';
+import { TableEditConfirmation } from './inlineEditConstants';
-const RowWrapper = ({ isOpen, isExpanded, ...props }) => (
-
-);
+const tableConfirmationMapper = {
+ [TableEditConfirmation.TABLE_TOP]: {
+ hasConfirmationButtons: ({ isTableEditing, isFirst }) => isTableEditing && isFirst,
+ isTableConfirmation: () => true,
+ areButtonsOnTop: () => true,
+ getEditStyles: ({ isFirst }) =>
+ isFirst
+ ? {
+ borderTop: '2px solid #7dc3e8'
+ }
+ : null
+ },
+ [TableEditConfirmation.TABLE_BOTTOM]: {
+ hasConfirmationButtons: ({ isTableEditing, isLast }) => isTableEditing && isLast,
+ isTableConfirmation: () => true,
+ areButtonsOnTop: () => false,
+ getEditStyles: () => null
+ },
+ [TableEditConfirmation.ROW]: {
+ hasConfirmationButtons: ({ isEditing }) => isEditing,
+ isTableConfirmation: () => false,
+ areButtonsOnTop: ({ isLast }) => isLast,
+ getEditStyles: ({ isEditing }) =>
+ isEditing
+ ? {
+ background: '#def3ff',
+ borderTopColor: '#7dc3e8',
+ borderBottomColor: '#7dc3e8'
+ }
+ : null
+ },
+ [TableEditConfirmation.NONE]: {
+ hasConfirmationButtons: () => false,
+ isTableConfirmation: () => false,
+ areButtonsOnTop: () => false,
+ getEditStyles: () => null
+ }
+};
+
+const getTableConfirmation = ({ editConfig }) =>
+ tableConfirmationMapper[editConfig && editConfig.editConfirmationType] ||
+ tableConfirmationMapper[TableEditConfirmation.NONE];
+
+class RowWrapper extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = {};
+
+ if (getTableConfirmation(this.props.row).hasConfirmationButtons(this.props.row)) {
+ this.handleScroll = debounce(this.handleScroll, 100);
+ this.handleResize = debounce(this.handleResize, 100);
+ }
+ }
+
+ componentDidMount() {
+ this._unmounted = false;
+ if (getTableConfirmation(this.props.row).hasConfirmationButtons(this.props.row)) {
+ this.fetchClientDimensions();
+ window.addEventListener('scroll', this.handleScroll);
+ window.addEventListener('resize', this.handleResize);
+ }
+ }
+
+ componentWillUnmount() {
+ this._unmounted = true;
+ if (getTableConfirmation(this.props.row).hasConfirmationButtons(this.props.row)) {
+ window.removeEventListener('scroll', this.handleScroll);
+ window.removeEventListener('resize', this.handleResize);
+ }
+ }
+
+ saveRowDimensions = element => {
+ if (element) {
+ this.element = element;
+ }
+
+ if (this.element && !this._unmounted) {
+ this.setState({
+ rowDimensions: this.element.getBoundingClientRect()
+ });
+ }
+ };
+
+ handleScroll = event => {
+ this.saveRowDimensions();
+ };
+
+ handleResize = event => {
+ this.fetchClientDimensions();
+ this.saveRowDimensions();
+ };
+
+ fetchClientDimensions() {
+ if (!this._unmounted) {
+ this.setState({
+ window: {
+ width: document.documentElement.clientWidth,
+ height: document.documentElement.clientHeight
+ }
+ });
+ }
+ }
+
+ getConfirmationButtons() {
+ const { row, rowProps, ...props } = this.props;
+ const { isOpen, isExpanded, isLast, isFirst, isEditing, isTableEditing, editConfig } = row;
+
+ if (!editConfig) {
+ return null;
+ }
+ const { onEditConfirmed, onEditCanceled } = editConfig;
+ const tableConfirmation = getTableConfirmation(row);
+
+ let confirmButtons;
+ if (
+ tableConfirmation.hasConfirmationButtons({ isFirst, isLast, isEditing, isTableEditing }) &&
+ this.element &&
+ this.state.rowDimensions
+ ) {
+ const options = tableConfirmation.isTableConfirmation() ? {} : rowProps;
+ const actionObject = tableConfirmation.isTableConfirmation() ? null : row;
+ confirmButtons = createPortal(
+ onEditConfirmed(event, actionObject, options)}
+ onCancel={event => onEditCanceled(event, actionObject, options)}
+ buttonsOnTop={tableConfirmation.areButtonsOnTop({ isLast })}
+ environment={{ window: this.state.window, row: this.element.getBoundingClientRect() }}
+ />,
+ this.element.closest('table').parentNode
+ );
+ }
+ return confirmButtons;
+ }
+
+ render() {
+ const {
+ row: { isOpen, isExpanded, isLast, isFirst, isEditing, isTableEditing, editConfig },
+ rowProps,
+ ...props
+ } = this.props;
+
+ // TODO move style to pf-next
+ const rowStyle = {
+ ...getTableConfirmation({ editConfig }).getEditStyles({
+ isEditing,
+ isTableEditing,
+ isFirst,
+ isLast
+ })
+ };
+
+ return (
+
+
+ {this.getConfirmationButtons()}
+
+ );
+ }
+}
RowWrapper.propTypes = {
- isOpen: PropTypes.bool,
- isExpanded: PropTypes.bool
+ row: PropTypes.shape({
+ isOpen: PropTypes.bool,
+ isExpanded: PropTypes.bool,
+ isEditing: PropTypes.bool,
+ isTableEditing: PropTypes.bool,
+ isLast: PropTypes.bool,
+ isFirst: PropTypes.bool,
+ editConfig: PropTypes.object
+ }),
+ rowProps: PropTypes.object
};
RowWrapper.defaultProps = {
- isOpen: undefined,
- isExpanded: undefined
+ row: {
+ isOpen: undefined,
+ isExpanded: undefined,
+ isEditing: undefined,
+ isTableEditing: undefined,
+ isLast: undefined,
+ isFirst: undefined,
+ editConfig: undefined
+ },
+ rowProps: null
};
export default RowWrapper;
diff --git a/packages/patternfly-4/react-table/src/components/Table/Table.docs.js b/packages/patternfly-4/react-table/src/components/Table/Table.docs.js
index 8013c60ae28..0a79d796d6f 100644
--- a/packages/patternfly-4/react-table/src/components/Table/Table.docs.js
+++ b/packages/patternfly-4/react-table/src/components/Table/Table.docs.js
@@ -2,6 +2,8 @@ import { Table, TableHeader, TableBody } from '@patternfly/react-table';
import Simple from './examples/SimpleTable';
import Sortable from './examples/SortableTable';
import Selectable from './examples/SelectableTable';
+import Editable from './examples/EditableTable';
+import EditableTableColumn from './examples/EditableTableColumn';
import Actions from './examples/ActionsTable';
import CellHeader from './examples/CellHeader';
import Compact from './examples/CompactTable';
@@ -23,6 +25,8 @@ export default {
{ component: CellHeader, title: 'First cell as Header' },
{ component: Compact, title: 'Compact Table' },
{ component: Width, title: 'Table with Width Modifiers' },
- { component: Collapsible, title: 'Collapsible table' }
+ { component: Collapsible, title: 'Collapsible table' },
+ { component: Editable, title: 'Editable table With Inline Edit Row' },
+ { component: EditableTableColumn, title: 'Editable Table With Inline Edit Columns' }
]
};
diff --git a/packages/patternfly-4/react-table/src/components/Table/Table.js b/packages/patternfly-4/react-table/src/components/Table/Table.js
index faff2caf3b9..34315109a00 100644
--- a/packages/patternfly-4/react-table/src/components/Table/Table.js
+++ b/packages/patternfly-4/react-table/src/components/Table/Table.js
@@ -10,6 +10,7 @@ import HeaderCell from './HeaderCell';
import RowWrapper from './RowWrapper';
import BodyWrapper from './BodyWrapper';
import { calculateColumns } from './utils/headerUtils';
+import { TableEditConfirmation } from './inlineEditConstants';
export const TableGridBreakpoint = {
grid: 'grid',
@@ -80,6 +81,12 @@ const propTypes = {
})
])
).isRequired,
+ editConfig: PropTypes.shape({
+ editConfirmationType: PropTypes.oneOf(Object.values(TableEditConfirmation)),
+ onEditCellChanged: PropTypes.func,
+ onEditConfirmed: PropTypes.func,
+ onEditCanceled: PropTypes.func
+ }),
/** Aria labeled by this property collapse and select. */
rowLabeledBy: PropTypes.string,
/** Id prefix for expand buttons. */
@@ -123,7 +130,8 @@ const defaultProps = {
contentId: 'expanded-content',
dropdownPosition: DropdownPosition.right,
dropdownDirection: DropdownDirection.down,
- gridBreakPoint: TableGridBreakpoint.gridMd
+ gridBreakPoint: TableGridBreakpoint.gridMd,
+ editConfig: null
};
export const TableContext = React.createContext();
@@ -155,6 +163,7 @@ class Table extends React.Component {
variant,
rows,
cells,
+ editConfig,
...props
} = this.props;
@@ -175,7 +184,8 @@ class Table extends React.Component {
{header}
diff --git a/packages/patternfly-4/react-table/src/components/Table/TableConfirmButtonsRow.js b/packages/patternfly-4/react-table/src/components/Table/TableConfirmButtonsRow.js
new file mode 100644
index 00000000000..d7feffe3f1a
--- /dev/null
+++ b/packages/patternfly-4/react-table/src/components/Table/TableConfirmButtonsRow.js
@@ -0,0 +1,98 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import { CancelButton } from '../CancelButton';
+import { ConfirmButton } from '../ConfirmButton';
+
+const buttonsTopPosition = (window, rowDimensions) => ({
+ bottom: window.height - rowDimensions.top - 1,
+ right: window.width - rowDimensions.right + 10
+});
+
+const buttonsBottomPosition = (window, rowDimensions) => ({
+ top: rowDimensions.bottom - 1,
+ right: window.width - rowDimensions.right + 10
+});
+
+const TableConfirmButtonsRow = ({
+ messages: { confirmButtonLabel, cancelButtonLabel },
+ onConfirm,
+ onCancel,
+ environment,
+ buttonsOnTop
+}) => {
+ if (environment == null) {
+ return null;
+ }
+ const { window, row } = environment;
+
+ const positionStyle = buttonsOnTop ? buttonsTopPosition(window, row) : buttonsBottomPosition(window, row);
+
+ // TODO move style to pf-next (inline-edit-buttons)
+ const allStyles = {
+ ...positionStyle,
+ position: 'fixed',
+ zIndex: 1000,
+ background: '#def3ff',
+ border: '1px solid #7dc3e8',
+ margin: 0,
+ padding: '4px'
+ };
+
+ if (buttonsOnTop) {
+ allStyles.borderBottom = 0;
+ } else {
+ allStyles.borderTop = 0;
+ }
+
+ const cancelButtonStyle = {
+ marginLeft: '4px'
+ };
+
+ return (
+
+
+
+
+ );
+};
+
+TableConfirmButtonsRow.defaultProps = {
+ onConfirm: () => undefined,
+ onCancel: () => undefined,
+ buttonsOnTop: false,
+ environment: undefined,
+ buttonsClassName: '',
+ messages: {
+ confirmButtonLabel: 'Save',
+ cancelButtonLabel: 'Cancel'
+ }
+};
+
+TableConfirmButtonsRow.propTypes = {
+ /** Confirm edit callback */
+ onConfirm: PropTypes.func,
+ /** Cancel edit callback */
+ onCancel: PropTypes.func,
+ /** Inject confirm buttons positions */
+ environment: PropTypes.shape({
+ window: PropTypes.shape({
+ width: PropTypes.number,
+ height: PropTypes.number
+ }),
+ row: PropTypes.shape({
+ top: PropTypes.number,
+ bottom: PropTypes.number,
+ left: PropTypes.number,
+ right: PropTypes.number
+ })
+ }),
+ buttonsOnTop: PropTypes.bool,
+ /** Additional confirm buttons classes */
+ buttonsClassName: PropTypes.string,
+ messages: PropTypes.shape({
+ confirmButtonLabel: PropTypes.string,
+ cancelButtonLabel: PropTypes.string
+ })
+};
+
+export default TableConfirmButtonsRow;
diff --git a/packages/patternfly-4/react-table/src/components/Table/__snapshots__/Table.test.js.snap b/packages/patternfly-4/react-table/src/components/Table/__snapshots__/Table.test.js.snap
index 91771b2c40d..82145f8d620 100644
--- a/packages/patternfly-4/react-table/src/components/Table/__snapshots__/Table.test.js.snap
+++ b/packages/patternfly-4/react-table/src/components/Table/__snapshots__/Table.test.js.snap
@@ -377,6 +377,7 @@ exports[`Actions table 1`] = `
contentId="expanded-content"
dropdownDirection="down"
dropdownPosition="right"
+ editConfig={null}
expandId="expandable-toggle"
gridBreakPoint="grid-md"
onCollapse={null}
@@ -482,6 +483,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -536,6 +538,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -589,6 +592,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -642,6 +646,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -695,6 +700,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -749,6 +755,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -848,6 +855,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -902,6 +910,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -955,6 +964,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -1008,6 +1018,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -1061,6 +1072,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -1115,6 +1127,7 @@ exports[`Actions table 1`] = `
[Function],
],
},
+ "data": undefined,
"extraParams": Object {
"actions": Array [
Object {
@@ -1304,6 +1317,7 @@ exports[`Actions table 1`] = `
>