muya 2.4.5 → 2.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/sqlite/use-sqlite.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useCallback as
|
|
1
|
+
import{useCallback as f,useLayoutEffect as A,useReducer as R,useRef as x}from"react";import{DEFAULT_PAGE_SIZE as v}from"./table";const I=1e4;function _(u,D={},g=[]){const{select:p,pageSize:P=v}=D,e=x(),[,k]=R(n=>n+1,0),t=x(new Map),S=x(),w=f(()=>{const{select:n,...o}=D;S.current=u.search({select:(c,s)=>({doc:c,meta:s}),...o})},[u,...g]),i=f(()=>{e.current=[],t.current.clear(),w()},[w]),m=f(async n=>{e.current===void 0&&(e.current=[]),n===!0&&i();const{current:o}=S;if(!o)return!0;let c=!1;for(let s=0;s<P;s++){const r=await o.next();if(r.done){S.current=void 0,c=!0;break}if(t.current.has(r.value.meta.key)){s+=-1;continue}e.current.push(p?p(r.value.doc):r.value.doc),t.current.set(r.value.meta.key,e.current.length-1)}return c},[]),y=f(async()=>{const n=await m(!1);return k(),n},[m]);A(()=>{const n=u.subscribe(async o=>{const{mutations:c,removedAll:s}=o;if(s&&i(),!c)return;const r=e.current?.length??0;let b=r,h=!1;for(const l of c){const{key:a,op:q}=l;switch(q){case"insert":{b+=1;break}case"delete":{if(e.current&&t.current.has(a)){const d=t.current.get(a);if(d===void 0)break;e.current.splice(d,1),t.current.delete(a),e.current=[...e.current],h=!0}break}case"update":{if(e.current&&t.current.has(a)){const d=t.current.get(a);if(d===void 0)break;e.current[d]=await u.get(a,p),e.current=[...e.current],h=!0}break}}}const L=r!==b;if(L||h){if(L){await m(!0);let l=0;for(;(e.current?.length??0)<b&&l<I;)await m(!1),l++;l===I&&console.warn("Reached maximum iterations in fillNextPage loop. Possible duplicate or data issue.")}k()}});return()=>{n()}},[u]),A(()=>{i(),y()},g);const T=f(async()=>{i(),await y()},[y,i]);return[e.current,{nextPage:y,reset:T,keysIndex:t.current}]}export{_ as useSqliteValue};
|
package/package.json
CHANGED
package/src/sqlite/use-sqlite.ts
CHANGED
|
@@ -17,6 +17,7 @@ export interface SqLiteActions {
|
|
|
17
17
|
*/
|
|
18
18
|
readonly reset: () => Promise<void>
|
|
19
19
|
readonly keysIndex: Map<Key, number>
|
|
20
|
+
readonly isResetting?: boolean
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
export interface UseSearchOptions<Document extends DocType, Selected = Document> extends SqlSeachOptions<Document> {
|
|
@@ -123,6 +124,7 @@ export function useSqliteValue<Document extends DocType, Selected = Document>(
|
|
|
123
124
|
if (index === undefined) break
|
|
124
125
|
itemsRef.current.splice(index, 1)
|
|
125
126
|
keysIndex.current.delete(key)
|
|
127
|
+
itemsRef.current = [...itemsRef.current]
|
|
126
128
|
hasUpdate = true
|
|
127
129
|
}
|
|
128
130
|
break
|
|
@@ -132,6 +134,7 @@ export function useSqliteValue<Document extends DocType, Selected = Document>(
|
|
|
132
134
|
const index = keysIndex.current.get(key)
|
|
133
135
|
if (index === undefined) break
|
|
134
136
|
itemsRef.current[index] = (await state.get(key, select)) as Selected
|
|
137
|
+
itemsRef.current = [...itemsRef.current]
|
|
135
138
|
hasUpdate = true
|
|
136
139
|
}
|
|
137
140
|
break
|
|
@@ -167,9 +170,7 @@ export function useSqliteValue<Document extends DocType, Selected = Document>(
|
|
|
167
170
|
}, [state])
|
|
168
171
|
|
|
169
172
|
useLayoutEffect(() => {
|
|
170
|
-
|
|
171
|
-
itemsRef.current = undefined
|
|
172
|
-
keysIndex.current.clear()
|
|
173
|
+
reset()
|
|
173
174
|
nextPage()
|
|
174
175
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
175
176
|
}, deps)
|
|
@@ -13,6 +13,7 @@ export interface SqLiteActions {
|
|
|
13
13
|
*/
|
|
14
14
|
readonly reset: () => Promise<void>;
|
|
15
15
|
readonly keysIndex: Map<Key, number>;
|
|
16
|
+
readonly isResetting?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export interface UseSearchOptions<Document extends DocType, Selected = Document> extends SqlSeachOptions<Document> {
|
|
18
19
|
/**
|