Skip to content

Commit e9b59f9

Browse files
committed
chore: hoist traverse operation to TreeSelect
1 parent c178539 commit e9b59f9

File tree

3 files changed

+30
-24
lines changed

3 files changed

+30
-24
lines changed

examples/mutiple-with-maxCount.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,13 @@ export default () => {
5656
return (
5757
<>
5858
<h2>multiple with maxCount</h2>
59-
<TreeSelect style={{ width: 300 }} multiple maxCount={3} treeData={treeData} />
59+
<TreeSelect
60+
style={{ width: 300 }}
61+
fieldNames={{ value: 'value', label: 'title' }}
62+
multiple
63+
maxCount={3}
64+
treeData={treeData}
65+
/>
6066

6167
<h2>checkable with maxCount</h2>
6268
<TreeSelect

src/OptionList.tsx

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -257,24 +257,8 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
257257
setActiveKey(key);
258258
};
259259

260-
const traverse = (nodes: EventDataNode<any>[]): EventDataNode<any>[] => {
261-
return nodes.map(node => ({
262-
...node,
263-
disabled:
264-
isOverMaxCount && !displayValues?.some(v => v.value === node[fieldNames.value])
265-
? true
266-
: node.disabled,
267-
children: node.children ? traverse(node.children) : undefined,
268-
}));
269-
};
270-
271-
const processedTreeData = React.useMemo(
272-
() => traverse(memoTreeData),
273-
[memoTreeData, isOverMaxCount],
274-
);
275-
276260
// ========================== Render ==========================
277-
if (processedTreeData.length === 0) {
261+
if (memoTreeData.length === 0) {
278262
return (
279263
<div role="listbox" className={`${prefixCls}-empty`} onMouseDown={onListMouseDown}>
280264
{notFoundContent}
@@ -304,7 +288,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
304288
ref={treeRef}
305289
focusable={false}
306290
prefixCls={`${prefixCls}-tree`}
307-
treeData={processedTreeData}
291+
treeData={memoTreeData}
308292
height={listHeight}
309293
itemHeight={listItemHeight}
310294
itemScrollOffset={listItemScrollOffset}

src/TreeSelect.tsx

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -613,17 +613,33 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref)
613613
});
614614

615615
// ========================== Context ===========================
616-
const treeSelectContext = React.useMemo<TreeSelectContextProps>(() => {
617-
const isOverMaxCount =
618-
mergedMultiple && maxCount !== undefined && cachedDisplayValues?.length >= maxCount;
616+
const isOverMaxCount =
617+
mergedMultiple && maxCount !== undefined && cachedDisplayValues?.length >= maxCount;
618+
619+
const traverse = (nodes: DataNode[]): DataNode[] => {
620+
return nodes.map(node => ({
621+
...node,
622+
disabled:
623+
isOverMaxCount && !cachedDisplayValues?.some(v => v.value === node.value)
624+
? true
625+
: node.disabled,
626+
children: node.children ? traverse(node.children) : undefined,
627+
}));
628+
};
619629

630+
const processedTreeData = React.useMemo(
631+
() => traverse(filteredTreeData),
632+
[filteredTreeData, isOverMaxCount],
633+
);
634+
635+
const treeSelectContext = React.useMemo<TreeSelectContextProps>(() => {
620636
return {
621637
virtual,
622638
dropdownMatchSelectWidth,
623639
listHeight,
624640
listItemHeight,
625641
listItemScrollOffset,
626-
treeData: filteredTreeData,
642+
treeData: processedTreeData,
627643
fieldNames: mergedFieldNames,
628644
onSelect: onOptionSelect,
629645
treeExpandAction,
@@ -638,7 +654,7 @@ const TreeSelect = React.forwardRef<BaseSelectRef, TreeSelectProps>((props, ref)
638654
listHeight,
639655
listItemHeight,
640656
listItemScrollOffset,
641-
filteredTreeData,
657+
processedTreeData,
642658
mergedFieldNames,
643659
onOptionSelect,
644660
treeExpandAction,

0 commit comments

Comments
 (0)