feat(filter): autocomplete for projects
This commit is contained in:
parent
b1d9dc6fc3
commit
9eac746984
@ -10,6 +10,7 @@ import {useLabelStore} from '@/stores/labels'
|
|||||||
import XLabel from '@/components/tasks/partials/label.vue'
|
import XLabel from '@/components/tasks/partials/label.vue'
|
||||||
import User from '@/components/misc/user.vue'
|
import User from '@/components/misc/user.vue'
|
||||||
import ProjectUserService from '@/services/projectUsers'
|
import ProjectUserService from '@/services/projectUsers'
|
||||||
|
import {useProjectStore} from '@/stores/projects'
|
||||||
|
|
||||||
const {
|
const {
|
||||||
projectId,
|
projectId,
|
||||||
@ -55,6 +56,7 @@ const labelFields = [
|
|||||||
const autocompleteFields = [
|
const autocompleteFields = [
|
||||||
...labelFields,
|
...labelFields,
|
||||||
...assigneeFields,
|
...assigneeFields,
|
||||||
|
'project',
|
||||||
]
|
]
|
||||||
|
|
||||||
const availableFilterFields = [
|
const availableFilterFields = [
|
||||||
@ -212,9 +214,10 @@ function updateDateInQuery(newDate: string) {
|
|||||||
|
|
||||||
const autocompleteMatchPosition = ref(0)
|
const autocompleteMatchPosition = ref(0)
|
||||||
const autocompleteMatchText = ref('')
|
const autocompleteMatchText = ref('')
|
||||||
const autocompleteResultType = ref<'labels' | 'assignees' | null>(null)
|
const autocompleteResultType = ref<'labels' | 'assignees' | 'projects' | null>(null)
|
||||||
const autocompleteResults = ref<any[]>([])
|
const autocompleteResults = ref<any[]>([])
|
||||||
const labelStore = useLabelStore()
|
const labelStore = useLabelStore()
|
||||||
|
const projectStore = useProjectStore()
|
||||||
|
|
||||||
function handleFieldInput(e, autocompleteOnInput) {
|
function handleFieldInput(e, autocompleteOnInput) {
|
||||||
const cursorPosition = filterInput.value.selectionStart
|
const cursorPosition = filterInput.value.selectionStart
|
||||||
@ -241,6 +244,10 @@ function handleFieldInput(e, autocompleteOnInput) {
|
|||||||
.then(users => autocompleteResults.value = users.length > 1 ? users : [])
|
.then(users => autocompleteResults.value = users.length > 1 ? users : [])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!projectId && matched.startsWith('project')) {
|
||||||
|
autocompleteResultType.value = 'projects'
|
||||||
|
autocompleteResults.value = projectStore.searchProject(keyword)
|
||||||
|
}
|
||||||
autocompleteMatchText.value = keyword
|
autocompleteMatchText.value = keyword
|
||||||
autocompleteMatchPosition.value = prefix.length - 1
|
autocompleteMatchPosition.value = prefix.length - 1
|
||||||
}
|
}
|
||||||
@ -310,7 +317,7 @@ function autocompleteSelect(value) {
|
|||||||
:user="item"
|
:user="item"
|
||||||
:avatar-size="25"
|
:avatar-size="25"
|
||||||
/>
|
/>
|
||||||
<template v-else> {{ item }}</template>
|
<template v-else> {{ item.title }}</template>
|
||||||
</template>
|
</template>
|
||||||
</AutocompleteDropdown>
|
</AutocompleteDropdown>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user