-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Copy pathGridHeaders.tsx
84 lines (73 loc) · 3.41 KB
/
GridHeaders.tsx
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import * as React from 'react';
import { fastMemo } from '../utils/fastMemo';
import { useGridPrivateApiContext } from '../hooks/utils/useGridPrivateApiContext';
import { useGridSelector } from '../hooks/utils/useGridSelector';
import { useGridRootProps } from '../hooks/utils/useGridRootProps';
import {
gridColumnVisibilityModelSelector,
gridVisibleColumnDefinitionsSelector,
} from '../hooks/features/columns/gridColumnsSelector';
import { gridFilterActiveItemsLookupSelector } from '../hooks/features/filter/gridFilterSelector';
import { gridSortColumnLookupSelector } from '../hooks/features/sorting/gridSortingSelector';
import {
gridTabIndexColumnHeaderSelector,
gridTabIndexCellSelector,
gridFocusColumnHeaderSelector,
gridTabIndexColumnGroupHeaderSelector,
gridFocusColumnGroupHeaderSelector,
} from '../hooks/features/focus/gridFocusStateSelector';
import {
gridColumnGroupsHeaderMaxDepthSelector,
gridColumnGroupsHeaderStructureSelector,
} from '../hooks/features/columnGrouping/gridColumnGroupsSelector';
import { gridColumnMenuSelector } from '../hooks/features/columnMenu/columnMenuSelector';
function GridHeaders() {
const apiRef = useGridPrivateApiContext();
const rootProps = useGridRootProps();
const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);
const filterColumnLookup = useGridSelector(apiRef, gridFilterActiveItemsLookupSelector);
const sortColumnLookup = useGridSelector(apiRef, gridSortColumnLookupSelector);
const columnHeaderTabIndexState = useGridSelector(apiRef, gridTabIndexColumnHeaderSelector);
const cellTabIndexState = useGridSelector(apiRef, gridTabIndexCellSelector);
const columnGroupHeaderTabIndexState = useGridSelector(
apiRef,
gridTabIndexColumnGroupHeaderSelector,
);
const columnHeaderFocus = useGridSelector(apiRef, gridFocusColumnHeaderSelector);
const columnGroupHeaderFocus = useGridSelector(apiRef, gridFocusColumnGroupHeaderSelector);
const headerGroupingMaxDepth = useGridSelector(apiRef, gridColumnGroupsHeaderMaxDepthSelector);
const columnMenuState = useGridSelector(apiRef, gridColumnMenuSelector);
const columnVisibility = useGridSelector(apiRef, gridColumnVisibilityModelSelector);
const columnGroupsHeaderStructure = useGridSelector(
apiRef,
gridColumnGroupsHeaderStructureSelector,
);
const hasOtherElementInTabSequence = !(
columnGroupHeaderTabIndexState === null &&
columnHeaderTabIndexState === null &&
cellTabIndexState === null
);
const columnsContainerRef = React.useRef<HTMLDivElement>(null);
apiRef.current.register('private', {
columnHeadersContainerRef: columnsContainerRef,
});
return (
<rootProps.slots.columnHeaders
ref={columnsContainerRef}
visibleColumns={visibleColumns}
filterColumnLookup={filterColumnLookup}
sortColumnLookup={sortColumnLookup}
columnHeaderTabIndexState={columnHeaderTabIndexState}
columnGroupHeaderTabIndexState={columnGroupHeaderTabIndexState}
columnHeaderFocus={columnHeaderFocus}
columnGroupHeaderFocus={columnGroupHeaderFocus}
headerGroupingMaxDepth={headerGroupingMaxDepth}
columnMenuState={columnMenuState}
columnVisibility={columnVisibility}
columnGroupsHeaderStructure={columnGroupsHeaderStructure}
hasOtherElementInTabSequence={hasOtherElementInTabSequence}
/>
);
}
const MemoizedGridHeaders = fastMemo(GridHeaders);
export { MemoizedGridHeaders as GridHeaders };