Как сделать поиск в таблице? - PullRequest
0 голосов
/ 25 марта 2019

Я хочу выполнить поиск со всеми полями разбивки на страницы и сортировки на месте. То есть я хочу вызвать handleChange с помощью searchkeyword.

Так, как я могу вызвать handleSearch, а затем вызвать handleChange изнутри handleSearch?

import React from "react";
import { withRouter } from "react-router-dom";
import { Table, Button, Icon, Row, Col, Input } from "antd";

import axios from "axios";

const Search = Input.Search;

class App extends React.Component {
  state = {
    data: [],
    searchValue: "",
    loading: false,
    visible: false,
    pagination: {}
  };

  componentDidMount() {
    this.fetch();
  }

  handleTableChange = (pagination, filter, sorter, value) => {
    console.log(pagination, value, sorter, "Table Change");
    let sorterOrder = "";
    let sorterField = "";
    let searchVal = "";
    const pager = { ...this.state.pagination };
    pager.current = pagination.current;
    this.setState({
      pagination: pager
    });
    if (value) {
      console.log("inside if");
      searchVal = undefined;
    } else {
      console.log("inside else");
      searchVal = value;
    }
    if (sorter) {
      if (sorter.order === "ascend") {
        sorterOrder = "ASC";
      }
      if (sorter.order === "descend") {
        sorterOrder = "DESC";
      }
      sorterField = sorter.field;
    }
    this.fetch({
      page: pagination.current,
      sortField: sorterField,
      sortOrder: sorterOrder,
      ...filter,
      value: searchVal
    });
  };

  fetch = (params = {}) => {
    this.setState({ loading: true });
    axios.post("***/****", params).then(res => {
      const pagination = { ...this.state.pagination };
      let apiData = res.data.result;
      if (res.data.status === 1) {
        const objects = apiData.map(row => ({
          key: row.id,
          id: row.id,
          firstName: row.firstName,
          lastName: row.lastName,
          status: row.status,
          email: row.email
        }));
        console.log(res.data);
        pagination.total = res.data.count;
        this.setState({
          loading: false,
          data: objects,
          pagination
        });
      } else {
        console.log("Database status is not 1!");
      }
    });
  };

 

  handleSearch = value => {
    console.log("value", value);
    this.setState({
      searchValue: value
    });
    let searchkey = this.state.searchValue;
    const pagination = { ...this.state.pagination };
    const sorter = { ...this.state.sorter };
    console.log("search", value, pagination, sorter);
    this.handleTableChange({
      value
    });
    
  };


  render() {
    const columns = [
      {
        title: "First Name",
        dataIndex: "firstName",
        sorter: true
      },
      {
        title: "Email",
        dataIndex: "email",
        sorter: true
      }
    ];
    return (
      
          <div>
            
                    <Search
                      placeholder="input search text"
                      className="searchBut"
                      onSearch={value => this.handleSearch(value)}
                    />
                  
                    <Button
                      className="addBut"
                      style={{ marginTop: "0" }}
                      type="primary"
                      onClick={() => this.openForm()}
                    >
                      + Add Admin
                    </Button>
                  
          </div>
          <Table
            bordered
            columns={columns}
            dataSource={this.state.data}
            pagination={{ total: this.state.pagination.total, pageSize: 4 }}
            loading={this.state.loading}
            onChange={this.handleTableChange}
          />
        
    );
  }
}

export default withRouter(App);

здесь, когда я задаю значение в поле поиска, он будет вызывать запрос с полезной нагрузкой запроса следующим образом:

{sortField: "", sortOrder: ""}
sortField: ""
sortOrder: ""

Так, как я могу это сделать?

1 Ответ

0 голосов
/ 29 марта 2019

Я не уверен, чего вы здесь добиваетесь.

Но вы всегда можете отфильтровать исходные данные таблицы. Нравится следующий

<Table
     bordered
     columns={columns}
     dataSource={this.state.data.filter(data=> Object.keys(data).filter(key => data[key].includes(searchValue)).length > 0 ? true: false)}
     pagination={{ total: this.state.pagination.total, pageSize: 4 }}
     loading={this.state.loading}
     onChange={this.handleTableChange}
/>

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...