Browse Source

caching issues fixes

asmer 1 month ago
parent
commit
3883dd7540
2 changed files with 80 additions and 75 deletions
  1. 70 72
      src/App.tsx
  2. 10 3
      src/lib/router/index.tsx

+ 70 - 72
src/App.tsx

@@ -62,71 +62,71 @@ const LeftMenu = ({data}) => {
 
 
 
-const {queryPub, createQuery, withQueryFunc} = createQueryPub({
-    queryFunc: gql,
-    cacheTimeout: 5000,
-})
-
-const {useCategoriesQuery} = createQuery({
-    promiseName: 'categories',
-    args: [`query MainCategories{
-              CategoryFind(query: "[{}]"){
-                _id name
-                  image{
-                    url
-                  }
-                goods{
-                _id
-                name description price images{
-                  url
-                }
-              }
-              subCategories{ name _id}
-            }
-        }
-    `]
-})
-
-const {useMainCategoriesQuery} = createQuery({
-    promiseName: 'mainCategories',
-    args: [`query MainCategories{
-              CategoryFind(query: "[{\\"parent\\":null}]"){
-                _id name
-                  image{
-                    url 
-                  }
-                goods{
-                _id
-                name description price images{
-                  url
-                }
-              }
-              subCategories{ name _id}
-            }
-        }
-    `]
-})
-
-
-const {query: categoryQuery, useCategoryQuery} = createQuery({
-    promiseName: 'category',
-    args: ({_id}) => [`query categoryById($query:String){
-              CategoryFindOne(query: $query){
-                _id name
-                  image{
-                    url
-                  }
-                goods{
-                _id
-                name description price images{
-                  url
-                }
-              }
-              subCategories{ name _id}
-            }
-        }
-    `, {query: JSON.stringify([{_id}])}]
-})
+//const {queryPub, createQuery, withQueryFunc} = createQueryPub({
+    //queryFunc: gql,
+    //cacheTimeout: 5000,
+//})
+
+//const {useCategoriesQuery} = createQuery({
+    //promiseName: 'categories',
+    //args: [`query MainCategories{
+              //CategoryFind(query: "[{}]"){
+                //_id name
+                  //image{
+                    //url
+                  //}
+                //goods{
+                //_id
+                //name description price images{
+                  //url
+                //}
+              //}
+              //subCategories{ name _id}
+            //}
+        //}
+    //`]
+//})
+
+//const {useMainCategoriesQuery} = createQuery({
+    //promiseName: 'mainCategories',
+    //args: [`query MainCategories{
+              //CategoryFind(query: "[{\\"parent\\":null}]"){
+                //_id name
+                  //image{
+                    //url 
+                  //}
+                //goods{
+                //_id
+                //name description price images{
+                  //url
+                //}
+              //}
+              //subCategories{ name _id}
+            //}
+        //}
+    //`]
+//})
+
+
+//const {query: categoryQuery, useCategoryQuery} = createQuery({
+    //promiseName: 'category',
+    //args: ({_id}) => [`query categoryById($query:String){
+              //CategoryFindOne(query: $query){
+                //_id name
+                  //image{
+                    //url
+                  //}
+                //goods{
+                //_id
+                //name description price images{
+                  //url
+                //}
+              //}
+              //subCategories{ name _id}
+            //}
+        //}
+    //`, {query: JSON.stringify([{_id}])}]
+//})
 
 
 //queryPub.subscribe(() => console.log(JSON.stringify(queryPub.queries.user, null, 4)))
@@ -172,11 +172,6 @@ const Goods = ({children}) =>
 </div>
 
 const PageCategory = ({data}) => {
-    //usePub(queryPub) //IS IT REQUIRED?, or route mechanics enough (looks like this required for auto-refresh queries in PUB)
-    //if its required, is useCategoryQuery gives same result?
-    //yes, exactly. it required due to auto update of queryPub.
-    //
-    //useCategoryQuery({_id: useParams()._id}) //here we need id from url...
     console.log('page category update',data)
     return (
     <>
@@ -199,7 +194,8 @@ const PageCategory = ({data}) => {
 }
 
 const LeftMenuItem = ({category:{_id,name}})=>
-<li><NamedLink routeName='category' params={{_id}}>{name}</NamedLink></li>
+<li><CategoryLink params={{_id}}>{name}</CategoryLink></li>
+//<li><NamedLink name="category" params={{_id}}>{name}</NamedLink></li>
 //<li><Link  to={`/category/${_id}`}>{name}</Link></li>
 //
 //
@@ -253,7 +249,9 @@ const queryRouteResult = createQueryRoutes({
     }
 })
 
-const { AllRoutes } = queryRouteResult
+const { AllRoutes, queryRoutes: {category: {CategoryLink}}, queryPub } = queryRouteResult
+
+//queryPub.subscribe(() => console.log(JSON.stringify(queryPub, null, 4)))
 
 function App() {
     //const {payload} = useCategoriesQuery()

+ 10 - 3
src/lib/router/index.tsx

@@ -21,8 +21,12 @@ export const NamedRoute = ({name, routeName, query, pendingQueryComponent:P, err
                 if (typeof query.getQueryPubBranch === 'function'){ //if it's queryPub query function
                     query(props.match.params/*, props, name*/)
                     const [queryPub, key] = query.getQueryPubBranch(props.match.params)
-                    queryPubUnsubscribeRef.current = queryPub.subscribe(() => {
-                        //console.log(queryPub, key, queryPub[key])
+                    const pubToState = () => {
+                        if (!queryPub[key]){ 
+                            setQueryError()
+                            setQueryResult()
+                            return
+                        }
                         const {status, payload, error} = queryPub[key];
                         ({
                             PENDING(){
@@ -36,7 +40,9 @@ export const NamedRoute = ({name, routeName, query, pendingQueryComponent:P, err
                                 setQueryError(error)
                             }
                         })[status]();
-                    })
+                    }
+                    pubToState()
+                    queryPubUnsubscribeRef.current = queryPub.subscribe(pubToState)
                 }
                 else {
                     const querySyncResult = query(props.match.params, props, name)
@@ -49,6 +55,7 @@ export const NamedRoute = ({name, routeName, query, pendingQueryComponent:P, err
                 }
             }
             return () => {
+                console.log('UNMOUNT', props.match.params)
                 setQueryError()
                 setQueryResult()
                 if (queryPubUnsubscribeRef.current)