MCPcopy Create free account
hub / github.com/react-component/select / onInternalKeyDown

Function onInternalKeyDown

src/BaseSelect/index.tsx:487–545  ·  view source on GitHub ↗
(event, ...rest)

Source from the content-addressed store, hash-verified

485
486 // KeyDown
487 const onInternalKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (event, ...rest) => {
488 const clearLock = getClearLock();
489 const { key } = event;
490
491 const isEnterKey = key === 'Enter';
492
493 if (isEnterKey) {
494 // Do not submit form when type in the input
495 if (mode !== 'combobox') {
496 event.preventDefault();
497 }
498
499 // We only manage open state here, close logic should handle by list component
500 if (!mergedOpen) {
501 onToggleOpen(true);
502 }
503 }
504
505 setClearLock(!!mergedSearchValue);
506
507 // Remove value by `backspace`
508 if (
509 key === 'Backspace' &&
510 !clearLock &&
511 multiple &&
512 !mergedSearchValue &&
513 displayValues.length
514 ) {
515 const cloneDisplayValues = [...displayValues];
516 let removedDisplayValue = null;
517
518 for (let i = cloneDisplayValues.length - 1; i >= 0; i -= 1) {
519 const current = cloneDisplayValues[i];
520
521 if (!current.disabled) {
522 cloneDisplayValues.splice(i, 1);
523 removedDisplayValue = current;
524 break;
525 }
526 }
527
528 if (removedDisplayValue) {
529 onDisplayValuesChange(cloneDisplayValues, {
530 type: 'remove',
531 values: [removedDisplayValue],
532 });
533 }
534 }
535
536 if (mergedOpen && (!isEnterKey || !keyLockRef.current)) {
537 // Lock the Enter key after it is pressed to avoid repeated triggering of the onChange event.
538 if (isEnterKey) {
539 keyLockRef.current = true;
540 }
541 listRef.current?.onKeyDown(event, ...rest);
542 }
543
544 onKeyDown?.(event, ...rest);

Callers

nothing calls this directly

Calls 1

onDisplayValuesChangeFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…