Rev 15314 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
/* eslint-disable no-mixed-spaces-and-tabs */import React from 'react'import { useEffect, useState, useCallback } from 'react'const sortData = ({ tableData, sortKey, reverse }) => {let sortedDataif (!sortKey) return tableDatasortedData = tableData.sort((a, b) => {if (typeof a[sortKey] === 'string') {return a[sortKey].toLowerCase() < b[sortKey].toLowerCase() && -1}return a[sortKey] - b[sortKey]})if (!reverse) return sortedData.reverse()return sortedData}const SortButton = ({ reverse, columnKey, sortKey, onClick }) => {return (<button onClick={onClick} className="btn p-0">{(sortKey === columnKey) && reverse? <i className='fa fa-angle-up ml-2' />: <i className='fa fa-angle-down ml-2' />}</button>)}const Table = ({ data = [], headers, setData, children }) => {const [sortKey, setSortKey] = useState('name')const [reverse, setReverse] = useState(false)const sortedData = useCallback(() => sortData({ tableData: data, sortKey, reverse: reverse }),[data, sortKey, reverse])const changeSort = (key) => {setReverse(!reverse)setSortKey(key)}useEffect(() => {setData(sortedData())}, [sortKey, reverse])return (<table className="table table-hover my-table w-100"><thead><tr>{headers.map((row) =><th key={row.key} className="text-vertical-middle">{row.label}{row.isSorteable &&<SortButtoncolumnKey={row.key}onClick={() => changeSort(row.key)}sortKey={sortKey}reverse={reverse}/>}</th>)}</tr></thead><tbody>{children()}</tbody></table >)}export default Table