-
-
Notifications
You must be signed in to change notification settings - Fork 619
Expand file tree
/
Copy pathuseHoverState.ts
More file actions
25 lines (22 loc) · 987 Bytes
/
useHoverState.ts
File metadata and controls
25 lines (22 loc) · 987 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { useContext } from '@rc-component/context';
import TableContext from '../context/TableContext';
import type { OnHover } from '../hooks/useHover';
/** Check if cell is in hover range */
function inHoverRange(cellStartRow: number, cellRowSpan: number, startRow: number, endRow: number) {
const cellEndRow = cellStartRow + cellRowSpan - 1;
return cellStartRow <= endRow && cellEndRow >= startRow;
}
export default function useHoverState(
rowIndex: number,
rowSpan: number,
colIndex: number,
colSpan: number,
): [hovering: boolean, colHovering: boolean, onRowHover: OnHover, onColHover: OnHover] {
return useContext(TableContext, ctx => {
const rowHovering =
ctx.rowHoverable && inHoverRange(rowIndex, rowSpan || 1, ctx.hoverStartRow, ctx.hoverEndRow);
const colHovering =
ctx.colHoverable && inHoverRange(colIndex, colSpan || 1, ctx.hoverStartCol, ctx.hoverEndCol);
return [rowHovering, colHovering, ctx.onRowHover, ctx.onColHover];
});
}