(event, ...rest)
| 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); |
nothing calls this directly
no test coverage detected
searching dependent graphs…