From 5c853ef594ad44bcae9915c877163ac3b48e0c80 Mon Sep 17 00:00:00 2001 From: Remi PLANEL <rplanel@pasteur.fr> Date: Wed, 10 Jan 2024 13:33:56 +0100 Subject: [PATCH] simply a bit algo --- components/AutocompleteMeiliFacets.vue | 2 +- components/ServerDbTable.vue | 53 +++++++++----------------- composables/useMeiliFilters.ts | 44 ++++++--------------- 3 files changed, 29 insertions(+), 70 deletions(-) diff --git a/components/AutocompleteMeiliFacets.vue b/components/AutocompleteMeiliFacets.vue index 2ef7c384..029d0ce5 100644 --- a/components/AutocompleteMeiliFacets.vue +++ b/components/AutocompleteMeiliFacets.vue @@ -226,7 +226,7 @@ function isItemFilter(type: string | undefined) { </script> <template> - <v-autocomplete :model-value="props.modelValue" class="mx-2" @click:clear="clearFilters" v-bind="autocompleteProps" + <v-autocomplete :model-value="props.modelValue" @click:clear="clearFilters" v-bind="autocompleteProps" @update:focused="updateAutocompleteFocused" @update:modelValue="emitUpdateModelValue" :loading="!hasFacetDistribution" :disabled="!hasFacetDistribution"> <template #item="{ props, item }"> <v-list-item v-if="isItemFilter(item?.raw?.type)" v-bind="{ ...props, active: false }" :title="item.title" diff --git a/components/ServerDbTable.vue b/components/ServerDbTable.vue index e1e90ea3..6826c00d 100644 --- a/components/ServerDbTable.vue +++ b/components/ServerDbTable.vue @@ -310,49 +310,30 @@ function focusedOrBlur(isFocused: boolean) { :items-per-page-options="itemsPerPage" :height="computedTableHeight" class="elevation-1 mt-2"> <template #top> - <template v-if="mobile"> - <v-toolbar> <v-badge :content="totalHits" color="primary" class="mx-2"> - <v-btn prepend-icon="md:download" :loading="pendingDownloadData" variant="text" color="primary" - @click="downloadData()">{{ - props.title }} - </v-btn> - </v-badge></v-toolbar> - <v-toolbar> - <v-text-field v-model="search" label="Search..." hide-details="auto" - prepend-inner-icon="mdi-magnify" single-line clearable :disabled="pendingDownloadData" - class="mx-2" @update:focused="focusedOrBlur"></v-text-field> - </v-toolbar> - <v-toolbar> - <AutocompleteMeiliFacets v-model:modelValue="msFilterCompo" - v-bind="props.autocompleteMeiliFacetsProps" :is-valid-filters="isValidFilters"> - </AutocompleteMeiliFacets> - </v-toolbar> - </template> - <template v-else> - <v-toolbar> + <v-card variant="flat" color="transparent"> + <v-card-title> <v-badge :content="totalHits" color="primary" class="mr-3"> <v-btn prepend-icon="md:download" :loading="pendingDownloadData" variant="text" color="primary" @click="downloadData()">{{ props.title }} </v-btn> </v-badge> - <v-spacer></v-spacer> - <v-col> - <v-card variant="flat" color="transparent" :min-width="400" class="mx-2" :rounded="false"> - <v-text-field v-model="search" label="Search..." hide-details="auto" - :disabled="pendingDownloadData" prepend-inner-icon="mdi-magnify" single-line clearable - @update:focused="focusedOrBlur"></v-text-field> - </v-card> - </v-col><v-col> - <v-card variant="flat" color="transparent" :min-width="600" class="mx-2" :rounded="false"> - <AutocompleteMeiliFacets v-model="msFilterCompo" v-bind="props.autocompleteMeiliFacetsProps" - :is-valid-filters="isValidFilters"> - </AutocompleteMeiliFacets> - </v-card> - </v-col> - </v-toolbar> - </template> + </v-card-title> + <v-card-title> + <v-text-field v-model="search" label="Search..." hide-details="auto" :disabled="pendingDownloadData" + prepend-inner-icon="mdi-magnify" single-line clearable + @update:focused="focusedOrBlur"></v-text-field> + </v-card-title> + <v-card-title> + <AutocompleteMeiliFacets v-model="msFilterCompo" v-bind="props.autocompleteMeiliFacetsProps" + :is-valid-filters="isValidFilters"> + </AutocompleteMeiliFacets> + + + </v-card-title> + + </v-card> </template> <template v-for="(slot, index) of Object.keys(slots)" :key="index" v-slot:[slot]="data"> diff --git a/composables/useMeiliFilters.ts b/composables/useMeiliFilters.ts index d4574037..e56dd7cb 100644 --- a/composables/useMeiliFilters.ts +++ b/composables/useMeiliFilters.ts @@ -20,63 +20,41 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>) { const position = index + 1 switch (position % 4) { case 0: - + // if this is the first time pass by an outeroperator if (previousOperator === undefined) { const newFilter = acc.splice(-3).join("") - if (sanitizedValue === 'AND') { - acc.push(newFilter) + if (sanitizedValue === 'OR') { + acc = [[newFilter]] } else { - acc.push([newFilter]) + acc.push(newFilter) } } - previousOperator = sanitizedValue break; case 3: - // if last element acc.push(`'${sanitizedValue}'`) - - if (previousOperator === undefined) { - const newFilter = acc.splice(-3).join("") + const newFilter = acc.splice(-3).join("") + if (previousOperator === 'AND') { acc.push(newFilter) } else { - const newFilter = acc.splice(-3).join("") - console.log("new filter:", newFilter) - if (previousOperator === 'AND') { - acc.push(newFilter) + const previousElem = acc.slice(-1)[0] + if (Array.isArray(previousElem)) { + acc.slice(-1)[0].push(newFilter) } else { - console.log("previous operator is OR") - const previousElem = acc.slice(-1)[0] - console.log(previousElem) - if (Array.isArray(previousElem)) { - acc.slice(-1)[0].push(newFilter) - } - else { - - const previousElem = acc.splice(-1)[0] - console.log(previousElem) - console.log([...acc]) - acc.push([previousElem, newFilter]) - } - + const previousElem = acc.splice(-1)[0] + acc.push([previousElem, newFilter]) } - } - - break default: acc.push(sanitizedValue) break; } - console.log(position) - console.log([...acc]) return acc }, []) - console.log(arrayFilters) return arrayFilters } else { -- GitLab