Browse Source

feat: open select options on enter key press

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/4222/head
Pranav C 2 years ago
parent
commit
f59ee81586
  1. 32
      packages/nc-gui/components/cell/MultiSelect.vue
  2. 3
      packages/nc-gui/components/cell/SingleSelect.vue

32
packages/nc-gui/components/cell/MultiSelect.vue

@ -16,6 +16,7 @@ import {
useProject, useProject,
watch, watch,
} from '#imports' } from '#imports'
import { useSelectedCellKeyupListener } from '~/composables/useSelectedCellKeyupListener'
import MdiCloseCircle from '~icons/mdi/close-circle' import MdiCloseCircle from '~icons/mdi/close-circle'
interface Props { interface Props {
@ -73,13 +74,13 @@ const selectedTitles = computed(() =>
? typeof modelValue === 'string' ? typeof modelValue === 'string'
? isMysql ? isMysql
? modelValue.split(',').sort((a, b) => { ? modelValue.split(',').sort((a, b) => {
const opa = options.value.find((el) => el.title === a) const opa = options.value.find((el) => el.title === a)
const opb = options.value.find((el) => el.title === b) const opb = options.value.find((el) => el.title === b)
if (opa && opb) { if (opa && opb) {
return opa.order! - opb.order! return opa.order! - opb.order!
} }
return 0 return 0
}) })
: modelValue.split(',') : modelValue.split(',')
: modelValue : modelValue
: [], : [],
@ -93,9 +94,13 @@ const handleKeys = (e: KeyboardEvent) => {
break break
case 'ArrowDown': case 'ArrowDown':
case 'ArrowUp': case 'ArrowUp':
e.stopPropagation()
break
case 'Enter': case 'Enter':
isOpen.value = true
e.stopPropagation() e.stopPropagation()
break break
} }
} }
@ -135,11 +140,17 @@ watch(
watch(isOpen, (n, _o) => { watch(isOpen, (n, _o) => {
if (!n) aselect.value?.$el.blur() if (!n) aselect.value?.$el.blur()
}) })
useEventListener(document, 'keydown', (e) => {
if (active.value && e.key === 'Enter') {
isOpen.value = true
}
})
</script> </script>
<template> <template>
<a-select <a-select
ref="aselect" ref="select"
v-model:value="vModel" v-model:value="vModel"
mode="multiple" mode="multiple"
class="w-full" class="w-full"
@ -223,18 +234,23 @@ watch(isOpen, (n, _o) => {
margin-right: -6px; margin-right: -6px;
margin-left: 3px; margin-left: 3px;
} }
.ms-close-icon:before { .ms-close-icon:before {
display: block; display: block;
} }
.ms-close-icon:hover { .ms-close-icon:hover {
color: rgba(0, 0, 0, 0.45); color: rgba(0, 0, 0, 0.45);
} }
.rounded-tag { .rounded-tag {
@apply py-0 px-[12px] rounded-[12px]; @apply py-0 px-[12px] rounded-[12px];
} }
:deep(.ant-tag) { :deep(.ant-tag) {
@apply "rounded-tag" my-[2px]; @apply "rounded-tag" my-[2px];
} }
:deep(.ant-tag-close-icon) { :deep(.ant-tag-close-icon) {
@apply "text-slate-500"; @apply "text-slate-500";
} }

3
packages/nc-gui/components/cell/SingleSelect.vue

@ -62,7 +62,10 @@ const handleKeys = (e: KeyboardEvent) => {
break break
case 'ArrowDown': case 'ArrowDown':
case 'ArrowUp': case 'ArrowUp':
e.stopPropagation()
break
case 'Enter': case 'Enter':
isOpen.value = true
e.stopPropagation() e.stopPropagation()
break break
} }

Loading…
Cancel
Save