import { RowSelectionState } from '@tanstack/react-table'; import { isEmpty } from 'lodash'; import { useCallback, useMemo, useState } from 'react'; export function useRowSelection() { const [rowSelection, setRowSelection] = useState({}); const clearRowSelection = useCallback(() => { setRowSelection({}); }, []); const selectedCount = useMemo(() => { return Object.keys(rowSelection).length; }, [rowSelection]); return { rowSelection, setRowSelection, rowSelectionIsEmpty: isEmpty(rowSelection), clearRowSelection, selectedCount, }; } export type UseRowSelectionType = ReturnType; export function useSelectedIds>( rowSelection: RowSelectionState, list: T, ) { const selectedIds = useMemo(() => { const indexes = Object.keys(rowSelection); return list .filter((x, idx) => indexes.some((y) => Number(y) === idx)) .map((x) => x.id); }, [list, rowSelection]); return { selectedIds }; }