Skip to content
Snippets Groups Projects
Commit fa471d91 authored by Remi  PLANEL's avatar Remi PLANEL
Browse files

wip: need to refactor but working

parent 36796c3c
No related branches found
No related tags found
2 merge requests!203Foldseek pages,!186Refactor facet autocomplete
Pipeline #120465 passed
...@@ -37,7 +37,7 @@ export interface AutocompleteMeiliFacetProps { ...@@ -37,7 +37,7 @@ export interface AutocompleteMeiliFacetProps {
export interface Props { export interface Props {
title?: string title?: string
sortBy?: SortItem[] sortBy?: SortItem[]
numericalFilters?: MaybeRef<string[] | undefined> numericalFilters?: Ref<string[] | undefined>
dataTableServerProps: Record<string, any> dataTableServerProps: Record<string, any>
columnsToDownload?: MaybeRef<string[] | undefined> columnsToDownload?: MaybeRef<string[] | undefined>
autocompleteMeiliFacetsProps: AutocompleteMeiliFacetProps autocompleteMeiliFacetsProps: AutocompleteMeiliFacetProps
...@@ -48,7 +48,7 @@ const props = withDefaults(defineProps<Props>(), { ...@@ -48,7 +48,7 @@ const props = withDefaults(defineProps<Props>(), {
title: '', title: '',
columnsToDownload: undefined, columnsToDownload: undefined,
sortBy: () => [{ key: "type", order: "asc" }], sortBy: () => [{ key: "type", order: "asc" }],
numericalFilters: undefined, numericalFilters: () => ref(undefined),
autocompleteMeiliFacetsProps: () => { autocompleteMeiliFacetsProps: () => {
return { return {
db: 'refseq', db: 'refseq',
...@@ -86,7 +86,7 @@ const computedTableHeight = computed(() => { ...@@ -86,7 +86,7 @@ const computedTableHeight = computed(() => {
const pendingDownloadData = ref(false) const pendingDownloadData = ref(false)
const toRefNumericalFilters = toRef(props.numericalFilters)
// const meiliFilters = ref<string | undefined>(undefined) // const meiliFilters = ref<string | undefined>(undefined)
const filterInputValues = computed(() => { const filterInputValues = computed(() => {
...@@ -170,7 +170,8 @@ const computedFilterStr = computed(() => { ...@@ -170,7 +170,8 @@ const computedFilterStr = computed(() => {
}) })
const { arrayFilters: computedFilter } = useMeiliFilters(msFilterCompo, toRef(props.numericalFilters)) const computedF = computed(() => toValue(props.numericalFilters))
const { arrayFilters: computedFilter } = useMeiliFilters(msFilterCompo, computedF)
// const computedFilter = computed(() => { // const computedFilter = computed(() => {
// const toValFilters = toValue(msFilterCompo) // const toValFilters = toValue(msFilterCompo)
// if (toValFilters !== undefined && toValFilters.length > 0) { // if (toValFilters !== undefined && toValFilters.length > 0) {
......
...@@ -192,7 +192,7 @@ const moleculeFormat: Ref<string> = ref("pdb") ...@@ -192,7 +192,7 @@ const moleculeFormat: Ref<string> = ref("pdb")
class="d-flex align-center justify-center flex-wrap text-center mx-auto px-4 my-3" class="d-flex align-center justify-center flex-wrap text-center mx-auto px-4 my-3"
:height="computedHeight" :width="computedWidth" position="relative"> :height="computedHeight" :width="computedWidth" position="relative">
<pdbe-molstar ref="pdbeMolstarComponent" landscape="true" hide-controls="true" <pdbe-molstar ref="pdbeMolstarComponent" landscape="true" hide-controls="true"
:custom-data-url="selectedPdb" alphafold-view="true" :custom-data-url="selectedPdb" alphafold-view="true" sequence-panel
:custom-data-format="moleculeFormat"></pdbe-molstar> :custom-data-format="moleculeFormat"></pdbe-molstar>
</v-sheet> </v-sheet>
</v-col> </v-col>
......
...@@ -100,7 +100,9 @@ function isString(item: Ref<string | undefined>): item is Ref<string> { ...@@ -100,7 +100,9 @@ function isString(item: Ref<string | undefined>): item is Ref<string> {
} }
const numericalFilters = computed(() => { const numericalFilters = computed(() => {
console.log("je compute mes numerical filters")
const listFilters = [plddtsFilter, iptmFilter, pdockqFilter].filter(isString).map(f => toValue(f)) const listFilters = [plddtsFilter, iptmFilter, pdockqFilter].filter(isString).map(f => toValue(f))
console.log(listFilters)
return listFilters.length > 0 ? listFilters : undefined return listFilters.length > 0 ? listFilters : undefined
}) })
...@@ -136,7 +138,7 @@ function pdbNameToCif(pdbPath: string) { ...@@ -136,7 +138,7 @@ function pdbNameToCif(pdbPath: string) {
</script> </script>
<template> <template>
<ServerDbTable title="Predicted Structures" :sortBy="sortBy" :data-table-server-props="dataTableServerProps" <ServerDbTable title="Predicted Structures" :sortBy="sortBy" :data-table-server-props="dataTableServerProps"
:autocomplete-meili-facets-props="computedAutocompleteMeiliFacetsProps" :numerical-filters="numericalFilters"> :autocomplete-meili-facets-props="computedAutocompleteMeiliFacetsProps" :numerical-filters="toRef(numericalFilters)">
<template #numerical-filters="{ search }"> <template #numerical-filters="{ search }">
<v-list> <v-list>
<v-list-item> <v-list-item>
......
...@@ -2,13 +2,24 @@ import type { FilterItem } from '@/components/AutocompleteMeiliFacets.vue' ...@@ -2,13 +2,24 @@ import type { FilterItem } from '@/components/AutocompleteMeiliFacets.vue'
import { filter } from '@observablehq/plot' import { filter } from '@observablehq/plot'
import type { Filter } from "meilisearch" import type { Filter } from "meilisearch"
export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, numericalFilters: MaybeRef<string[] | undefined>) { export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, numericalFilters: Ref<string[] | undefined>) {
const arrayFilters = ref<Filter | undefined>(undefined)
const nf = toRef(numericalFilters)
const arrayFilters: ComputedRef<Filter | undefined> = computed(() => { watch(nf, () => {
console.log("mon nf", nf)
})
watch(numericalFilters,() => {
console.log("je watch numerical filter", numericalFilters)
})
watchEffect(() => {
console.log("dans le computed de useMeilisFilter") console.log("dans le computed de useMeilisFilter")
const toValFilters = toValue(filters) const toValFilters = toValue(filters)
const toValNumericalFilter = toValue(numericalFilters) const toValNumericalFilter = toValue(nf)
console.log(toValNumericalFilter) console.log(toValNumericalFilter)
let categoricalFilters: FilterItem[] | undefined = undefined let categoricalFilters: FilterItem[] | undefined = undefined
if (toValFilters !== undefined && toValFilters.length >= 3) { if (toValFilters !== undefined && toValFilters.length >= 3) {
...@@ -21,7 +32,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num ...@@ -21,7 +32,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
let previousOperator: 'AND' | 'OR' | undefined = undefined let previousOperator: 'AND' | 'OR' | undefined = undefined
const arrayFilters = cachedFilters.reduce((acc, curr, index) => { const arrayFilters = cachedFilters.reduce<FilterItem[]>((acc, curr, index) => {
const sanitizedValue = curr.value.split("-").slice(0, -1).join("-") const sanitizedValue = curr.value.split("-").slice(0, -1).join("-")
const position = index + 1 const position = index + 1
switch (position % 4) { switch (position % 4) {
...@@ -29,6 +40,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num ...@@ -29,6 +40,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
// if this is the first time pass by an outeroperator // if this is the first time pass by an outeroperator
if (previousOperator === undefined) { if (previousOperator === undefined) {
const newFilter = acc.splice(-3).join("") const newFilter = acc.splice(-3).join("")
console.log("newFilter: ", newFilter)
if (sanitizedValue === 'OR') { if (sanitizedValue === 'OR') {
acc = [[newFilter]] acc = [[newFilter]]
} }
...@@ -49,10 +61,15 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num ...@@ -49,10 +61,15 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
if (Array.isArray(previousElem)) { if (Array.isArray(previousElem)) {
acc.slice(-1)[0].push(newFilter) acc.slice(-1)[0].push(newFilter)
} }
else { else if (previousElem !== undefined) {
const previousElem = acc.splice(-1)[0] const previousElem = acc.splice(-1)[0]
console.log("previousElem: ", previousElem)
console.log("newFilter: ", newFilter)
acc.push([previousElem, newFilter]) acc.push([previousElem, newFilter])
} }
else {
acc.push(newFilter)
}
} }
break break
default: default:
...@@ -61,32 +78,36 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num ...@@ -61,32 +78,36 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
} }
return acc return acc
}, []) }, [])
categoricalFilters = arrayFilters categoricalFilters = arrayFilters.length > 0 ? arrayFilters : undefined
} }
function isFilterItem(item: FilterItem[] | undefined): item is FilterItem[] { function isFilterItem(item: FilterItem[] | string[] | undefined): item is FilterItem[] | string[] {
return item !== undefined return item !== undefined
} }
console.log(categoricalFilters) console.log(categoricalFilters)
const filterItemArray = [categoricalFilters, toValNumericalFilter].filter(isFilterItem).reduce((acc, curr) => [...acc, ...curr], []) const filterItemArray = [categoricalFilters, toValNumericalFilter].filter(isFilterItem).flat()
console.log(filterItemArray) console.log(filterItemArray)
const returnArr = filterItemArray.reduce<FilterItem[] | undefined>((acc, curr) => { // const returnArr = filterItemArray.reduce<FilterItem | string | undefined>((acc, curr) => {
const toValCurr = toValue(curr) // const toValCurr = toValue(curr)
if (toValCurr === undefined) { // if (toValCurr === undefined) {
return acc // return acc
} // }
else { // else {
if (acc !== undefined) { // if (acc !== undefined) {
return [...acc, ...toValCurr] // return [...acc, ...toValCurr]
} // }
else { return [...toValCurr] } // else { return [...toValCurr] }
} // }
}, undefined) // }, undefined)
console.log(returnArr) // console.log(returnArr)
return returnArr // return returnArr
arrayFilters.value = filterItemArray
}) })
// const arrayFilters: ComputedRef<Filter | undefined> = computed(() => {
// })
return { arrayFilters } return { arrayFilters }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment