From 07e35dd54bc1515f8065bd13d9b846bc14205fc4 Mon Sep 17 00:00:00 2001 From: Tyler Jordan Wright Date: Fri, 9 Oct 2020 14:38:28 -0400 Subject: [PATCH] Implemeted per column sorting for ItemTable-ReactTable --- .../ItemTable/ItemTable-ReactTable.js | 46 +++++++++++++++---- .../ItemTableFilter/ItemTableFilter.md | 24 ++++++++++ 2 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 src/components/ItemTableFilter/ItemTableFilter.md diff --git a/src/components/ItemTable/ItemTable-ReactTable.js b/src/components/ItemTable/ItemTable-ReactTable.js index da29830..9606f18 100644 --- a/src/components/ItemTable/ItemTable-ReactTable.js +++ b/src/components/ItemTable/ItemTable-ReactTable.js @@ -1,10 +1,22 @@ import React, { useState, useEffect, useMemo } from "react"; -import { useTable, useFilters, useBlockLayout,useFlexLayout } from "react-table"; -import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper } from "@material-ui/core"; +import { useTable, useFilters, useBlockLayout, useFlexLayout, useSortBy } from "react-table"; +import { Table, TableBody, TableCell, TableHead, TableRow, TableContainer, Paper, TableSortLabel } from "@material-ui/core"; import ItemTableFilter from "../ItemTableFilter/" export default function ItemTable_ReactTable() { + const styles = theme => ({ + width:50, + // Fully visible for active icons + activeSortIcon: { + opacity: 1, + }, + // Half visible for inactive icons + inactiveSortIcon: { + opacity: 0.4, + }, + }); + const [data, setData] = useState([]); useEffect(() => { fetch("/api/ce").then(apiResponse => apiResponse.json()).then(queue => { @@ -14,8 +26,8 @@ export default function ItemTable_ReactTable() { const columns = React.useMemo( () => [ - { Header: 'Queue', accessor: 'queue', }, - { Header: 'Item #', accessor: 'number'}, + { Header: 'Queue', accessor: 'queue', }, + { Header: 'Item #', accessor: 'number' }, { Header: 'Assigned To', accessor: 'assignedTo' }, { Header: 'Subject', accessor: 'subject' }, { Header: 'Status', accessor: 'status', }, @@ -34,12 +46,13 @@ export default function ItemTable_ReactTable() { } = useTable( { columns, + defaultCanSort: true, data, defaultColumn: { - Filter: ({ column: { Header, setFilter }}) => { - return( + Filter: ({ column: { Header, setFilter } }) => { + return ( setFilter(event.target.value)} /> ); @@ -47,9 +60,12 @@ export default function ItemTable_ReactTable() { } }, useFilters, - useFlexLayout + useFlexLayout, + useSortBy, ); + const [orderBy, setOrderBy] = useState(""); + return ( @@ -57,9 +73,19 @@ export default function ItemTable_ReactTable() { {headerGroups.map(headerGroup => ( {headerGroup.headers.map(column => ( - - {column.render("Filter")} + {column.render("Filter")} + + + + + + ))} ))} diff --git a/src/components/ItemTableFilter/ItemTableFilter.md b/src/components/ItemTableFilter/ItemTableFilter.md new file mode 100644 index 0000000..2397c53 --- /dev/null +++ b/src/components/ItemTableFilter/ItemTableFilter.md @@ -0,0 +1,24 @@ + +```jsx +import React from 'react'; +import PropTypes from 'prop-types'; +import { TextField } from "@material-ui/core"; + + + <> + null} + type="search" + size="small" + color="secondary" + variant="outlined" + fullWidth + /> + + +``` + +```jsx static + setFilter(event.target.value)} /> +``` \ No newline at end of file