diff --git a/Services/client/src/modules/01_user/components/SearchBar.vue b/Services/client/src/modules/01_user/components/SearchBar.vue index 8228ae3..2c015fe 100644 --- a/Services/client/src/modules/01_user/components/SearchBar.vue +++ b/Services/client/src/modules/01_user/components/SearchBar.vue @@ -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({ 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,