private onKeyDownEvent()

in packages/roosterjs-editor-plugins/lib/plugins/Picker/PickerPlugin.ts [394:455]


    private onKeyDownEvent(event: PluginKeyboardEvent) {
        let keyboardEvent = event.rawEvent;
        if (this.isSuggesting) {
            if (keyboardEvent.key == ESC_CHAR_CODE) {
                this.setIsSuggesting(false);
                this.blockSuggestions = true;
                this.cancelDefaultKeyDownEvent(event);
            } else if (keyboardEvent.key == BACKSPACE_CHAR_CODE) {
                // #483: If we are backspacing over the trigger character that triggered this Picker
                // then we need to hide the Picker
                const wordBeforeCursor = this.getWord(event);
                if (wordBeforeCursor == this.pickerOptions.triggerCharacter) {
                    this.setIsSuggesting(false);
                }
            } else if (
                this.dataProvider.shiftHighlight &&
                (this.pickerOptions.isHorizontal
                    ? keyboardEvent.key == LEFT_ARROW_CHAR_CODE ||
                      keyboardEvent.key == RIGHT_ARROW_CHAR_CODE
                    : keyboardEvent.key == UP_ARROW_CHAR_CODE ||
                      keyboardEvent.key == DOWN_ARROW_CHAR_CODE)
            ) {
                this.dataProvider.shiftHighlight(
                    this.pickerOptions.isHorizontal
                        ? keyboardEvent.key == RIGHT_ARROW_CHAR_CODE
                        : keyboardEvent.key == DOWN_ARROW_CHAR_CODE
                );

                if (this.dataProvider.getSelectedIndex) {
                    this.setAriaActiveDescendant(this.dataProvider.getSelectedIndex());
                }

                this.cancelDefaultKeyDownEvent(event);
            } else if (
                this.dataProvider.selectOption &&
                (keyboardEvent.key == ENTER_CHAR_CODE || keyboardEvent.key == TAB_CHAR_CODE)
            ) {
                this.dataProvider.selectOption();
                this.cancelDefaultKeyDownEvent(event);
            } else {
                // Currently no op.
            }
        } else {
            if (keyboardEvent.key == BACKSPACE_CHAR_CODE) {
                const nodeRemoved = this.tryRemoveNode(event);
                if (nodeRemoved) {
                    this.cancelDefaultKeyDownEvent(event);
                }
            } else if (keyboardEvent.key == DELETE_CHAR_CODE) {
                let searcher = this.editor.getContentSearcherOfCursor(event);
                let nodeAfterCursor = searcher.getInlineElementAfter()
                    ? searcher.getInlineElementAfter().getContainerNode()
                    : null;
                let nodeId = nodeAfterCursor ? this.getIdValue(nodeAfterCursor) : null;
                if (nodeId && nodeId.indexOf(this.pickerOptions.elementIdPrefix) == 0) {
                    let replacementNode = this.dataProvider.onRemove(nodeAfterCursor, false);
                    this.replaceNode(nodeAfterCursor, replacementNode);
                    this.cancelDefaultKeyDownEvent(event);
                }
            }
        }
    }