@livestore/livestore 0.0.46 → 0.0.47-dev.0
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/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/react/fixture.d.ts +10 -10
- package/dist/react/LiveStoreProvider.test.js +2 -13
- package/dist/react/LiveStoreProvider.test.js.map +1 -1
- package/dist/react/useAtom.d.ts.map +1 -1
- package/dist/react/useAtom.js +6 -1
- package/dist/react/useAtom.js.map +1 -1
- package/dist/reactiveQueries/graphql.d.ts.map +1 -1
- package/dist/reactiveQueries/graphql.js +5 -1
- package/dist/reactiveQueries/graphql.js.map +1 -1
- package/dist/row-query.d.ts.map +1 -1
- package/dist/row-query.js +3 -1
- package/dist/row-query.js.map +1 -1
- package/dist/store.d.ts +5 -3
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +40 -31
- package/dist/store.js.map +1 -1
- package/package.json +10 -10
- package/src/react/LiveStoreProvider.test.tsx +2 -21
- package/src/react/useAtom.ts +5 -1
- package/src/reactiveQueries/graphql.ts +5 -1
- package/src/row-query.ts +3 -1
- package/src/store.ts +59 -41
- package/dist/react/components/DiffableList copy.d.ts +0 -19
- package/dist/react/components/DiffableList copy.d.ts.map +0 -1
- package/dist/react/components/DiffableList copy.js +0 -62
- package/dist/react/components/DiffableList copy.js.map +0 -1
- package/dist/react/components/DiffableList.d.ts +0 -13
- package/dist/react/components/DiffableList.d.ts.map +0 -1
- package/dist/react/components/DiffableList.js +0 -21
- package/dist/react/components/DiffableList.js.map +0 -1
- package/dist/react/components/DiffableList2.d.ts +0 -20
- package/dist/react/components/DiffableList2.d.ts.map +0 -1
- package/dist/react/components/DiffableList2.js +0 -119
- package/dist/react/components/DiffableList2.js.map +0 -1
- package/dist/react/components/DiffableList3.d.ts +0 -19
- package/dist/react/components/DiffableList3.d.ts.map +0 -1
- package/dist/react/components/DiffableList3.js +0 -62
- package/dist/react/components/DiffableList3.js.map +0 -1
- package/dist/react/useRowOld.d.ts +0 -40
- package/dist/react/useRowOld.d.ts.map +0 -1
- package/dist/react/useRowOld.js +0 -134
- package/dist/react/useRowOld.js.map +0 -1
- package/dist/react/utils/useCleanup.d.ts +0 -7
- package/dist/react/utils/useCleanup.d.ts.map +0 -1
- package/dist/react/utils/useCleanup.js +0 -19
- package/dist/react/utils/useCleanup.js.map +0 -1
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import * as million from 'million';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { computed } from '../../reactiveQueries/js.js';
|
|
4
|
-
import { useQuery } from '../useQuery.js';
|
|
5
|
-
export const DiffableList = ({ items$, renderContainer, renderItem, getKey, }) => {
|
|
6
|
-
const ref = React.useRef(null);
|
|
7
|
-
const container = renderContainer(ref);
|
|
8
|
-
const [hasMounted, setHasMounted] = React.useState(false);
|
|
9
|
-
React.useEffect(() => setHasMounted(true), []);
|
|
10
|
-
const keys$ = computed((get) => get(items$).map(getKey));
|
|
11
|
-
const elsRef = React.useRef([]);
|
|
12
|
-
// const ContextBridge = itsFine.useContextBridge()
|
|
13
|
-
// const { store } = useStore()
|
|
14
|
-
// const renderListEl = React.useCallback(
|
|
15
|
-
// (parentEl: HTMLElement, index: number, item$: LiveQuery<TItem>) => {
|
|
16
|
-
// const root = ReactDOM.createRoot(parentEl)
|
|
17
|
-
// root.render(
|
|
18
|
-
// // <ContextBridge>
|
|
19
|
-
// <LiveStoreContext.Provider value={{ store }}>
|
|
20
|
-
// <ItemWrapper item$={item$} renderItem={renderItem} opts={{ index, isInitialListRender: !hasMounted }} />
|
|
21
|
-
// </LiveStoreContext.Provider>,
|
|
22
|
-
// // </ContextBridge>,
|
|
23
|
-
// )
|
|
24
|
-
// return root
|
|
25
|
-
// },
|
|
26
|
-
// [hasMounted, renderItem, store],
|
|
27
|
-
// )
|
|
28
|
-
React.useLayoutEffect(() => {
|
|
29
|
-
if (ref.current === null) {
|
|
30
|
-
throw new Error('ref.current is null');
|
|
31
|
-
}
|
|
32
|
-
const keys = keys$.run();
|
|
33
|
-
const queries$ = keys.map((_key, index) => computed((get) => get(items$)[index]));
|
|
34
|
-
// const list = million.mapArray(
|
|
35
|
-
// queries$.map((item$, index) =>
|
|
36
|
-
// ItemWrapperBlock({
|
|
37
|
-
// item$,
|
|
38
|
-
// opts: { index, isInitialListRender: !hasMounted },
|
|
39
|
-
// renderItem,
|
|
40
|
-
// }),
|
|
41
|
-
// ),
|
|
42
|
-
// )
|
|
43
|
-
// million.mount(list, ref.current)
|
|
44
|
-
// const keys = keys$.run()
|
|
45
|
-
// for (let index = 0; index < keys.length; index++) {
|
|
46
|
-
// const parentEl = document.createElement('div')
|
|
47
|
-
// ref.current!.append(parentEl)
|
|
48
|
-
// const item$ = computed((get) => get(items$)[index]!) as LiveQuery<TItem>
|
|
49
|
-
// const root = renderListEl(parentEl, index, item$)
|
|
50
|
-
// elsRef.current.push({ el: parentEl, item$, root, id: keys[index]! })
|
|
51
|
-
// }
|
|
52
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
53
|
-
}, []);
|
|
54
|
-
React.useEffect(() => () => keys$.destroy(), [keys$]);
|
|
55
|
-
return React.createElement(React.Fragment, null, container);
|
|
56
|
-
};
|
|
57
|
-
const ItemWrapper = ({ item$, opts, renderItem, }) => {
|
|
58
|
-
const item = useQuery(item$);
|
|
59
|
-
return React.createElement(React.Fragment, null, renderItem(item, opts));
|
|
60
|
-
};
|
|
61
|
-
const ItemWrapperBlock = million.block(ItemWrapper);
|
|
62
|
-
//# sourceMappingURL=DiffableList3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DiffableList3.js","sourceRoot":"","sources":["../../../src/react/components/DiffableList3.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAoBzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAS,EACnC,MAAM,EACN,eAAe,EACf,UAAU,EACV,MAAM,GACO,EAAmB,EAAE;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAc,IAAI,CAAC,CAAA;IAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEtC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAE9C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAOxD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAU,EAAE,CAAC,CAAA;IAExC,mDAAmD;IACnD,+BAA+B;IAE/B,0CAA0C;IAC1C,yEAAyE;IACzE,iDAAiD;IACjD,mBAAmB;IACnB,2BAA2B;IAC3B,sDAAsD;IACtD,mHAAmH;IACnH,sCAAsC;IACtC,6BAA6B;IAC7B,QAAQ;IAER,kBAAkB;IAClB,OAAO;IACP,qCAAqC;IACrC,IAAI;IAEJ,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;QAED,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAA;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAE,CAAC,CAAuB,CAAA;QAExG,iCAAiC;QACjC,mCAAmC;QACnC,yBAAyB;QACzB,eAAe;QACf,2DAA2D;QAC3D,oBAAoB;QACpB,UAAU;QACV,OAAO;QACP,IAAI;QAEJ,mCAAmC;QAEnC,2BAA2B;QAE3B,sDAAsD;QACtD,mDAAmD;QACnD,kCAAkC;QAClC,6EAA6E;QAC7E,sDAAsD;QACtD,yEAAyE;QACzE,IAAI;QACJ,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAErD,OAAO,0CAAG,SAAS,CAAI,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAS,EAC3B,KAAK,EACL,IAAI,EACJ,UAAU,GAKX,EAAE,EAAE;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE5B,OAAO,0CAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAI,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,WAAkB,CAAC,CAAA"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { DbSchema } from '@livestore/common/schema';
|
|
2
|
-
import type { DbGraph, LiveQuery } from '../index.js';
|
|
3
|
-
import type { QueryInfo } from '../query-info.js';
|
|
4
|
-
import type { RowResult } from '../row-query.js';
|
|
5
|
-
export type UseRowResult<TTableDef extends DbSchema.TableDef> = [
|
|
6
|
-
row: RowResult<TTableDef>,
|
|
7
|
-
setRow: StateSetters<TTableDef>,
|
|
8
|
-
query$: LiveQuery<RowResult<TTableDef>, QueryInfo>
|
|
9
|
-
];
|
|
10
|
-
export type UseRowOptionsDefaulValues<TTableDef extends DbSchema.TableDef> = {
|
|
11
|
-
defaultValues?: Partial<RowResult<TTableDef>>;
|
|
12
|
-
};
|
|
13
|
-
export type UseRowOptionsBase = {
|
|
14
|
-
dbGraph?: DbGraph;
|
|
15
|
-
};
|
|
16
|
-
/**
|
|
17
|
-
* Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
|
|
18
|
-
*
|
|
19
|
-
* - `row` is the current value of the row (fully decoded according to the table schema)
|
|
20
|
-
* - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
|
|
21
|
-
* - `query$` is a `LiveQuery` that e.g. can be used to subscribe to changes to the row
|
|
22
|
-
*
|
|
23
|
-
* If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
|
|
24
|
-
*/
|
|
25
|
-
export declare const useRow: {
|
|
26
|
-
<TTableDef extends DbSchema.TableDef<DbSchema.DefaultSqliteTableDef, boolean, DbSchema.TableOptions & {
|
|
27
|
-
isSingleton: true;
|
|
28
|
-
}>>(table: TTableDef, options?: UseRowOptionsBase): UseRowResult<TTableDef>;
|
|
29
|
-
<TTableDef extends DbSchema.TableDef<DbSchema.DefaultSqliteTableDef, boolean, DbSchema.TableOptions & {
|
|
30
|
-
isSingleton: false;
|
|
31
|
-
}>>(table: TTableDef, id: string, options?: UseRowOptionsBase & UseRowOptionsDefaulValues<TTableDef>): UseRowResult<TTableDef>;
|
|
32
|
-
};
|
|
33
|
-
export type Dispatch<A> = (action: A) => void;
|
|
34
|
-
export type SetStateAction<S> = S | ((previousValue: S) => S);
|
|
35
|
-
export type StateSetters<TTableDef extends DbSchema.TableDef> = TTableDef['isSingleColumn'] extends true ? Dispatch<SetStateAction<RowResult<TTableDef>>> : {
|
|
36
|
-
[K in keyof RowResult<TTableDef>]: Dispatch<SetStateAction<RowResult<TTableDef>[K]>>;
|
|
37
|
-
} & {
|
|
38
|
-
setMany: Dispatch<SetStateAction<Partial<RowResult<TTableDef>>>>;
|
|
39
|
-
};
|
|
40
|
-
//# sourceMappingURL=useRowOld.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRowOld.d.ts","sourceRoot":"","sources":["../../src/react/useRowOld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAMnD,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAMhD,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,CAAC,QAAQ,IAAI;IAC9D,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC;IAC/B,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CACnD,CAAA;AAED,MAAM,MAAM,yBAAyB,CAAC,SAAS,SAAS,QAAQ,CAAC,QAAQ,IAAI;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;CAC9C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,EAAE;IACnB,CACE,SAAS,SAAS,QAAQ,CAAC,QAAQ,CACjC,QAAQ,CAAC,qBAAqB,EAC9B,OAAO,EACP,QAAQ,CAAC,YAAY,GAAG;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAC9C,EAED,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,YAAY,CAAC,SAAS,CAAC,CAAA;IAC1B,CACE,SAAS,SAAS,QAAQ,CAAC,QAAQ,CACjC,QAAQ,CAAC,qBAAqB,EAC9B,OAAO,EACP,QAAQ,CAAC,YAAY,GAAG;QAAE,WAAW,EAAE,KAAK,CAAA;KAAE,CAC/C,EAED,KAAK,EAAE,SAAS,EAEhB,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,iBAAiB,GAAG,yBAAyB,CAAC,SAAS,CAAC,GACjE,YAAY,CAAC,SAAS,CAAC,CAAA;CA+G3B,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAA;AAC7C,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7D,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,QAAQ,CAAC,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAC,SAAS,IAAI,GACpG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAC9C;KACG,CAAC,IAAI,MAAM,SAAS,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACrF,GAAG;IACF,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CACjE,CAAA"}
|
package/dist/react/useRowOld.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { DbSchema } from '@livestore/common/schema';
|
|
2
|
-
import * as otel from '@opentelemetry/api';
|
|
3
|
-
import { mapValues } from 'lodash-es';
|
|
4
|
-
import React from 'react';
|
|
5
|
-
import { mutationForQueryInfo } from '../query-info.js';
|
|
6
|
-
import { rowQuery } from '../row-query.js';
|
|
7
|
-
import { useStore } from './LiveStoreContext.js';
|
|
8
|
-
import { useQueryRef } from './useQuery.js';
|
|
9
|
-
import { useCleanup } from './utils/useCleanup.js';
|
|
10
|
-
/**
|
|
11
|
-
* Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
|
|
12
|
-
*
|
|
13
|
-
* - `row` is the current value of the row (fully decoded according to the table schema)
|
|
14
|
-
* - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
|
|
15
|
-
* - `query$` is a `LiveQuery` that e.g. can be used to subscribe to changes to the row
|
|
16
|
-
*
|
|
17
|
-
* If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
|
|
18
|
-
*/
|
|
19
|
-
export const useRow = (table, idOrOptions, options_) => {
|
|
20
|
-
const sqliteTableDef = table.sqliteDef;
|
|
21
|
-
const id = typeof idOrOptions === 'string' ? idOrOptions : undefined;
|
|
22
|
-
const options = typeof idOrOptions === 'string' ? options_ : idOrOptions;
|
|
23
|
-
const { defaultValues, dbGraph } = options ?? {};
|
|
24
|
-
const { store } = useStore();
|
|
25
|
-
console.debug('useRow', table.sqliteDef.name, id);
|
|
26
|
-
// NOTE It's important to run the cleanup before the `useMemo` below for React Strict / HMR mode to work correctly
|
|
27
|
-
useCleanup(React.useCallback(() => {
|
|
28
|
-
const cachedItem = rcCache.get(table, id ?? 'singleton');
|
|
29
|
-
cachedItem.rc--;
|
|
30
|
-
if (cachedItem.rc === 0) {
|
|
31
|
-
rcCache.delete(cachedItem.query$);
|
|
32
|
-
console.log('useRow cleanup', cachedItem.query$.label);
|
|
33
|
-
cachedItem.query$.destroy();
|
|
34
|
-
cachedItem.span.end();
|
|
35
|
-
}
|
|
36
|
-
}, [table, id]));
|
|
37
|
-
const { query$, otelContext } = React.useMemo(() => {
|
|
38
|
-
const cachedItem = rcCache.get(table, id ?? 'singleton');
|
|
39
|
-
if (cachedItem !== undefined) {
|
|
40
|
-
cachedItem.rc++;
|
|
41
|
-
cachedItem.span.addEvent('new-subscriber');
|
|
42
|
-
return {
|
|
43
|
-
query$: cachedItem.query$,
|
|
44
|
-
otelContext: cachedItem.otelContext,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
const span = store.otel.tracer.startSpan(`LiveStore:useRow:${table.sqliteDef.name}${id === undefined ? '' : `:${id}`}`, { attributes: { id } }, store.otel.queriesSpanContext);
|
|
48
|
-
const otelContext = otel.trace.setSpan(otel.context.active(), span);
|
|
49
|
-
const query$ = DbSchema.tableIsSingleton(table)
|
|
50
|
-
? rowQuery(table, { otelContext, dbGraph })
|
|
51
|
-
: rowQuery(table, id, {
|
|
52
|
-
otelContext,
|
|
53
|
-
defaultValues: defaultValues,
|
|
54
|
-
dbGraph,
|
|
55
|
-
});
|
|
56
|
-
rcCache.set(table, id ?? 'singleton', query$, otelContext, span);
|
|
57
|
-
return { query$, otelContext };
|
|
58
|
-
}, [table, id, store, defaultValues, dbGraph]);
|
|
59
|
-
const query$Ref = useQueryRef(query$, otelContext);
|
|
60
|
-
const setState = React.useMemo(() => {
|
|
61
|
-
if (table.isSingleColumn) {
|
|
62
|
-
return (newValueOrFn) => {
|
|
63
|
-
const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(query$Ref.current) : newValueOrFn;
|
|
64
|
-
if (query$Ref.current === newValue)
|
|
65
|
-
return;
|
|
66
|
-
store.mutate(mutationForQueryInfo(query$.queryInfo, { value: newValue }));
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
const setState = // TODO: do we have a better type for the values that can go in SQLite?
|
|
71
|
-
mapValues(sqliteTableDef.columns, (column, columnName) => (newValueOrFn) => {
|
|
72
|
-
const newValue =
|
|
73
|
-
// @ts-expect-error TODO fix typing
|
|
74
|
-
typeof newValueOrFn === 'function' ? newValueOrFn(query$Ref.current[columnName]) : newValueOrFn;
|
|
75
|
-
// Don't update the state if it's the same as the value already seen in the component
|
|
76
|
-
// @ts-expect-error TODO fix typing
|
|
77
|
-
if (query$Ref.current[columnName] === newValue)
|
|
78
|
-
return;
|
|
79
|
-
store.mutate(mutationForQueryInfo(query$.queryInfo, { [columnName]: newValue }));
|
|
80
|
-
});
|
|
81
|
-
setState.setMany = (columnValuesOrFn) => {
|
|
82
|
-
const columnValues =
|
|
83
|
-
// @ts-expect-error TODO fix typing
|
|
84
|
-
typeof columnValuesOrFn === 'function' ? columnValuesOrFn(query$Ref.current) : columnValuesOrFn;
|
|
85
|
-
// TODO use hashing instead
|
|
86
|
-
// Don't update the state if it's the same as the value already seen in the component
|
|
87
|
-
if (
|
|
88
|
-
// @ts-expect-error TODO fix typing
|
|
89
|
-
Object.entries(columnValues).every(([columnName, value]) => query$Ref.current[columnName] === value)) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
store.mutate(mutationForQueryInfo(query$.queryInfo, columnValues));
|
|
93
|
-
};
|
|
94
|
-
return setState;
|
|
95
|
-
}
|
|
96
|
-
}, [query$.queryInfo, query$Ref, sqliteTableDef.columns, store, table.isSingleColumn]);
|
|
97
|
-
return [query$Ref.current, setState, query$];
|
|
98
|
-
};
|
|
99
|
-
/** Reference counted cache for `query$` and otel context */
|
|
100
|
-
class RCCache {
|
|
101
|
-
cache = new Map();
|
|
102
|
-
reverseCache = new Map();
|
|
103
|
-
get = (table, id) => {
|
|
104
|
-
const queries = this.cache.get(table);
|
|
105
|
-
if (queries === undefined)
|
|
106
|
-
return undefined;
|
|
107
|
-
return queries.get(id);
|
|
108
|
-
};
|
|
109
|
-
set = (table, id, query$, otelContext, span) => {
|
|
110
|
-
let queries = this.cache.get(table);
|
|
111
|
-
if (queries === undefined) {
|
|
112
|
-
queries = new Map();
|
|
113
|
-
this.cache.set(table, queries);
|
|
114
|
-
}
|
|
115
|
-
queries.set(id, { query$, otelContext, span, rc: 1 });
|
|
116
|
-
this.reverseCache.set(query$, [table, id]);
|
|
117
|
-
};
|
|
118
|
-
delete = (query$) => {
|
|
119
|
-
const item = this.reverseCache.get(query$);
|
|
120
|
-
if (item === undefined)
|
|
121
|
-
return;
|
|
122
|
-
const [table, id] = item;
|
|
123
|
-
const queries = this.cache.get(table);
|
|
124
|
-
if (queries === undefined)
|
|
125
|
-
return;
|
|
126
|
-
queries.delete(id);
|
|
127
|
-
if (queries.size === 0) {
|
|
128
|
-
this.cache.delete(table);
|
|
129
|
-
}
|
|
130
|
-
this.reverseCache.delete(query$);
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
const rcCache = new RCCache();
|
|
134
|
-
//# sourceMappingURL=useRowOld.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useRowOld.js","sourceRoot":"","sources":["../../src/react/useRowOld.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Like cleanup callback of `React.useEffect` but running as part of the render loop.
|
|
3
|
-
*
|
|
4
|
-
* NOTE: This hook should not be used with React strict mode.
|
|
5
|
-
*/
|
|
6
|
-
export declare const useCleanup: (cleanupCallback: () => void) => void;
|
|
7
|
-
//# sourceMappingURL=useCleanup.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCleanup.d.ts","sourceRoot":"","sources":["../../../src/react/utils/useCleanup.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,UAAU,oBAEJ,MAAM,IAAI,SAe5B,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
/**
|
|
3
|
-
* Like cleanup callback of `React.useEffect` but running as part of the render loop.
|
|
4
|
-
*
|
|
5
|
-
* NOTE: This hook should not be used with React strict mode.
|
|
6
|
-
*/
|
|
7
|
-
export const useCleanup = (
|
|
8
|
-
/** Needs to be a `React.useCallback` value */
|
|
9
|
-
cleanupCallback) => {
|
|
10
|
-
const callbackRef = React.useRef(cleanupCallback);
|
|
11
|
-
if (callbackRef.current !== cleanupCallback) {
|
|
12
|
-
callbackRef.current();
|
|
13
|
-
callbackRef.current = cleanupCallback;
|
|
14
|
-
}
|
|
15
|
-
React.useEffect(() => () => {
|
|
16
|
-
callbackRef.current();
|
|
17
|
-
}, []);
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=useCleanup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCleanup.js","sourceRoot":"","sources":["../../../src/react/utils/useCleanup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;AACxB,8CAA8C;AAC9C,eAA2B,EAC3B,EAAE;IACF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAEjD,IAAI,WAAW,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;QAC5C,WAAW,CAAC,OAAO,EAAE,CAAA;QACrB,WAAW,CAAC,OAAO,GAAG,eAAe,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,WAAW,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC,EACD,EAAE,CACH,CAAA;AACH,CAAC,CAAA"}
|