Line data Source code
1 : import * as React from 'react';
2 : import * as styles from './data_table.module.css';
3 :
4 : interface GridApi {
5 : element: HTMLDivElement | null;
6 : }
7 :
8 : export interface DataTablePortalContainers {
9 : header: HTMLDivElement;
10 : data: HTMLDivElement;
11 : }
12 :
13 1 : export function useDataTablePortalContainers(gridApi: GridApi | null): DataTablePortalContainers | null {
14 1 : const [containers, setContainers] = React.useState<DataTablePortalContainers | null>(null);
15 :
16 1 : React.useEffect(() => {
17 1 : const gridElement = gridApi?.element;
18 1 : if (!gridElement) {
19 1 : setContainers(null);
20 1 : return;
21 1 : }
22 1 : const header = document.createElement('div');
23 1 : header.className = styles.sticky_header_portal;
24 1 : gridElement.prepend(header);
25 :
26 1 : const data = document.createElement('div');
27 1 : data.className = styles.sticky_column_portal;
28 1 : gridElement.appendChild(data);
29 :
30 1 : setContainers({ header, data });
31 1 : return () => {
32 1 : header.remove();
33 1 : data.remove();
34 1 : setContainers(null);
35 1 : };
36 1 : }, [gridApi]);
37 :
38 1 : return containers;
39 1 : }
|