Skip to canvas
React Data Table Component
/

 

Introduction

 

Installation

 

Basic Examples

 

Patterns

 

Code of Conduct

 

Features & Issues

 

Development

 

Library Integration

 

Reporting

 

Columns

 

Properties

 

Conditional Styles

 

CSS Overrides

 

Custom Styles

 

Custom Themes

 

Enumerators

 

TypeScript

 

Docs
Skip to canvas

 

Filtering

 

Optimization
  1. Recently opened
  2.  

    DocsExamplesFiltering
  3. Back to componentsESC
  4. Clear history
Skip to sidebar
import React from 'react'; import styled from 'styled-components'; import { faker } from '@faker-js/faker'; import Button from '../shared/Button'; import DataTable from '../../src/index'; const createUser = () => ({ id: faker.string.uuid(), name: faker.internet.userName(), email: faker.internet.email(), address: faker.location.streetAddress(), bio: faker.lorem.sentence(), image: faker.image.avatar(), }); const createUsers = (numUsers = 5) => new Array(numUsers).fill(undefined).map(createUser); const fakeUsers = createUsers(2000); const TextField = styled.input` height: 32px; width: 200px; border-radius: 3px; border-top-left-radius: 5px; border-bottom-left-radius: 5px; border-top-right-radius: 0; border-bottom-right-radius: 0; border: 1px solid #e5e5e5; padding: 0 32px 0 16px; &:hover { cursor: pointer; } `; const ClearButton = styled(Button)` border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: 5px; border-bottom-right-radius: 5px; height: 34px; width: 32px; text-align: center; display: flex; align-items: center; justify-content: center; `; const FilterComponent = ({ filterText, onFilter, onClear }) => ( <> <TextField id="search" type="text" placeholder="Filter By Name" aria-label="Search Input" value={filterText} onChange={onFilter} /> <ClearButton type="button" onClick={onClear}> X </ClearButton> </> ); const columns = [ { name: 'Name', selector: row => row.name, sortable: true, }, { name: 'Email', selector: row => row.email, sortable: true, }, { name: 'Address', selector: row => row.address, sortable: true, }, ]; export const Filtering = () => { const [filterText, setFilterText] = React.useState(''); const [resetPaginationToggle, setResetPaginationToggle] = React.useState(false); const filteredItems = fakeUsers.filter( item => item.name && item.name.toLowerCase().includes(filterText.toLowerCase()), ); const subHeaderComponentMemo = React.useMemo(() => { const handleClear = () => { if (filterText) { setResetPaginationToggle(!resetPaginationToggle); setFilterText(''); } }; return ( <FilterComponent onFilter={e => setFilterText(e.target.value)} onClear={handleClear} filterText={filterText} /> ); }, [filterText, resetPaginationToggle]); return ( <DataTable title="Contact List" columns={columns} data={filteredItems} pagination paginationResetDefaultPage={resetPaginationToggle} // optionally, a hook to reset pagination to page 1 subHeader subHeaderComponent={subHeaderComponentMemo} selectableRows persistTableHead /> ); }; export default { title: 'Examples/Filtering', component: Filtering, };