From e93d92e8ac6d4f85d193943e27d585fb6e01568c Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Tue, 22 Sep 2020 22:24:30 +0200 Subject: [PATCH] Replace reactable with DataTable from superset-ui in QueryTable (#10981) * Replace reactable with DataTable from superset-ui in QueryTable * Fix tests * Fix pagination * Fix tests --- .../javascripts/sqllab/QueryTable_spec.jsx | 24 ++++++++++------- .../spec/javascripts/sqllab/fixtures.ts | 5 ++++ .../src/SqlLab/components/QueryTable.jsx | 26 ++++++++++++------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/superset-frontend/spec/javascripts/sqllab/QueryTable_spec.jsx b/superset-frontend/spec/javascripts/sqllab/QueryTable_spec.jsx index 7bd205a3b1..e9e54f0883 100644 --- a/superset-frontend/spec/javascripts/sqllab/QueryTable_spec.jsx +++ b/superset-frontend/spec/javascripts/sqllab/QueryTable_spec.jsx @@ -18,27 +18,33 @@ */ import React from 'react'; import { shallow } from 'enzyme'; -import { Table } from 'reactable-arc'; +import DataTable from '@superset-ui/plugin-chart-table/lib/DataTable'; +import * as useMountedMemo from '@superset-ui/plugin-chart-table/lib/DataTable/utils/useMountedMemo'; import QueryTable from 'src/SqlLab/components/QueryTable'; -import { queries } from './fixtures'; +import { dataTableProps } from 'spec/javascripts/sqllab/fixtures'; describe('QueryTable', () => { + // hack for mocking hook that implements sticky behaviour of DataTable + jest + .spyOn(useMountedMemo, 'default') + .mockImplementation(() => ({ width: 100, height: 100 })); const mockedProps = { - queries, + ...dataTableProps, + displayLimit: 10000, }; it('is valid', () => { - expect(React.isValidElement()).toBe(true); + expect(React.isValidElement()).toBe(true); }); it('is valid with props', () => { expect(React.isValidElement()).toBe(true); }); it('renders a proper table', () => { const wrapper = shallow(); - expect(wrapper.find(Table)).toExist(); - expect(wrapper.find(Table).shallow().find('table')).toExist(); - expect(wrapper.find(Table).shallow().find('table').find('Tr')).toHaveLength( - 2, - ); + expect(wrapper.find(DataTable)).toExist(); + expect(wrapper.find(DataTable).shallow().find('table')).toExist(); + expect( + wrapper.find(DataTable).shallow().find('tbody').find('tr'), + ).toHaveLength(2); }); }); diff --git a/superset-frontend/spec/javascripts/sqllab/fixtures.ts b/superset-frontend/spec/javascripts/sqllab/fixtures.ts index d71ffe987d..3e3fc5d0ab 100644 --- a/superset-frontend/spec/javascripts/sqllab/fixtures.ts +++ b/superset-frontend/spec/javascripts/sqllab/fixtures.ts @@ -493,3 +493,8 @@ export const query = { ctas: false, cached: false, }; + +export const dataTableProps = { + columns: ['dbId', 'sql'], + queries, +}; diff --git a/superset-frontend/src/SqlLab/components/QueryTable.jsx b/superset-frontend/src/SqlLab/components/QueryTable.jsx index 978427df70..6edf79f31f 100644 --- a/superset-frontend/src/SqlLab/components/QueryTable.jsx +++ b/superset-frontend/src/SqlLab/components/QueryTable.jsx @@ -19,17 +19,17 @@ import React from 'react'; import PropTypes from 'prop-types'; import moment from 'moment'; -import { Table } from 'reactable-arc'; import { ProgressBar, Well } from 'react-bootstrap'; import Label from 'src/components/Label'; import { t } from '@superset-ui/core'; +import DataTable from '@superset-ui/plugin-chart-table/lib/DataTable'; import Button from 'src/components/Button'; +import { fDuration } from 'src/modules/dates'; import Link from '../../components/Link'; import ResultSet from './ResultSet'; import ModalTrigger from '../../components/ModalTrigger'; import HighlightedSql from './HighlightedSql'; -import { fDuration } from '../../modules/dates'; import QueryStateLabel from './QueryStateLabel'; const propTypes = { @@ -213,14 +213,20 @@ class QueryTable extends React.PureComponent { }) .reverse(); return ( -
- - + ({ + accessor: column, + Header: () => , + Cell: ({ value }) => , + }))} + data={data} + pageSize={10} + maxPageItemCount={9} + searchInput={false} + height="100%" + sticky + /> ); } }
{column}{value}