1
0
mirror of https://gitlab.com/bramw/baserow.git synced 2024-11-21 23:37:55 +00:00
bramw_baserow/web-frontend/modules/database/mixins/selectDropdown.js

67 lines
1.8 KiB
JavaScript

import { isPrintableUnicodeCharacterKeyPress } from '@baserow/modules/core/utils/events'
export default {
methods: {
toggleDropdown(value, query) {
if (this.readOnly) {
return
}
this.$refs.dropdown.toggle(this.$refs.dropdownLink, value, query)
},
hideDropdown() {
this.$refs.dropdown.hide()
},
select() {
this.$el.keydownEvent = (event) => {
// If the tab or arrow keys are pressed we don't want to do anything because
// the GridViewField component will select the next field.
const ignoredKeys = [
'Tab',
'ArrowLeft',
'ArrowUp',
'ArrowRight',
'ArrowDown',
]
if (ignoredKeys.includes(event.key)) {
return
}
// If the space bar key is pressed, we don't want to do anything because it
// should open the row edit modal.
if (event.key === ' ') {
return
}
// When the escape key is pressed while editing the value we can hide the
// dropdown.
if (event.key === 'Escape' && this.editing) {
this.hideDropdown()
return
}
// When the enter key, any printable character or F2 is pressed when not editing
// the value we want to show the dropdown.
if (
!this.editing &&
(event.key === 'Enter' ||
isPrintableUnicodeCharacterKeyPress(event) ||
event.key === 'F2')
) {
this.toggleDropdown()
}
}
document.body.addEventListener('keydown', this.$el.keydownEvent)
},
beforeUnSelect() {
document.body.removeEventListener('keydown', this.$el.keydownEvent)
},
canSelectNext() {
return !this.editing
},
canKeyboardShortcut() {
return !this.editing
},
},
}