-
-
Notifications
You must be signed in to change notification settings - Fork 603
/
Copy pathExpandedRow.tsx
75 lines (67 loc) · 1.84 KB
/
ExpandedRow.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
import { useContext } from '@rc-component/context';
import * as React from 'react';
import Cell from '../Cell';
import TableContext from '../context/TableContext';
import devRenderTimes from '../hooks/useRenderTimes';
import type { CustomizeComponent } from '../interface';
export interface ExpandedRowProps {
prefixCls: string;
component: CustomizeComponent;
cellComponent: CustomizeComponent;
className: string;
expanded: boolean;
children: React.ReactNode;
colSpan: number;
isEmpty: boolean;
}
function ExpandedRow(props: ExpandedRowProps) {
if (process.env.NODE_ENV !== 'production') {
devRenderTimes(props);
}
const {
prefixCls,
children,
component: Component,
cellComponent,
className,
expanded,
colSpan,
isEmpty,
} = props;
const { scrollbarSize, fixHeader, fixColumn, componentWidth, horizonScroll } = useContext(
TableContext,
['scrollbarSize', 'fixHeader', 'fixColumn', 'componentWidth', 'horizonScroll'],
);
// Cache render node
let contentNode = children;
if (isEmpty ? horizonScroll && componentWidth : fixColumn) {
contentNode = (
<div
style={{
width: componentWidth - (fixHeader && !isEmpty ? scrollbarSize : 0),
position: 'sticky',
left: 0,
overflow: 'hidden',
}}
className={`${prefixCls}-expanded-row-fixed`}
>
{contentNode}
</div>
);
}
return (
<Component
className={className}
style={{
display: expanded ? null : 'none',
// fix https://github.com/ant-design/ant-design/issues/49279
visibility: isEmpty && horizonScroll && !componentWidth ? 'hidden' : null,
}}
>
<Cell component={cellComponent} prefixCls={prefixCls} colSpan={colSpan}>
{contentNode}
</Cell>
</Component>
);
}
export default ExpandedRow;