Source: hooks/useOrdering.jsx

import { useState, useEffect } from 'react';

/**
 * Custom hook used to sort the data
 * @param {Array.<object>} data Data to sort
 * @param {Object} ordering Example: { order: "ascending", property: "firstName" } 
 * @returns {Array.<object>} Sorted data
 */
export function useOrdering(data, ordering) {
  const [orderedData, setOrderedData] = useState(data)

  useEffect(() => {
    if (!ordering) return setOrderedData(data);
    (ordering.order === 'ascending')
      ? setOrderedData(data.sort((a, b) => (a[ordering.property] > b[ordering.property]) ? 1 : -1))
      : setOrderedData(data.sort((a, b) => (a[ordering.property] > b[ordering.property]) ? -1 : 1))
  }, [orderedData, data, ordering]);

  return orderedData;
}