Skip to content

Commit 0ce4309

Browse files
author
Kubit
committed
Add new Table Component
Add new Table V2 The Table V1 component will be deleted on next MAJOR update
1 parent 2c8b591 commit 0ce4309

File tree

136 files changed

+6455
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+6455
-1
lines changed
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import { screen } from '@testing-library/react';
2+
import React from 'react';
3+
4+
import { renderProvider } from '@/tests/renderProvider/renderProvider.utility';
5+
6+
import { DataTableHead } from '../../components';
7+
8+
const mockProps = {};
9+
10+
describe('DataTableHead', () => {
11+
it('Should render a tableHead with thead tag', () => {
12+
renderProvider(<DataTableHead {...mockProps} tableHeadConfig={{ dataTestId: 'thead-id' }} />);
13+
14+
const tableHead = screen.getByTestId('thead-id');
15+
expect(tableHead).toBeInTheDocument();
16+
expect(tableHead.tagName).toBe('THEAD');
17+
});
18+
19+
it('When using row groups, should render a tableHead with div tag', () => {
20+
renderProvider(
21+
<DataTableHead {...mockProps} usingRowGroups tableHeadConfig={{ dataTestId: 'thead-id' }} />
22+
);
23+
24+
const tableHead = screen.getByTestId('thead-id');
25+
26+
expect(tableHead).toBeInTheDocument();
27+
expect(tableHead.tagName).toBe('DIV');
28+
});
29+
30+
it('For each column in the columns prop, should render a TableCell with the columns headerContent', () => {
31+
const columns = [
32+
{ field: 'field1', headerContent: 'Header 1' },
33+
{ field: 'field2', headerContent: 'Header 2' },
34+
];
35+
36+
renderProvider(<DataTableHead {...mockProps} columns={columns} />);
37+
38+
const header1 = screen.getByText('Header 1');
39+
const header2 = screen.getByText('Header 2');
40+
41+
expect(header1).toBeInTheDocument();
42+
expect(header2).toBeInTheDocument();
43+
});
44+
45+
it('When usingRowGroups, the size of the cell will be set by the grid template, table cell tag will be set to DIV', () => {
46+
const columns = [
47+
{ field: 'field1', headerContent: 'Header 1', with: '100px' },
48+
{ field: 'field2', headerContent: 'Header 2', with: '100px' },
49+
];
50+
51+
renderProvider(<DataTableHead {...mockProps} usingRowGroups columns={columns} />);
52+
53+
const header1 = screen.getByText('Header 1');
54+
const header2 = screen.getByText('Header 2');
55+
56+
expect(header1).toBeInTheDocument();
57+
expect(header2).toBeInTheDocument();
58+
59+
expect(header1.tagName).toBe('DIV');
60+
expect(header2.tagName).toBe('DIV');
61+
});
62+
63+
it('Each column can have a complex format, in this case, the column can be fully configured using the TableCell props', () => {
64+
const columns = [
65+
{
66+
field: 'field1',
67+
headerContent: {
68+
complex: { content: 'Header 1', variant: 'DEFAULT', dataTestId: 'tableCellHeader1' },
69+
},
70+
},
71+
];
72+
73+
renderProvider(<DataTableHead {...mockProps} columns={columns} />);
74+
75+
const header1 = screen.getByTestId('tableCellHeader1');
76+
77+
expect(header1).toBeInTheDocument();
78+
expect(header1.tagName).toBe('TH');
79+
});
80+
81+
it('When using usingRowGroups, by default the complex columns will be set as div', () => {
82+
const columns = [
83+
{
84+
field: 'field1',
85+
headerContent: {
86+
complex: { content: 'Header 1', variant: 'DEFAULT', dataTestId: 'tableCellHeader1' },
87+
},
88+
},
89+
];
90+
91+
renderProvider(<DataTableHead {...mockProps} usingRowGroups columns={columns} />);
92+
93+
const header1 = screen.getByTestId('tableCellHeader1');
94+
95+
expect(header1).toBeInTheDocument();
96+
expect(header1.tagName).toBe('DIV');
97+
});
98+
});
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import { screen } from '@testing-library/react';
2+
import React from 'react';
3+
4+
import { renderProvider } from '@/tests/renderProvider/renderProvider.utility';
5+
import { ROLES } from '@/types';
6+
7+
import { DataTableRows } from '../../components';
8+
9+
const mockProps = {};
10+
11+
describe('DataTableRows', () => {
12+
it('Should render a set of rows', () => {
13+
const columns = [
14+
{ field: 'field1', headerContent: 'Header 1' },
15+
{ field: 'field2', headerConent: 'Header 2' },
16+
];
17+
18+
const rows = [{ field1: 'value1', field2: 'value2' }];
19+
20+
renderProvider(<DataTableRows {...mockProps} columns={columns} rows={rows} />);
21+
22+
const rowsFound = screen.getAllByRole(ROLES.ROW);
23+
const cell1 = screen.getByText('value1');
24+
const cell2 = screen.getByText('value2');
25+
26+
expect(rowsFound).toHaveLength(1);
27+
expect(cell1).toBeInTheDocument();
28+
expect(cell2).toBeInTheDocument();
29+
});
30+
31+
it('Should render a set of rows with active rows', () => {
32+
const columns = [
33+
{ field: 'field1', headerContent: 'Header 1' },
34+
{ field: 'field2', headerConent: 'Header 2' },
35+
];
36+
37+
const rows = [{ id: 'row1', field1: 'value1', field2: 'value2' }];
38+
39+
renderProvider(
40+
<DataTableRows {...mockProps} activeRows={['row1']} columns={columns} rows={rows} />
41+
);
42+
43+
const rowsFound = screen.getAllByRole(ROLES.ROW);
44+
const cell1 = screen.getByText('value1');
45+
const cell2 = screen.getByText('value2');
46+
47+
expect(rowsFound).toHaveLength(1);
48+
expect(cell1).toBeInTheDocument();
49+
expect(cell2).toBeInTheDocument();
50+
});
51+
52+
it('Cell value could be a complex object, configuring it as a tableCell props', () => {
53+
const columns = [
54+
{ field: 'field1', headerContent: 'Header 1' },
55+
{ field: 'field2', headerConent: 'Header 2' },
56+
];
57+
58+
const rows = [
59+
{
60+
field1: 'value1',
61+
field2: {
62+
complex: {
63+
content: 'value2',
64+
},
65+
},
66+
},
67+
];
68+
69+
renderProvider(<DataTableRows {...mockProps} columns={columns} rows={rows} />);
70+
71+
const rowsFound = screen.getAllByRole(ROLES.ROW);
72+
const cell1 = screen.getByText('value1');
73+
const cell2 = screen.getByText('value2');
74+
75+
expect(rowsFound).toHaveLength(1);
76+
expect(cell1).toBeInTheDocument();
77+
expect(cell2).toBeInTheDocument();
78+
});
79+
80+
it('Cell value could be build from a valueGetter function given by the column', () => {
81+
const columns = [
82+
{
83+
field: 'field1',
84+
headerContent: 'Header 1',
85+
valueGetter: value => value.toUpperCase(),
86+
},
87+
{ field: 'field2', headerConent: 'Header 2' },
88+
];
89+
90+
const rows = [{ field1: 'value1', field2: 'value2' }];
91+
92+
renderProvider(<DataTableRows {...mockProps} columns={columns} rows={rows} />);
93+
94+
const rowsFound = screen.getAllByRole(ROLES.ROW);
95+
const cell1 = screen.getByText('VALUE1');
96+
const cell2 = screen.getByText('value2');
97+
98+
expect(rowsFound).toHaveLength(1);
99+
expect(cell1).toBeInTheDocument();
100+
expect(cell2).toBeInTheDocument();
101+
});
102+
103+
it('When usingRowGroups is set to true, it only affects to the display of the rows grid', () => {
104+
const columns = [
105+
{ field: 'field1', headerContent: 'Header 1' },
106+
{ field: 'field2', headerConent: 'Header 2' },
107+
];
108+
109+
const rows = [
110+
{
111+
field1: 'value1',
112+
field2: {
113+
complex: {
114+
content: 'value2',
115+
},
116+
},
117+
},
118+
];
119+
120+
renderProvider(
121+
<DataTableRows
122+
{...mockProps}
123+
usingRowGroups
124+
activeRows={['row1']}
125+
columns={columns}
126+
rows={rows}
127+
/>
128+
);
129+
130+
const rowsFound = screen.getAllByRole(ROLES.ROW);
131+
const cell1 = screen.getByText('value1');
132+
const cell2 = screen.getByText('value2');
133+
134+
expect(rowsFound).toHaveLength(1);
135+
expect(cell1).toBeInTheDocument();
136+
expect(cell2).toBeInTheDocument();
137+
});
138+
});
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { screen } from '@testing-library/react';
2+
import React from 'react';
3+
4+
import { renderProvider } from '@/tests/renderProvider/renderProvider.utility';
5+
6+
import { HiddenDataTableHead } from '../../components';
7+
8+
const mockProps = {};
9+
10+
describe('HiddenDataTableHead', () => {
11+
it('Should render a tableHead with its cells', () => {
12+
const columns = [
13+
{ field: 'field1', headerContent: 'Header 1' },
14+
{
15+
field: 'field2',
16+
headerContent: {
17+
complex: { content: 'Header 2', variant: 'DEFAULT', dataTestId: 'tableCellHeader1' },
18+
},
19+
},
20+
];
21+
22+
renderProvider(<HiddenDataTableHead {...mockProps} columns={columns} />);
23+
24+
const header1 = screen.getByText('Header 1');
25+
const header2 = screen.getByText('Header 2');
26+
27+
expect(header1).toBeInTheDocument();
28+
expect(header2).toBeInTheDocument();
29+
});
30+
});

0 commit comments

Comments
 (0)