material-ui-datatables icon indicating copy to clipboard operation
material-ui-datatables copied to clipboard

NOTHING IS WORKING.

Open logysis opened this issue 8 years ago • 13 comments

Sorting, Paging, Filtering all don't work. Wasted half day on it.

logysis avatar Jul 08 '17 02:07 logysis

confirmed, I tried to work on the example also, copy and paste the exact same codes, doesn't work

UkiMiawz avatar Jul 10 '17 14:07 UkiMiawz

@UkiMiawz the only way to get it working is write your own sort/paging/filter handlers.

logysis avatar Jul 10 '17 19:07 logysis

@hyojin, can I make the filter section displayed by default?

logysis avatar Jul 10 '17 19:07 logysis

@logysis I'm going to add the props which can handle the search bar. #44

hyojin avatar Aug 01 '17 00:08 hyojin

Great news @hyojin

advance512 avatar Aug 02 '17 07:08 advance512

Hi, how do you simulate a click on the cell in an Enzyme test?

logysis avatar Aug 08 '17 02:08 logysis

@logysis please check this :)

hyojin avatar Aug 09 '17 01:08 hyojin

@hyojin can you make filter section displayed by default with some value in it?

logysis avatar Aug 17 '17 03:08 logysis

@logysis yes, you can use props, headerToolbarMode and filterValue. here is example

hyojin avatar Aug 17 '17 08:08 hyojin

@hyojin thank you!

logysis avatar Aug 17 '17 17:08 logysis

@hyojin just wondering, when are you going to release a version with built-in paging/sort/filter?

logysis avatar Aug 17 '17 17:08 logysis

@hyojin another question, is there a way to place the cursor in search box by default?

logysis avatar Aug 17 '17 23:08 logysis

my implementation of sort, filter and pagination :

import DataTables from 'material-ui-datatables'
import users from '../data/users.json'
import { sortByStringAscending, sortByStringDescending } from '../helpers/sorting'
import { TABLE_COLUMNS_USERS } from '../constants/tableColumnsSpecifications'

class Users extends Component {
  state = {
    searchPhrase: "",
    page: 1,
    rowSize: 10,
  }

  handleFilter = value => {
    this.setState({
      searchPhrase: value
    })
  }

  handlePreviousPageClick = () => {
    this.setState({page: this.state.page - 1})
  }

  handleNextPageClick = () => {
    this.setState({page: this.state.page + 1})
  }

  handleRowSizeChange = (rowSizeIndex, rowSize) => {
    this.setState({page: 1, rowSize});
  }

  render() {

    let data = sortByStringAscending([...users], 'email')
      .filter(row =>
        row.email.includes(this.state.searchPhrase) ||
        row.lastName.includes(this.state.searchPhrase) ||
        row.firstName.includes(this.state.searchPhrase))

    let displayData = data.slice(this.state.rowSize * (this.state.page - 1), this.state.rowSize * (this.state.page))

    const handleSort = (key, order) => order === 'desc' ? sortByStringDescending(displayData, key) : sortByStringAscending(displayData, key)

    return (
      <DataTables
        height={'auto'}
        showRowHover={true}
        columns={TABLE_COLUMNS_USERS}
        data={displayData}
        showCheckboxes={false}
        onSortOrderChange={handleSort}
        showHeaderToolbar={true}
        showHeaderToolbarFilterIcon={false}
        initialSort={{column: 'email', order: 'asc'}}
        onFilterValueChange={this.handleFilter}
        headerToolbarMode={'filter'}
        count={data.length}
        page={this.state.page}
        rowSize={this.state.rowSize}
        onPreviousPageClick={this.handlePreviousPageClick}
        onNextPageClick={this.handleNextPageClick}
        onRowSizeChange={this.handleRowSizeChange}
      />
    )
  }
}

export default Users
/////////////////////////////////////////////////////////////////////
and now for COLUMNS : 
/////////////////////////////////////////////////////////////////////
export const TABLE_COLUMNS_USERS = [
  {
    key: 'firstName',
    label: 'First Name',
    sortable: true
  }, {
    key: 'lastName',
    label: 'Last Name',
    sortable: true
  }, {
    key: 'email',
    label: 'Email',
    sortable: true
  }, {
    key: 'type',
    label: 'Type',
    sortable: true
  },
]
/////////////////////////////////////////////////////////////////////
and sort logic : 
/////////////////////////////////////////////////////////////////////
export const sortByStringAscending = (array, condition)  => array.sort((a, b) => a[condition].localeCompare(b[condition]))
export const sortByStringDescending = (array, condition)  => array.sort((a, b) => b[condition].localeCompare(a[condition]))```

michalpokojski avatar Sep 21 '17 14:09 michalpokojski