Skip to content

Commit b4ac812

Browse files
authored
test(useFilters): Test custom filters (#2597)
Add test to ensure that only undefined auto removes filter.
1 parent 4bb188b commit b4ac812

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

src/plugin-hooks/tests/useFilters.test.js

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,89 @@ test('does not filter columns with GlobalFilter if marked disableGlobalFilter',
391391
.map(row => Array.from(row.children)[0].textContent)
392392
).toEqual(['firstName: tanner', 'firstName: derek', 'firstName: jaylen'])
393393
})
394+
395+
test('test custom filter type', () => {
396+
const columns = [
397+
{
398+
Header: 'Name',
399+
columns: [
400+
{
401+
Header: 'First Name',
402+
accessor: 'firstName',
403+
disableFilters: true,
404+
},
405+
{
406+
Header: 'Last Name',
407+
accessor: 'lastName',
408+
disableFilters: true,
409+
},
410+
],
411+
},
412+
{
413+
Header: 'Status',
414+
columns: [
415+
{
416+
Header: 'In Relationship',
417+
id: 'inRelationship',
418+
accessor: ({status}) => status === 'In Relationship',
419+
Filter: ({column: {filterValue, setFilter}}) => {
420+
const onClick = () => {
421+
if (typeof filterValue === 'undefined') {
422+
setFilter(false);
423+
} else {
424+
setFilter(undefined);
425+
}
426+
}
427+
428+
return <button onClick={onClick}>
429+
{typeof filterValue === 'undefined' ? 'Any status' : 'Single'}
430+
</button>
431+
432+
},
433+
// could use 'exact' filter type, but we want to use a custom filter method for this test
434+
filter: function strictEquals(rows, id, filterValue) {
435+
return rows.filter( row => {
436+
const rowValue = row.values[id];
437+
return rowValue === filterValue;
438+
})
439+
}
440+
}
441+
]
442+
}
443+
]
444+
445+
const rendered = render(<App columns={columns} />)
446+
447+
// check button cycles through states undefined -> false -> undefined
448+
449+
const filterButton = rendered.getByText('Any status')
450+
451+
fireEvent.click(filterButton, {});
452+
let nextButtonState = rendered.getByText('Single')
453+
expect(nextButtonState).toEqual(filterButton);
454+
expect(
455+
rendered
456+
.queryAllByRole('row')
457+
.slice(3)
458+
.map(row => Array.from(row.children)[0].textContent)
459+
).toEqual([
460+
'firstName: derek',
461+
'firstName: joe',
462+
])
463+
464+
fireEvent.click(filterButton, {});
465+
nextButtonState = rendered.getByText('Any status')
466+
expect(nextButtonState).toEqual(filterButton);
467+
expect(
468+
rendered
469+
.queryAllByRole('row')
470+
.slice(3)
471+
.map(row => Array.from(row.children)[0].textContent)
472+
).toEqual([
473+
'firstName: tanner',
474+
'firstName: derek',
475+
'firstName: joe',
476+
'firstName: jaylen',
477+
])
478+
479+
})

0 commit comments

Comments
 (0)