/** * Created by hao.cheng on 2017/4/16. */ import React from 'react'; import { Table, Input, Button } from 'antd'; import { SmileOutlined } from '@ant-design/icons'; const data = [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Joe Black', age: 42, address: 'London No. 1 Lake Park', }, { key: '3', name: 'Jim Green', age: 32, address: 'Sidney No. 1 Lake Park', }, { key: '4', name: 'Jim Red', age: 32, address: 'London No. 2 Lake Park', }, ]; class SearchTable extends React.Component { state = { filterDropdownVisible: false, data, searchText: '', filtered: false, }; searchInput: any; onInputChange = (e: any) => { this.setState({ searchText: e.target.value }); }; onSearch = () => { const { searchText } = this.state; const reg = new RegExp(searchText, 'gi'); this.setState({ filterDropdownVisible: false, filtered: !!searchText, data: data .map((record) => { const match = record.name.match(reg); if (!match) { return null; } return { ...record, name: ( {record.name .split(reg) .map((text, i) => i > 0 ? [{match[0]}, text] : text )} ), }; }) .filter((record) => !!record), }); }; render() { const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', filterDropdown: (
(this.searchInput = ele)} placeholder="Search name" value={this.state.searchText} onChange={this.onInputChange} onPressEnter={this.onSearch} />
), filterIcon: ( ), filterDropdownVisible: this.state.filterDropdownVisible, onFilterDropdownVisibleChange: (visible: boolean) => this.setState({ filterDropdownVisible: visible }, () => this.searchInput.focus() ), }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', filters: [ { text: 'London', value: 'London', }, { text: 'New York', value: 'New York', }, ], onFilter: (value: any, record: any) => record.address.indexOf(value) === 0, }, ]; return (
); } } export default SearchTable;