From 8f9bfcae6b8fdcef6302ca4b7509377edac34b4b Mon Sep 17 00:00:00 2001 From: Pramod Mahajan Date: Tue, 27 May 2025 22:18:44 +0530 Subject: [PATCH] created new hook for sorting table data --- src/hooks/useSortableData.js | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/hooks/useSortableData.js diff --git a/src/hooks/useSortableData.js b/src/hooks/useSortableData.js new file mode 100644 index 00000000..a3043f82 --- /dev/null +++ b/src/hooks/useSortableData.js @@ -0,0 +1,35 @@ + +import { useState, useMemo } from 'react'; + +export const useSortableData = (items, config = null) => { + const [sortConfig, setSortConfig] = useState(config); + + const sortedItems = useMemo(() => { + let sortableItems = [...items]; + if (sortConfig !== null) { + sortableItems.sort((a, b) => { + const aValue = sortConfig.key(a).toLowerCase(); + const bValue = sortConfig.key(b).toLowerCase(); + + if (aValue < bValue) return sortConfig.direction === 'asc' ? -1 : 1; + if (aValue > bValue) return sortConfig.direction === 'asc' ? 1 : -1; + return 0; + }); + } + return sortableItems; + }, [items, sortConfig]); + + const requestSort = (keyFn) => { + let direction = 'asc'; + if ( + sortConfig && + sortConfig.key.toString() === keyFn.toString() && + sortConfig.direction === 'asc' + ) { + direction = 'desc'; + } + setSortConfig({ key: keyFn, direction }); + }; + + return { items: sortedItems, requestSort, sortConfig }; +};