* Refactored tables without tan stack * Fixed checkbox behavior with multiple handlers on click * Fixed hotkeys scope * Fix debounce in editable cells * Lowered coverage --------- Co-authored-by: Charles Bochet <charles@twenty.com>
49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
import { useRecoilCallback, useRecoilValue } from 'recoil';
|
|
|
|
import { allRowsSelectedStatusSelector } from '../states/allRowsSelectedStatusSelector';
|
|
import { isRowSelectedFamilyState } from '../states/isRowSelectedFamilyState';
|
|
import { numberOfSelectedRowState } from '../states/numberOfSelectedRowState';
|
|
import { numberOfTableRowsSelectorState } from '../states/numberOfTableRowsSelectorState';
|
|
import { tableRowIdsState } from '../states/tableRowIdsState';
|
|
|
|
export function useSelectAllRows() {
|
|
const allRowsSelectedStatus = useRecoilValue(allRowsSelectedStatusSelector);
|
|
|
|
const selectAllRows = useRecoilCallback(
|
|
({ set, snapshot }) =>
|
|
() => {
|
|
const allRowsSelectedStatus = snapshot
|
|
.getLoadable(allRowsSelectedStatusSelector)
|
|
.valueOrThrow();
|
|
|
|
const numberOfRows = snapshot
|
|
.getLoadable(numberOfTableRowsSelectorState)
|
|
.valueOrThrow();
|
|
|
|
const tableRowIds = snapshot
|
|
.getLoadable(tableRowIdsState)
|
|
.valueOrThrow();
|
|
|
|
if (allRowsSelectedStatus === 'none') {
|
|
set(numberOfSelectedRowState, numberOfRows);
|
|
|
|
for (const rowId of tableRowIds) {
|
|
set(isRowSelectedFamilyState(rowId), true);
|
|
}
|
|
} else {
|
|
set(numberOfSelectedRowState, 0);
|
|
|
|
for (const rowId of tableRowIds) {
|
|
set(isRowSelectedFamilyState(rowId), false);
|
|
}
|
|
}
|
|
},
|
|
[],
|
|
);
|
|
|
|
return {
|
|
allRowsSelectedStatus,
|
|
selectAllRows,
|
|
};
|
|
}
|