diff --git a/components/ServerDbTable.vue b/components/ServerDbTable.vue index 214e3d44b757680a6f49776ef3961d3209b0914e..ad8b636da2f926080da71d032a43d4c8c7fc265e 100644 --- a/components/ServerDbTable.vue +++ b/components/ServerDbTable.vue @@ -7,6 +7,7 @@ import { useDisplay } from "vuetify"; import { toValue, useThrottleFn } from '@vueuse/core' import type { FacetInputItem, FilterItem } from '@/components/AutocompleteMeiliFacets.vue' import { useMeiliSearch } from "#imports" +import type { SearchResponse } from 'meilisearch' // import { saveAs } from "file-saver"; export interface SortItem { key: string, @@ -57,9 +58,11 @@ const props = withDefaults(defineProps<Props>(), { }); const slots = useSlots() +const client = useMeiliSearchRef() const sortByRef = toRef(props.sortBy) const emit = defineEmits(["refresh:search"]) -const { search: msSearch, result: msResult } = useMeiliSearch(props.autocompleteMeiliFacetsProps.db) +const msResult = ref() +// const { search: msSearch, result: msResult } = useMeiliSearch(props.autocompleteMeiliFacetsProps.db) const search: Ref<string> = ref(""); const filterOrSearch: Ref<FilterItem[] | null> = ref(null) const hitsPerPage: Ref<number> = ref(25) @@ -120,7 +123,7 @@ watch([paginationParams, msSortBy, page], ([newParams, newSort, newPage]) => { } }) -onBeforeMount(async () => { +onMounted(async () => { searchOrFilter() emitRefreshRes() }) @@ -181,7 +184,15 @@ async function searchOrFilter() { try { loading.value = true const q = search.value - await msSearch(q, { ...paginationParams.value, filter: toValue(computedFilter), sort: msSortBy.value }) + const response = await client + .index(props.autocompleteMeiliFacetsProps.db) + .search(q, { + ...paginationParams.value, + filter: toValue(computedFilter), + sort: msSortBy.value + }) + // await msSearch(q, { ...paginationParams.value, filter: toValue(computedFilter), sort: msSortBy.value }) + msResult.value = response } catch (error: any) { filterError.value = error console.log(error) @@ -219,13 +230,23 @@ watch(search, () => { async function downloadData() { - pendingDownloadData.value = true + try { - const { data } = await useAsyncMeiliSearch({ - index: props.autocompleteMeiliFacetsProps.db, - params: { ...toValue(notPaginatedParams), filter: toValue(computedFilter), sort: toValue(msSortBy) }, - query: toValue(search), - }) + pendingDownloadData.value = true + + const data = await client + .index(props.autocompleteMeiliFacetsProps.db) + .search( + toValue(search), + { + ...toValue(notPaginatedParams), filter: toValue(computedFilter), sort: toValue(msSortBy) + }) + + // const { data } = await useAsyncMeiliSearch({ + // index: props.autocompleteMeiliFacetsProps.db, + // params: { ...toValue(notPaginatedParams), filter: toValue(computedFilter), sort: toValue(msSortBy) }, + // query: toValue(search), + // }) useCsvDownload(data, props.columnsToDownload, props.title) } finally { diff --git a/components/content/RefseqDb.vue b/components/content/RefseqDb.vue index cf6322e59f6780a8a41ed714574b6436dc4b85f9..3738334770f379ba0b33beaeedcb389bb1bc0e73 100644 --- a/components/content/RefseqDb.vue +++ b/components/content/RefseqDb.vue @@ -25,76 +25,39 @@ const cellPlotMargin = ref({ marginRight: 50 }) +const client = useMeiliSearchRef() -onBeforeMount(async () => { - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { - facets: ["*"], - filter: [], - page: 1, - hitsPerPage: 25, - - } - }) - await getAllHits({ - index: toValue(dbName), query: "", params: { - facets: ["*"], - filter: [], - // page: 1, - // hitsPerPage: 25, - limit: 500000, - sort: ["type:asc"] - - } - }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution - // allHitsDb.value = toValue(data)?.hits - const { data: taxo } = await useAsyncMeiliSearch({ - index: toValue("refseqtaxo"), query: "", params: { - facets: ["*"], - filter: [], - page: 1, - hitsPerPage: 25, - } - }) - taxonomyFacet.value = toValue(taxo)?.facetDistribution -}) onMounted(async () => { - - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { + try { + const data = await client.index(toValue(dbName)).search("", { facets: ["*"], filter: [], page: 1, hitsPerPage: 25, - // limit: 500000, - // sort: ["type:asc"] - } - }) + }) + autocompleteMeiliFacetsProps.value.facetDistribution = data?.facetDistribution + } catch (error) { + } await getAllHits({ index: toValue(dbName), query: "", params: { facets: ["*"], filter: [], - // page: 1, - // hitsPerPage: 25, limit: 500000, sort: ["type:asc"] } }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution - // allHitsDb.value = toValue(data)?.hits - - const { data: taxo } = await useAsyncMeiliSearch({ - index: toValue("refseqtaxo"), query: "", params: { + try { + const taxo = await client.index("refseqtaxo").search("", { facets: ["*"], filter: [], page: 1, hitsPerPage: 25, - } - }) - taxonomyFacet.value = toValue(taxo)?.facetDistribution + }) + taxonomyFacet.value = taxo?.facetDistribution + } catch (error) { + } }) const { serialize } = useSerialize() @@ -221,16 +184,14 @@ async function getAllHits(params: { index: string, params: Record<string, any>, pendingAllHits.value = true try { - const { data, error } = await useAsyncMeiliSearch({ - ...params, - index: "refseqsanitized", - params: { + const data = await client + .index("refseqsanitized") + .search("", { ...params.params, - 'attributesToRetrieve': ['type', 'Assembly', ...toValue(availableTaxo)] - } - }) - allHits.value = data.value + }) + + allHits.value = data } finally { pendingAllHits.value = false diff --git a/components/content/StructureDb.vue b/components/content/StructureDb.vue index 380ce2bc38afb1e874ffa773d63cc951a3dd0c12..35eff255100596d973202a4b76fc47ec7cace17b 100644 --- a/components/content/StructureDb.vue +++ b/components/content/StructureDb.vue @@ -15,34 +15,29 @@ interface Item { const sortBy: Ref<SortItem[]> = ref([{ key: 'System', order: "asc" }]) const itemValue = ref("id"); const dbName = ref("structure") +const client = useMeiliSearchRef() -onBeforeMount(async () => { - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { +onMounted(async () => { + + try { + const data = await client.index(toValue(dbName)).search("", { facets: ["*"], filter: [], page: 1, hitsPerPage: 25, - } - }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution + }) + autocompleteMeiliFacetsProps.value.facetDistribution = data?.facetDistribution + } catch (error) { + throw createError("Unable to get structures") -}) + } -onMounted(async () => { - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { - facets: ["*"], - filter: [], - page: 1, - hitsPerPage: 25, - } - }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution }) + + const autocompleteMeiliFacetsProps = ref<AutocompleteMeiliFacetProps>({ db: toValue(dbName), facets: [ diff --git a/components/content/SystemDb.vue b/components/content/SystemDb.vue index 81f591a26d7ae9a80edf60e6eb9db2dd594271ec..700214dca75cb45b313a8bb5e6b6fb9d2beed878 100644 --- a/components/content/SystemDb.vue +++ b/components/content/SystemDb.vue @@ -5,31 +5,36 @@ const sortBy: Ref<SortItem[]> = ref([{ key: 'title', order: "asc" }]) const itemValue = ref("title"); const dbName = ref("systems") -onBeforeMount(async () => { - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { - facets: ["*"], - filter: [], - page: 1, - hitsPerPage: 25, - } - }) +const client = useMeiliSearchRef() - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution -}) -onMounted(async () => { - const { data } = await useAsyncMeiliSearch({ - index: toValue(dbName), query: "", params: { - facets: ["*"], - filter: [], - page: 1, - hitsPerPage: 25, - } - }) +// onBeforeMount(async () => { +// const { data } = await useAsyncMeiliSearch({ +// index: toValue(dbName), query: "", params: { +// facets: ["*"], +// filter: [], +// page: 1, +// hitsPerPage: 25, +// } +// }) - autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution +// autocompleteMeiliFacetsProps.value.facetDistribution = toValue(data)?.facetDistribution +// }) +onMounted(async () => { + try { + const data = await client + .index(toValue(dbName)) + .search("", { + facets: ["*"], + filter: [], + page: 1, + hitsPerPage: 25, + }) + autocompleteMeiliFacetsProps.value.facetDistribution = data?.facetDistribution + } catch (error) { + throw createError("Unable to get list of systems") + } }) @@ -118,18 +123,19 @@ const columnsToDownload = ref(['title', 'doi', 'Sensor', 'Activator', 'Effector' <template #[`item.title`]="{ item }"> <v-chip color="info" link :to="`/defense-systems/${item.title.toLowerCase()}`">{{ - item.title - }}</v-chip> + item.title + }}</v-chip> </template> <template #[`item.doi`]="{ item }"> - <ArticleDoi v-if="item?.doi" :doi="item.doi" :abstract="item?.abstract" :divider="false" :enumerate="false" /> + <ArticleDoi v-if="item?.doi" :doi="item.doi" :abstract="item?.abstract" :divider="false" + :enumerate="false" /> </template> <template #[`item.PFAM`]="{ item }"> <pfam-chips v-if="item?.PFAM" :pfams="item.PFAM"></pfam-chips> </template> <template #[`item.contributors`]="{ item }"> - <CollapsibleChips v-if="item?.contributors" :items="item.contributors.map(it => ({ title: it }))"> + <CollapsibleChips v-if="item?.contributors" :items="item.contributors.map(it => ({ title: it })) "> </CollapsibleChips> </template> </ServerDbTable>