Skip to content

Commit f737832

Browse files
committed
chore: remove keyboard operation logic
1 parent 73e9ae7 commit f737832

File tree

2 files changed

+3
-124
lines changed

2 files changed

+3
-124
lines changed

src/OptionList.tsx

Lines changed: 3 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -195,46 +195,6 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
195195
return null;
196196
};
197197

198-
// ========================== Get Next Matching Node ==========================
199-
const availableNodesRef = React.useRef<EventDataNode<any>[]>([]);
200-
201-
const getNextMatchingNode = (
202-
currentKey: Key | null,
203-
direction: 'next' | 'prev',
204-
): EventDataNode<any> | null => {
205-
const availableNodes = availableNodesRef.current;
206-
207-
const currentIndex = availableNodes.findIndex(node => node[fieldNames.value] === currentKey);
208-
209-
const nextIndex =
210-
direction === 'next'
211-
? (currentIndex + 1) % availableNodes.length
212-
: (currentIndex - 1 + availableNodes.length) % availableNodes.length;
213-
214-
return availableNodes[nextIndex];
215-
};
216-
217-
React.useEffect(() => {
218-
const nodes: EventDataNode<any>[] = [];
219-
const selectedValueSet = new Set(memoDisplayValues);
220-
221-
const collectNodes = (nodeList: EventDataNode<any>[]) => {
222-
nodeList.forEach(node => {
223-
if (!node.disabled && node.selectable !== false) {
224-
if (selectedValueSet.has(node[fieldNames.value])) {
225-
nodes.push(node);
226-
}
227-
}
228-
if (node[fieldNames.children]) {
229-
collectNodes(node[fieldNames.children]);
230-
}
231-
});
232-
};
233-
234-
collectNodes(memoTreeData);
235-
availableNodesRef.current = nodes;
236-
}, [memoDisplayValues, memoTreeData]);
237-
238198
// ========================== Active ==========================
239199
const [activeKey, setActiveKey] = React.useState<Key>(null);
240200
const activeEntity = keyEntities[activeKey as SafeKey];
@@ -271,24 +231,15 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
271231
case KeyCode.DOWN:
272232
case KeyCode.LEFT:
273233
case KeyCode.RIGHT:
274-
if (isOverMaxCount) {
275-
event.preventDefault();
276-
const direction = which === KeyCode.UP || which === KeyCode.LEFT ? 'prev' : 'next';
277-
const nextNode = getNextMatchingNode(activeKey, direction);
278-
if (nextNode) {
279-
setActiveKey(nextNode[fieldNames.value]);
280-
treeRef.current?.scrollTo({ key: nextNode[fieldNames.value] });
281-
}
282-
} else {
283-
treeRef.current?.onKeyDown(event as React.KeyboardEvent<HTMLDivElement>);
284-
}
234+
treeRef.current?.onKeyDown(event as React.KeyboardEvent<HTMLDivElement>);
285235
break;
286236

287237
// >>> Select item
288238
case KeyCode.ENTER: {
289239
if (activeEntity) {
240+
const isNodeDisabled = nodeDisabled(activeEntity.node);
290241
const { selectable, value, disabled } = activeEntity?.node || {};
291-
if (selectable !== false && !disabled) {
242+
if (selectable !== false && !disabled && !isNodeDisabled) {
292243
onInternalSelect(null, {
293244
node: { key: activeKey },
294245
selected: !checkedKeys.includes(value),

tests/Select.maxCount.spec.tsx

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,6 @@ describe('TreeSelect.maxCount keyboard operations', () => {
170170
keyDown(input, KeyCode.DOWN);
171171
keyDown(input, KeyCode.ENTER);
172172
keyUp(input, KeyCode.ENTER);
173-
174-
expect(onSelect).toHaveBeenCalledTimes(2);
175173
});
176174

177175
it('when maxCount is reached, the option should be disabled', () => {
@@ -206,76 +204,6 @@ describe('TreeSelect.maxCount keyboard operations', () => {
206204
// verify only two options are selected
207205
expect(container.querySelectorAll('.rc-tree-select-tree-treenode-selected')).toHaveLength(2);
208206
});
209-
210-
it('should cycle through selected options when maxCount is reached', () => {
211-
const { container } = render(
212-
<TreeSelect treeData={treeData} multiple open maxCount={2} value={['0', '2']} />,
213-
);
214-
215-
const input = container.querySelector('input');
216-
217-
keyDown(input, KeyCode.DOWN);
218-
expect(
219-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
220-
?.textContent,
221-
).toBe('2 label');
222-
223-
// Move down again to cycle back to the first selected item
224-
keyDown(input, KeyCode.DOWN);
225-
expect(
226-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
227-
?.textContent,
228-
).toBe('0 label');
229-
});
230-
231-
it('should cycle through selected options in reverse when using UP key', () => {
232-
const { container } = render(
233-
<TreeSelect treeData={treeData} multiple open maxCount={2} value={['0', '2']} />,
234-
);
235-
236-
const input = container.querySelector('input');
237-
238-
// Initially activate the last selected item
239-
keyDown(input, KeyCode.UP);
240-
expect(
241-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
242-
?.textContent,
243-
).toBe('2 label');
244-
245-
// Move up again to cycle back to the first selected item
246-
keyDown(input, KeyCode.UP);
247-
expect(
248-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
249-
?.textContent,
250-
).toBe('0 label');
251-
252-
// Move up again to cycle back to the last selected item
253-
keyDown(input, KeyCode.UP);
254-
expect(
255-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
256-
?.textContent,
257-
).toBe('2 label');
258-
});
259-
260-
it('should handle LEFT/RIGHT keys correctly when maxCount is reached', () => {
261-
const { container } = render(
262-
<TreeSelect treeData={treeData} multiple open maxCount={2} value={['0', '2']} />,
263-
);
264-
265-
const input = container.querySelector('input');
266-
267-
keyDown(input, KeyCode.RIGHT);
268-
expect(
269-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
270-
?.textContent,
271-
).toBe('2 label');
272-
273-
keyDown(input, KeyCode.LEFT);
274-
expect(
275-
container.querySelector('.rc-tree-select-tree-treenode.rc-tree-select-tree-treenode-active')
276-
?.textContent,
277-
).toBe('0 label');
278-
});
279207
});
280208

281209
describe('TreeSelect.maxCount with different strategies', () => {

0 commit comments

Comments
 (0)