Skip to content

Commit bb07957

Browse files
Sean PrashadSean Prashad
authored andcommitted
Condense Table component
1 parent afaedf3 commit bb07957

File tree

2 files changed

+94
-79
lines changed

2 files changed

+94
-79
lines changed

web/src/components/Table/TableView/index.js

Lines changed: 0 additions & 66 deletions
This file was deleted.

web/src/components/Table/index.js

Lines changed: 94 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import React, { useState, useEffect } from 'react';
2-
import { Container, Row, Col, Badge, NavLink } from 'reactstrap';
2+
import {
3+
Table as ReactTable,
4+
Container,
5+
Row,
6+
Badge,
7+
NavLink,
8+
} from 'reactstrap';
39
import ReactTooltip from 'react-tooltip';
4-
import TableView from './TableView';
10+
import { useTable, useFilters } from 'react-table';
11+
import { FaSortAlphaUp, FaSortAlphaDown } from 'react-icons/fa';
512
import { Event } from '../Shared/Tracking';
613

714
import questionList from '../../data';
@@ -10,6 +17,22 @@ import './styles.scss';
1017

1118
const images = require.context('../../icons', true);
1219

20+
function DefaultColumnFilter({
21+
column: { filterValue, preFilteredRows, setFilter },
22+
}) {
23+
const count = preFilteredRows.length;
24+
25+
return (
26+
<input
27+
value={filterValue || ''}
28+
onChange={e => {
29+
setFilter(e.target.value || undefined); // Set undefined to remove the filter entirely
30+
}}
31+
placeholder={`Search ${count} records...`}
32+
/>
33+
);
34+
}
35+
1336
const Table = () => {
1437
const [checked, setChecked] = useState(
1538
JSON.parse(localStorage.getItem('checked')) ||
@@ -20,6 +43,15 @@ const Table = () => {
2043
window.localStorage.setItem('checked', JSON.stringify(checked));
2144
}, [checked]);
2245

46+
const defaultColumn = React.useMemo(
47+
() => ({
48+
Filter: DefaultColumnFilter,
49+
minWidth: 30,
50+
maxWidth: 10,
51+
}),
52+
[],
53+
);
54+
2355
const data = React.useMemo(() => questionList, []);
2456

2557
const columns = React.useMemo(
@@ -68,7 +100,8 @@ const Table = () => {
68100
{cellInfo.row.original.url}
69101
</NavLink>
70102
),
71-
disableSortBy: true,
103+
disableFilters: true,
104+
maxWidth: 2,
72105
},
73106
{
74107
Header: 'Pattern',
@@ -77,7 +110,6 @@ const Table = () => {
77110
{
78111
Header: 'Difficulty',
79112
accessor: 'difficulty',
80-
disableSortBy: true,
81113
Cell: cellInfo => (
82114
<Badge
83115
className={cellInfo.row.original.difficulty.toLowerCase()}
@@ -105,7 +137,7 @@ const Table = () => {
105137

106138
return <Row className="companies">{companies}</Row>;
107139
},
108-
disableSortBy: true,
140+
disableFilters: true,
109141
},
110142
],
111143
},
@@ -114,16 +146,65 @@ const Table = () => {
114146
[],
115147
);
116148

149+
const {
150+
getTableProps,
151+
getTableBodyProps,
152+
headerGroups,
153+
rows,
154+
prepareRow,
155+
} = useTable(
156+
{
157+
columns,
158+
data,
159+
defaultColumn,
160+
},
161+
useFilters,
162+
);
163+
117164
return (
118165
<Container className="table">
119-
<Col>
120-
<Row>
121-
<Col>
122-
<ReactTooltip />
123-
<TableView columns={columns} data={data} />
124-
</Col>
125-
</Row>
126-
</Col>
166+
<ReactTooltip />
167+
<ReactTable align="center" striped hover {...getTableProps()}>
168+
<thead>
169+
{headerGroups.map(headerGroup => (
170+
<tr {...headerGroup.getHeaderGroupProps()}>
171+
{headerGroup.headers.map(column => (
172+
<th {...column.getHeaderProps()}>
173+
{column.render('Header')}
174+
<span>
175+
{' '}
176+
{column.isSorted ? (
177+
column.isSortedDesc ? (
178+
<FaSortAlphaUp />
179+
) : (
180+
<FaSortAlphaDown />
181+
)
182+
) : (
183+
''
184+
)}
185+
</span>
186+
<div>{column.canFilter ? column.render('Filter') : null}</div>
187+
</th>
188+
))}
189+
</tr>
190+
))}
191+
</thead>
192+
193+
<tbody {...getTableBodyProps()}>
194+
{rows.map(row => {
195+
prepareRow(row);
196+
return (
197+
<tr {...row.getRowProps()}>
198+
{row.cells.map(cell => {
199+
return (
200+
<td {...cell.getCellProps()}>{cell.render('Cell')}</td>
201+
);
202+
})}
203+
</tr>
204+
);
205+
})}
206+
</tbody>
207+
</ReactTable>
127208
</Container>
128209
);
129210
};

0 commit comments

Comments
 (0)