import { useMemo, useState } from "react";
/**
* @example
* const array = [{name: 'b'}, {name: 'a'}]
* const sortedArray = useSortBy(array, 'name')
* console.log(sortedArray)
* // [{name: 'a'}, {name: 'b'}]
*/
export const useSortBy = (data: any[], key: string, direction: "asc" | "desc" = "asc"): Array<any> => {
const [sortKey, setSortKey] = useState(key);
const [sortDirection, setSortDirection] = useState(direction);
const sortArray = useMemo(() => {
return data.sort((a, b) => {
if (a[sortKey] < b[sortKey]) {
return sortDirection === "asc" ? -1 : 1;
}
if (a[sortKey] > b[sortKey]) {
return sortDirection === "asc" ? 1 : -1;
}
return 0;
});
}, [data, sortDirection, sortKey]);
return [sortArray, setSortKey, setSortDirection];
}