Skip to content

Commit 06ee328

Browse files
committed
feat: improve keyboard navigation when reach maxCount
1 parent feb012d commit 06ee328

File tree

1 file changed

+26
-25
lines changed

1 file changed

+26
-25
lines changed

src/OptionList.tsx

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -181,31 +181,7 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
181181
return null;
182182
};
183183

184-
// ========================== Active ==========================
185-
const [activeKey, setActiveKey] = React.useState<Key>(null);
186-
const activeEntity = keyEntities[activeKey as SafeKey];
187-
188-
React.useEffect(() => {
189-
if (!open) {
190-
return;
191-
}
192-
let nextActiveKey = null;
193-
194-
const getFirstNode = () => {
195-
const firstNode = getFirstMatchingNode(memoTreeData);
196-
return firstNode ? firstNode[fieldNames.value] : null;
197-
};
198-
199-
// single mode active first checked node
200-
if (!multiple && checkedKeys.length && !searchValue) {
201-
nextActiveKey = checkedKeys[0];
202-
} else {
203-
nextActiveKey = getFirstNode();
204-
}
205-
206-
setActiveKey(nextActiveKey);
207-
}, [open, searchValue]);
208-
184+
// ========================== Get Next Matching Node ==========================
209185
const getNextMatchingNode = (
210186
nodes: EventDataNode<any>[],
211187
currentKey: Key | null,
@@ -253,6 +229,31 @@ const OptionList: React.ForwardRefRenderFunction<ReviseRefOptionListProps> = (_,
253229
return availableNodes[nextIndex];
254230
};
255231

232+
// ========================== Active ==========================
233+
const [activeKey, setActiveKey] = React.useState<Key>(null);
234+
const activeEntity = keyEntities[activeKey as SafeKey];
235+
236+
React.useEffect(() => {
237+
if (!open) {
238+
return;
239+
}
240+
let nextActiveKey = null;
241+
242+
const getFirstNode = () => {
243+
const firstNode = getFirstMatchingNode(memoTreeData);
244+
return firstNode ? firstNode[fieldNames.value] : null;
245+
};
246+
247+
// single mode active first checked node
248+
if (!multiple && checkedKeys.length && !searchValue) {
249+
nextActiveKey = checkedKeys[0];
250+
} else {
251+
nextActiveKey = getFirstNode();
252+
}
253+
254+
setActiveKey(nextActiveKey);
255+
}, [open, searchValue]);
256+
256257
// ========================= Keyboard =========================
257258
React.useImperativeHandle(ref, () => ({
258259
scrollTo: treeRef.current?.scrollTo,

0 commit comments

Comments
 (0)