refactor: ปรับ interface การค้นหา

This commit is contained in:
puri-ph4tt 2024-01-17 13:08:38 +07:00
parent 4cd95143d8
commit 7ac589d95c

View file

@ -12,6 +12,21 @@ import { useFileInfoStore } from '@/stores/file-info-data'
import AdvancedSearch from '@/modules/01_user/components/AdvancedSearch.vue'
import useStorage from '@/stores/storage'
interface SearchInfo {
field: string
value: string
exact?: boolean
}
interface SearchOperator {
AND?: (SearchInfo | SearchOperator)[]
OR?: (SearchInfo | SearchOperator)[]
}
interface Search extends SearchOperator {
recursive?: boolean
path?: string[]
exact?: boolean
}
const loaderStore = useLoader()
const storageStore = useStorage()
const { currentInfo } = storeToRefs(storageStore)
@ -26,24 +41,12 @@ const {
advSearchDataRow,
} = storeToRefs(useSearchDataStore())
const { getFoundFile } = useSearchDataStore()
const submitSearchData = ref<{
AND: {
field: string
value: string
exact?: boolean
}[]
OR: {
field: string
value: string
exact?: boolean
}[]
exact?: boolean
recursive?: boolean
path?: string[]
}>({
const submitSearchData = ref<Search>({
AND: [],
OR: [],
})
const props = defineProps<{
mode: 'admin' | 'user'
}>()
@ -60,24 +63,24 @@ async function submitSearch() {
.filter(Boolean)
optionsField.value.forEach((option) => {
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: option.value,
value: searchData.value.value,
})
})
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'fileName',
value: searchData.value.value,
})
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'metadata.author',
value: searchData.value.value,
})
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'metadata.subject',
value: searchData.value.value,
})
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'fileType',
value: mime.getType(searchData.value.value) || '',
})
@ -85,20 +88,18 @@ async function submitSearch() {
submitSearchData.value.recursive = true
submitSearchData.value.path = []
if (searchData.value.field == 'title') {
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'metadata.subject',
value: searchData.value.value,
exact: isExact.value,
})
}
if (searchData.value.field == 'author') {
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: 'metadata.author',
value: searchData.value.value,
exact: isExact.value,
})
}
submitSearchData.value.OR.push({
submitSearchData.value.OR?.push({
field: searchData.value.field,
value: searchData.value.value,
exact: isExact.value,
@ -111,31 +112,56 @@ async function submitSearch() {
(d: { field: string; value: string; op: string; exact: boolean }) => {
if (d.field && d.value.trim() !== '') {
const op = d.op === 'AND' ? 'AND' : 'OR'
if (d.field == 'title') {
submitSearchData.value[op].push({
field: 'metadata.subject',
if (
(op === 'AND' && d.field === 'title') ||
d.field === 'author'
) {
console.log('and title author')
if (d.field === 'title') {
submitSearchData.value[op]?.push({
OR: [
{
field: d.field,
value: d.value,
exact: d.exact,
},
{
field: 'metadata.subject',
value: d.value,
exact: d.exact,
},
],
})
}
if (d.field === 'author') {
submitSearchData.value[op]?.push({
OR: [
{
field: d.field,
value: d.value,
exact: d.exact,
},
{
field: 'metadata.author',
value: d.value,
exact: d.exact,
},
],
})
}
} else {
submitSearchData.value[op]?.push({
field: d.field,
value: d.value,
exact: d.exact,
})
}
if (d.field == 'author') {
submitSearchData.value[op].push({
field: 'metadata.author',
value: d.value,
exact: d.exact,
})
}
submitSearchData.value[op].push({
field: d.field,
value: d.value,
exact: d.exact,
})
}
},
)
if (advField.keyword.length > 0) {
for (let i = 0; i < advField.keyword.length; i++) {
submitSearchData.value.AND.push({
submitSearchData.value.AND?.push({
field: 'keyword',
value: advField.keyword[i],
exact: true,
@ -143,7 +169,7 @@ async function submitSearch() {
}
}
if (advField.description.trim() !== '') {
submitSearchData.value.AND.push({
submitSearchData.value.AND?.push({
field: 'description',
value: advField.description,
exact: true,