Skip to content

Commit d773321

Browse files
author
ouxiaofeng.utlf
committed
feat: add forceRender api
1 parent 998c134 commit d773321

6 files changed

Lines changed: 21 additions & 1 deletion

File tree

docs/examples/expandedRowRender.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ const Demo = () => {
146146
rowExpandable,
147147
expandIconColumnIndex: expandIconPosition ? 1 : null,
148148
fixed: fixExpand,
149+
forceRender: record => {
150+
return record?.key === 0;
151+
},
149152
}}
150153
scroll={{ x: fixColumns || scrollX ? 2000 : null, y: fixHeader ? 300 : null }}
151154
data={data}

src/Body/BodyRow.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface BodyRowProps<RecordType> {
3131
colSpan: number;
3232
sticky: number;
3333
};
34+
forceRender?: boolean | ((record: RecordType, index: number) => boolean);
3435
}
3536

3637
// ==================================================================================
@@ -138,6 +139,7 @@ const BodyRow = <RecordType extends { children?: readonly RecordType[] }>(
138139
cellComponent,
139140
scopeCellComponent,
140141
expandedRowInfo,
142+
forceRender,
141143
} = props;
142144

143145
const rowInfo = useRowInfo(record, rowKey, index, indent);
@@ -157,6 +159,13 @@ const BodyRow = <RecordType extends { children?: readonly RecordType[] }>(
157159
const expandedRef = React.useRef(false);
158160
expandedRef.current ||= expanded;
159161

162+
const shouldForceRender = () => {
163+
if (typeof forceRender === 'function') {
164+
return forceRender(record, index);
165+
}
166+
return !!forceRender;
167+
};
168+
160169
if (process.env.NODE_ENV !== 'production') {
161170
devRenderTimes(props);
162171
}
@@ -224,7 +233,7 @@ const BodyRow = <RecordType extends { children?: readonly RecordType[] }>(
224233

225234
// ======================== Expand Row =========================
226235
let expandRowNode: React.ReactElement<ExpandedRowProps>;
227-
if (rowSupportExpand && (expandedRef.current || expanded)) {
236+
if (rowSupportExpand && (expandedRef.current || expanded || shouldForceRender?.())) {
228237
const expandContent = expandedRowRender(record, index, indent + 1, expanded);
229238

230239
expandRowNode = (

src/Body/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const Body = <RecordType,>(props: BodyProps<RecordType>) => {
3636
styles,
3737
expandedRowOffset = 0,
3838
colWidths,
39+
forceRender
3940
} = useContext(TableContext, [
4041
'prefixCls',
4142
'getComponent',
@@ -50,6 +51,7 @@ const Body = <RecordType,>(props: BodyProps<RecordType>) => {
5051
'expandedRowOffset',
5152
'fixedInfoList',
5253
'colWidths',
54+
'forceRender'
5355
]);
5456
const { body: bodyCls = {} } = classNames || {};
5557
const { body: bodyStyles = {} } = styles || {};
@@ -111,6 +113,7 @@ const Body = <RecordType,>(props: BodyProps<RecordType>) => {
111113
indent={indent}
112114
// Expanded row info
113115
expandedRowInfo={expandedRowInfo}
116+
forceRender={forceRender}
114117
/>
115118
);
116119
});

src/Table.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -892,6 +892,7 @@ const Table = <RecordType extends DefaultRecordType>(
892892
expandableType,
893893
expandRowByClick: expandableConfig.expandRowByClick,
894894
expandedRowRender: expandableConfig.expandedRowRender,
895+
forceRender: expandableConfig.forceRender,
895896
expandedRowOffset: expandableConfig.expandedRowOffset,
896897
onTriggerExpand,
897898
expandIconColumnIndex: expandableConfig.expandIconColumnIndex,
@@ -953,6 +954,8 @@ const Table = <RecordType extends DefaultRecordType>(
953954
onTriggerExpand,
954955
expandableConfig.expandIconColumnIndex,
955956
expandableConfig.indentSize,
957+
expandableConfig.forceRender,
958+
expandableConfig,
956959
emptyNode,
957960

958961
// Column

src/context/TableContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export interface TableContextProps<RecordType = any> {
5353
expandableType: ExpandableType;
5454
expandRowByClick: boolean;
5555
expandedRowRender: ExpandedRowRender<RecordType>;
56+
forceRender?: boolean | ((record: RecordType) => boolean);
5657
expandIcon: RenderExpandIcon<RecordType>;
5758
onTriggerExpand: TriggerEventHandler<RecordType>;
5859
expandIconColumnIndex: number;

src/interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ export interface ExpandableConfig<RecordType> {
267267
columnWidth?: number | string;
268268
fixed?: FixedType;
269269
expandedRowOffset?: number;
270+
forceRender?: boolean|((record: RecordType) => boolean);
270271
}
271272

272273
// =================== Render ===================

0 commit comments

Comments
 (0)