From d5484026f15eac2f197b54a1841cf51acb936d2e Mon Sep 17 00:00:00 2001 From: suomiy Date: Tue, 26 Feb 2019 18:27:18 +0100 Subject: [PATCH 1/2] feat(Table): support inline editing in PF4 --- .../react-core/build/copyStyles.js | 0 .../src/components/TextInput/TextInput.js | 2 +- .../__snapshots__/TextInput.test.js.snap | 1 - .../patternfly-4/react-docs/build/copyDocs.js | 2 +- .../patternfly-4/react-docs/gatsby-config.js | 7 + .../patternfly-4/react-docs/gatsby-node.js | 7 +- packages/patternfly-4/react-docs/package.json | 1 + .../src/components/example/liveDemo.js | 2 + .../react-inline-edit-extension/.babelrc | 31 + .../react-inline-edit-extension/.npmignore | 1 + .../react-inline-edit-extension/README.md | 5 + .../build/copyStyles.js | 42 + .../build/snapshot-serializer.js | 8 + .../react-inline-edit-extension/package.json | 61 + .../scripts/copyTS.js | 17 + .../components/CancelButton/CancelButton.js | 20 + .../CancelButton/CancelButton.test.js | 9 + .../__snapshots__/CancelButton.test.js.snap | 22 + .../src/components/CancelButton/index.js | 1 + .../components/ConfirmButton/ConfirmButton.js | 20 + .../ConfirmButton/ConfirmButton.test.js | 9 + .../__snapshots__/ConfirmButton.test.js.snap | 22 + .../src/components/ConfirmButton/index.js | 1 + .../components/InlineEdit/ConfirmButtons.js | 95 + .../components/InlineEdit/InlineEdit.docs.js | 11 + .../src/components/InlineEdit/constants.d.ts | 6 + .../src/components/InlineEdit/constants.js | 6 + .../InlineEdit/css/inline-edit-css.js | 88 + .../InlineEdit/editableRowWrapper.d.ts | 22 + .../InlineEdit/editableRowWrapper.js | 220 + .../InlineEdit/editableTableBody.d.ts | 36 + .../InlineEdit/editableTableBody.js | 99 + .../InlineEdit/examples/EditableTable.js | 264 + .../examples/EditableTableColumn.js | 143 + .../src/components/InlineEdit/index.d.ts | 21 + .../src/components/InlineEdit/index.js | 4 + .../components/InlineEdit/utils/formatters.js | 1 + .../InlineEdit/utils/formatters/index.d.ts | 8 + .../inlineEditFormatterFactory.d.ts | 30 + .../formatters/inlineEditFormatterFactory.js | 22 + .../inlineEditFormatterFactory.test.js | 54 + .../components/InlineEdit/utils/index.d.ts | 1 + .../src/components/InlineEdit/utils/index.js | 2 + .../src/components/InlineEdit/utils/utils.js | 28 + .../TableTextInput/TableTextInput.d.ts | 12 + .../TableTextInput/TableTextInput.docs.js | 10 + .../TableTextInput/TableTextInput.js | 51 + .../TableTextInput/TableTextInput.test.js | 19 + .../__snapshots__/TableTextInput.test.js.snap | 37 + .../examples/SimpleTableTextInput.js | 22 + .../src/components/TableTextInput/index.d.ts | 4 + .../src/components/TableTextInput/index.js | 1 + .../src/components/index.d.ts | 2 + .../src/components/index.js | 2 + .../src/index.d.ts | 1 + .../react-inline-edit-extension/src/index.js | 1 + .../react-table/src/components/Table/Body.js | 22 +- .../src/components/Table/RowWrapper.d.ts | 16 + .../src/components/Table/RowWrapper.js | 101 +- .../react-table/src/components/Table/Table.js | 12 +- .../Table/__snapshots__/Table.test.js.snap | 9772 ++++++++++++++++- .../src/components/Table/index.d.ts | 1 + .../react-table/src/components/Table/index.js | 4 +- .../src/components/Table/utils/headerUtils.js | 1 + 64 files changed, 11219 insertions(+), 324 deletions(-) mode change 100644 => 100755 packages/patternfly-4/react-core/build/copyStyles.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/.babelrc create mode 100644 packages/patternfly-4/react-inline-edit-extension/.npmignore create mode 100644 packages/patternfly-4/react-inline-edit-extension/README.md create mode 100644 packages/patternfly-4/react-inline-edit-extension/build/copyStyles.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/build/snapshot-serializer.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/package.json create mode 100644 packages/patternfly-4/react-inline-edit-extension/scripts/copyTS.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/CancelButton.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/CancelButton.test.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.test.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.docs.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.test.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/__snapshots__/TableTextInput.test.js.snap create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/examples/SimpleTableTextInput.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/index.js create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/index.d.ts create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/index.js create mode 100644 packages/patternfly-4/react-table/src/components/Table/RowWrapper.d.ts diff --git a/packages/patternfly-4/react-core/build/copyStyles.js b/packages/patternfly-4/react-core/build/copyStyles.js old mode 100644 new mode 100755 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 9130c743d38..f940b0a0ed9 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 b10bb69becd..c4b3c05a392 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-docs/build/copyDocs.js b/packages/patternfly-4/react-docs/build/copyDocs.js index 7e4e9e588c3..0312f0888e1 100644 --- a/packages/patternfly-4/react-docs/build/copyDocs.js +++ b/packages/patternfly-4/react-docs/build/copyDocs.js @@ -5,7 +5,7 @@ const fs = require('fs-extra'); const dest = path.resolve(__dirname, '../dist'); -const packageDirs = ['react-core', 'react-charts', 'react-table', 'react-styled-system']; +const packageDirs = ['react-core', 'react-charts', 'react-table', 'react-inline-edit-extension', 'react-styled-system']; const moduleTypes = ['js', 'esm']; moduleTypes.forEach(moduleType => { diff --git a/packages/patternfly-4/react-docs/gatsby-config.js b/packages/patternfly-4/react-docs/gatsby-config.js index 82fb6a428e8..554057cc2e3 100644 --- a/packages/patternfly-4/react-docs/gatsby-config.js +++ b/packages/patternfly-4/react-docs/gatsby-config.js @@ -40,6 +40,13 @@ module.exports = { ignore: [`**/*.d.ts`] } }, + { + resolve: `gatsby-source-filesystem`, + options: { + name: `components`, + path: resolve(__dirname, '../react-inline-edit-extension/src') + } + }, 'gatsby-transformer-react-docgen' ], pathPrefix: 'patternfly-4' diff --git a/packages/patternfly-4/react-docs/gatsby-node.js b/packages/patternfly-4/react-docs/gatsby-node.js index 4afce646396..254be200c8b 100644 --- a/packages/patternfly-4/react-docs/gatsby-node.js +++ b/packages/patternfly-4/react-docs/gatsby-node.js @@ -1,6 +1,6 @@ const path = require(`path`); const fs = require('fs-extra'); //eslint-disable-line -const packageDirs = ['react-core', 'react-charts', 'react-styled-system', 'react-table']; +const packageDirs = ['react-core', 'react-charts', 'react-styled-system', 'react-table', 'react-inline-edit-extension']; // Escape single quotes and backslashes in a file path const escapeFilePath = filePath => filePath.replace(/[\\']/g, '\\$&'); @@ -28,7 +28,8 @@ exports.onCreateWebpackConfig = ({ stage, loaders, actions, plugins, getConfig } '@patternfly/react-charts': path.resolve(__dirname, '../react-charts/src'), '@patternfly/react-core': path.resolve(__dirname, '../react-core/src'), '@patternfly/react-styles': path.resolve(__dirname, '../react-styles/src'), - '@patternfly/react-styled-system': path.resolve(__dirname, '../react-styled-system/src') + '@patternfly/react-styled-system': path.resolve(__dirname, '../react-styled-system/src'), + '@patternfly/react-inline-edit-extension': path.resolve(__dirname, '../react-inline-edit-extension/src'), } } }); @@ -119,7 +120,7 @@ exports.createPages = async ({ graphql, actions }) => { const filePath = path.resolve(__dirname, '.tmp', doc.base); const rawExamples = []; - const packageDir = packageDirs.find(pkg => doc.absolutePath.indexOf(pkg) !== -1); + const packageDir = packageDirs.find(pkg => doc.absolutePath.indexOf(`/${pkg}/`) !== -1); // In Windows environments, paths use backslashes to separate directories; // Ensure that forward slashes are used to make it comparable diff --git a/packages/patternfly-4/react-docs/package.json b/packages/patternfly-4/react-docs/package.json index be4e695c9b6..2d5a0aa33dd 100644 --- a/packages/patternfly-4/react-docs/package.json +++ b/packages/patternfly-4/react-docs/package.json @@ -11,6 +11,7 @@ "@patternfly/react-charts": "^2.2.2", "@patternfly/react-core": "^2.9.2", "@patternfly/react-icons": "^3.6.1", + "@patternfly/react-inline-edit-extension": "^1.0.0", "@patternfly/react-styled-system": "^2.0.17", "@patternfly/react-styles": "^2.4.0", "@patternfly/react-table": "^1.3.4", diff --git a/packages/patternfly-4/react-docs/src/components/example/liveDemo.js b/packages/patternfly-4/react-docs/src/components/example/liveDemo.js index 28391a0f212..fa5798604fb 100644 --- a/packages/patternfly-4/react-docs/src/components/example/liveDemo.js +++ b/packages/patternfly-4/react-docs/src/components/example/liveDemo.js @@ -4,6 +4,7 @@ import exampleStyles from './example.styles'; import styles from './liveDemo.styles'; import PropTypes from 'prop-types'; import * as TableComponents from '@patternfly/react-table'; +import * as TableInlineEditingComponents from '@patternfly/react-inline-edit-extension'; import * as ChartComponents from '@patternfly/react-charts'; import * as CoreComponents from '@patternfly/react-core'; import * as CoreIcons from '@patternfly/react-icons'; @@ -35,6 +36,7 @@ const scopePlayground = { React, ...ChartComponents, ...TableComponents, + ...TableInlineEditingComponents, ...StyledSystemComponents, ...CoreComponents, ...CoreIcons, diff --git a/packages/patternfly-4/react-inline-edit-extension/.babelrc b/packages/patternfly-4/react-inline-edit-extension/.babelrc new file mode 100644 index 00000000000..ba0214495d7 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/.babelrc @@ -0,0 +1,31 @@ +{ + "presets": [ + "../.babelrc.js" + ], + "env": { + "production:esm": { + "plugins": [ + [ + "@patternfly/react-styles/babel", + { + "srcDir": "./src", + "outDir": "./dist/esm", + "useModules": true + } + ] + ] + }, + "production:cjs": { + "plugins": [ + [ + "@patternfly/react-styles/babel", + { + "srcDir": "./src", + "outDir": "./dist/js", + "useModules": false + } + ] + ] + } + } +} diff --git a/packages/patternfly-4/react-inline-edit-extension/.npmignore b/packages/patternfly-4/react-inline-edit-extension/.npmignore new file mode 100644 index 00000000000..378eac25d31 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/.npmignore @@ -0,0 +1 @@ +build diff --git a/packages/patternfly-4/react-inline-edit-extension/README.md b/packages/patternfly-4/react-inline-edit-extension/README.md new file mode 100644 index 00000000000..ced7cde7df6 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/README.md @@ -0,0 +1,5 @@ +# @patternfly/react-inline-edit-extension + +Inline Edit extension provides inline editing support for PatternFly 4 React table. + +This package is currently an extension. Extension components do not undergo the same rigorous design or coding review process as core PatternFly components. If enough members of the community find them useful, we will work to move them into our core PatternFly system by starting the design process for the idea. diff --git a/packages/patternfly-4/react-inline-edit-extension/build/copyStyles.js b/packages/patternfly-4/react-inline-edit-extension/build/copyStyles.js new file mode 100644 index 00000000000..3c501ed0ad6 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/build/copyStyles.js @@ -0,0 +1,42 @@ +/* eslint-disable no-case-declarations */ +const { copySync, readFileSync, writeFileSync } = require('fs-extra'); +const { resolve, dirname, join } = require('path'); +const { parse: parseCSS, stringify: stringifyCSS } = require('css'); + +const baseCSSFilename = 'patternfly-base.css'; +const stylesDir = resolve(__dirname, '../dist/styles'); +const pfDir = dirname(require.resolve(`@patternfly/patternfly/${baseCSSFilename}`)); + +const css = readFileSync(join(pfDir, baseCSSFilename), 'utf8'); +const ast = parseCSS(css); + +const unusedSelectorRegEx = /(\.fas?|\.sr-only)/; +const unusedKeyFramesRegEx = /fa-/; +const unusedFontFamilyRegEx = /Font Awesome 5 Free/; +const ununsedFontFilesRegExt = /(fa-|\.html$|\.css$)/; + +// Core provides font awesome fonts and utlities. React does not use these +ast.stylesheet.rules = ast.stylesheet.rules.filter(rule => { + switch (rule.type) { + case 'rule': + return !rule.selectors.some(sel => unusedSelectorRegEx.test(sel)); + case 'keyframes': + return !unusedKeyFramesRegEx.test(rule.name); + case 'charset': + case 'comment': + return false; + case 'font-face': + const fontFamilyDecl = rule.declarations.find(decl => decl.property === 'font-family'); + return !unusedFontFamilyRegEx.test(fontFamilyDecl.value); + default: + return true; + } +}); + +copySync(join(pfDir, 'assets/images'), join(stylesDir, 'assets/images')); +copySync(join(pfDir, 'assets/fonts'), join(stylesDir, 'assets/fonts'), { + filter(src) { + return !ununsedFontFilesRegExt.test(src); + } +}); +writeFileSync(join(stylesDir, 'base.css'), stringifyCSS(ast)); diff --git a/packages/patternfly-4/react-inline-edit-extension/build/snapshot-serializer.js b/packages/patternfly-4/react-inline-edit-extension/build/snapshot-serializer.js new file mode 100644 index 00000000000..0edb3cb5b4c --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/build/snapshot-serializer.js @@ -0,0 +1,8 @@ +const fs = require('fs'); +const { createSerializer } = require('@patternfly/react-styles/snapshot-serializer'); + +const pf4CSS = fs.readFileSync(require.resolve('@patternfly/patternfly/patternfly-base.css'), 'utf8'); + +module.exports = createSerializer({ + globalCSS: pf4CSS.match(/:root\W?\{(.|\n)*?\}/)[0] +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/package.json b/packages/patternfly-4/react-inline-edit-extension/package.json new file mode 100644 index 00000000000..bb21fa5045d --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/package.json @@ -0,0 +1,61 @@ +{ + "name": "@patternfly/react-inline-edit-extension", + "version": "1.0.0", + "description": "This library provides inline editing support for PatternFly 4 React table", + "main": "dist/js/index.js", + "module": "dist/esm/index.js", + "types": "dist/js/index.d.ts", + "sideEffects": false, + "publishConfig": { + "access": "public", + "tag": "prerelease" + }, + "repository": { + "type": "git", + "url": "https://github.com/patternfly/patternfly-react.git" + }, + "keywords": [ + "react", + "patternfly", + "table", + "reacttabular" + ], + "author": "Red Hat", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/patternfly/patternfly-react/issues" + }, + "homepage": "https://github.com/patternfly/patternfly-react/tree/master/packages/patternfly-4/", + "dependencies": { + "@patternfly/patternfly": "1.0.240", + "@patternfly/react-core": "^2.6.1", + "@patternfly/react-table": "^1.3.3", + "@patternfly/react-icons": "^3.3.1", + "@patternfly/react-styles": "^2.3.9", + "classnames": "^2.2.5", + "exenv": "^1.2.2", + "reactabular-table": "^8.14.0" + }, + "peerDependencies": { + "prop-types": "^15.6.1", + "react": "^16.4.0", + "react-dom": "^15.6.2 || ^16.4.0" + }, + "scripts": { + "build": "yarn build:babel && yarn build:ts", + "build:babel": "concurrently \"yarn build:babel:cjs\" \"yarn build:babel:esm\"", + "build:babel:cjs": "cross-env BABEL_ENV=production:cjs babel src --out-dir dist/js", + "build:babel:esm": "cross-env BABEL_ENV=production:esm babel src --out-dir dist/esm", + "build:ts": "node ./scripts/copyTS.js", + "postbuild": "node ./build/copyStyles.js" + }, + "optionalDependencies": { + "@patternfly/react-tokens": "^2.0.2" + }, + "devDependencies": { + "css": "^2.2.3", + "fs-extra": "^6.0.1", + "glob": "^7.1.2", + "npmlog": "^4.1.2" + } +} diff --git a/packages/patternfly-4/react-inline-edit-extension/scripts/copyTS.js b/packages/patternfly-4/react-inline-edit-extension/scripts/copyTS.js new file mode 100644 index 00000000000..7f55c3a234a --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/scripts/copyTS.js @@ -0,0 +1,17 @@ +const path = require('path'); +const glob = require('glob'); +const fse = require('fs-extra'); +const log = require('npmlog'); + +const srcDir = path.join('./src'); +const distDir = path.join('./dist/js'); + +const files = glob.sync('**/*.d.ts', { + cwd: srcDir +}); +files.forEach(file => { + const from = path.join(srcDir, file); + const to = path.join(distDir, file); + log.info('copyTS', `${from} --> ${to}`); + fse.copySync(from, to); +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/CancelButton.js b/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/CancelButton.js new file mode 100644 index 00000000000..8d0ea9c869d --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/CancelButton/CancelButton.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/CancelButton.test.js new file mode 100644 index 00000000000..93336044229 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap b/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/__snapshots__/CancelButton.test.js.snap new file mode 100644 index 00000000000..95184fc1bc9 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/CancelButton/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/index.js new file mode 100644 index 00000000000..c4dc29a593a --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/CancelButton/index.js @@ -0,0 +1 @@ +export { default as CancelButton } from './CancelButton'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.js b/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.js new file mode 100644 index 00000000000..25be8e0353f --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/ConfirmButton.test.js new file mode 100644 index 00000000000..2cd4b86d46e --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap b/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/__snapshots__/ConfirmButton.test.js.snap new file mode 100644 index 00000000000..c8d70e4c57a --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/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-inline-edit-extension/src/components/ConfirmButton/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/index.js new file mode 100644 index 00000000000..4ccccc70087 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/ConfirmButton/index.js @@ -0,0 +1 @@ +export { default as ConfirmButton } from './ConfirmButton'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js new file mode 100644 index 00000000000..d7b1735c2c5 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js @@ -0,0 +1,95 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { css } from '@patternfly/react-styles'; +import { CancelButton } from '../CancelButton'; +import { ConfirmButton } from '../ConfirmButton'; +import { inlineEditCss, inlineEditStyles as styles } from './css/inline-edit-css'; + +inlineEditCss.inject(); + +const buttonsTopPosition = (window, rowDimensions, bold) => { + const boldShift = bold ? -1 : 0; + return { + bottom: window.height - rowDimensions.top - 1 + boldShift, + right: window.width - rowDimensions.right + 10 + }; +}; + +const buttonsBottomPosition = (window, rowDimensions, bold) => { + const boldShift = bold ? -1 : 0; + return { + top: rowDimensions.bottom + boldShift, + right: window.width - rowDimensions.right + 10 + }; +}; + +const ConfirmButtons = ({ + messages: { confirmButtonLabel, cancelButtonLabel }, + onConfirm, + onCancel, + environment, + buttonsOnTop, + boldBorder +}) => { + if (environment == null) { + return null; + } + const { window, row } = environment; + + const positionStyle = buttonsOnTop + ? buttonsTopPosition(window, row, boldBorder) + : buttonsBottomPosition(window, row, boldBorder); + + const className = css( + styles.tableInlineEditButtons, + buttonsOnTop ? styles.modifiers.top : styles.modifiers.bottom, + boldBorder && styles.modifiers.bold + ); + + return ( +
+ + +
+ ); +}; + +ConfirmButtons.defaultProps = { + onConfirm: () => undefined, + onCancel: () => undefined, + buttonsOnTop: false, + boldBorder: false, + environment: undefined, + messages: { + confirmButtonLabel: 'Save', + cancelButtonLabel: 'Cancel' + } +}; + +ConfirmButtons.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, + boldBorder: PropTypes.bool, + messages: PropTypes.shape({ + confirmButtonLabel: PropTypes.string, + cancelButtonLabel: PropTypes.string + }) +}; + +export default ConfirmButtons; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js new file mode 100644 index 00000000000..9d90d7ad94b --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js @@ -0,0 +1,11 @@ +import EditableTable from './examples/EditableTable'; +import EditableTableColumn from './examples/EditableTableColumn'; + +export default { + title: 'Inline Editing Table', + components: {}, + examples: [ + { component: EditableTable, title: 'Editable table With Inline Edit Row' }, + { component: EditableTableColumn, title: 'Editable Table With Inline Edit Columns' } + ] +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts new file mode 100644 index 00000000000..d0bdde25616 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts @@ -0,0 +1,6 @@ +export const TableEditConfirmation: { + NONE: 'NONE', + ROW: 'ROW', + TABLE_TOP: 'TABLE_TOP', + TABLE_BOTTOM: 'TABLE_BOTTOM' +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js new file mode 100644 index 00000000000..ffdc47e0286 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js @@ -0,0 +1,6 @@ +export const TableEditConfirmation = { + NONE: 'NONE', + ROW: 'ROW', + TABLE_TOP: 'TABLE_TOP', + TABLE_BOTTOM: 'TABLE_BOTTOM' +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js new file mode 100644 index 00000000000..ca6bb9711db --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js @@ -0,0 +1,88 @@ +import { StyleSheet } from '@patternfly/react-styles'; + +const pfColorBlue50 = '#def3ff'; +const pfColorBlue200 = '#7dc3e8'; + +export const inlineEditCss = StyleSheet.parse(` + .pf-c-table__editable-row { + border: 1px solid transparent; + + &:hover, + &.pf-m-editing { + td { + background: ${pfColorBlue50}; + border-top: 1px solid ${pfColorBlue200} !important; + border-bottom: 1px solid ${pfColorBlue200} !important; + + &:first-child { + border-left: 1px solid ${pfColorBlue200} !important; + } + + &:last-child { + border-right: 1px solid ${pfColorBlue200} !important; + } + } + } + + &.pf-m-table-editing-first-row { + border-top: 3px solid ${pfColorBlue200} !important; + } + + &.pf-m-table-editing-last-row { + border-bottom: 3px solid ${pfColorBlue200} !important; + } + + input { + display: block; + background: var(--pf-global--BackgroundColor--100); + border: 1px solid var(--pf-global--BorderColor); + + &:hover { + cursor: text; + } + } + } + + .pf-c-table__inline-edit-buttons { + position: fixed; + z-index: 1000; + padding: 4px; + margin: 0; + background: ${pfColorBlue50}; + border: 1px solid ${pfColorBlue200}; + + &.pf-m-top { + border-bottom: 0; + } + + &.pf-m-bottom { + border-top: 0; + } + + &.pf-m-bold { + border-width: 3px; + } + + button { + margin-left: 4px; + + &:first-child { + margin-left: 0; + } + } + } + +`); + +export const inlineEditStyles = { + tableEditableRow: 'pf-c-table__editable-row', + tableInlineEditButtons: 'pf-c-table__inline-edit-buttons', + modifiers: { + tableEditingFirstRow: 'pf-m-table-editing-first-row ', + tableEditingLastRow: 'pf-m-table-editing-last-row', + editing: 'pf-m-editing', + top: 'pf-m-top', + bottom: 'pf-m-bottom', + bold: 'pf-m-bold' + } +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts new file mode 100644 index 00000000000..85d3f9ebe42 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts @@ -0,0 +1,22 @@ +import { Component, FunctionComponent } from 'react'; +import { RowWrapper, RowWrapperRow } from '@patternfly/react-table'; + +import { EditConfig } from './editableTableBody' + +export interface EditableRowWrapperRow extends RowWrapperRow { + isEditing: boolean; + isTableEditing: boolean; + isLast: boolean; + isFirst: boolean; + editConfig: EditConfig; +} + +export interface EditableRowWrapperProps extends RowWrapper { + row: EditableRowWrapperRow; +} + +export interface EditableRowWrapper { + (bodyComponent: Component): FunctionComponent; +} + +export default EditableRowWrapper; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js new file mode 100644 index 00000000000..5e522937273 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js @@ -0,0 +1,220 @@ +import React from 'react'; +import { createPortal } from 'react-dom'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { css } from '@patternfly/react-styles'; +import { RowWrapper as ReactTableRowWrapper } from '@patternfly/react-table'; +import { + combineFunctions, + shallowLeftSideEquals, + getBoundingClientRect, + getClientWindowDimensions +} from './utils/utils'; +import ConfirmButtons from './ConfirmButtons'; +import { TableEditConfirmation } from './constants'; +import { inlineEditCss, inlineEditStyles as styles } from './css/inline-edit-css'; + +inlineEditCss.inject(); + +const propTypes = { + ...ReactTableRowWrapper.propTypes, + trRef: PropTypes.func, + className: PropTypes.string, + onScroll: PropTypes.func, + onResize: PropTypes.func, + 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 +}; + +const defaultProps = { + ...ReactTableRowWrapper.defaultProps, + trRef: undefined, + className: '', + onScroll: undefined, + onResize: undefined, + row: { + isOpen: undefined, + isExpanded: undefined, + isEditing: undefined, + isTableEditing: undefined, + isLast: undefined, + isFirst: undefined, + editConfig: undefined + }, + rowProps: null +}; + +const tableConfirmationMapper = { + [TableEditConfirmation.TABLE_TOP]: { + hasConfirmationButtons: ({ isTableEditing, isFirst }) => isTableEditing && isFirst, + isTableConfirmation: () => true, + areButtonsOnTop: () => true, + hasBoldBorder: () => true, + getEditStyles: ({ isTableEditing, isFirst }) => + css(styles.tableEditableRow, isTableEditing && isFirst && styles.modifiers.tableEditingFirstRow) + }, + [TableEditConfirmation.TABLE_BOTTOM]: { + hasConfirmationButtons: ({ isTableEditing, isLast }) => isTableEditing && isLast, + isTableConfirmation: () => true, + areButtonsOnTop: () => false, + hasBoldBorder: () => true, + getEditStyles: ({ isTableEditing, isLast }) => + css(styles.tableEditableRow, isTableEditing && isLast && styles.modifiers.tableEditingLastRow) + }, + [TableEditConfirmation.ROW]: { + hasConfirmationButtons: ({ isEditing }) => isEditing, + isTableConfirmation: () => false, + areButtonsOnTop: ({ isLast }) => isLast, + hasBoldBorder: () => false, + getEditStyles: ({ isEditing }) => css(styles.tableEditableRow, isEditing && styles.modifiers.editing) + }, + [TableEditConfirmation.NONE]: { + hasConfirmationButtons: () => false, + isTableConfirmation: () => false, + areButtonsOnTop: () => false, + hasBoldBorder: () => false, + getEditStyles: () => css(styles.tableEditableRow) + } +}; + +const getTableConfirmation = ({ editConfig }) => + tableConfirmationMapper[editConfig && editConfig.editConfirmationType] || + tableConfirmationMapper[TableEditConfirmation.NONE]; + +const editableRowWrapper = RowWrapperComponent => { + class RowWrapper extends React.Component { + constructor(props) { + super(props); + this.state = { + rowDimensions: {}, + window: {}, + ...RowWrapper.getDerivedStateFromProps(props) + }; + } + + static getDerivedStateFromProps = (props, state) => ({ + hasConfirmationButtons: getTableConfirmation(props.row).hasConfirmationButtons(props.row) + }); + + setStateWith2dEquals = newState => { + this.setState( + oldState => + Object.keys(newState).find(key => !shallowLeftSideEquals(newState[key], oldState[key])) ? newState : null + ); + }; + + componentDidMount() { + if (this.state.hasConfirmationButtons) { + this.fetchClientDimensions(); + } + } + + saveRowDimensions = element => { + if (element) { + this.element = element; + this.tableElem = element.closest('table'); + } + this.updateRowDimensions(); + }; + + updateRowDimensions = () => { + if (this.element) { + this.setStateWith2dEquals({ + rowDimensions: getBoundingClientRect(this.element) + }); + } + }; + + handleScroll = event => { + this.updateRowDimensions(); + }; + + handleResize = event => { + this.fetchClientDimensions(); + this.updateRowDimensions(); + }; + + fetchClientDimensions() { + this.setStateWith2dEquals({ + window: getClientWindowDimensions() + }); + } + + getConfirmationButtons() { + const { row, rowProps, ...props } = this.props; + const { isLast, editConfig } = row; + + if (!editConfig) { + return null; + } + const { onEditConfirmed, onEditCanceled } = editConfig; + const tableConfirmation = getTableConfirmation(row); + + let confirmButtons; + if (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 })} + boldBorder={tableConfirmation.hasBoldBorder()} + environment={{ + window: this.state.window, + row: getBoundingClientRect(this.element) + }} + />, + this.tableElem ? this.tableElem.parentNode : document.body + ); + } + return confirmButtons; + } + + render() { + const { + trRef, + className, + onScroll, + onResize, + row: { isFirst, isLast, isEditing, isTableEditing, editConfig } + } = this.props; + const { hasConfirmationButtons } = this.state; + const trClassName = getTableConfirmation({ editConfig }).getEditStyles({ + isEditing, + isTableEditing, + isFirst, + isLast + }); + + return ( + + + {hasConfirmationButtons && this.getConfirmationButtons()} + + ); + } + } + + RowWrapper.propTypes = propTypes; + RowWrapper.defaultProps = defaultProps; + + return RowWrapper; +}; + +export default editableRowWrapper; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts new file mode 100644 index 00000000000..dddc74eb5d4 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts @@ -0,0 +1,36 @@ +import { Component, FunctionComponent, MouseEvent } from 'react'; +import { TableBodyProps } from '@patternfly/react-table'; +import { OneOf } from '@patternfly/react-core'; + +import { TableEditConfirmation } from './constants' + + +export interface RowData { +} + +export interface RowProps { + rowIndex: number; + rowKey: string; +} + +export interface RowExtraProps extends RowProps { + columnIndex: number; +} + +export interface EditConfig { + editConfirmationType?: OneOf; + onEditCellChanged?(value: MouseEvent, row: RowData, extra: RowExtraProps): void; + onEditConfirmed?(value: MouseEvent, row: RowData, rowProps: RowProps): void; + onEditCanceled?(value: MouseEvent, row: RowData, rowProps: RowProps): void; +} + +export interface InlineEditBodyProps extends TableBodyProps { + editConfig: EditConfig; +} + + +export interface EditableTableBody { + (bodyComponent: Component): FunctionComponent; +} + +export default EditableTableBody; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js new file mode 100644 index 00000000000..cc67feaa99c --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js @@ -0,0 +1,99 @@ +import React from 'react'; +import { TableContext, TableBody } from '@patternfly/react-table'; + +import PropTypes from 'prop-types'; +import { TableEditConfirmation } from './constants'; + +const propTypes = { + ...TableBody.propTypes, + editConfig: PropTypes.shape({ + editConfirmationType: PropTypes.oneOf(Object.values(TableEditConfirmation)), + onEditCellChanged: PropTypes.func, + onEditConfirmed: PropTypes.func, + onEditCanceled: PropTypes.func + }).isRequired, + /** Function that is fired when user clicks on a row if not editing. */ + onRowClick: PropTypes.func +}; + +const defaultProps = { + ...TableBody.defaultProps, + editConfig: null, + onRowClick: () => undefined +}; + +const onRow = (event, row, rowProps, computedData, { 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, { + ...rowProps, + columnIndex: cellNumber + }); + }; + } + + // give priority to fire onChange/onBlur callbacks + + setTimeout(() => { + if (!row.isEditing) { + onRowClick(event, row, rowProps, computedData); + if (onEditCellChanged) { + // edit cell after rerender + setTimeout(onEditCellChanged, 0); + } + } else if (onEditCellChanged && !targetsAlreadyEditedCell) { + onEditCellChanged(); + } + }, 0); +}; + +const Body = ({ BodyComponent, rows, editConfig, onRowClick, ...props }) => { + const isTableEditing = rows.some(row => row.isEditing); + const mappedRows = rows.map(row => ({ + ...row, + editConfig, + isTableEditing + })); + + return ( + + onRow(event, row, rowProps, computedData, { onRowClick, editConfig }) + } + /> + ); +}; + +const editableTableBody = BodyComponent => { + const InlineEditBody = ({ editConfig, onRowClick, ...props }) => ( + + {({ rows, ...consumedProps }) => ( + + )} + + ); + + InlineEditBody.propTypes = propTypes; + InlineEditBody.defaultProps = defaultProps; + + return InlineEditBody; +}; + +export default editableTableBody; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js new file mode 100644 index 00000000000..efbe7be7d1b --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js @@ -0,0 +1,264 @@ +import React from 'react'; +import { Table, TableHeader, TableBody, RowWrapper } from '@patternfly/react-table'; +import { + editableTableBody, + editableRowWrapper, + inlineEditFormatterFactory, + TableEditConfirmation, + TableTextInput +} from '@patternfly/react-inline-edit-extension'; +import { Dropdown, DropdownToggle, DropdownItem, Checkbox } from '@patternfly/react-core'; + +class EditableTable extends React.Component { + constructor(props) { + super(props); + + // text input + const textInputFormatter = inlineEditFormatterFactory({ + renderEdit: (value, { columnIndex, rowIndex }, { autoFocus }) => ( + this.onChange(newValue, { rowIndex, columnIndex })} + autoFocus={autoFocus} + /> + ) + }); + + // dropdown + const workspacesFormatter = inlineEditFormatterFactory({ + resolveValue: (value, { rowData }) => rowData.data.workspace, + renderEdit: (workspace, { column, rowData, columnIndex, rowIndex }) => { + const dropdownItems = column.data.dropdownItems.map(item => {item}); + return ( + + this.onWorkspaceChange({ selected: event.target.text, isDropdownOpen: false }, { rowIndex, columnIndex }) + } + toggle={ + + this.onWorkspaceChange({ isDropdownOpen: !workspace.isDropdownOpen }, { rowIndex, columnIndex }) + } + > + {workspace.selected} + + } + isOpen={workspace.isDropdownOpen} + dropdownItems={dropdownItems} + /> + ); + }, + renderValue: workspace => workspace.selected + }); + + // checkbox + const privateRepoFormatter = inlineEditFormatterFactory({ + resolveValue: (value, { rowData }) => rowData.data.privateRepo, + renderEdit: (privateRepo, { columnIndex, rowIndex }) => ( + this.onPrivateRepoChange(value, { rowIndex, columnIndex })} + aria-label="checkbox" + /> + ), + renderValue: (privateRepo, { columnIndex, rowIndex }) => ( + + ) + }); + + this.state = { + columns: [ + { + title: 'Repositories', + cellFormatters: [textInputFormatter] + }, + { + title: 'Branches', + cellFormatters: [(value, { rowData }) => rowData.data.branches[rowData.data.branches.length - 1]] + }, + 'Pull requests', + { + title: 'Workspaces', + cellFormatters: [workspacesFormatter], + data: { + dropdownItems: ['Green', 'Purple', 'Orange', 'Grey'] + } + }, + { + title: 'Last Commit', + cellFormatters: [textInputFormatter] + }, + { + title: 'Private', + cellFormatters: [privateRepoFormatter] + } + ], + rows: [ + { + cells: ['one', null, 7, null, 'five', null], + data: { + branches: ['master'], + workspace: { + selected: 'Green', + isDropdownOpen: false + }, + privateRepo: false + } + // isEditing: true, + // activeEditCell: 3 + }, + { + cells: ['', null, 0, null, '', null], + data: { + branches: ['master', 'v0.7.0', 'v1.0.0'], + workspace: { + selected: 'Grey', + isDropdownOpen: false + }, + privateRepo: false + } + }, + { + cells: ['p', null, 0, null, '', null], + data: { + branches: ['master', 'v0.7.0'], + workspace: { + selected: 'Orange', + isDropdownOpen: false + }, + privateRepo: true + } + } + ], + editedRowBackup: null, + activeEditId: null + }; + } + + onPrivateRepoChange = (value, { rowIndex }) => { + this.setState(({ rows }) => { + const row = rows[rowIndex]; + row.data.privateRepo = value; + return { rows }; + }); + }; + + onWorkspaceChange = (value, { rowIndex }) => { + this.setState(({ rows }) => { + const row = rows[rowIndex]; + row.data.workspace = Object.assign({}, row.data.workspace, value); + return { rows }; + }); + }; + + onChange = (value, { rowIndex, columnIndex }) => { + this.setState(({ rows }) => { + rows = [...rows]; + const row = rows[rowIndex]; + row.cells[columnIndex] = value; + row.activeEditCell = null; // stop autoFocus + return { rows }; + }); + }; + + onEditCellChanged = (event, clickedRow, { rowIndex, columnIndex }) => { + const WORKSPACE_COL = 3; + const PRIVATE_REPO_COL = 5; + + if (clickedRow.isEditing) { + this.setState(({ rows }) => ({ + rows: rows.map((row, id) => { + row.activeEditCell = id === rowIndex ? columnIndex : null; + row.data.workspace.isDropdownOpen = id === rowIndex && columnIndex === WORKSPACE_COL; + if (id === rowIndex && columnIndex === PRIVATE_REPO_COL) { + row.data.privateRepo = !row.data.privateRepo; + } + return row; + }) + })); + } + }; + + onEditActionClick = (event, rowId) => { + this.setState( + ({ rows, editedRowBackup }) => + !editedRowBackup && { + editedRowBackup: JSON.parse(JSON.stringify(rows[rowId])), // clone + rows: rows.map((row, id) => { + row.isEditing = id === rowId; + return row; + }) + } + ); + }; + + onEditConfirmed = (event, clickedRow, { rowIndex }) => { + this.setState(({ rows }) => { + rows = [...rows]; + rows[rowIndex].isEditing = false; + return { + rows, + editedRowBackup: null, + activeEditCell: null + }; + }); + }; + + onEditCanceled = (event, clickedRow, { rowIndex }) => { + this.setState(({ rows, editedRowBackup }) => { + rows = [...rows]; + rows[rowIndex] = editedRowBackup; + return { + rows, + editedRowBackup: null, + activeEditCell: null + }; + }); + }; + + actionResolver = rowData => + rowData.isTableEditing + ? null + : [ + { + title: 'Edit', + onClick: this.onEditActionClick + } + ]; + + render() { + const { columns, rows } = this.state; + const editConfig = { + onEditCellChanged: this.onEditCellChanged, + editConfirmationType: TableEditConfirmation.ROW, + onEditConfirmed: this.onEditConfirmed, + onEditCanceled: this.onEditCanceled + }; + + const ComposedBody = editableTableBody(TableBody); + const ComposedRowWrapper = editableRowWrapper(RowWrapper); + + return ( + + + +
+ ); + } +} + +export default EditableTable; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js new file mode 100644 index 00000000000..537f5c6a1e8 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js @@ -0,0 +1,143 @@ +/* eslint-disable react/no-unused-state */ +import React from 'react'; +import { Table, TableHeader, TableBody, RowWrapper } from '@patternfly/react-table'; +import { + editableTableBody, + editableRowWrapper, + inlineEditFormatterFactory, + TableEditConfirmation, + TableTextInput +} from '@patternfly/react-inline-edit-extension'; + +class EditableTableColumn extends React.Component { + constructor(props) { + super(props); + + // text input + const inlineEditingFormatter = inlineEditFormatterFactory({ + renderEdit: (value, { columnIndex, rowIndex }, { autoFocus }) => ( + this.onBlur(newValue, { rowIndex, columnIndex })} + autoFocus={autoFocus} + /> + ), + renderValue: (value, { rowData }) => (rowData.isTableEditing ? `${value} (Not Editable)` : value), + isEditable: ({ rowIndex }) => rowIndex !== 1 + }); + + this.state = { + columns: [ + { + title: 'Repositories', + cellFormatters: [inlineEditingFormatter] + }, + { + title: 'Branches', + cellFormatters: [inlineEditingFormatter] + }, + 'Pull requests', + 'Workspaces', + { + title: 'Last Commit', + cellFormatters: [inlineEditingFormatter] + } + ], + rows: [ + { + cells: ['one', 'two', 7, 'four', 'five'] + }, + { + cells: ['a', 'two', 0, 'four', 'five'] + }, + { + cells: ['p', 'two', 0, 'four', 'five'] + }, + { + cells: ['a', 'two', 5, 'four', 'five'] + } + ], + rowsBackup: null + }; + } + + onBlur = (value, { rowIndex, columnIndex }) => { + this.setState(({ rows }) => { + rows = [...rows]; + const row = rows[rowIndex]; + row.cells[columnIndex] = value; + row.activeEditCell = null; // stop autoFocus + return { rows }; + }); + }; + + onEditCellChanged = (event, clickedRow, { rowIndex, columnIndex }) => { + this.setState(({ rows }) => ({ + rows: rows.map((row, id) => { + row.activeEditCell = id === rowIndex ? columnIndex : null; + return row; + }) + })); + }; + + setEditing = (rows, isEditing) => + rows.map(row => { + row.isEditing = isEditing; + if (!isEditing) { + row.activeEditCell = null; + } + return row; + }); + + onRowClick = () => { + this.setState( + ({ rows, rowsBackup }) => + !rowsBackup && { + rowsBackup: JSON.parse(JSON.stringify(rows)), // clone + rows: this.setEditing(rows, true) + } + ); + }; + + onEditConfirmed = () => { + this.setState(({ rows }) => ({ + rows: this.setEditing(rows, false), + rowsBackup: null + })); + }; + + onEditCanceled = () => { + this.setState(({ rows, rowsBackup }) => ({ + rows: rowsBackup, + rowsBackup: null + })); + }; + + render() { + const { columns, rows } = this.state; + const editConfig = { + editConfirmationType: TableEditConfirmation.TABLE_BOTTOM, + onEditCellChanged: this.onEditCellChanged, + onEditConfirmed: this.onEditConfirmed, + onEditCanceled: this.onEditCanceled + }; + + const ComposedBody = editableTableBody(TableBody); + const ComposedRawWrapper = editableRowWrapper(RowWrapper); + + return ( + + + +
+ ); + } +} + +export default EditableTableColumn; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts new file mode 100644 index 00000000000..8573c91203c --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts @@ -0,0 +1,21 @@ +export { + TableEditConfirmation +} from './constants'; + +export * from './utils'; +export { + default as editableTableBody, + EditableTableBody, + InlineEditBodyProps, + EditConfig, + RowProps, + RowExtraProps, + RowData +} from './editableTableBody' + +export { + default as editableRowWrapper, + EditableRowWrapper, + EditableRowWrapperProps, + EditableRowWrapperRow +} from './editableRowWrapper' diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.js new file mode 100644 index 00000000000..22cf35095f6 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.js @@ -0,0 +1,4 @@ +export { TableEditConfirmation } from './constants'; +export { inlineEditFormatterFactory } from './utils'; +export { default as editableTableBody } from './editableTableBody'; +export { default as editableRowWrapper } from './editableRowWrapper'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters.js new file mode 100644 index 00000000000..6129309cae6 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters.js @@ -0,0 +1 @@ +export { default as inlineEditFormatterFactory } from './formatters/inlineEditFormatterFactory'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/index.d.ts new file mode 100644 index 00000000000..102d7711d7e --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/index.d.ts @@ -0,0 +1,8 @@ +export { + default as inlineEditFormatterFactory, + InlineEditFormatterFactory, + InlineEditFormatterFactoryProps, + AdditionalData, + Formatter, + FormatterExtra +} from './inlineEditFormatterFactory'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts new file mode 100644 index 00000000000..16b8d94581d --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts @@ -0,0 +1,30 @@ +import { ReactNode } from 'react'; + +export interface AdditionalData { + columnIndex: number; + rowIndex: number; + column: Object; + rowData: Object; + rowKey: string; +} + +export interface FormatterExtra { + autoFocus: boolean; +} + +export interface Formatter { + (value: ReactNode, additionalData: AdditionalData): ReactNode; +} + +export interface InlineEditFormatterFactoryProps { + isEditable?(additionalData: AdditionalData): boolean; + renderValue?: Formatter; + resolveValue?(value: ReactNode, additionalData: AdditionalData): ReactNode; + renderEdit?(value: ReactNode, additionalData: AdditionalData, extra: FormatterExtra): ReactNode; +} + +export interface InlineEditFormatterFactory { + (props: InlineEditFormatterFactoryProps): Formatter; +} + +export default InlineEditFormatterFactory; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js new file mode 100644 index 00000000000..371450f9f91 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js @@ -0,0 +1,22 @@ +const inlineEditFormatterFactory = ({ renderEdit, renderValue, resolveValue, isEditable = null } = {}) => ( + value, + additionalData +) => { + const { rowData, columnIndex } = additionalData; + + if (resolveValue) { + value = resolveValue(value, additionalData); + } + + if (renderEdit && rowData.isEditing && (!isEditable || isEditable(additionalData))) { + return renderEdit(value, additionalData, { + autoFocus: rowData.activeEditCell === columnIndex + }); + } else if (renderValue) { + return renderValue(value, additionalData); + } + + return value; +}; + +export default inlineEditFormatterFactory; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js new file mode 100644 index 00000000000..11cec46cd67 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js @@ -0,0 +1,54 @@ +import { default as inlineEditFormatterFactory } from './inlineEditFormatterFactory'; + +const blue = 'blue'; +const alteredValue = 'violet'; + +const buildAdditionalData = (data, isEditing = true, activeCell = 3) => ({ + columnIndex: activeCell, + rowData: { + isEditing, + activeEditCell: activeCell, + data + } +}); + +describe('inlineEditFormatterFactory', () => { + test('renders default value', () => { + const additionalData = buildAdditionalData(alteredValue); + + expect(inlineEditFormatterFactory()(blue, additionalData)).toBe(blue); + }); + + test('renders resolved value', () => { + const additionalData = buildAdditionalData(alteredValue); + + expect( + inlineEditFormatterFactory({ + resolveValue: (value, { rowData }) => rowData.data + })(blue, additionalData) + ).toBe(alteredValue); + }); + + test('renders resolved and render value', () => { + const additionalData = buildAdditionalData(alteredValue, false); + + expect( + inlineEditFormatterFactory({ + resolveValue: (value, { rowData }) => rowData.data, + renderValue: value => `ultra ${value}`, + renderEdit: value => `violent ${value}` + })(blue, additionalData) + ).toBe(`ultra ${alteredValue}`); + }); + + test('renders resolved and render edit value', () => { + const additionalData = buildAdditionalData(alteredValue); + + expect( + inlineEditFormatterFactory({ + resolveValue: (value, { rowData }) => rowData.data, + renderEdit: value => `ultra ${value}` + })(blue, additionalData) + ).toBe(`ultra ${alteredValue}`); + }); +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.d.ts new file mode 100644 index 00000000000..ad4ce58d7f7 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.d.ts @@ -0,0 +1 @@ +export * from './formatters'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.js new file mode 100644 index 00000000000..3df838ed640 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/index.js @@ -0,0 +1,2 @@ +export * from './formatters'; +export * from './utils'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js new file mode 100644 index 00000000000..83cbd39f80c --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js @@ -0,0 +1,28 @@ +export const combineFunctions = (...functions) => { + const realFunctions = functions.filter(f => typeof f === 'function'); + + if (realFunctions.length === 1) { + return realFunctions[0]; + } + + if (realFunctions.length > 1) { + return (...params) => { + realFunctions.forEach(f => f(...params)); + }; + } + + return undefined; +}; + +export const shallowLeftSideEquals = (newObject, oldObject) => + !Object.keys(newObject).find(key => newObject[key] !== oldObject[key]); + +export const getBoundingClientRect = element => { + const { top, right, bottom, left, width, height, x, y } = element.getBoundingClientRect(); + return { top, right, bottom, left, width, height, x, y }; +}; + +export const getClientWindowDimensions = () => { + const { clientWidth, clientHeight } = document.documentElement; + return { width: clientWidth, height: clientHeight }; +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.d.ts new file mode 100644 index 00000000000..5dff6d378cf --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.d.ts @@ -0,0 +1,12 @@ +import { SFC, FormEvent } from 'react'; +import { TextInputProps, Omit } from '@patternfly/react-core'; + +export interface TableTextInputProps extends Omit { + defaultValue?: string; + autoFocus?: boolean; + onBlur?(value: string, event: FormEvent): void; +} + +declare const TableTextInput: SFC; + +export default TableTextInput; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.docs.js b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.docs.js new file mode 100644 index 00000000000..e17470841c8 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.docs.js @@ -0,0 +1,10 @@ +import { TableTextInput } from '@patternfly/react-inline-edit-extension'; +import SimpleTableTextInput from './examples/SimpleTableTextInput'; + +export default { + title: 'TableTextInput', + components: { + TableTextInput + }, + examples: [{ component: SimpleTableTextInput, title: 'Simple TableTextInput' }] +}; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.js b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.js new file mode 100644 index 00000000000..b0ffeb81f0e --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.js @@ -0,0 +1,51 @@ +import React from 'react'; +import { TextInput } from '@patternfly/react-core'; +import PropTypes from 'prop-types'; + +const textInputProptypes = { ...TextInput.propTypes }; +const textInputDefaultProptypes = { ...TextInput.defaultProps }; +[textInputProptypes, textInputDefaultProptypes].forEach(types => { + ['value', 'onChange'].forEach(value => { + delete types[value]; + }); +}); + +const propTypes = { + ...textInputProptypes, + defaultValue: PropTypes.string, + onBlur: PropTypes.func, + autoFocus: PropTypes.bool +}; + +const defaultProps = { + ...textInputDefaultProptypes, + defaultValue: null, + onBlur: null, + autoFocus: false +}; + +class TableTextInput extends React.Component { + handleBlur = event => { + this.props.onBlur(event.currentTarget.value, event); + }; + + render() { + const { defaultValue, onBlur, autoFocus, value, onChange, ...textInputProps } = this.props; + return ( + + + + ); + } +} + +TableTextInput.propTypes = propTypes; +TableTextInput.defaultProps = defaultProps; + +export default TableTextInput; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.test.js new file mode 100644 index 00000000000..40850c59566 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/TableTextInput.test.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import TableTextInput from './TableTextInput'; + +const props = { + defaultValue: 'test', + autoFocus: true, + onBlur: jest.fn() +}; + +test('simple table text input', () => { + const view = shallow(); + expect(view).toMatchSnapshot(); +}); + +test('focused table text input', () => { + const view = shallow(); + expect(view).toMatchSnapshot(); +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/__snapshots__/TableTextInput.test.js.snap b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/__snapshots__/TableTextInput.test.js.snap new file mode 100644 index 00000000000..c8825af6b08 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/__snapshots__/TableTextInput.test.js.snap @@ -0,0 +1,37 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`focused table text input 1`] = ` + + + +`; + +exports[`simple table text input 1`] = ` + + + +`; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/examples/SimpleTableTextInput.js b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/examples/SimpleTableTextInput.js new file mode 100644 index 00000000000..d8e76d28cc3 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/examples/SimpleTableTextInput.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { TableTextInput } from '@patternfly/react-inline-edit-extension'; + +class SimpleTableTextInput extends React.Component { + state = { + value: '' + }; + + handleTextInputChange = value => { + this.setState({ value }); + }; + + render() { + const { value } = this.state; + + return ( + + ); + } +} + +export default SimpleTableTextInput; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.d.ts new file mode 100644 index 00000000000..5d54cba1787 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.d.ts @@ -0,0 +1,4 @@ +export { + default as TableTextInput, + TableTextInputProps +} from './TableTextInput'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.js new file mode 100644 index 00000000000..eab02a44ac5 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/TableTextInput/index.js @@ -0,0 +1 @@ +export { default as TableTextInput } from './TableTextInput'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/index.d.ts new file mode 100644 index 00000000000..61799229f7b --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/index.d.ts @@ -0,0 +1,2 @@ +export * from './InlineEdit'; +export * from './TableTextInput'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/index.js b/packages/patternfly-4/react-inline-edit-extension/src/components/index.js new file mode 100644 index 00000000000..61799229f7b --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/index.js @@ -0,0 +1,2 @@ +export * from './InlineEdit'; +export * from './TableTextInput'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/index.d.ts new file mode 100644 index 00000000000..07635cbbc8e --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/index.d.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/index.js b/packages/patternfly-4/react-inline-edit-extension/src/index.js new file mode 100644 index 00000000000..07635cbbc8e --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/index.js @@ -0,0 +1 @@ +export * from './components'; 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 1df97d8d593..cdfe7f74d2f 100644 --- a/packages/patternfly-4/react-table/src/components/Table/Body.js +++ b/packages/patternfly-4/react-table/src/components/Table/Body.js @@ -20,15 +20,17 @@ const defaultProps = { }; class ContextBody extends React.Component { - onRow = (row, props) => { + onRow = (row, rowProps) => { const { onRowClick } = this.props; return { - isExpanded: row.isExpanded, - isOpen: row.isOpen, - onClick: event => { - if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'BUTTON') { - onRowClick(event, row, props); - } + row, + rowProps, + onMouseDown: event => { + const computedData = { + isInput: event.target.tagName !== 'INPUT', + isButton: event.target.tagName !== 'BUTTON' + }; + onRowClick(event, row, rowProps, computedData); } }; }; @@ -74,7 +76,9 @@ class ContextBody extends React.Component { rows.map((oneRow, oneRowKey) => ({ ...oneRow, ...this.mapCells(headerData, oneRow, oneRowKey), - isExpanded: isRowExpanded(oneRow, rows) + isExpanded: isRowExpanded(oneRow, rows), + isFirst: oneRowKey === 0, + isLast: oneRowKey === rows.length - 1 })); return ( @@ -96,7 +100,7 @@ class ContextBody extends React.Component { const TableBody = props => ( - {({ headerData, rows }) => } + {({ headerData, rows }) => } ); diff --git a/packages/patternfly-4/react-table/src/components/Table/RowWrapper.d.ts b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.d.ts new file mode 100644 index 00000000000..f0b070b1e55 --- /dev/null +++ b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.d.ts @@ -0,0 +1,16 @@ +import { UIEventHandler } from 'react'; + +export interface RowWrapperRow { + isOpen: Boolean; + isExpanded: Boolean; +} + +export interface RowWrapper { + trRef?: Function; + onScroll?: UIEventHandler; + onResize?: UIEventHandler; + row?: RowWrapperRow; + rowProps?: Object; +} + +export default RowWrapper; 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 fb26feb314b..6cbd20df65a 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,103 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { debounce } from '@patternfly/react-core'; import styles from '@patternfly/patternfly/components/Table/table.css'; import { css } from '@patternfly/react-styles'; -const RowWrapper = ({ isOpen, isExpanded, ...props }) => ( - -); +class RowWrapper extends React.Component { + constructor(props) { + super(props); + + if (props.onScroll) { + this.handleScroll = debounce(this.handleScroll, 100); + } + if (props.onResize) { + this.handleResize = debounce(this.handleResize, 100); + } + } + + componentDidMount() { + this._unmounted = false; + + if (this.props.onScroll) { + window.addEventListener('scroll', this.handleScroll); + } + if (this.props.onResize) { + window.addEventListener('resize', this.handleResize); + } + } + + componentWillUnmount() { + this._unmounted = true; + + if (this.props.onScroll) { + window.removeEventListener('scroll', this.handleScroll); + } + if (this.props.onResize) { + window.removeEventListener('resize', this.handleResize); + } + } + + handleScroll = event => { + if (!this._unmounted) { + this.props.onScroll(event); + } + }; + + handleResize = event => { + if (!this._unmounted) { + this.props.onResize(event); + } + }; + + render() { + const { + trRef, + className, + onScroll, + onResize, + row: { isExpanded }, + rowProps, + ...props + } = this.props; + + return ( + + ); + } +} RowWrapper.propTypes = { - isOpen: PropTypes.bool, - isExpanded: PropTypes.bool + trRef: PropTypes.func, + className: PropTypes.string, + onScroll: PropTypes.func, + onResize: PropTypes.func, + row: PropTypes.shape({ + isOpen: PropTypes.bool, + isExpanded: PropTypes.bool + }), + rowProps: PropTypes.object }; RowWrapper.defaultProps = { - isOpen: undefined, - isExpanded: undefined + trRef: undefined, + className: '', + onScroll: undefined, + onResize: undefined, + row: { + isOpen: undefined, + isExpanded: undefined + }, + rowProps: null }; export default RowWrapper; 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 ba41eb1bea2..3a1a4d58cd4 100644 --- a/packages/patternfly-4/react-table/src/components/Table/Table.js +++ b/packages/patternfly-4/react-table/src/components/Table/Table.js @@ -51,8 +51,12 @@ const propTypes = { ), /** Function should resolve an array of actions for each row in the same format as actions. */ actionResolver: PropTypes.func, - /** Function should resolve if action is disabled for each row */ + /** Function should resolve if action kebap is disabled for each row */ areActionsDisabled: PropTypes.func, + /** Override to the default BodyWrapper renderer */ + bodyWrapper: PropTypes.func, + /** Override to the default RowWrapper renderer */ + rowWrapper: PropTypes.func, /** Actual rows to display in table. Either array of strings or row objects.
* If you want to use components in row cells you can pass them as title prop in cells definition.
*
Ex: rows:[
@@ -188,6 +192,8 @@ class Table extends React.Component {
       variant,
       rows,
       cells,
+      bodyWrapper,
+      rowWrapper,
       ...props
     } = this.props;
 
@@ -220,8 +226,8 @@ class Table extends React.Component {
           {...props}
           renderers={{
             body: {
-              wrapper: BodyWrapper,
-              row: RowWrapper,
+              wrapper: bodyWrapper || BodyWrapper,
+              row: rowWrapper || RowWrapper,
               cell: BodyCell
             },
             header: {
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 d1e102a80b7..ca00452d4f8 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
@@ -463,6 +463,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -503,6 +504,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -542,6 +544,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -581,6 +584,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -620,6 +624,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -660,6 +665,7 @@ exports[`Actions table 1`] = `
               [Function],
             ],
           },
+          "data": undefined,
           "extraParams": Object {
             "actionResolver": [Function],
             "actions": undefined,
@@ -745,6 +751,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -785,6 +792,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -824,6 +832,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -863,6 +872,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -902,6 +912,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -942,6 +953,7 @@ exports[`Actions table 1`] = `
                           [Function],
                         ],
                       },
+                      "data": undefined,
                       "extraParams": Object {
                         "actionResolver": [Function],
                         "actions": undefined,
@@ -1128,6 +1140,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1168,6 +1181,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1207,6 +1221,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1246,6 +1261,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1285,6 +1301,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1325,6 +1342,7 @@ exports[`Actions table 1`] = `
                     [Function],
                   ],
                 },
+                "data": undefined,
                 "extraParams": Object {
                   "actionResolver": [Function],
                   "actions": undefined,
@@ -1472,6 +1490,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 0,
                   "isExpanded": undefined,
+                  "isFirst": true,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1513,6 +1533,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 1,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1554,6 +1576,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 2,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1595,6 +1619,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 3,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1636,6 +1662,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 4,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1677,6 +1705,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 5,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1718,6 +1748,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 6,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1759,6 +1791,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 7,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1800,6 +1834,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 8,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": true,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1847,6 +1883,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 0,
                   "isExpanded": undefined,
+                  "isFirst": true,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1888,6 +1926,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 1,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1929,6 +1969,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 2,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -1970,6 +2012,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 3,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2011,6 +2055,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 4,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2052,6 +2098,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 5,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2093,6 +2141,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 6,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2134,6 +2184,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 7,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": false,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2175,6 +2227,8 @@ exports[`Actions table 1`] = `
                   },
                   "id": 8,
                   "isExpanded": undefined,
+                  "isFirst": false,
+                  "isLast": true,
                   "last-commit": Object {
                     "props": Object {
                       "isVisible": true,
@@ -2223,6 +2277,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 0,
                     "isExpanded": undefined,
+                    "isFirst": true,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2264,6 +2320,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 1,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2305,6 +2363,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 2,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2346,6 +2406,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 3,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2387,6 +2449,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 4,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2428,6 +2492,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 5,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2469,6 +2535,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 6,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2510,6 +2578,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 7,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": false,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2551,6 +2621,8 @@ exports[`Actions table 1`] = `
                     },
                     "id": 8,
                     "isExpanded": undefined,
+                    "isFirst": false,
+                    "isLast": true,
                     "last-commit": Object {
                       "props": Object {
                         "isVisible": true,
@@ -2590,6 +2662,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2630,6 +2703,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2669,6 +2743,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2708,6 +2783,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2747,6 +2823,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2787,6 +2864,7 @@ exports[`Actions table 1`] = `
                             [Function],
                           ],
                         },
+                        "data": undefined,
                         "extraParams": Object {
                           "actionResolver": [Function],
                           "actions": undefined,
@@ -2852,6 +2930,8 @@ exports[`Actions table 1`] = `
                       },
                       "id": 0,
                       "isExpanded": undefined,
+                      "isFirst": true,
+                      "isLast": false,
                       "last-commit": Object {
                         "props": Object {
                           "isVisible": true,
@@ -2876,12 +2956,64 @@ exports[`Actions table 1`] = `
                   rowKey="0-row"
                 >
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                       
                   
                     
                        {
           .replace(/\s/g, '-')) ||
       `column-${key}`,
     extraParams: extra,
+    data: column.data,
     header: generateHeader(column, title),
     cell: generateCell(column, extra),
     props: {

From dfb18fdba7fcf5563eb0313e038ff694eba00a9c Mon Sep 17 00:00:00 2001
From: suomiy 
Date: Thu, 7 Mar 2019 15:34:03 +0100
Subject: [PATCH 2/2] feat(Table): support inline editing for collapsible rows 
 in PF4

---
 .../react-inline-edit-extension/package.json  |   10 +-
 .../components/InlineEdit/ConfirmButtons.js   |    2 +-
 .../InlineEdit/ConfirmButtons.test.js         |   36 +
 .../InlineEdit/InlineEdit.api.test.js         |  170 ++
 .../components/InlineEdit/InlineEdit.docs.js  |    6 +-
 .../__snapshots__/ConfirmButtons.test.js.snap |  211 +++
 .../editableRowWrapper.test.js.snap           |   67 +
 .../src/components/InlineEdit/constants.d.ts  |    1 +
 .../src/components/InlineEdit/constants.js    |    1 +
 .../InlineEdit/css/inline-edit-css.js         |    8 +-
 .../InlineEdit/editableRowWrapper.d.ts        |    4 +-
 .../InlineEdit/editableRowWrapper.js          |   66 +-
 .../InlineEdit/editableRowWrapper.test.js     |  125 ++
 .../InlineEdit/editableTableBody.d.ts         |   21 +-
 .../InlineEdit/editableTableBody.js           |   71 +-
 .../examples/CollapsibleEditableTable.js      |  284 ++++
 .../InlineEdit/examples/EditableTable.js      |  114 +-
 .../examples/EditableTableColumn.js           |   71 +-
 .../src/components/InlineEdit/index.d.ts      |    4 +-
 .../inlineEditFormatterFactory.d.ts           |    6 +-
 .../formatters/inlineEditFormatterFactory.js  |    9 +-
 .../inlineEditFormatterFactory.test.js        |   17 +-
 .../src/components/InlineEdit/utils/utils.js  |   11 +
 .../src/test-helpers/data-sets.js             |   39 +
 .../src/test-helpers/helpers.js               |    8 +
 .../react-table/src/components/Table/Body.js  |   21 +-
 .../src/components/Table/RowWrapper.test.js   |   24 +
 .../src/components/Table/Table.d.ts           |    8 +-
 .../__snapshots__/RowWrapper.test.js.snap     |   73 +
 .../Table/__snapshots__/Table.test.js.snap    | 1398 +++++++++++++++++
 .../Table/utils/decorators/headerCol.js       |   11 +-
 31 files changed, 2742 insertions(+), 155 deletions(-)
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.test.js
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.api.test.js
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/ConfirmButtons.test.js.snap
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/editableRowWrapper.test.js.snap
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.test.js
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/CollapsibleEditableTable.js
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/test-helpers/data-sets.js
 create mode 100644 packages/patternfly-4/react-inline-edit-extension/src/test-helpers/helpers.js
 create mode 100644 packages/patternfly-4/react-table/src/components/Table/RowWrapper.test.js
 create mode 100644 packages/patternfly-4/react-table/src/components/Table/__snapshots__/RowWrapper.test.js.snap

diff --git a/packages/patternfly-4/react-inline-edit-extension/package.json b/packages/patternfly-4/react-inline-edit-extension/package.json
index bb21fa5045d..282446e3970 100644
--- a/packages/patternfly-4/react-inline-edit-extension/package.json
+++ b/packages/patternfly-4/react-inline-edit-extension/package.json
@@ -27,11 +27,11 @@
   },
   "homepage": "https://github.com/patternfly/patternfly-react/tree/master/packages/patternfly-4/",
   "dependencies": {
-    "@patternfly/patternfly": "1.0.240",
-    "@patternfly/react-core": "^2.6.1",
-    "@patternfly/react-table": "^1.3.3",
-    "@patternfly/react-icons": "^3.3.1",
-    "@patternfly/react-styles": "^2.3.9",
+    "@patternfly/patternfly": "1.0.244",
+    "@patternfly/react-core": "^2.9.2",
+    "@patternfly/react-table": "^1.3.4",
+    "@patternfly/react-icons": "^3.6.1",
+    "@patternfly/react-styles": "^2.4.0",
     "classnames": "^2.2.5",
     "exenv": "^1.2.2",
     "reactabular-table": "^8.14.0"
diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js
index d7b1735c2c5..2192904037c 100644
--- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js
+++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.js
@@ -18,7 +18,7 @@ const buttonsTopPosition = (window, rowDimensions, bold) => {
 const buttonsBottomPosition = (window, rowDimensions, bold) => {
   const boldShift = bold ? -1 : 0;
   return {
-    top: rowDimensions.bottom + boldShift,
+    top: rowDimensions.bottom - 1 + boldShift,
     right: window.width - rowDimensions.right + 10
   };
 };
diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.test.js
new file mode 100644
index 00000000000..ac12f4a72d7
--- /dev/null
+++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/ConfirmButtons.test.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import { mount } from 'enzyme/build';
+
+import { default as ConfirmButtons } from './ConfirmButtons';
+
+const getConfirmButtons = () => (
+  
+);
+
+describe('ConfirmButtons', () => {
+  test('renders correctly', () => {
+    const view = mount(getConfirmButtons());
+    expect(view).toMatchSnapshot();
+  });
+});
diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.api.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.api.test.js
new file mode 100644
index 00000000000..eaa3ad8ca31
--- /dev/null
+++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.api.test.js
@@ -0,0 +1,170 @@
+import React from 'react';
+import { mount } from 'enzyme';
+import { Table, TableHeader, TableBody, RowWrapper } from '@patternfly/react-table';
+import { TextInput } from '@patternfly/react-core';
+
+import { default as editableRowWrapper } from './editableRowWrapper';
+import { default as editableTableBody } from './editableTableBody';
+import { inlineEditFormatterFactory } from './utils';
+import { TableEditConfirmation } from './constants';
+import { TableTextInput } from '../TableTextInput';
+
+import { rows, columns } from '../../test-helpers/data-sets';
+import { mockClosest, makeTableId } from '../../test-helpers/helpers';
+
+const firstColTitle = 'editcolfirst';
+const lastColTitle = 'editcollast';
+const firstInputName = 'inputOne';
+const secondInputName = 'inputTwo';
+
+const editRowIndex = 2;
+
+const firstColEditedRowInputId = {
+  rowIndex: editRowIndex,
+  columnIndex: 0,
+  column: {
+    property: firstColTitle
+  },
+  name: firstInputName
+};
+
+const lastColEditedRowInputId = {
+  rowIndex: editRowIndex,
+  columnIndex: columns.length + 2 - 1,
+  column: {
+    property: lastColTitle
+  },
+  name: secondInputName
+};
+
+describe('Editable table', () => {
+  let mountOptions;
+  let container;
+
+  beforeEach(() => {
+    container = mount(
); + + mountOptions = { + attachTo: container.getDOMNode() + }; + + // mock closest for selecting the first column (firing onEditCellClicked) and resolving table for confirm buttons + mockClosest( + { + '[data-key]': { + getAttribute: () => firstColEditedRowInputId.columnIndex, + contains: elem => elem.getAttribute('id') === makeTableId(firstColEditedRowInputId) + }, + '[id]': { + getAttribute: () => makeTableId(firstColEditedRowInputId) + } + }, + selector => (selector === 'table' ? container.getDOMNode().getElementsByTagName('table')[0] : undefined), + true + ); + }); + + afterEach(() => { + container.unmount(); + }); + + test('should call correct function', () => { + const ComposedBody = editableTableBody(TableBody); + const ComposedRowWrapper = editableRowWrapper(RowWrapper); + + const onBlur = jest.fn(); + + const inlineEditingFormatter = inlineEditFormatterFactory({ + renderEdit: (value, { columnIndex, rowIndex, column }, { activeEditId }) => { + const firstInputId = makeTableId({ + rowIndex, + columnIndex, + column, + name: firstInputName + }); + const secondInputId = makeTableId({ + rowIndex, + columnIndex, + column, + name: secondInputName + }); + return ( + + + + + ); + } + }); + + const editableCols = [ + { + title: firstColTitle, + cellFormatters: [inlineEditingFormatter] + }, + ...columns, + { + title: lastColTitle, + cellFormatters: [inlineEditingFormatter] + } + ]; + + const editableRows = rows.map(row => ({ + ...row, + cells: ['', ...row.cells, ''] // add two new columns + })); + editableRows[editRowIndex].isEditing = true; + + const editConfig = { + activeEditId: makeTableId(lastColEditedRowInputId), + onEditCellClicked: jest.fn(), + editConfirmationType: TableEditConfirmation.ROW, + onEditConfirmed: jest.fn(), + onEditCanceled: jest.fn() + }; + const view = mount( + + + +
, + mountOptions + ); + + // calls onBlur properly + const editTextInputWrapper = view + .find(TextInput) + .find(`#${makeTableId(lastColEditedRowInputId)}`) + .first(); + editTextInputWrapper.prop('onBlur')({ currentTarget: { value: 'water' } }); + + expect(onBlur).toHaveBeenCalled(); + expect(onBlur.mock.calls).toHaveLength(1); + expect(onBlur.mock.calls[0][0]).toBe('water'); + + // responds to cell click + view + .find(`#${makeTableId(firstColEditedRowInputId)}`) + .hostNodes() + .simulate('mousedown'); + + // should immediately call onEditCellClicked + setTimeout(() => expect(editConfig.onEditCellClicked).toHaveBeenCalled(), 0); + + // responds to confirmation button clicks + view.find('.pf-c-table__inline-edit-buttons button.pf-c-button.pf-m-primary').simulate('mouseup'); + expect(editConfig.onEditConfirmed).toHaveBeenCalled(); + + view.find('.pf-c-table__inline-edit-buttons button.pf-c-button.pf-m-plain').simulate('mouseup'); + expect(editConfig.onEditCanceled).toHaveBeenCalled(); + }); +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js index 9d90d7ad94b..5700703aa6d 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/InlineEdit.docs.js @@ -1,11 +1,13 @@ import EditableTable from './examples/EditableTable'; import EditableTableColumn from './examples/EditableTableColumn'; +import CollapsibleEditableTable from './examples/CollapsibleEditableTable'; export default { - title: 'Inline Editing Table', + title: 'Inline Edit Table', components: {}, examples: [ { component: EditableTable, title: 'Editable table With Inline Edit Row' }, - { component: EditableTableColumn, title: 'Editable Table With Inline Edit Columns' } + { component: EditableTableColumn, title: 'Editable Table With Inline Edit Columns' }, + { component: CollapsibleEditableTable, title: 'Editable Table With Collapsible Rows' } ] }; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/ConfirmButtons.test.js.snap b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/ConfirmButtons.test.js.snap new file mode 100644 index 00000000000..beb6f13405a --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/ConfirmButtons.test.js.snap @@ -0,0 +1,211 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ConfirmButtons renders correctly 1`] = ` +.pf-c-button.pf-m-primary { + display: inline-block; + position: relative; + padding: 0.375rem 1rem 0.375rem 1rem; + font-size: 1rem; + font-weight: 500; + line-height: 1.5; + text-align: center; + white-space: nowrap; + user-select: none; + border: 0px; + border-radius: 3px; + color: #ffffff; + background-color: #007bba; +} +.pf-c-button.pf-m-plain { + display: inline-block; + position: relative; + padding: 0.375rem 1rem 0.375rem 1rem; + font-size: 1rem; + font-weight: 500; + line-height: 1.5; + text-align: center; + white-space: nowrap; + user-select: none; + border: 0px; + border-radius: 3px; + color: #72767b; +} +.pf-c-table__inline-edit-buttons.pf-m-top.pf-m-bold { + display: block; + position: fixed; + z-index: 1000; + padding: 4px; + margin: 0px; + background: #def3ff; + border: 1px solid #7dc3e8; + border-bottom: 0; + border-width: 3px; +} + + +
+ + + + + + + + +
+
+`; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/editableRowWrapper.test.js.snap b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/editableRowWrapper.test.js.snap new file mode 100644 index 00000000000..541f9fee115 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/__snapshots__/editableRowWrapper.test.js.snap @@ -0,0 +1,67 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`editableRowWrapper renders correctly 1`] = ` +.pf-c-table__editable-row { + display: block; +} + +, + ], + Array [ + null, + ], + Array [ + , + ], + ], + "results": Array [ + Object { + "isThrow": false, + "value": undefined, + }, + Object { + "isThrow": false, + "value": undefined, + }, + Object { + "isThrow": false, + "value": undefined, + }, + ], + } + } +> + + + + +`; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts index d0bdde25616..0dd282396c7 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.d.ts @@ -1,6 +1,7 @@ export const TableEditConfirmation: { NONE: 'NONE', ROW: 'ROW', + NO_CONFIRM_ROW: 'NO_CONFIRM_ROW', TABLE_TOP: 'TABLE_TOP', TABLE_BOTTOM: 'TABLE_BOTTOM' }; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js index ffdc47e0286..44d37c295f1 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/constants.js @@ -1,6 +1,7 @@ export const TableEditConfirmation = { NONE: 'NONE', ROW: 'ROW', + NO_CONFIRM_ROW: 'NO_CONFIRM_ROW', TABLE_TOP: 'TABLE_TOP', TABLE_BOTTOM: 'TABLE_BOTTOM' }; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js index ca6bb9711db..fcc7ed75172 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/css/inline-edit-css.js @@ -4,15 +4,13 @@ const pfColorBlue50 = '#def3ff'; const pfColorBlue200 = '#7dc3e8'; export const inlineEditCss = StyleSheet.parse(` - .pf-c-table__editable-row { - border: 1px solid transparent; - + tr.pf-c-table__editable-row { &:hover, &.pf-m-editing { + background: ${pfColorBlue50} !important; td { - background: ${pfColorBlue50}; - border-top: 1px solid ${pfColorBlue200} !important; border-bottom: 1px solid ${pfColorBlue200} !important; + border-top: 1px solid ${pfColorBlue200} !important; &:first-child { border-left: 1px solid ${pfColorBlue200} !important; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts index 85d3f9ebe42..742af07ad4e 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.d.ts @@ -6,8 +6,8 @@ import { EditConfig } from './editableTableBody' export interface EditableRowWrapperRow extends RowWrapperRow { isEditing: boolean; isTableEditing: boolean; - isLast: boolean; - isFirst: boolean; + isFirstVisible: boolean; + isLastVisible: boolean; editConfig: EditConfig; } diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js index 5e522937273..490b0af94ad 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.js @@ -27,8 +27,11 @@ const propTypes = { isExpanded: PropTypes.bool, isEditing: PropTypes.bool, isTableEditing: PropTypes.bool, - isLast: PropTypes.bool, - isFirst: PropTypes.bool, + isFirstVisible: PropTypes.bool, + isLastVisible: PropTypes.bool, + isChildEditing: PropTypes.bool, + isParentEditing: PropTypes.bool, + isLastVisibleParent: PropTypes.bool, editConfig: PropTypes.object }), rowProps: PropTypes.object @@ -45,38 +48,54 @@ const defaultProps = { isExpanded: undefined, isEditing: undefined, isTableEditing: undefined, - isLast: undefined, - isFirst: undefined, + isFirstVisible: undefined, + isLastVisible: undefined, + isChildEditing: undefined, + isParentEditing: undefined, + isLastVisibleParent: undefined, editConfig: undefined }, rowProps: null }; +// TableEditConfirmation constants like TABLE_TOP cannot be referenced but must be hardcoded due to this issue: +// https://github.com/reactjs/react-docgen/issues/317#issue-393678795 const tableConfirmationMapper = { - [TableEditConfirmation.TABLE_TOP]: { - hasConfirmationButtons: ({ isTableEditing, isFirst }) => isTableEditing && isFirst, + TABLE_TOP: { + hasConfirmationButtons: ({ isTableEditing, isFirstVisible }) => isTableEditing && isFirstVisible, isTableConfirmation: () => true, areButtonsOnTop: () => true, hasBoldBorder: () => true, - getEditStyles: ({ isTableEditing, isFirst }) => - css(styles.tableEditableRow, isTableEditing && isFirst && styles.modifiers.tableEditingFirstRow) + getEditStyles: ({ isTableEditing, isFirstVisible }) => + css(styles.tableEditableRow, isTableEditing && isFirstVisible && styles.modifiers.tableEditingFirstRow) }, - [TableEditConfirmation.TABLE_BOTTOM]: { - hasConfirmationButtons: ({ isTableEditing, isLast }) => isTableEditing && isLast, + TABLE_BOTTOM: { + hasConfirmationButtons: ({ isTableEditing, isLastVisible }) => isTableEditing && isLastVisible, isTableConfirmation: () => true, areButtonsOnTop: () => false, hasBoldBorder: () => true, - getEditStyles: ({ isTableEditing, isLast }) => - css(styles.tableEditableRow, isTableEditing && isLast && styles.modifiers.tableEditingLastRow) + getEditStyles: ({ isTableEditing, isLastVisible }) => + css(styles.tableEditableRow, isTableEditing && isLastVisible && styles.modifiers.tableEditingLastRow) }, - [TableEditConfirmation.ROW]: { - hasConfirmationButtons: ({ isEditing }) => isEditing, + ROW: { + hasConfirmationButtons: ({ isEditing, isParentEditing, isLastVisibleParent, isChildEditing, isLastVisible }) => + isEditing && + !(isChildEditing && isParentEditing) && // buttons can't appear in the middle + !(isParentEditing && isLastVisible) && // parent will show the buttons on top + !(isChildEditing && !isLastVisibleParent), // child will show the buttons on bottom isTableConfirmation: () => false, - areButtonsOnTop: ({ isLast }) => isLast, + areButtonsOnTop: ({ isLastVisible, isLastVisibleParent }) => isLastVisible || isLastVisibleParent, hasBoldBorder: () => false, getEditStyles: ({ isEditing }) => css(styles.tableEditableRow, isEditing && styles.modifiers.editing) }, - [TableEditConfirmation.NONE]: { + NO_CONFIRM_ROW: { + hasConfirmationButtons: () => false, + isTableConfirmation: () => false, + areButtonsOnTop: () => false, + hasBoldBorder: () => false, + getEditStyles: ({ isEditing }) => css(styles.tableEditableRow, isEditing && styles.modifiers.editing) + }, + NONE: { hasConfirmationButtons: () => false, isTableConfirmation: () => false, areButtonsOnTop: () => false, @@ -105,9 +124,8 @@ const editableRowWrapper = RowWrapperComponent => { }); setStateWith2dEquals = newState => { - this.setState( - oldState => - Object.keys(newState).find(key => !shallowLeftSideEquals(newState[key], oldState[key])) ? newState : null + this.setState(oldState => + Object.keys(newState).find(key => !shallowLeftSideEquals(newState[key], oldState[key])) ? newState : null ); }; @@ -150,7 +168,7 @@ const editableRowWrapper = RowWrapperComponent => { getConfirmationButtons() { const { row, rowProps, ...props } = this.props; - const { isLast, editConfig } = row; + const { isLastVisible, isParentEditing, isLastVisibleParent, editConfig } = row; if (!editConfig) { return null; @@ -167,7 +185,7 @@ const editableRowWrapper = RowWrapperComponent => { {...props} onConfirm={event => onEditConfirmed(event, actionObject, options)} onCancel={event => onEditCanceled(event, actionObject, options)} - buttonsOnTop={tableConfirmation.areButtonsOnTop({ isLast })} + buttonsOnTop={tableConfirmation.areButtonsOnTop({ isLastVisible, isParentEditing, isLastVisibleParent })} boldBorder={tableConfirmation.hasBoldBorder()} environment={{ window: this.state.window, @@ -186,14 +204,14 @@ const editableRowWrapper = RowWrapperComponent => { className, onScroll, onResize, - row: { isFirst, isLast, isEditing, isTableEditing, editConfig } + row: { isFirstVisible, isLastVisible, isEditing, isTableEditing, editConfig } } = this.props; const { hasConfirmationButtons } = this.state; const trClassName = getTableConfirmation({ editConfig }).getEditStyles({ isEditing, isTableEditing, - isFirst, - isLast + isFirstVisible, + isLastVisible }); return ( diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.test.js new file mode 100644 index 00000000000..0024bec2777 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableRowWrapper.test.js @@ -0,0 +1,125 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { mount } from 'enzyme/build'; + +import { default as editableRowWrapper } from './editableRowWrapper'; +import { TableEditConfirmation } from './constants'; +import { mockClosest } from '../../test-helpers/helpers'; + +const TestRow = ({ trRef }) => ; + +TestRow.propTypes = { + trRef: PropTypes.func +}; + +TestRow.defaultProps = { + trRef: null +}; + +const getRowWrapper = (row, props) => { + const RowWrapper = editableRowWrapper(TestRow); + return ; +}; + +const buildRow = (row = {}, editConfirmationType = TableEditConfirmation.ROW) => ({ + ...row, + editConfig: { editConfirmationType } +}); + +describe('editableRowWrapper', () => { + let mountOptions; + let container; + + beforeEach(() => { + container = mount( + + +
+ ); + mountOptions = { + attachTo: container.find('tbody').getDOMNode() + }; + + mockClosest(null, selector => (selector === 'table' ? container.getDOMNode() : undefined), true); + }); + + afterEach(() => { + container.unmount(); + }); + + test('renders correctly', () => { + const trRef = jest.fn(); + const view = mount( + getRowWrapper(buildRow({}, null), { + onResize: jest.fn(), + onScroll: jest.fn(), + trRef + }), + mountOptions + ); + expect(view).toMatchSnapshot(); + expect(trRef).toHaveBeenCalled(); + }); + + test('sets editable row classname', () => { + [...Object.keys(TableEditConfirmation), null].forEach(confirmationType => { + const view = mount(getRowWrapper(buildRow({}, confirmationType)), mountOptions); + expect(view.find('.pf-c-table__editable-row')).toHaveLength(1); + view.detach(); + }); + }); + + test('has inline edit buttons', () => { + [ + buildRow({ isEditing: true }), + buildRow({ isEditing: true, isParentEditing: true }), // expandable + buildRow({ isEditing: true, isChildEditing: true, isLastVisibleParent: true }), // expandable + buildRow({ isTableEditing: true, isFirstVisible: true }, TableEditConfirmation.TABLE_TOP), + buildRow({ isTableEditing: true, isLastVisible: true }, TableEditConfirmation.TABLE_BOTTOM) + ].forEach(row => { + const view = mount(getRowWrapper(row), mountOptions); + expect(view.find('.pf-c-table__inline-edit-buttons')).toHaveLength(1); + view.detach(); + }); + }); + + test('does not have inline edit buttons', () => { + [ + buildRow({ isEditing: true }, TableEditConfirmation.NONE), + buildRow({ isEditing: true }, TableEditConfirmation.TABLE_TOP), + buildRow({ isEditing: true }, TableEditConfirmation.TABLE_BOTTOM), + buildRow({ isEditing: true, isParentEditing: true, isLastVisible: true }), // expandable + buildRow({ isEditing: true, isChildEditing: true }), // expandable + buildRow({ isTableEditing: true, isLastVisible: true }, TableEditConfirmation.NONE), + buildRow({ isTableEditing: true, isLastVisible: true }), + buildRow({ isTableEditing: true }, TableEditConfirmation.TABLE_TOP), + buildRow({ isTableEditing: true }, TableEditConfirmation.TABLE_BOTTOM), + buildRow({ isTableEditing: true, isLastVisible: true }, TableEditConfirmation.TABLE_TOP), + buildRow({ isTableEditing: true, isFirstVisible: true }, TableEditConfirmation.TABLE_BOTTOM) + ].forEach(row => { + const view = mount(getRowWrapper(row), mountOptions); + expect(view.find('.pf-c-table__inline-edit-buttons')).toHaveLength(0); + view.detach(); + }); + }); + + test('onEditConfirmed and onEditCanceled called', () => { + const onEditConfirmed = jest.fn(); + const onEditCanceled = jest.fn(); + const row = { + isEditing: true, + editConfig: { + editConfirmationType: TableEditConfirmation.ROW, + onEditConfirmed, + onEditCanceled + } + }; + + const view = mount(getRowWrapper(row, null, React.Fragment), mountOptions); + view.find('.pf-c-table__inline-edit-buttons button.pf-c-button.pf-m-primary').simulate('mouseup'); + expect(onEditConfirmed).toHaveBeenCalled(); + + view.find('.pf-c-table__inline-edit-buttons button.pf-c-button.pf-m-plain').simulate('mouseup'); + expect(onEditCanceled).toHaveBeenCalled(); + }); +}); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts index dddc74eb5d4..1e18ead8296 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.d.ts @@ -1,34 +1,25 @@ import { Component, FunctionComponent, MouseEvent } from 'react'; -import { TableBodyProps } from '@patternfly/react-table'; +import { TableBodyProps, IRowData, IExtraRowData } from '@patternfly/react-table'; import { OneOf } from '@patternfly/react-core'; import { TableEditConfirmation } from './constants' - -export interface RowData { -} - -export interface RowProps { - rowIndex: number; - rowKey: string; -} - -export interface RowExtraProps extends RowProps { +export interface IEditedCellData extends IExtraRowData { columnIndex: number; + elementId?: string; } export interface EditConfig { editConfirmationType?: OneOf; - onEditCellChanged?(value: MouseEvent, row: RowData, extra: RowExtraProps): void; - onEditConfirmed?(value: MouseEvent, row: RowData, rowProps: RowProps): void; - onEditCanceled?(value: MouseEvent, row: RowData, rowProps: RowProps): void; + onEditCellClicked?(value: MouseEvent, row: IRowData, extra: IEditedCellData): void; + onEditConfirmed?(value: MouseEvent, row: IRowData, rowProps: IExtraRowData): void; + onEditCanceled?(value: MouseEvent, row: IRowData, rowProps: IExtraRowData): void; } export interface InlineEditBodyProps extends TableBodyProps { editConfig: EditConfig; } - export interface EditableTableBody { (bodyComponent: Component): FunctionComponent; } diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js index cc67feaa99c..29978e1f727 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/editableTableBody.js @@ -1,14 +1,15 @@ import React from 'react'; -import { TableContext, TableBody } from '@patternfly/react-table'; +import { TableContext, TableBody, isRowExpanded } from '@patternfly/react-table'; import PropTypes from 'prop-types'; import { TableEditConfirmation } from './constants'; +import { showIdWarnings } from './utils/utils'; const propTypes = { ...TableBody.propTypes, editConfig: PropTypes.shape({ editConfirmationType: PropTypes.oneOf(Object.values(TableEditConfirmation)), - onEditCellChanged: PropTypes.func, + onEditCellClicked: PropTypes.func, onEditConfirmed: PropTypes.func, onEditCanceled: PropTypes.func }).isRequired, @@ -22,20 +23,60 @@ const defaultProps = { onRowClick: () => undefined }; +const resolveCascadeEditability = rows => { + const isRowExpandedIndexes = new Set( + rows.map((row, idx) => (isRowExpanded(row, rows) ? idx : null)).filter(row => row !== null) + ); + + // flag parents and their children which are edited together + rows + .filter( + (row, idx) => + row.parent !== undefined && + row.isEditing && + isRowExpandedIndexes.has(idx) && + row.isEditableTogetherWithParent && + rows[row.parent].isEditing + ) + .forEach(row => { + rows[row.parent].isChildEditing = true; + row.isParentEditing = true; + }); + + const lastVisibleRow = rows.filter((row, idx) => !row.parent || isRowExpandedIndexes.has(idx)).pop(); + + // flag last parent row if there are only descendants under it + if (lastVisibleRow && lastVisibleRow.isParentEditing) { + let parentRow = lastVisibleRow; + while (parentRow.parent !== undefined && parentRow.isEditableTogetherWithParent) { + parentRow = rows[parentRow.parent]; + } + parentRow.isLastVisibleParent = true; + } +}; + const onRow = (event, row, rowProps, computedData, { onRowClick, editConfig }) => { - const cell = event.target.closest('[data-key]'); + const { target } = event; + const cell = target.closest('[data-key]'); const cellNumber = parseInt(cell && cell.getAttribute('data-key')); const hasCellNumber = !Number.isNaN(cellNumber); - let onEditCellChanged; - let targetsAlreadyEditedCell = false; + let onEditCellClicked; + + if (hasCellNumber && editConfig && typeof editConfig.onEditCellClicked === 'function') { + // resolve closest (e.g. for dropdowns) usable id of a clicked element inside a cell + const idElement = target.closest('[id]'); + const elementId = idElement && cell.contains(idElement) ? idElement.getAttribute('id') || null : null; - if (hasCellNumber && editConfig && typeof editConfig.onEditCellChanged === 'function') { - targetsAlreadyEditedCell = cellNumber === row.activeEditCell; - onEditCellChanged = () => { - editConfig.onEditCellChanged(event, row, { + if (!elementId) { + showIdWarnings(row, target); + } + + onEditCellClicked = () => { + editConfig.onEditCellClicked(event, row, { ...rowProps, - columnIndex: cellNumber + columnIndex: cellNumber, + elementId }); }; } @@ -45,12 +86,12 @@ const onRow = (event, row, rowProps, computedData, { onRowClick, editConfig }) = setTimeout(() => { if (!row.isEditing) { onRowClick(event, row, rowProps, computedData); - if (onEditCellChanged) { + if (onEditCellClicked) { // edit cell after rerender - setTimeout(onEditCellChanged, 0); + setTimeout(onEditCellClicked, 0); } - } else if (onEditCellChanged && !targetsAlreadyEditedCell) { - onEditCellChanged(); + } else if (onEditCellClicked) { + onEditCellClicked(); } }, 0); }; @@ -63,6 +104,8 @@ const Body = ({ BodyComponent, rows, editConfig, onRowClick, ...props }) => { isTableEditing })); + resolveCascadeEditability(mappedRows); + return ( + `${column.property}-${rowIndex}-${columnIndex}${name ? `-${name}` : ''}`; + + constructor(props) { + super(props); + + const childEditRenderer = (value, { column, rowIndex, rowData, columnIndex, activeEditId }) => ( + + {rowData.data.modules.map((module, idx) => { + const inlineStyle = { + marginLeft: idx && '1em', + display: 'inline-block', + width: '48%' + }; + + const id = this.makeId({ rowIndex, columnIndex, column, name: `module-${idx}` }); + + return ( + + this.onChange(newValue, { + rowIndex, + moduleIndex: idx + }) + } + autoFocus={activeEditId === id} + /> + ); + })} + + ); + + const parentEditRenderer = (value, { column, rowIndex, columnIndex, activeEditId }) => { + const id = this.makeId({ rowIndex, columnIndex, column, name: 'parent-repo' }); + return ( + + this.onChange(newValue, { + rowIndex, + columnIndex + }) + } + autoFocus={activeEditId === id} + /> + ); + }; + + const textInputFormatter = inlineEditFormatterFactory({ + renderValue: (value, { rowData }) => + rowData.hasOwnProperty('parent') ? ( + {rowData.data.modules.filter(a => a).join(', ')} + ) : ( + value + ), + renderEdit: (value, { column, columnIndex, rowIndex, rowData }, { activeEditId }) => { + const renderer = rowData.hasOwnProperty('parent') ? childEditRenderer : parentEditRenderer; + return renderer(value, { rowData, column, rowIndex, columnIndex, activeEditId }); + } + }); + + this.state = { + columns: [ + { + title: 'Repositories', + cellFormatters: [textInputFormatter] + }, + { + title: 'Branches' + }, + 'Pull requests', + { + title: 'Workspaces', + cellFormatters: [textInputFormatter] + }, + { + title: 'Last Commit', + cellFormatters: [textInputFormatter] + } + ], + rows: [ + { + cells: ['one', 'master', 7, 'Grey', 'five'], + isOpen: false + }, + { + cells: [null], + data: { + modules: ['', ''] + }, + parent: 0, + isEditableTogetherWithParent: true + }, + { + cells: ['uno', 'v2.3.0', 125, 'Orange', 'cinco'], + isOpen: false + }, + { + cells: [null], + data: { + modules: ['storage', ''] + }, + parent: 2 + }, + { + cells: ['', 'master', 0, 'Blue', ''], + isOpen: true + }, + { + cells: [null], + data: { + modules: ['security', 'network'] + }, + parent: 4, + isEditableTogetherWithParent: true + } + ], + editedRowsBackup: null, + activeEditId: null + }; + } + + onChange = (value, { rowIndex, columnIndex, moduleIndex }) => { + this.setState(({ rows }) => { + rows = [...rows]; + const row = rows[rowIndex]; + if (moduleIndex != null) { + row.data.modules[moduleIndex] = value; + } else { + const shiftedColumnIndex = columnIndex - 1; // to take Expandable Column into account; + row.cells[shiftedColumnIndex] = value; + } + return { rows, activeEditId: null }; + }); + }; + + onEditCellClicked = (event, clickedRow, { rowIndex, columnIndex, elementId }) => { + const EXPANDABLE_COL = 0; + const ACTIONS_COL = 6; + + if (elementId !== this.state.activeEditId && clickedRow.isEditing && columnIndex !== ACTIONS_COL) { + this.setState(({ rows }) => ({ + activeEditId: elementId, + rows: rows.map((row, id) => { + if (id === rowIndex && columnIndex === EXPANDABLE_COL && row.hasOwnProperty('isOpen')) { + row.isOpen = !row.isOpen; + } + return row; + }) + })); + } + }; + + // depth max 1 in this example + getParentId = (rowId, rows) => (rows[rowId].parent === undefined ? rowId : rows[rowId].parent); + getChildIdId = (rowId, rows) => + rows[rowId].parent === undefined + ? rows.map((row, idx) => (row.parent === rowId ? idx : null)).find(idx => idx !== null) + : rowId; + + onEditActionClick = (event, rowId) => { + this.setState(({ rows, editedRowBackup }) => { + if (!editedRowBackup) { + const childId = this.getChildIdId(rowId, rows); + const parentId = this.getParentId(rowId, rows); + + const backup = rows[childId].isEditableTogetherWithParent + ? { + [parentId]: rows[parentId], + [childId]: rows[childId] + } + : { + [rowId]: rows[rowId] + }; + + return { + editedRowsBackup: JSON.parse(JSON.stringify(backup)), // clone + rows: rows.map((row, id) => { + row.isEditing = !!backup[id]; + return row; + }) + }; + } + return undefined; + }); + }; + + onEditConfirmed = () => { + this.setState(({ rows, editedRowsBackup }) => { + rows = [...rows]; + Object.keys(editedRowsBackup).forEach(key => { + rows[key].isEditing = false; + }); + + return { + rows, + editedRowsBackup: null, + activeEditId: null + }; + }); + }; + + onEditCanceled = () => { + this.setState(({ rows, editedRowsBackup }) => { + rows = [...rows]; + Object.keys(editedRowsBackup).forEach(key => { + rows[key] = editedRowsBackup[key]; + }); + return { + rows, + editedRowsBackup: null, + activeEditId: null + }; + }); + }; + + onCollapse = (event, rowKey, isOpen) => { + const { rows } = this.state; + /** + * Please do not use rowKey as row index for more complex tables. + * Rather use some kind of identifier like ID passed with each row. + */ + rows[rowKey].isOpen = isOpen; + this.setState({ + rows + }); + }; + + actionResolver = rowData => + rowData.isTableEditing + ? null + : [ + { + title: 'Edit', + onClick: this.onEditActionClick + } + ]; + + render() { + const { activeEditId, columns, rows } = this.state; + const editConfig = { + activeEditId, + onEditCellClicked: this.onEditCellClicked, + editConfirmationType: TableEditConfirmation.ROW, + onEditConfirmed: this.onEditConfirmed, + onEditCanceled: this.onEditCanceled + }; + const ComposedBody = editableTableBody(TableBody); + const ComposedRowWrapper = editableRowWrapper(RowWrapper); + + return ( + + + +
+ ); + } +} + +export default CollapsibleEditableTable; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js index efbe7be7d1b..32a296b69db 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTable.js @@ -10,19 +10,30 @@ import { import { Dropdown, DropdownToggle, DropdownItem, Checkbox } from '@patternfly/react-core'; class EditableTable extends React.Component { + makeId = ({ column, rowIndex, columnIndex, name }) => + `${column.property}-${rowIndex}-${columnIndex}${name ? `-${name}` : ''}`; + constructor(props) { super(props); // text input const textInputFormatter = inlineEditFormatterFactory({ - renderEdit: (value, { columnIndex, rowIndex }, { autoFocus }) => ( - this.onChange(newValue, { rowIndex, columnIndex })} - autoFocus={autoFocus} - /> - ) + renderEdit: (value, { columnIndex, rowIndex, column }, { activeEditId }) => { + const id = this.makeId({ rowIndex, columnIndex, column }); + return ( + + this.onChange(newValue, { + rowIndex, + columnIndex + }) + } + autoFocus={activeEditId === id} + /> + ); + } }); // dropdown @@ -32,12 +43,13 @@ class EditableTable extends React.Component { const dropdownItems = column.data.dropdownItems.map(item => {item}); return ( this.onWorkspaceChange({ selected: event.target.text, isDropdownOpen: false }, { rowIndex, columnIndex }) } toggle={ this.onWorkspaceChange({ isDropdownOpen: !workspace.isDropdownOpen }, { rowIndex, columnIndex }) } @@ -56,17 +68,22 @@ class EditableTable extends React.Component { // checkbox const privateRepoFormatter = inlineEditFormatterFactory({ resolveValue: (value, { rowData }) => rowData.data.privateRepo, - renderEdit: (privateRepo, { columnIndex, rowIndex }) => ( + renderEdit: (privateRepo, { column, columnIndex, rowIndex }) => ( this.onPrivateRepoChange(value, { rowIndex, columnIndex })} + onChange={value => + this.onPrivateRepoChange(value, { + rowIndex, + columnIndex + }) + } aria-label="checkbox" /> ), - renderValue: (privateRepo, { columnIndex, rowIndex }) => ( + renderValue: (privateRepo, { columnIndex, rowIndex, column }) => ( { - this.setState(({ rows }) => { + onWorkspaceChange = (value, { rowIndex, columnIndex }) => { + this.setState(({ rows, activeEditId }) => { const row = rows[rowIndex]; row.data.workspace = Object.assign({}, row.data.workspace, value); - return { rows }; + if (value.isDropdownOpen) { + activeEditId = this.makeId({ rowIndex, columnIndex, column: { property: 'workspaces' }, name: 'dropdown' }); + } + return { rows, activeEditId }; }); }; @@ -164,26 +183,48 @@ class EditableTable extends React.Component { rows = [...rows]; const row = rows[rowIndex]; row.cells[columnIndex] = value; - row.activeEditCell = null; // stop autoFocus - return { rows }; + return { + rows, + activeEditId: null // stop autoFocus + }; }); }; - onEditCellChanged = (event, clickedRow, { rowIndex, columnIndex }) => { + onEditCellClicked = (event, clickedRow, { rowIndex, columnIndex, elementId }) => { const WORKSPACE_COL = 3; const PRIVATE_REPO_COL = 5; + const ACTIONS_COL = 6; - if (clickedRow.isEditing) { - this.setState(({ rows }) => ({ - rows: rows.map((row, id) => { - row.activeEditCell = id === rowIndex ? columnIndex : null; - row.data.workspace.isDropdownOpen = id === rowIndex && columnIndex === WORKSPACE_COL; - if (id === rowIndex && columnIndex === PRIVATE_REPO_COL) { - row.data.privateRepo = !row.data.privateRepo; - } - return row; - }) - })); + if (elementId !== this.state.activeEditId && clickedRow.isEditing && columnIndex !== ACTIONS_COL) { + this.setState(({ rows }) => { + // focus dropdown if it opens ('toggle' is mistakenly assumed to be the elementId) + const activeEditId = + elementId && columnIndex === WORKSPACE_COL && !rows[rowIndex].data.workspace.isDropdownOpen + ? this.makeId({ + rowIndex, + columnIndex, + column: { property: 'workspaces' }, + name: 'dropdown' + }) + : elementId; + + return { + activeEditId, + rows: rows.map((row, id) => { + if (id === rowIndex) { + if (elementId && columnIndex === WORKSPACE_COL) { + row.data.workspace.isDropdownOpen = !row.data.workspace.isDropdownOpen; + } else { + if (elementId && columnIndex === PRIVATE_REPO_COL) { + row.data.privateRepo = !row.data.privateRepo; + } + row.data.workspace.isDropdownOpen = false; + } + } + return row; + }) + }; + }); } }; @@ -207,7 +248,7 @@ class EditableTable extends React.Component { return { rows, editedRowBackup: null, - activeEditCell: null + activeEditId: null }; }); }; @@ -219,7 +260,7 @@ class EditableTable extends React.Component { return { rows, editedRowBackup: null, - activeEditCell: null + activeEditId: null }; }); }; @@ -235,9 +276,10 @@ class EditableTable extends React.Component { ]; render() { - const { columns, rows } = this.state; + const { columns, rows, activeEditId } = this.state; const editConfig = { - onEditCellChanged: this.onEditCellChanged, + activeEditId, + onEditCellClicked: this.onEditCellClicked, editConfirmationType: TableEditConfirmation.ROW, onEditConfirmed: this.onEditConfirmed, onEditCanceled: this.onEditCanceled diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js index 537f5c6a1e8..017479906e6 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/examples/EditableTableColumn.js @@ -1,6 +1,6 @@ /* eslint-disable react/no-unused-state */ import React from 'react'; -import { Table, TableHeader, TableBody, RowWrapper } from '@patternfly/react-table'; +import { Table, TableHeader, TableBody, RowWrapper, TableVariant } from '@patternfly/react-table'; import { editableTableBody, editableRowWrapper, @@ -10,19 +10,30 @@ import { } from '@patternfly/react-inline-edit-extension'; class EditableTableColumn extends React.Component { + makeId = ({ column, rowIndex, columnIndex, name }) => + `${column.property}-${rowIndex}-${columnIndex}${name ? `-${name}` : ''}`; + constructor(props) { super(props); // text input const inlineEditingFormatter = inlineEditFormatterFactory({ - renderEdit: (value, { columnIndex, rowIndex }, { autoFocus }) => ( - this.onBlur(newValue, { rowIndex, columnIndex })} - autoFocus={autoFocus} - /> - ), + renderEdit: (value, { columnIndex, rowIndex, column }, { activeEditId }) => { + const id = this.makeId({ rowIndex, columnIndex, column }); + return ( + + this.onBlur(newValue, { + rowIndex, + columnIndex + }) + } + autoFocus={activeEditId === id} + /> + ); + }, renderValue: (value, { rowData }) => (rowData.isTableEditing ? `${value} (Not Editable)` : value), isEditable: ({ rowIndex }) => rowIndex !== 1 }); @@ -58,7 +69,8 @@ class EditableTableColumn extends React.Component { cells: ['a', 'two', 5, 'four', 'five'] } ], - rowsBackup: null + rowsBackup: null, + activeEditId: null }; } @@ -67,26 +79,24 @@ class EditableTableColumn extends React.Component { rows = [...rows]; const row = rows[rowIndex]; row.cells[columnIndex] = value; - row.activeEditCell = null; // stop autoFocus - return { rows }; + return { + rows, + activeEditId: null // stop autoFocus + }; }); }; - onEditCellChanged = (event, clickedRow, { rowIndex, columnIndex }) => { - this.setState(({ rows }) => ({ - rows: rows.map((row, id) => { - row.activeEditCell = id === rowIndex ? columnIndex : null; - return row; - }) - })); + onEditCellClicked = (event, clickedRow, { rowIndex, columnIndex, elementId }) => { + if (elementId !== this.state.activeEditId) { + this.setState({ + activeEditId: elementId + }); + } }; setEditing = (rows, isEditing) => rows.map(row => { row.isEditing = isEditing; - if (!isEditing) { - row.activeEditCell = null; - } return row; }); @@ -103,35 +113,40 @@ class EditableTableColumn extends React.Component { onEditConfirmed = () => { this.setState(({ rows }) => ({ rows: this.setEditing(rows, false), - rowsBackup: null + rowsBackup: null, + activeEditId: null })); }; onEditCanceled = () => { this.setState(({ rows, rowsBackup }) => ({ rows: rowsBackup, - rowsBackup: null + rowsBackup: null, + activeEditId: null })); }; render() { - const { columns, rows } = this.state; + const { columns, rows, activeEditId } = this.state; const editConfig = { + activeEditId, editConfirmationType: TableEditConfirmation.TABLE_BOTTOM, - onEditCellChanged: this.onEditCellChanged, + onEditCellClicked: this.onEditCellClicked, onEditConfirmed: this.onEditConfirmed, onEditCanceled: this.onEditCanceled }; const ComposedBody = editableTableBody(TableBody); - const ComposedRawWrapper = editableRowWrapper(RowWrapper); + const ComposedRowWrapper = editableRowWrapper(RowWrapper); return ( diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts index 8573c91203c..11364e4abef 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/index.d.ts @@ -8,9 +8,7 @@ export { EditableTableBody, InlineEditBodyProps, EditConfig, - RowProps, - RowExtraProps, - RowData + IEditedCellData, } from './editableTableBody' export { diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts index 16b8d94581d..810c3c6dd14 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.d.ts @@ -8,8 +8,8 @@ export interface AdditionalData { rowKey: string; } -export interface FormatterExtra { - autoFocus: boolean; +export interface ComputedData { + activeEditId: string; } export interface Formatter { @@ -20,7 +20,7 @@ export interface InlineEditFormatterFactoryProps { isEditable?(additionalData: AdditionalData): boolean; renderValue?: Formatter; resolveValue?(value: ReactNode, additionalData: AdditionalData): ReactNode; - renderEdit?(value: ReactNode, additionalData: AdditionalData, extra: FormatterExtra): ReactNode; + renderEdit?(value: ReactNode, additionalData: AdditionalData, computedData: ComputedData): ReactNode; } export interface InlineEditFormatterFactory { diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js index 371450f9f91..26f5ebf8ecd 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.js @@ -2,16 +2,17 @@ const inlineEditFormatterFactory = ({ renderEdit, renderValue, resolveValue, isE value, additionalData ) => { - const { rowData, columnIndex } = additionalData; + const { rowData } = additionalData; if (resolveValue) { value = resolveValue(value, additionalData); } if (renderEdit && rowData.isEditing && (!isEditable || isEditable(additionalData))) { - return renderEdit(value, additionalData, { - autoFocus: rowData.activeEditCell === columnIndex - }); + const computedData = { + activeEditId: rowData.editConfig && rowData.editConfig.activeEditId + }; + return renderEdit(value, additionalData, computedData); } else if (renderValue) { return renderValue(value, additionalData); } diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js index 11cec46cd67..c203af249e9 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/formatters/inlineEditFormatterFactory.test.js @@ -3,11 +3,12 @@ import { default as inlineEditFormatterFactory } from './inlineEditFormatterFact const blue = 'blue'; const alteredValue = 'violet'; -const buildAdditionalData = (data, isEditing = true, activeCell = 3) => ({ - columnIndex: activeCell, +const buildAdditionalData = (data, isEditing = true, activeEditId = 'testId') => ({ rowData: { isEditing, - activeEditCell: activeCell, + editConfig: { + activeEditId + }, data } }); @@ -51,4 +52,14 @@ describe('inlineEditFormatterFactory', () => { })(blue, additionalData) ).toBe(`ultra ${alteredValue}`); }); + + test('passes computed data', () => { + const additionalData = buildAdditionalData(alteredValue, true, 'myId'); + + expect( + inlineEditFormatterFactory({ + renderEdit: (value, data, { activeEditId }) => activeEditId + })(blue, additionalData) + ).toBe('myId'); + }); }); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js index 83cbd39f80c..1df8d58f692 100644 --- a/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js +++ b/packages/patternfly-4/react-inline-edit-extension/src/components/InlineEdit/utils/utils.js @@ -1,3 +1,14 @@ +const requiredElements = ['INPUT', 'BUTTON']; +let warningCompleted = false; + +export const showIdWarnings = (row, target) => { + if ((row.isEditing || row.isTableEditing) && requiredElements.indexOf(target.tagName) >= 0 && !warningCompleted) { + warningCompleted = true; + // eslint-disable-next-line no-console + console.warn(`${requiredElements.join(', ')} elements are required to have an id for editing to work properly.`); + } +}; + export const combineFunctions = (...functions) => { const realFunctions = functions.filter(f => typeof f === 'function'); diff --git a/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/data-sets.js b/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/data-sets.js new file mode 100644 index 00000000000..a0b4b314664 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/data-sets.js @@ -0,0 +1,39 @@ +export const columns = [ + { title: 'Header cell' }, + 'Branches', + { title: 'Pull requests' }, + 'Workspaces', + { + title: 'Last Commit' + } +]; + +export const rows = [ + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + }, + { + cells: ['one', 'two', 'three', 'four', 'five'] + } +]; diff --git a/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/helpers.js b/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/helpers.js new file mode 100644 index 00000000000..0e3df6f7fe5 --- /dev/null +++ b/packages/patternfly-4/react-inline-edit-extension/src/test-helpers/helpers.js @@ -0,0 +1,8 @@ +export const mockClosest = (map, resolveFunction, force = false) => { + if (!Element.prototype.closest || force) { + Element.prototype.closest = selector => (map && map[selector]) || (resolveFunction && resolveFunction(selector)); + } +}; + +export const makeTableId = ({ column: { property }, rowIndex, columnIndex, name }) => + `${property}-${rowIndex}-${columnIndex}${name ? `-${name}` : ''}`; 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 cdfe7f74d2f..b658b32c0ea 100644 --- a/packages/patternfly-4/react-table/src/components/Table/Body.js +++ b/packages/patternfly-4/react-table/src/components/Table/Body.js @@ -19,6 +19,14 @@ const defaultProps = { onRowClick: () => undefined }; +const flagVisibility = rows => { + const visibleRows = rows.filter(oneRow => !oneRow.parent || oneRow.isExpanded); + if (visibleRows.length > 0) { + visibleRows[0].isFirstVisible = true; + visibleRows[visibleRows.length - 1].isLastVisible = true; + } +}; + class ContextBody extends React.Component { onRow = (row, rowProps) => { const { onRowClick } = this.props; @@ -71,15 +79,20 @@ class ContextBody extends React.Component { render() { const { className, headerData, rows, rowKey, children, onRowClick, ...props } = this.props; - const mappedRows = - headerData.length > 0 && - rows.map((oneRow, oneRowKey) => ({ + + let mappedRows; + if (headerData.length > 0) { + mappedRows = rows.map((oneRow, oneRowKey) => ({ ...oneRow, ...this.mapCells(headerData, oneRow, oneRowKey), isExpanded: isRowExpanded(oneRow, rows), isFirst: oneRowKey === 0, - isLast: oneRowKey === rows.length - 1 + isLast: oneRowKey === rows.length - 1, + isFirstVisible: false, + isLastVisible: false })); + flagVisibility(mappedRows); + } return ( diff --git a/packages/patternfly-4/react-table/src/components/Table/RowWrapper.test.js b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.test.js new file mode 100644 index 00000000000..08b3f3fa5ee --- /dev/null +++ b/packages/patternfly-4/react-table/src/components/Table/RowWrapper.test.js @@ -0,0 +1,24 @@ +import React from 'react'; +import { mount } from 'enzyme'; +import RowWrapper from './RowWrapper'; + +const getRowWrapper = props => ( +
+ + + +
+); + +describe('RowWrapper', () => { + test('renders correctly', () => { + const trRef = jest.fn(); + const view = mount(getRowWrapper({ onScroll: jest.fn(), onResize: jest.fn(), trRef })); + expect(view).toMatchSnapshot(); + expect(trRef.mock.calls).toHaveLength(1); + }); + test('renders expanded correctly', () => { + const view = mount(getRowWrapper({ row: { isExpanded: true } })); + expect(view).toMatchSnapshot(); + }); +}); diff --git a/packages/patternfly-4/react-table/src/components/Table/Table.d.ts b/packages/patternfly-4/react-table/src/components/Table/Table.d.ts index f77bcebd135..00db3aad6f3 100644 --- a/packages/patternfly-4/react-table/src/components/Table/Table.d.ts +++ b/packages/patternfly-4/react-table/src/components/Table/Table.d.ts @@ -26,14 +26,18 @@ export interface IColumn { } } +export interface IExtraRowData { + rowIndex: number; + rowKey?: string; +} + export interface IExtraColumnData { columnIndex: number, column: IColumn, property: string, } -export interface IExtraData extends IExtraColumnData { - rowIndex: number +export interface IExtraData extends IExtraColumnData, IExtraRowData { } export interface IExtra extends IExtraData { diff --git a/packages/patternfly-4/react-table/src/components/Table/__snapshots__/RowWrapper.test.js.snap b/packages/patternfly-4/react-table/src/components/Table/__snapshots__/RowWrapper.test.js.snap new file mode 100644 index 00000000000..9103b6971ca --- /dev/null +++ b/packages/patternfly-4/react-table/src/components/Table/__snapshots__/RowWrapper.test.js.snap @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`RowWrapper renders correctly 1`] = ` + + + , + ], + ], + "results": Array [ + Object { + "isThrow": false, + "value": undefined, + }, + ], + } + } + > + + + +
+`; + +exports[`RowWrapper renders expanded correctly 1`] = ` +.pf-c-table__expandable-row.pf-m-expanded { + display: block; + position: relative; + border-bottom: 0 solid transparent; + box-shadow: 0 0.3125rem 0.625rem -0.25rem rgba(3, 3, 3, 0.25); + transition: all 250ms cubic-bezier(0.42, 0, 0.58, 1); + border-bottom-color: #ededed; + border-bottom-width: 1px; +} + + + + + + + +
+`; 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 ca00452d4f8..734b9b0008c 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 @@ -1491,7 +1491,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1534,7 +1536,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1577,7 +1581,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1620,7 +1626,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1663,7 +1671,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1706,7 +1716,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1749,7 +1761,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1792,7 +1806,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1835,7 +1851,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -1884,7 +1902,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1927,7 +1947,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -1970,7 +1992,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2013,7 +2037,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2056,7 +2082,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2099,7 +2127,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2142,7 +2172,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2185,7 +2217,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2228,7 +2262,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -2278,7 +2314,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2321,7 +2359,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2364,7 +2404,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2407,7 +2449,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2450,7 +2494,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2493,7 +2539,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2536,7 +2584,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2579,7 +2629,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2622,7 +2674,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -2931,7 +2985,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -2982,7 +3038,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -3195,7 +3253,9 @@ exports[`Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -3651,7 +3711,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -3702,7 +3764,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -3915,7 +3979,9 @@ exports[`Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -4371,7 +4437,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -4422,7 +4490,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -4635,7 +4705,9 @@ exports[`Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -5091,7 +5163,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -5142,7 +5216,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -5355,7 +5431,9 @@ exports[`Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -5811,7 +5889,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -5862,7 +5942,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -6075,7 +6157,9 @@ exports[`Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -6531,7 +6615,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -6582,7 +6668,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -6795,7 +6883,9 @@ exports[`Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -7251,7 +7341,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -7302,7 +7394,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -7515,7 +7609,9 @@ exports[`Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -7971,7 +8067,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -8022,7 +8120,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -8235,7 +8335,9 @@ exports[`Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -8691,7 +8793,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -8742,7 +8846,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -8955,7 +9061,9 @@ exports[`Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -10219,7 +10327,9 @@ exports[`Cell header table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10262,7 +10372,9 @@ exports[`Cell header table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10305,7 +10417,9 @@ exports[`Cell header table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10348,7 +10462,9 @@ exports[`Cell header table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10391,7 +10507,9 @@ exports[`Cell header table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10434,7 +10552,9 @@ exports[`Cell header table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10477,7 +10597,9 @@ exports[`Cell header table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10520,7 +10642,9 @@ exports[`Cell header table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10563,7 +10687,9 @@ exports[`Cell header table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -10612,7 +10738,9 @@ exports[`Cell header table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10655,7 +10783,9 @@ exports[`Cell header table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10698,7 +10828,9 @@ exports[`Cell header table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10741,7 +10873,9 @@ exports[`Cell header table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10784,7 +10918,9 @@ exports[`Cell header table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10827,7 +10963,9 @@ exports[`Cell header table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10870,7 +11008,9 @@ exports[`Cell header table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10913,7 +11053,9 @@ exports[`Cell header table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -10956,7 +11098,9 @@ exports[`Cell header table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -11006,7 +11150,9 @@ exports[`Cell header table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11049,7 +11195,9 @@ exports[`Cell header table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11092,7 +11240,9 @@ exports[`Cell header table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11135,7 +11285,9 @@ exports[`Cell header table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11178,7 +11330,9 @@ exports[`Cell header table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11221,7 +11375,9 @@ exports[`Cell header table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11264,7 +11420,9 @@ exports[`Cell header table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11307,7 +11465,9 @@ exports[`Cell header table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11350,7 +11510,9 @@ exports[`Cell header table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -11618,7 +11780,9 @@ exports[`Cell header table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -11669,7 +11833,9 @@ exports[`Cell header table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12015,7 +12181,9 @@ exports[`Cell header table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12066,7 +12234,9 @@ exports[`Cell header table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12412,7 +12582,9 @@ exports[`Cell header table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12463,7 +12635,9 @@ exports[`Cell header table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12809,7 +12983,9 @@ exports[`Cell header table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -12860,7 +13036,9 @@ exports[`Cell header table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -13206,7 +13384,9 @@ exports[`Cell header table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -13257,7 +13437,9 @@ exports[`Cell header table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -13603,7 +13785,9 @@ exports[`Cell header table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -13654,7 +13838,9 @@ exports[`Cell header table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -14000,7 +14186,9 @@ exports[`Cell header table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -14051,7 +14239,9 @@ exports[`Cell header table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -14397,7 +14587,9 @@ exports[`Cell header table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -14448,7 +14640,9 @@ exports[`Cell header table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -14794,7 +14988,9 @@ exports[`Cell header table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -14845,7 +15041,9 @@ exports[`Cell header table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -16363,7 +16561,9 @@ exports[`Collapsible nested table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -16407,7 +16607,9 @@ exports[`Collapsible nested table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -16452,7 +16654,9 @@ exports[`Collapsible nested table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16496,7 +16700,9 @@ exports[`Collapsible nested table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -16540,7 +16746,9 @@ exports[`Collapsible nested table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16584,7 +16792,9 @@ exports[`Collapsible nested table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16627,7 +16837,9 @@ exports[`Collapsible nested table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16670,7 +16882,9 @@ exports[`Collapsible nested table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16713,7 +16927,9 @@ exports[`Collapsible nested table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -16762,7 +16978,9 @@ exports[`Collapsible nested table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -16806,7 +17024,9 @@ exports[`Collapsible nested table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -16851,7 +17071,9 @@ exports[`Collapsible nested table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16895,7 +17117,9 @@ exports[`Collapsible nested table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -16939,7 +17163,9 @@ exports[`Collapsible nested table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -16983,7 +17209,9 @@ exports[`Collapsible nested table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17026,7 +17254,9 @@ exports[`Collapsible nested table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17069,7 +17299,9 @@ exports[`Collapsible nested table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17112,7 +17344,9 @@ exports[`Collapsible nested table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -17162,7 +17396,9 @@ exports[`Collapsible nested table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -17206,7 +17442,9 @@ exports[`Collapsible nested table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -17251,7 +17489,9 @@ exports[`Collapsible nested table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17295,7 +17535,9 @@ exports[`Collapsible nested table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -17339,7 +17581,9 @@ exports[`Collapsible nested table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17383,7 +17627,9 @@ exports[`Collapsible nested table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17426,7 +17672,9 @@ exports[`Collapsible nested table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17469,7 +17717,9 @@ exports[`Collapsible nested table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -17512,7 +17762,9 @@ exports[`Collapsible nested table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -17830,7 +18082,9 @@ exports[`Collapsible nested table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -17882,7 +18136,9 @@ exports[`Collapsible nested table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -18354,7 +18610,9 @@ exports[`Collapsible nested table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -18407,7 +18665,9 @@ exports[`Collapsible nested table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -18867,7 +19127,9 @@ exports[`Collapsible nested table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -18919,7 +19181,9 @@ exports[`Collapsible nested table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -19327,7 +19591,9 @@ exports[`Collapsible nested table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -19379,7 +19645,9 @@ exports[`Collapsible nested table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -19851,7 +20119,9 @@ exports[`Collapsible nested table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -19903,7 +20173,9 @@ exports[`Collapsible nested table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -20311,7 +20583,9 @@ exports[`Collapsible nested table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -20362,7 +20636,9 @@ exports[`Collapsible nested table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -20782,7 +21058,9 @@ exports[`Collapsible nested table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -20833,7 +21111,9 @@ exports[`Collapsible nested table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -21253,7 +21533,9 @@ exports[`Collapsible nested table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -21304,7 +21586,9 @@ exports[`Collapsible nested table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -21724,7 +22008,9 @@ exports[`Collapsible nested table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -21775,7 +22061,9 @@ exports[`Collapsible nested table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -23287,7 +23575,9 @@ exports[`Collapsible table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -23331,7 +23621,9 @@ exports[`Collapsible table 1`] = ` "id": 1, "isExpanded": true, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23375,7 +23667,9 @@ exports[`Collapsible table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23418,7 +23712,9 @@ exports[`Collapsible table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -23462,7 +23758,9 @@ exports[`Collapsible table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23506,7 +23804,9 @@ exports[`Collapsible table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23549,7 +23849,9 @@ exports[`Collapsible table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23592,7 +23894,9 @@ exports[`Collapsible table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23635,7 +23939,9 @@ exports[`Collapsible table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -23684,7 +23990,9 @@ exports[`Collapsible table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -23728,7 +24036,9 @@ exports[`Collapsible table 1`] = ` "id": 1, "isExpanded": true, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23772,7 +24082,9 @@ exports[`Collapsible table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23815,7 +24127,9 @@ exports[`Collapsible table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -23859,7 +24173,9 @@ exports[`Collapsible table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23903,7 +24219,9 @@ exports[`Collapsible table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23946,7 +24264,9 @@ exports[`Collapsible table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -23989,7 +24309,9 @@ exports[`Collapsible table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24032,7 +24354,9 @@ exports[`Collapsible table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -24082,7 +24406,9 @@ exports[`Collapsible table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -24126,7 +24452,9 @@ exports[`Collapsible table 1`] = ` "id": 1, "isExpanded": true, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24170,7 +24498,9 @@ exports[`Collapsible table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24213,7 +24543,9 @@ exports[`Collapsible table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -24257,7 +24589,9 @@ exports[`Collapsible table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24301,7 +24635,9 @@ exports[`Collapsible table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24344,7 +24680,9 @@ exports[`Collapsible table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24387,7 +24725,9 @@ exports[`Collapsible table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -24430,7 +24770,9 @@ exports[`Collapsible table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -24748,7 +25090,9 @@ exports[`Collapsible table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -24800,7 +25144,9 @@ exports[`Collapsible table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -25272,7 +25618,9 @@ exports[`Collapsible table 1`] = ` "id": 1, "isExpanded": true, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -25324,7 +25672,9 @@ exports[`Collapsible table 1`] = ` "id": 1, "isExpanded": true, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -25732,7 +26082,9 @@ exports[`Collapsible table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -25783,7 +26135,9 @@ exports[`Collapsible table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -26203,7 +26557,9 @@ exports[`Collapsible table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -26255,7 +26611,9 @@ exports[`Collapsible table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -26727,7 +27085,9 @@ exports[`Collapsible table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -26779,7 +27139,9 @@ exports[`Collapsible table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -27187,7 +27549,9 @@ exports[`Collapsible table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -27238,7 +27602,9 @@ exports[`Collapsible table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -27658,7 +28024,9 @@ exports[`Collapsible table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -27709,7 +28077,9 @@ exports[`Collapsible table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -28129,7 +28499,9 @@ exports[`Collapsible table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -28180,7 +28552,9 @@ exports[`Collapsible table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -28600,7 +28974,9 @@ exports[`Collapsible table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -28651,7 +29027,9 @@ exports[`Collapsible table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -29866,7 +30244,9 @@ exports[`Header width table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -29910,7 +30290,9 @@ exports[`Header width table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -29955,7 +30337,9 @@ exports[`Header width table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -29999,7 +30383,9 @@ exports[`Header width table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -30043,7 +30429,9 @@ exports[`Header width table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30087,7 +30475,9 @@ exports[`Header width table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30130,7 +30520,9 @@ exports[`Header width table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30173,7 +30565,9 @@ exports[`Header width table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30216,7 +30610,9 @@ exports[`Header width table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -30265,7 +30661,9 @@ exports[`Header width table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -30309,7 +30707,9 @@ exports[`Header width table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -30354,7 +30754,9 @@ exports[`Header width table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30398,7 +30800,9 @@ exports[`Header width table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -30442,7 +30846,9 @@ exports[`Header width table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30486,7 +30892,9 @@ exports[`Header width table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30529,7 +30937,9 @@ exports[`Header width table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30572,7 +30982,9 @@ exports[`Header width table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30615,7 +31027,9 @@ exports[`Header width table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -30665,7 +31079,9 @@ exports[`Header width table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -30709,7 +31125,9 @@ exports[`Header width table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -30754,7 +31172,9 @@ exports[`Header width table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30798,7 +31218,9 @@ exports[`Header width table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -30842,7 +31264,9 @@ exports[`Header width table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30886,7 +31310,9 @@ exports[`Header width table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30929,7 +31355,9 @@ exports[`Header width table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -30972,7 +31400,9 @@ exports[`Header width table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -31015,7 +31445,9 @@ exports[`Header width table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -31287,7 +31719,9 @@ exports[`Header width table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -31339,7 +31773,9 @@ exports[`Header width table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -31689,7 +32125,9 @@ exports[`Header width table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -31742,7 +32180,9 @@ exports[`Header width table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -32099,7 +32539,9 @@ exports[`Header width table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -32151,7 +32593,9 @@ exports[`Header width table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -32513,7 +32957,9 @@ exports[`Header width table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -32565,7 +33011,9 @@ exports[`Header width table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -32915,7 +33363,9 @@ exports[`Header width table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -32967,7 +33417,9 @@ exports[`Header width table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -33329,7 +33781,9 @@ exports[`Header width table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -33380,7 +33834,9 @@ exports[`Header width table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -33735,7 +34191,9 @@ exports[`Header width table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -33786,7 +34244,9 @@ exports[`Header width table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -34141,7 +34601,9 @@ exports[`Header width table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -34192,7 +34654,9 @@ exports[`Header width table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -34547,7 +35011,9 @@ exports[`Header width table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -34598,7 +35064,9 @@ exports[`Header width table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -36057,7 +36525,9 @@ exports[`Selectable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -36101,7 +36571,9 @@ exports[`Selectable table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -36146,7 +36618,9 @@ exports[`Selectable table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36190,7 +36664,9 @@ exports[`Selectable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -36234,7 +36710,9 @@ exports[`Selectable table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36278,7 +36756,9 @@ exports[`Selectable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36321,7 +36801,9 @@ exports[`Selectable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36364,7 +36846,9 @@ exports[`Selectable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36407,7 +36891,9 @@ exports[`Selectable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -36456,7 +36942,9 @@ exports[`Selectable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -36500,7 +36988,9 @@ exports[`Selectable table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -36545,7 +37035,9 @@ exports[`Selectable table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36589,7 +37081,9 @@ exports[`Selectable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -36633,7 +37127,9 @@ exports[`Selectable table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36677,7 +37173,9 @@ exports[`Selectable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36720,7 +37218,9 @@ exports[`Selectable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36763,7 +37263,9 @@ exports[`Selectable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36806,7 +37308,9 @@ exports[`Selectable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -36856,7 +37360,9 @@ exports[`Selectable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -36900,7 +37406,9 @@ exports[`Selectable table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -36945,7 +37453,9 @@ exports[`Selectable table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -36989,7 +37499,9 @@ exports[`Selectable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -37033,7 +37545,9 @@ exports[`Selectable table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -37077,7 +37591,9 @@ exports[`Selectable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -37120,7 +37636,9 @@ exports[`Selectable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -37163,7 +37681,9 @@ exports[`Selectable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -37206,7 +37726,9 @@ exports[`Selectable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -37518,7 +38040,9 @@ exports[`Selectable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -37570,7 +38094,9 @@ exports[`Selectable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -37991,7 +38517,9 @@ exports[`Selectable table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -38044,7 +38572,9 @@ exports[`Selectable table 1`] = ` "id": 1, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": true, "last-commit": Object { "props": Object { @@ -38454,7 +38984,9 @@ exports[`Selectable table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -38506,7 +39038,9 @@ exports[`Selectable table 1`] = ` "id": 2, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -38921,7 +39455,9 @@ exports[`Selectable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -38973,7 +39509,9 @@ exports[`Selectable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "isOpen": false, "last-commit": Object { "props": Object { @@ -39394,7 +39932,9 @@ exports[`Selectable table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -39446,7 +39986,9 @@ exports[`Selectable table 1`] = ` "id": 4, "isExpanded": false, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -39861,7 +40403,9 @@ exports[`Selectable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -39912,7 +40456,9 @@ exports[`Selectable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -40338,7 +40884,9 @@ exports[`Selectable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -40389,7 +40937,9 @@ exports[`Selectable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -40815,7 +41365,9 @@ exports[`Selectable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -40866,7 +41418,9 @@ exports[`Selectable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -41292,7 +41846,9 @@ exports[`Selectable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -41343,7 +41899,9 @@ exports[`Selectable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -43376,7 +43934,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43419,7 +43979,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43462,7 +44024,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43505,7 +44069,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43548,7 +44114,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43591,7 +44159,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43634,7 +44204,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43677,7 +44249,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43720,7 +44294,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43764,7 +44340,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -43813,7 +44391,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43856,7 +44436,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43899,7 +44481,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43942,7 +44526,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -43985,7 +44571,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44028,7 +44616,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44071,7 +44661,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44114,7 +44706,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44157,7 +44751,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44201,7 +44797,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -44251,7 +44849,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44294,7 +44894,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44337,7 +44939,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44380,7 +44984,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44423,7 +45029,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44466,7 +45074,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44509,7 +45119,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44552,7 +45164,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44595,7 +45209,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -44639,7 +45255,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -45056,7 +45674,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -45107,7 +45727,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -45338,7 +45960,9 @@ exports[`Simple Actions table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -45902,7 +46526,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -45953,7 +46579,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -46184,7 +46812,9 @@ exports[`Simple Actions table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -46748,7 +47378,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -46799,7 +47431,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -47030,7 +47664,9 @@ exports[`Simple Actions table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -47594,7 +48230,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -47645,7 +48283,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -47876,7 +48516,9 @@ exports[`Simple Actions table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -48440,7 +49082,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -48491,7 +49135,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -48722,7 +49368,9 @@ exports[`Simple Actions table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -49286,7 +49934,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -49337,7 +49987,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -49568,7 +50220,9 @@ exports[`Simple Actions table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -50132,7 +50786,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -50183,7 +50839,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -50414,7 +51072,9 @@ exports[`Simple Actions table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -50978,7 +51638,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -51029,7 +51691,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -51260,7 +51924,9 @@ exports[`Simple Actions table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -51824,7 +52490,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -51875,7 +52543,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -52106,7 +52776,9 @@ exports[`Simple Actions table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -52671,7 +53343,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -52723,7 +53397,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -52955,7 +53631,9 @@ exports[`Simple Actions table 1`] = ` "id": 9, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -54121,7 +54799,9 @@ exports[`Simple table aria-label 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54164,7 +54844,9 @@ exports[`Simple table aria-label 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54207,7 +54889,9 @@ exports[`Simple table aria-label 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54250,7 +54934,9 @@ exports[`Simple table aria-label 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54293,7 +54979,9 @@ exports[`Simple table aria-label 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54336,7 +55024,9 @@ exports[`Simple table aria-label 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54379,7 +55069,9 @@ exports[`Simple table aria-label 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54422,7 +55114,9 @@ exports[`Simple table aria-label 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54465,7 +55159,9 @@ exports[`Simple table aria-label 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -54514,7 +55210,9 @@ exports[`Simple table aria-label 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54557,7 +55255,9 @@ exports[`Simple table aria-label 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54600,7 +55300,9 @@ exports[`Simple table aria-label 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54643,7 +55345,9 @@ exports[`Simple table aria-label 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54686,7 +55390,9 @@ exports[`Simple table aria-label 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54729,7 +55435,9 @@ exports[`Simple table aria-label 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54772,7 +55480,9 @@ exports[`Simple table aria-label 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54815,7 +55525,9 @@ exports[`Simple table aria-label 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54858,7 +55570,9 @@ exports[`Simple table aria-label 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -54908,7 +55622,9 @@ exports[`Simple table aria-label 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54951,7 +55667,9 @@ exports[`Simple table aria-label 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -54994,7 +55712,9 @@ exports[`Simple table aria-label 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55037,7 +55757,9 @@ exports[`Simple table aria-label 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55080,7 +55802,9 @@ exports[`Simple table aria-label 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55123,7 +55847,9 @@ exports[`Simple table aria-label 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55166,7 +55892,9 @@ exports[`Simple table aria-label 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55209,7 +55937,9 @@ exports[`Simple table aria-label 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55252,7 +55982,9 @@ exports[`Simple table aria-label 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -55518,7 +56250,9 @@ exports[`Simple table aria-label 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55569,7 +56303,9 @@ exports[`Simple table aria-label 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55913,7 +56649,9 @@ exports[`Simple table aria-label 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -55964,7 +56702,9 @@ exports[`Simple table aria-label 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -56308,7 +57048,9 @@ exports[`Simple table aria-label 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -56359,7 +57101,9 @@ exports[`Simple table aria-label 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -56703,7 +57447,9 @@ exports[`Simple table aria-label 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -56754,7 +57500,9 @@ exports[`Simple table aria-label 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57098,7 +57846,9 @@ exports[`Simple table aria-label 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57149,7 +57899,9 @@ exports[`Simple table aria-label 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57493,7 +58245,9 @@ exports[`Simple table aria-label 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57544,7 +58298,9 @@ exports[`Simple table aria-label 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57888,7 +58644,9 @@ exports[`Simple table aria-label 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -57939,7 +58697,9 @@ exports[`Simple table aria-label 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -58283,7 +59043,9 @@ exports[`Simple table aria-label 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -58334,7 +59096,9 @@ exports[`Simple table aria-label 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -58678,7 +59442,9 @@ exports[`Simple table aria-label 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -58729,7 +59495,9 @@ exports[`Simple table aria-label 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -59827,7 +60595,9 @@ exports[`Simple table caption 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -59870,7 +60640,9 @@ exports[`Simple table caption 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -59913,7 +60685,9 @@ exports[`Simple table caption 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -59956,7 +60730,9 @@ exports[`Simple table caption 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -59999,7 +60775,9 @@ exports[`Simple table caption 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60042,7 +60820,9 @@ exports[`Simple table caption 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60085,7 +60865,9 @@ exports[`Simple table caption 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60128,7 +60910,9 @@ exports[`Simple table caption 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60171,7 +60955,9 @@ exports[`Simple table caption 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -60220,7 +61006,9 @@ exports[`Simple table caption 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60263,7 +61051,9 @@ exports[`Simple table caption 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60306,7 +61096,9 @@ exports[`Simple table caption 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60349,7 +61141,9 @@ exports[`Simple table caption 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60392,7 +61186,9 @@ exports[`Simple table caption 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60435,7 +61231,9 @@ exports[`Simple table caption 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60478,7 +61276,9 @@ exports[`Simple table caption 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60521,7 +61321,9 @@ exports[`Simple table caption 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60564,7 +61366,9 @@ exports[`Simple table caption 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -60614,7 +61418,9 @@ exports[`Simple table caption 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60657,7 +61463,9 @@ exports[`Simple table caption 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60700,7 +61508,9 @@ exports[`Simple table caption 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60743,7 +61553,9 @@ exports[`Simple table caption 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60786,7 +61598,9 @@ exports[`Simple table caption 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60829,7 +61643,9 @@ exports[`Simple table caption 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60872,7 +61688,9 @@ exports[`Simple table caption 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60915,7 +61733,9 @@ exports[`Simple table caption 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -60958,7 +61778,9 @@ exports[`Simple table caption 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -61224,7 +62046,9 @@ exports[`Simple table caption 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -61275,7 +62099,9 @@ exports[`Simple table caption 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -61619,7 +62445,9 @@ exports[`Simple table caption 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -61670,7 +62498,9 @@ exports[`Simple table caption 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62014,7 +62844,9 @@ exports[`Simple table caption 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62065,7 +62897,9 @@ exports[`Simple table caption 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62409,7 +63243,9 @@ exports[`Simple table caption 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62460,7 +63296,9 @@ exports[`Simple table caption 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62804,7 +63642,9 @@ exports[`Simple table caption 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -62855,7 +63695,9 @@ exports[`Simple table caption 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -63199,7 +64041,9 @@ exports[`Simple table caption 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -63250,7 +64094,9 @@ exports[`Simple table caption 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -63594,7 +64440,9 @@ exports[`Simple table caption 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -63645,7 +64493,9 @@ exports[`Simple table caption 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -63989,7 +64839,9 @@ exports[`Simple table caption 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -64040,7 +64892,9 @@ exports[`Simple table caption 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -64384,7 +65238,9 @@ exports[`Simple table caption 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -64435,7 +65291,9 @@ exports[`Simple table caption 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -65537,7 +66395,9 @@ exports[`Simple table header 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65580,7 +66440,9 @@ exports[`Simple table header 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65623,7 +66485,9 @@ exports[`Simple table header 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65666,7 +66530,9 @@ exports[`Simple table header 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65709,7 +66575,9 @@ exports[`Simple table header 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65752,7 +66620,9 @@ exports[`Simple table header 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65795,7 +66665,9 @@ exports[`Simple table header 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65838,7 +66710,9 @@ exports[`Simple table header 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65881,7 +66755,9 @@ exports[`Simple table header 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -65930,7 +66806,9 @@ exports[`Simple table header 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -65973,7 +66851,9 @@ exports[`Simple table header 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66016,7 +66896,9 @@ exports[`Simple table header 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66059,7 +66941,9 @@ exports[`Simple table header 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66102,7 +66986,9 @@ exports[`Simple table header 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66145,7 +67031,9 @@ exports[`Simple table header 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66188,7 +67076,9 @@ exports[`Simple table header 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66231,7 +67121,9 @@ exports[`Simple table header 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66274,7 +67166,9 @@ exports[`Simple table header 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -66324,7 +67218,9 @@ exports[`Simple table header 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66367,7 +67263,9 @@ exports[`Simple table header 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66410,7 +67308,9 @@ exports[`Simple table header 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66453,7 +67353,9 @@ exports[`Simple table header 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66496,7 +67398,9 @@ exports[`Simple table header 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66539,7 +67443,9 @@ exports[`Simple table header 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66582,7 +67488,9 @@ exports[`Simple table header 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66625,7 +67533,9 @@ exports[`Simple table header 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66668,7 +67578,9 @@ exports[`Simple table header 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -66934,7 +67846,9 @@ exports[`Simple table header 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -66985,7 +67899,9 @@ exports[`Simple table header 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -67329,7 +68245,9 @@ exports[`Simple table header 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -67380,7 +68298,9 @@ exports[`Simple table header 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -67724,7 +68644,9 @@ exports[`Simple table header 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -67775,7 +68697,9 @@ exports[`Simple table header 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68119,7 +69043,9 @@ exports[`Simple table header 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68170,7 +69096,9 @@ exports[`Simple table header 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68514,7 +69442,9 @@ exports[`Simple table header 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68565,7 +69495,9 @@ exports[`Simple table header 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68909,7 +69841,9 @@ exports[`Simple table header 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -68960,7 +69894,9 @@ exports[`Simple table header 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -69304,7 +70240,9 @@ exports[`Simple table header 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -69355,7 +70293,9 @@ exports[`Simple table header 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -69699,7 +70639,9 @@ exports[`Simple table header 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -69750,7 +70692,9 @@ exports[`Simple table header 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -70094,7 +71038,9 @@ exports[`Simple table header 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -70145,7 +71091,9 @@ exports[`Simple table header 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -71336,7 +72284,9 @@ exports[`Sortable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71379,7 +72329,9 @@ exports[`Sortable table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71422,7 +72374,9 @@ exports[`Sortable table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71465,7 +72419,9 @@ exports[`Sortable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71508,7 +72464,9 @@ exports[`Sortable table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71551,7 +72509,9 @@ exports[`Sortable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71594,7 +72554,9 @@ exports[`Sortable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71637,7 +72599,9 @@ exports[`Sortable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71680,7 +72644,9 @@ exports[`Sortable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -71729,7 +72695,9 @@ exports[`Sortable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71772,7 +72740,9 @@ exports[`Sortable table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71815,7 +72785,9 @@ exports[`Sortable table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71858,7 +72830,9 @@ exports[`Sortable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71901,7 +72875,9 @@ exports[`Sortable table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71944,7 +72920,9 @@ exports[`Sortable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -71987,7 +72965,9 @@ exports[`Sortable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72030,7 +73010,9 @@ exports[`Sortable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72073,7 +73055,9 @@ exports[`Sortable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -72123,7 +73107,9 @@ exports[`Sortable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72166,7 +73152,9 @@ exports[`Sortable table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72209,7 +73197,9 @@ exports[`Sortable table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72252,7 +73242,9 @@ exports[`Sortable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72295,7 +73287,9 @@ exports[`Sortable table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72338,7 +73332,9 @@ exports[`Sortable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72381,7 +73377,9 @@ exports[`Sortable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72424,7 +73422,9 @@ exports[`Sortable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72467,7 +73467,9 @@ exports[`Sortable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -72734,7 +73736,9 @@ exports[`Sortable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -72785,7 +73789,9 @@ exports[`Sortable table 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73130,7 +74136,9 @@ exports[`Sortable table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73181,7 +74189,9 @@ exports[`Sortable table 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73526,7 +74536,9 @@ exports[`Sortable table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73577,7 +74589,9 @@ exports[`Sortable table 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73922,7 +74936,9 @@ exports[`Sortable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -73973,7 +74989,9 @@ exports[`Sortable table 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -74318,7 +75336,9 @@ exports[`Sortable table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -74369,7 +75389,9 @@ exports[`Sortable table 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -74714,7 +75736,9 @@ exports[`Sortable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -74765,7 +75789,9 @@ exports[`Sortable table 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -75110,7 +76136,9 @@ exports[`Sortable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -75161,7 +76189,9 @@ exports[`Sortable table 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -75506,7 +76536,9 @@ exports[`Sortable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -75557,7 +76589,9 @@ exports[`Sortable table 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -75902,7 +76936,9 @@ exports[`Sortable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -75953,7 +76989,9 @@ exports[`Sortable table 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -77142,7 +78180,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77185,7 +78225,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77228,7 +78270,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77271,7 +78315,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77314,7 +78360,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77357,7 +78405,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77400,7 +78450,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77443,7 +78495,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77486,7 +78540,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -77535,7 +78591,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77578,7 +78636,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77621,7 +78681,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77664,7 +78726,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77707,7 +78771,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77750,7 +78816,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77793,7 +78861,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77836,7 +78906,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77879,7 +78951,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -77929,7 +79003,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -77972,7 +79048,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78015,7 +79093,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78058,7 +79138,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78101,7 +79183,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78144,7 +79228,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78187,7 +79273,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78230,7 +79318,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78273,7 +79363,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -78540,7 +79632,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78591,7 +79685,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78936,7 +80032,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -78987,7 +80085,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -79332,7 +80432,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -79383,7 +80485,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -79728,7 +80832,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -79779,7 +80885,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80124,7 +81232,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80175,7 +81285,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80520,7 +81632,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80571,7 +81685,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80916,7 +82032,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -80967,7 +82085,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -81312,7 +82432,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -81363,7 +82485,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -81708,7 +82832,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -81759,7 +82885,9 @@ exports[`Table variants Breakpoint - grid 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -82948,7 +84076,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -82991,7 +84121,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83034,7 +84166,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83077,7 +84211,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83120,7 +84256,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83163,7 +84301,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83206,7 +84346,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83249,7 +84391,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83292,7 +84436,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -83341,7 +84487,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83384,7 +84532,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83427,7 +84577,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83470,7 +84622,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83513,7 +84667,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83556,7 +84712,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83599,7 +84757,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83642,7 +84802,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83685,7 +84847,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -83735,7 +84899,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83778,7 +84944,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83821,7 +84989,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83864,7 +85034,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83907,7 +85079,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83950,7 +85124,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -83993,7 +85169,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -84036,7 +85214,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -84079,7 +85259,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -84346,7 +85528,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -84397,7 +85581,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -84742,7 +85928,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -84793,7 +85981,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85138,7 +86328,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85189,7 +86381,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85534,7 +86728,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85585,7 +86781,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85930,7 +87128,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -85981,7 +87181,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -86326,7 +87528,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -86377,7 +87581,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -86722,7 +87928,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -86773,7 +87981,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -87118,7 +88328,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -87169,7 +88381,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -87514,7 +88728,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -87565,7 +88781,9 @@ exports[`Table variants Breakpoint - grid-lg 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -88754,7 +89972,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -88797,7 +90017,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -88840,7 +90062,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -88883,7 +90107,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -88926,7 +90152,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -88969,7 +90197,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89012,7 +90242,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89055,7 +90287,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89098,7 +90332,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -89147,7 +90383,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89190,7 +90428,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89233,7 +90473,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89276,7 +90518,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89319,7 +90563,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89362,7 +90608,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89405,7 +90653,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89448,7 +90698,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89491,7 +90743,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -89541,7 +90795,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89584,7 +90840,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89627,7 +90885,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89670,7 +90930,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89713,7 +90975,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89756,7 +91020,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89799,7 +91065,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89842,7 +91110,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -89885,7 +91155,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -90152,7 +91424,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -90203,7 +91477,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -90548,7 +91824,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -90599,7 +91877,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -90944,7 +92224,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -90995,7 +92277,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -91340,7 +92624,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -91391,7 +92677,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -91736,7 +93024,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -91787,7 +93077,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92132,7 +93424,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92183,7 +93477,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92528,7 +93824,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92579,7 +93877,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92924,7 +94224,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -92975,7 +94277,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -93320,7 +94624,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -93371,7 +94677,9 @@ exports[`Table variants Breakpoint - grid-md 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -94560,7 +95868,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94603,7 +95913,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94646,7 +95958,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94689,7 +96003,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94732,7 +96048,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94775,7 +96093,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94818,7 +96138,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94861,7 +96183,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94904,7 +96228,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -94953,7 +96279,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -94996,7 +96324,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95039,7 +96369,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95082,7 +96414,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95125,7 +96459,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95168,7 +96504,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95211,7 +96549,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95254,7 +96594,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95297,7 +96639,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -95347,7 +96691,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95390,7 +96736,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95433,7 +96781,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95476,7 +96826,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95519,7 +96871,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95562,7 +96916,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95605,7 +96961,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95648,7 +97006,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -95691,7 +97051,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -95958,7 +97320,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -96009,7 +97373,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 0, "isExpanded": undefined, "isFirst": true, + "isFirstVisible": true, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -96354,7 +97720,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -96405,7 +97773,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 1, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -96750,7 +98120,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -96801,7 +98173,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 2, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97146,7 +98520,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97197,7 +98573,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 3, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97542,7 +98920,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97593,7 +98973,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 4, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97938,7 +99320,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -97989,7 +99373,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 5, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -98334,7 +99720,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -98385,7 +99773,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 6, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -98730,7 +100120,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -98781,7 +100173,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 7, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": false, + "isLastVisible": false, "last-commit": Object { "props": Object { "isVisible": true, @@ -99126,7 +100520,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, @@ -99177,7 +100573,9 @@ exports[`Table variants Size - compact 1`] = ` "id": 8, "isExpanded": undefined, "isFirst": false, + "isFirstVisible": false, "isLast": true, + "isLastVisible": true, "last-commit": Object { "props": Object { "isVisible": true, diff --git a/packages/patternfly-4/react-table/src/components/Table/utils/decorators/headerCol.js b/packages/patternfly-4/react-table/src/components/Table/utils/decorators/headerCol.js index 8c563cf5720..f4211558fe8 100644 --- a/packages/patternfly-4/react-table/src/components/Table/utils/decorators/headerCol.js +++ b/packages/patternfly-4/react-table/src/components/Table/utils/decorators/headerCol.js @@ -1,10 +1,13 @@ import React from 'react'; export default (id = 'simple-node') => { - const headerCol = (value, { rowIndex } = {}) => ({ - component: 'th', - children:
{value.title || value}
- }); + const headerCol = (value, { rowIndex } = {}) => { + const result = typeof value === 'object' ? value.title : value; + return { + component: 'th', + children:
{result}
+ }; + }; return headerCol; };