Skip to content

Commit 1e12e0c

Browse files
fix: allow DataTable breakout filters count to be zero (#3986)
1 parent 88da1da commit 1e12e0c

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

src/DataTable/DropdownFilters.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function DropdownFilters() {
2323
return [[], availableFilters];
2424
}
2525

26-
const numberOfBreakoutFilters = numBreakoutFilters || 1;
26+
const numberOfBreakoutFilters = numBreakoutFilters ?? 1;
2727
const boFilters = availableFilters.slice(0, numberOfBreakoutFilters);
2828
const dropdownFilters = availableFilters.slice(numberOfBreakoutFilters);
2929

src/DataTable/index.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,8 +416,8 @@ DataTable.propTypes = {
416416
/** A custom component representing an action */
417417
PropTypes.element,
418418
]),
419-
/** Number between one and four filters that can be shown on the top row. */
420-
numBreakoutFilters: PropTypes.oneOf([1, 2, 3, 4]),
419+
/** Number between zero and four filters that can be shown on the top row. */
420+
numBreakoutFilters: PropTypes.oneOf([0, 1, 2, 3, 4]),
421421
/** Component to be displayed when the table is empty */
422422
EmptyTableComponent: PropTypes.elementType,
423423
/** Component to be displayed for row status, ie, 10 of 20 rows. Displayed by default in the TableControlBar */

src/DataTable/tests/DataTable.test.jsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,44 @@ describe('<DataTable />', () => {
162162
expect(screen.getByText('More')).toBeInTheDocument();
163163
});
164164

165+
it('places all filters in the dropdown if numBreakoutFilters is 0', async () => {
166+
render(
167+
<DataTableWrapper
168+
{...props}
169+
isFilterable
170+
defaultColumnValues={{ Filter: TextFilter }}
171+
numBreakoutFilters={0}
172+
/>,
173+
);
174+
175+
expect(screen.queryByPlaceholderText('Search name')).toBeNull();
176+
177+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
178+
await userEvent.click(filtersButton);
179+
180+
expect(screen.getByPlaceholderText('Search name')).toBeInTheDocument();
181+
});
182+
183+
it('displays two breakout filters if numBreakoutFilters is 2', async () => {
184+
render(
185+
<DataTableWrapper
186+
{...props}
187+
isFilterable
188+
defaultColumnValues={{ Filter: TextFilter }}
189+
numBreakoutFilters={2}
190+
/>,
191+
);
192+
193+
expect(screen.getByPlaceholderText('Search name')).toBeInTheDocument();
194+
expect(screen.getByPlaceholderText('Search famous for')).toBeInTheDocument();
195+
expect(screen.queryByPlaceholderText('Search coat color')).toBeNull();
196+
197+
const filtersButton = screen.getByRole('button', { name: messages.filtersDropdownTitle.defaultMessage });
198+
await userEvent.click(filtersButton);
199+
200+
expect(screen.getByPlaceholderText('Search coat color')).toBeInTheDocument();
201+
});
202+
165203
it('displays the custom filters title in the sidebar', () => {
166204
render(
167205
<DataTableWrapper

0 commit comments

Comments
 (0)