fix: tab on current input field to focus the next input field (#3754)

This commit is contained in:
Anwarul Islam
2024-01-23 22:21:23 +05:30
committed by GitHub
parent 27d0a7c437
commit b81ccb4ee3

View File

@@ -37,7 +37,7 @@
v-if="currentSuggestionIndex === index" v-if="currentSuggestionIndex === index"
class="hidden items-center text-secondary md:flex" class="hidden items-center text-secondary md:flex"
> >
<kbd class="shortcut-key">TAB</kbd> <kbd class="shortcut-key">Enter</kbd>
<span class="ml-2 truncate">to select</span> <span class="ml-2 truncate">to select</span>
</div> </div>
</li> </li>
@@ -169,36 +169,41 @@ watch(
) )
const handleKeystroke = (ev: KeyboardEvent) => { const handleKeystroke = (ev: KeyboardEvent) => {
if (["ArrowDown", "ArrowUp", "Enter", "Tab", "Escape"].includes(ev.key)) { if (!props.autoCompleteSource) return
if (["ArrowDown", "ArrowUp", "Enter", "Escape"].includes(ev.key)) {
ev.preventDefault() ev.preventDefault()
} }
if (ev.shiftKey) { if (["Escape", "Tab", "Shift"].includes(ev.key)) {
showSuggestionPopover.value = false showSuggestionPopover.value = false
return
} }
showSuggestionPopover.value = true if (ev.key === "Enter") {
if (suggestions.value.length > 0 && currentSuggestionIndex.value > -1) {
updateModelValue(suggestions.value[currentSuggestionIndex.value])
currentSuggestionIndex.value = -1
if ( //used to set codemirror cursor at the end of the line after selecting a suggestion
["Enter", "Tab"].includes(ev.key) && nextTick(() => {
suggestions.value.length > 0 && view.value?.dispatch({
currentSuggestionIndex.value > -1 selection: EditorSelection.create([
) { EditorSelection.range(
updateModelValue(suggestions.value[currentSuggestionIndex.value]) props.modelValue.length,
currentSuggestionIndex.value = -1 props.modelValue.length
),
//used to set codemirror cursor at the end of the line after selecting a suggestion ]),
nextTick(() => { })
view.value?.dispatch({
selection: EditorSelection.create([
EditorSelection.range(
props.modelValue.length,
props.modelValue.length
),
]),
}) })
}) }
if (showSuggestionPopover.value) {
showSuggestionPopover.value = false
} else {
emit("enter", ev)
}
} else {
showSuggestionPopover.value = true
} }
if (ev.key === "ArrowDown") { if (ev.key === "ArrowDown") {
@@ -223,15 +228,6 @@ const handleKeystroke = (ev: KeyboardEvent) => {
emit("keyup", ev) emit("keyup", ev)
} }
if (ev.key === "Enter") {
emit("enter", ev)
showSuggestionPopover.value = false
}
if (ev.key === "Escape") {
showSuggestionPopover.value = false
}
// used to scroll to the first suggestion when left arrow is pressed // used to scroll to the first suggestion when left arrow is pressed
if (ev.key === "ArrowLeft") { if (ev.key === "ArrowLeft") {
if (suggestions.value.length > 0) { if (suggestions.value.length > 0) {