From fa471d912ac3727a18f9058da99a8d754e1ca9ef Mon Sep 17 00:00:00 2001
From: Remi  PLANEL <rplanel@pasteur.fr>
Date: Wed, 10 Jan 2024 17:39:42 +0100
Subject: [PATCH] wip: need to refactor but working

---
 components/ServerDbTable.vue             |  9 ++--
 components/content/MolstarPdbePlugin.vue |  2 +-
 components/content/StructureDb.vue       |  4 +-
 composables/useMeiliFilters.ts           | 67 ++++++++++++++++--------
 4 files changed, 53 insertions(+), 29 deletions(-)

diff --git a/components/ServerDbTable.vue b/components/ServerDbTable.vue
index 940b5ec7..f6baa3d6 100644
--- a/components/ServerDbTable.vue
+++ b/components/ServerDbTable.vue
@@ -37,7 +37,7 @@ export interface AutocompleteMeiliFacetProps {
 export interface Props {
     title?: string
     sortBy?: SortItem[]
-    numericalFilters?: MaybeRef<string[] | undefined>
+    numericalFilters?: Ref<string[] | undefined>
     dataTableServerProps: Record<string, any>
     columnsToDownload?: MaybeRef<string[] | undefined>
     autocompleteMeiliFacetsProps: AutocompleteMeiliFacetProps
@@ -48,7 +48,7 @@ const props = withDefaults(defineProps<Props>(), {
     title: '',
     columnsToDownload: undefined,
     sortBy: () => [{ key: "type", order: "asc" }],
-    numericalFilters: undefined,
+    numericalFilters: () => ref(undefined),
     autocompleteMeiliFacetsProps: () => {
         return {
             db: 'refseq',
@@ -86,7 +86,7 @@ const computedTableHeight = computed(() => {
 
 const pendingDownloadData = ref(false)
 
-
+const toRefNumericalFilters = toRef(props.numericalFilters)
 // const meiliFilters = ref<string | undefined>(undefined)
 
 const filterInputValues = 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 toValFilters = toValue(msFilterCompo)
 //     if (toValFilters !== undefined && toValFilters.length > 0) {
diff --git a/components/content/MolstarPdbePlugin.vue b/components/content/MolstarPdbePlugin.vue
index 77df9507..03b842a8 100644
--- a/components/content/MolstarPdbePlugin.vue
+++ b/components/content/MolstarPdbePlugin.vue
@@ -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"
                             :height="computedHeight" :width="computedWidth" position="relative">
                             <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>
                         </v-sheet>
                     </v-col>
diff --git a/components/content/StructureDb.vue b/components/content/StructureDb.vue
index 12243861..69792041 100644
--- a/components/content/StructureDb.vue
+++ b/components/content/StructureDb.vue
@@ -100,7 +100,9 @@ function isString(item: Ref<string | undefined>): item is Ref<string> {
 }
 
 const numericalFilters = computed(() => {
+    console.log("je compute mes numerical filters")
     const listFilters = [plddtsFilter, iptmFilter, pdockqFilter].filter(isString).map(f => toValue(f))
+    console.log(listFilters)
     return listFilters.length > 0 ? listFilters : undefined
 })
 
@@ -136,7 +138,7 @@ function pdbNameToCif(pdbPath: string) {
 </script>
 <template>
     <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 }">
             <v-list>
                 <v-list-item>
diff --git a/composables/useMeiliFilters.ts b/composables/useMeiliFilters.ts
index f88f2681..d04ec0b1 100644
--- a/composables/useMeiliFilters.ts
+++ b/composables/useMeiliFilters.ts
@@ -2,13 +2,24 @@ import type { FilterItem } from '@/components/AutocompleteMeiliFacets.vue'
 import { filter } from '@observablehq/plot'
 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")
     const toValFilters = toValue(filters)
-    const toValNumericalFilter = toValue(numericalFilters)
+    const toValNumericalFilter = toValue(nf)
     console.log(toValNumericalFilter)
     let categoricalFilters: FilterItem[] | undefined = undefined
     if (toValFilters !== undefined && toValFilters.length >= 3) {
@@ -21,7 +32,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
 
 
       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 position = index + 1
         switch (position % 4) {
@@ -29,6 +40,7 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
             // if this is the first time pass by an outeroperator
             if (previousOperator === undefined) {
               const newFilter = acc.splice(-3).join("")
+              console.log("newFilter: ", newFilter)
               if (sanitizedValue === 'OR') {
                 acc = [[newFilter]]
               }
@@ -49,10 +61,15 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
               if (Array.isArray(previousElem)) {
                 acc.slice(-1)[0].push(newFilter)
               }
-              else {
+              else if (previousElem !== undefined) {
                 const previousElem = acc.splice(-1)[0]
+                console.log("previousElem: ", previousElem)
+                console.log("newFilter: ", newFilter)
                 acc.push([previousElem, newFilter])
               }
+              else {
+                acc.push(newFilter)
+              }
             }
             break
           default:
@@ -61,32 +78,36 @@ export function useMeiliFilters(filters: MaybeRef<FilterItem[] | undefined>, num
         }
         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
 
     }
     console.log(categoricalFilters)
-    const filterItemArray = [categoricalFilters, toValNumericalFilter].filter(isFilterItem).reduce((acc, curr) => [...acc, ...curr], [])
+    const filterItemArray = [categoricalFilters, toValNumericalFilter].filter(isFilterItem).flat()
     console.log(filterItemArray)
-    const returnArr = filterItemArray.reduce<FilterItem[] | undefined>((acc, curr) => {
-      const toValCurr = toValue(curr)
-      if (toValCurr === undefined) {
-        return acc
-      }
-      else {
-        if (acc !== undefined) {
-          return [...acc, ...toValCurr]
-        }
-        else { return [...toValCurr] }
-      }
-    }, undefined)
-    console.log(returnArr)
-    
-    return returnArr
+    // const returnArr = filterItemArray.reduce<FilterItem | string | undefined>((acc, curr) => {
+    //   const toValCurr = toValue(curr)
+    //   if (toValCurr === undefined) {
+    //     return acc
+    //   }
+    //   else {
+    //     if (acc !== undefined) {
+    //       return [...acc, ...toValCurr]
+    //     }
+    //     else { return [...toValCurr] }
+    //   }
+    // }, undefined)
+    // console.log(returnArr)
+
+    // return returnArr
+    arrayFilters.value = filterItemArray
   })
 
+  // const arrayFilters: ComputedRef<Filter | undefined> = computed(() => {
+  // })
+
   return { arrayFilters }
 }
-- 
GitLab