@livestore/react 0.3.0-dev.28 → 0.3.0-dev.30

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.
Files changed (64) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/LiveStoreContext.d.ts +10 -6
  3. package/dist/LiveStoreContext.d.ts.map +1 -1
  4. package/dist/LiveStoreContext.js +0 -14
  5. package/dist/LiveStoreContext.js.map +1 -1
  6. package/dist/LiveStoreProvider.d.ts +2 -2
  7. package/dist/LiveStoreProvider.d.ts.map +1 -1
  8. package/dist/LiveStoreProvider.js +5 -1
  9. package/dist/LiveStoreProvider.js.map +1 -1
  10. package/dist/LiveStoreProvider.test.js +6 -5
  11. package/dist/LiveStoreProvider.test.js.map +1 -1
  12. package/dist/__tests__/fixture.d.ts +115 -546
  13. package/dist/__tests__/fixture.d.ts.map +1 -1
  14. package/dist/__tests__/fixture.js +64 -22
  15. package/dist/__tests__/fixture.js.map +1 -1
  16. package/dist/mod.d.ts +4 -4
  17. package/dist/mod.d.ts.map +1 -1
  18. package/dist/mod.js +4 -4
  19. package/dist/mod.js.map +1 -1
  20. package/dist/useClientDocument.d.ts +61 -0
  21. package/dist/useClientDocument.d.ts.map +1 -0
  22. package/dist/useClientDocument.js +79 -0
  23. package/dist/useClientDocument.js.map +1 -0
  24. package/dist/useClientDocument.test.d.ts +2 -0
  25. package/dist/useClientDocument.test.d.ts.map +1 -0
  26. package/dist/{useRow.test.js → useClientDocument.test.js} +44 -48
  27. package/dist/useClientDocument.test.js.map +1 -0
  28. package/dist/useQuery.d.ts +1 -3
  29. package/dist/useQuery.d.ts.map +1 -1
  30. package/dist/useQuery.js +6 -3
  31. package/dist/useQuery.js.map +1 -1
  32. package/dist/useQuery.test.js +16 -17
  33. package/dist/useQuery.test.js.map +1 -1
  34. package/dist/useStore.d.ts +9 -0
  35. package/dist/useStore.d.ts.map +1 -0
  36. package/dist/useStore.js +28 -0
  37. package/dist/useStore.js.map +1 -0
  38. package/package.json +11 -11
  39. package/src/LiveStoreContext.ts +10 -19
  40. package/src/LiveStoreProvider.test.tsx +6 -5
  41. package/src/LiveStoreProvider.tsx +7 -4
  42. package/src/__snapshots__/{useRow.test.tsx.snap → useClientDocument.test.tsx.snap} +62 -46
  43. package/src/__snapshots__/useQuery.test.tsx.snap +8 -8
  44. package/src/__tests__/fixture.tsx +69 -39
  45. package/src/mod.ts +5 -5
  46. package/src/{useRow.test.tsx → useClientDocument.test.tsx} +51 -55
  47. package/src/useClientDocument.ts +157 -0
  48. package/src/useQuery.test.tsx +18 -19
  49. package/src/useQuery.ts +9 -8
  50. package/src/useStore.ts +36 -0
  51. package/tmp/pack.tgz +0 -0
  52. package/dist/useAtom.d.ts +0 -8
  53. package/dist/useAtom.d.ts.map +0 -1
  54. package/dist/useAtom.js +0 -42
  55. package/dist/useAtom.js.map +0 -1
  56. package/dist/useRow.d.ts +0 -64
  57. package/dist/useRow.d.ts.map +0 -1
  58. package/dist/useRow.js +0 -108
  59. package/dist/useRow.js.map +0 -1
  60. package/dist/useRow.test.d.ts +0 -2
  61. package/dist/useRow.test.d.ts.map +0 -1
  62. package/dist/useRow.test.js.map +0 -1
  63. package/src/useAtom.ts +0 -66
  64. package/src/useRow.ts +0 -210
package/dist/useAtom.d.ts DELETED
@@ -1,8 +0,0 @@
1
- import type { QueryInfo } from '@livestore/common';
2
- import type { Store } from '@livestore/livestore';
3
- import type { LiveQueries } from '@livestore/livestore/internal';
4
- import type { Dispatch, SetStateAction } from './useRow.js';
5
- export declare const useAtom: <TQuery extends LiveQueries.LiveQueryDef<any, QueryInfo.Row | QueryInfo.Col>>(queryDef: TQuery, options?: {
6
- store?: Store;
7
- }) => [value: LiveQueries.GetResult<TQuery>, setValue: Dispatch<SetStateAction<Partial<LiveQueries.GetResult<TQuery>>>>];
8
- //# sourceMappingURL=useAtom.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAtom.d.ts","sourceRoot":"","sources":["../src/useAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAMhE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE3D,eAAO,MAAM,OAAO,GAElB,MAAM,SAAS,WAAW,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,EAE3E,UAAU,MAAM,EAChB,UAAU;IACR,KAAK,CAAC,EAAE,KAAK,CAAA;CACd,KACA,CACD,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,EACpC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CA4C3E,CAAA"}
package/dist/useAtom.js DELETED
@@ -1,42 +0,0 @@
1
- import { shouldNeverHappen } from '@livestore/utils';
2
- import React from 'react';
3
- import { useStore } from './LiveStoreContext.js';
4
- import { useQueryRef } from './useQuery.js';
5
- export const useAtom = (queryDef, options) => {
6
- const queryRef = useQueryRef(queryDef, { store: options?.store });
7
- const query$ = queryRef.queryRcRef.value;
8
- // @ts-expect-error runtime check
9
- if (query$.queryInfo._tag === 'None') {
10
- shouldNeverHappen(`Can't useAtom with a query that has no queryInfo`, queryDef);
11
- }
12
- const { store } = useStore();
13
- // TODO make API equivalent to useRow
14
- const setValue = React.useMemo(() => (newValueOrFn) => {
15
- const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current) : newValueOrFn;
16
- const table = query$.queryInfo.table;
17
- if (query$.queryInfo._tag === 'Row') {
18
- if (table.options.isSingleton && table.options.isSingleColumn) {
19
- store.commit(table.update(newValue));
20
- }
21
- else if (table.options.isSingleColumn) {
22
- store.commit(table.update({ where: { id: query$.queryInfo.id }, values: { value: newValue } }));
23
- }
24
- else {
25
- store.commit(table.update({ where: { id: query$.queryInfo.id }, values: newValue }));
26
- }
27
- }
28
- else {
29
- if (table.options.isSingleton && table.options.isSingleColumn) {
30
- store.commit(table.update({ [query$.queryInfo.column]: newValue }));
31
- }
32
- else {
33
- store.commit(table.update({
34
- where: { id: query$.queryInfo.id },
35
- values: { [query$.queryInfo.column]: newValue },
36
- }));
37
- }
38
- }
39
- }, [query$.queryInfo, queryRef.valueRef, store]);
40
- return [queryRef.valueRef.current, setValue];
41
- };
42
- //# sourceMappingURL=useAtom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAtom.js","sourceRoot":"","sources":["../src/useAtom.ts"],"names":[],"mappings":"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"}
package/dist/useRow.d.ts DELETED
@@ -1,64 +0,0 @@
1
- import type { QueryInfo, RowQuery } from '@livestore/common';
2
- import { SessionIdSymbol } from '@livestore/common';
3
- import { DbSchema } from '@livestore/common/schema';
4
- import type { LiveQuery, Store } from '@livestore/livestore';
5
- export type UseRowResult<TTableDef extends DbSchema.TableDefBase> = [
6
- row: RowQuery.Result<TTableDef>,
7
- setRow: StateSetters<TTableDef>,
8
- query$: LiveQuery<RowQuery.Result<TTableDef>, QueryInfo>
9
- ];
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
- * `useRow` only works with for tables with client-only derived mutations,
18
- * i.e. requires the following table options to be set:
19
- * ```ts
20
- * const myTable = DbSchema.table('myTable', {
21
- * // fields ...
22
- * }, { deriveMutations: { clientOnly: true } })
23
- * ```
24
- *
25
- * If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
26
- */
27
- export declare const useRow: {
28
- <TTableDef extends DbSchema.TableDef<DbSchema.DefaultSqliteTableDef, DbSchema.TableOptions & {
29
- isSingleton: true;
30
- deriveMutations: {
31
- enabled: true;
32
- clientOnly: true;
33
- };
34
- }>>(table: TTableDef, options?: {
35
- store?: Store;
36
- }): UseRowResult<TTableDef>;
37
- <TTableDef extends DbSchema.TableDef<DbSchema.DefaultSqliteTableDef, DbSchema.TableOptions & {
38
- isSingleton: false;
39
- requiredInsertColumnNames: 'id';
40
- deriveMutations: {
41
- enabled: true;
42
- clientOnly: true;
43
- };
44
- }>>(table: TTableDef, id: string | SessionIdSymbol | number, options?: Partial<RowQuery.RequiredColumnsOptions<TTableDef>> & {
45
- store?: Store;
46
- }): UseRowResult<TTableDef>;
47
- <TTableDef extends DbSchema.TableDef<DbSchema.DefaultSqliteTableDef, DbSchema.TableOptions & {
48
- isSingleton: false;
49
- deriveMutations: {
50
- enabled: true;
51
- clientOnly: true;
52
- };
53
- }>>(table: TTableDef, id: string | SessionIdSymbol | number, options: RowQuery.RequiredColumnsOptions<TTableDef> & {
54
- store?: Store;
55
- }): UseRowResult<TTableDef>;
56
- };
57
- export type Dispatch<A> = (action: A) => void;
58
- export type SetStateAction<S> = S | ((previousValue: S) => S);
59
- export type StateSetters<TTableDef extends DbSchema.TableDefBase> = TTableDef['options']['isSingleColumn'] extends true ? Dispatch<SetStateAction<RowQuery.Result<TTableDef>>> : {
60
- [K in keyof RowQuery.Result<TTableDef>]: Dispatch<SetStateAction<RowQuery.Result<TTableDef>[K]>>;
61
- } & {
62
- setMany: Dispatch<SetStateAction<Partial<RowQuery.Result<TTableDef>>>>;
63
- };
64
- //# sourceMappingURL=useRow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRow.d.ts","sourceRoot":"","sources":["../src/useRow.ts"],"names":[],"mappings":"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"}
package/dist/useRow.js DELETED
@@ -1,108 +0,0 @@
1
- import { SessionIdSymbol } from '@livestore/common';
2
- import { DbSchema } from '@livestore/common/schema';
3
- import { queryDb } from '@livestore/livestore';
4
- import { shouldNeverHappen } from '@livestore/utils';
5
- import { ReadonlyRecord } from '@livestore/utils/effect';
6
- import React from 'react';
7
- import { useStore } from './LiveStoreContext.js';
8
- import { useQueryRef } from './useQuery.js';
9
- /**
10
- * Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
11
- *
12
- * - `row` is the current value of the row (fully decoded according to the table schema)
13
- * - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
14
- * - `query$` is a `LiveQuery` that e.g. can be used to subscribe to changes to the row
15
- *
16
- * `useRow` only works with for tables with client-only derived mutations,
17
- * i.e. requires the following table options to be set:
18
- * ```ts
19
- * const myTable = DbSchema.table('myTable', {
20
- * // fields ...
21
- * }, { deriveMutations: { clientOnly: true } })
22
- * ```
23
- *
24
- * If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
25
- */
26
- export const useRow = (table, idOrOptions, options_) => {
27
- const sqliteTableDef = table.sqliteDef;
28
- const id = typeof idOrOptions === 'string' || idOrOptions === SessionIdSymbol || typeof idOrOptions === 'number'
29
- ? idOrOptions
30
- : undefined;
31
- const options = typeof idOrOptions === 'string' || idOrOptions === SessionIdSymbol || typeof idOrOptions === 'number'
32
- ? options_
33
- : idOrOptions;
34
- const { insertValues } = options ?? {};
35
- React.useMemo(() => validateTableOptions(table), [table]);
36
- const tableName = table.sqliteDef.name;
37
- const { store } = useStore({ store: options?.store });
38
- if (store.schema.tables.has(table.sqliteDef.name) === false &&
39
- table.sqliteDef.name.startsWith('__livestore') === false) {
40
- shouldNeverHappen(`Table "${table.sqliteDef.name}" not found in schema`);
41
- }
42
- // console.debug('useRow', tableName, id)
43
- const idVal = id === SessionIdSymbol ? 'session' : id;
44
- const rowQuery = table.query.row;
45
- const queryDef = React.useMemo(() => DbSchema.tableIsSingleton(table)
46
- ? queryDb(rowQuery(), {})
47
- : queryDb(rowQuery(id, { insertValues: insertValues }), { deps: idVal }), [id, insertValues, rowQuery, table, idVal]);
48
- const queryRef = useQueryRef(queryDef, {
49
- otelSpanName: `LiveStore:useRow:${tableName}${idVal === undefined ? '' : `:${idVal}`}`,
50
- store: options?.store,
51
- });
52
- const setState = React.useMemo(() => {
53
- if (table.options.isSingleColumn) {
54
- return (newValueOrFn) => {
55
- const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current) : newValueOrFn;
56
- if (queryRef.valueRef.current === newValue)
57
- return;
58
- // NOTE we need to account for the short-hand syntax for single-column+singleton tables
59
- if (table.options.isSingleton) {
60
- store.commit(table.update(newValue));
61
- }
62
- else {
63
- store.commit(table.update({ where: { id }, values: { value: newValue } }));
64
- }
65
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, { value: newValue }))
66
- };
67
- }
68
- else {
69
- const setState = // TODO: do we have a better type for the values that can go in SQLite?
70
- ReadonlyRecord.map(sqliteTableDef.columns, (column, columnName) => (newValueOrFn) => {
71
- const newValue =
72
- // @ts-expect-error TODO fix typing
73
- typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current[columnName]) : newValueOrFn;
74
- // Don't update the state if it's the same as the value already seen in the component
75
- // @ts-expect-error TODO fix typing
76
- if (queryRef.valueRef.current[columnName] === newValue)
77
- return;
78
- store.commit(table.update({ where: { id: id ?? 'singleton' }, values: { [columnName]: newValue } }));
79
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, { [columnName]: newValue }))
80
- });
81
- setState.setMany = (columnValuesOrFn) => {
82
- const columnValues =
83
- // @ts-expect-error TODO fix typing
84
- typeof columnValuesOrFn === 'function' ? columnValuesOrFn(queryRef.valueRef.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]) => queryRef.valueRef.current[columnName] === value)) {
90
- return;
91
- }
92
- store.commit(table.update({ where: { id: id ?? 'singleton' }, values: columnValues }));
93
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, columnValues))
94
- };
95
- return setState;
96
- }
97
- }, [id, queryRef.valueRef, sqliteTableDef.columns, store, table]);
98
- return [queryRef.valueRef.current, setState, queryRef.queryRcRef.value];
99
- };
100
- const validateTableOptions = (table) => {
101
- if (table.options.deriveMutations.clientOnly === false) {
102
- return shouldNeverHappen(`useRow called on table "${table.sqliteDef.name}" which does not have 'deriveMutations: { clientOnly: true }' set`);
103
- }
104
- if (table.options.deriveMutations.enabled === false) {
105
- return shouldNeverHappen(`useRow called on table "${table.sqliteDef.name}" which does not have 'deriveMutations: { clientOnly: true }' set`);
106
- }
107
- };
108
- //# sourceMappingURL=useRow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRow.js","sourceRoot":"","sources":["../src/useRow.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useRow.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRow.test.d.ts","sourceRoot":"","sources":["../src/useRow.test.tsx"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useRow.test.js","sourceRoot":"","sources":["../src/useRow.test.tsx"],"names":[],"mappings":"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"}
package/src/useAtom.ts DELETED
@@ -1,66 +0,0 @@
1
- import type { DerivedMutationHelperFns, QueryInfo } from '@livestore/common'
2
- import type { DbSchema, SqliteDsl } from '@livestore/common/schema'
3
- import type { Store } from '@livestore/livestore'
4
- import type { LiveQueries } from '@livestore/livestore/internal'
5
- import { shouldNeverHappen } from '@livestore/utils'
6
- import React from 'react'
7
-
8
- import { useStore } from './LiveStoreContext.js'
9
- import { useQueryRef } from './useQuery.js'
10
- import type { Dispatch, SetStateAction } from './useRow.js'
11
-
12
- export const useAtom = <
13
- // TODO also support colJsonValue
14
- TQuery extends LiveQueries.LiveQueryDef<any, QueryInfo.Row | QueryInfo.Col>,
15
- >(
16
- queryDef: TQuery,
17
- options?: {
18
- store?: Store
19
- },
20
- ): [
21
- value: LiveQueries.GetResult<TQuery>,
22
- setValue: Dispatch<SetStateAction<Partial<LiveQueries.GetResult<TQuery>>>>,
23
- ] => {
24
- const queryRef = useQueryRef(queryDef, { store: options?.store })
25
- const query$ = queryRef.queryRcRef.value
26
-
27
- // @ts-expect-error runtime check
28
- if (query$.queryInfo._tag === 'None') {
29
- shouldNeverHappen(`Can't useAtom with a query that has no queryInfo`, queryDef)
30
- }
31
-
32
- const { store } = useStore()
33
-
34
- // TODO make API equivalent to useRow
35
- const setValue = React.useMemo<Dispatch<SetStateAction<Partial<LiveQueries.GetResult<TQuery>>>>>(
36
- () => (newValueOrFn: any) => {
37
- const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current) : newValueOrFn
38
- const table = query$.queryInfo.table as DbSchema.TableDef &
39
- DerivedMutationHelperFns<SqliteDsl.Columns, DbSchema.TableOptions>
40
-
41
- if (query$.queryInfo._tag === 'Row') {
42
- if (table.options.isSingleton && table.options.isSingleColumn) {
43
- store.commit(table.update(newValue))
44
- } else if (table.options.isSingleColumn) {
45
- store.commit(table.update({ where: { id: query$.queryInfo.id }, values: { value: newValue } }))
46
- } else {
47
- store.commit(table.update({ where: { id: query$.queryInfo.id }, values: newValue }))
48
- }
49
- } else {
50
- if (table.options.isSingleton && table.options.isSingleColumn) {
51
- store.commit(table.update({ [query$.queryInfo.column]: newValue }))
52
- } else {
53
- store.commit(
54
- table.update({
55
- where: { id: query$.queryInfo.id },
56
- values: { [query$.queryInfo.column]: newValue },
57
- }),
58
- )
59
- }
60
- }
61
- },
62
- [query$.queryInfo, queryRef.valueRef, store],
63
- )
64
-
65
- return [queryRef.valueRef.current, setValue]
66
- }
package/src/useRow.ts DELETED
@@ -1,210 +0,0 @@
1
- import type { QueryInfo, RowQuery } from '@livestore/common'
2
- import { SessionIdSymbol } from '@livestore/common'
3
- import type { SqliteDsl } from '@livestore/common/schema'
4
- import { DbSchema } from '@livestore/common/schema'
5
- import type { LiveQuery, LiveQueryDef, Store } from '@livestore/livestore'
6
- import { queryDb } from '@livestore/livestore'
7
- import { shouldNeverHappen } from '@livestore/utils'
8
- import { ReadonlyRecord } from '@livestore/utils/effect'
9
- import React from 'react'
10
-
11
- import { useStore } from './LiveStoreContext.js'
12
- import { useQueryRef } from './useQuery.js'
13
-
14
- export type UseRowResult<TTableDef extends DbSchema.TableDefBase> = [
15
- row: RowQuery.Result<TTableDef>,
16
- setRow: StateSetters<TTableDef>,
17
- query$: LiveQuery<RowQuery.Result<TTableDef>, QueryInfo>,
18
- ]
19
-
20
- /**
21
- * Similar to `React.useState` but returns a tuple of `[row, setRow, query$]` for a given table where ...
22
- *
23
- * - `row` is the current value of the row (fully decoded according to the table schema)
24
- * - `setRow` is a function that can be used to update the row (values will be encoded according to the table schema)
25
- * - `query$` is a `LiveQuery` that e.g. can be used to subscribe to changes to the row
26
- *
27
- * `useRow` only works with for tables with client-only derived mutations,
28
- * i.e. requires the following table options to be set:
29
- * ```ts
30
- * const myTable = DbSchema.table('myTable', {
31
- * // fields ...
32
- * }, { deriveMutations: { clientOnly: true } })
33
- * ```
34
- *
35
- * If the table is a singleton table, `useRow` can be called without an `id` argument. Otherwise, the `id` argument is required.
36
- */
37
- export const useRow: {
38
- // isSingleton: true
39
- <
40
- TTableDef extends DbSchema.TableDef<
41
- DbSchema.DefaultSqliteTableDef,
42
- DbSchema.TableOptions & { isSingleton: true; deriveMutations: { enabled: true; clientOnly: true } }
43
- >,
44
- >(
45
- table: TTableDef,
46
- options?: { store?: Store },
47
- ): UseRowResult<TTableDef>
48
-
49
- // isSingleton: false with requiredInsertColumnNames: 'id'
50
- <
51
- TTableDef extends DbSchema.TableDef<
52
- DbSchema.DefaultSqliteTableDef,
53
- DbSchema.TableOptions & {
54
- isSingleton: false
55
- requiredInsertColumnNames: 'id'
56
- deriveMutations: { enabled: true; clientOnly: true }
57
- }
58
- >,
59
- >(
60
- table: TTableDef,
61
- // TODO adjust so it works with arbitrary primary keys or unique constraints
62
- id: string | SessionIdSymbol | number,
63
- options?: Partial<RowQuery.RequiredColumnsOptions<TTableDef>> & { store?: Store },
64
- ): UseRowResult<TTableDef>
65
-
66
- // isSingleton: false
67
- <
68
- TTableDef extends DbSchema.TableDef<
69
- DbSchema.DefaultSqliteTableDef,
70
- DbSchema.TableOptions & { isSingleton: false; deriveMutations: { enabled: true; clientOnly: true } }
71
- >,
72
- >(
73
- table: TTableDef,
74
- // TODO adjust so it works with arbitrary primary keys or unique constraints
75
- id: string | SessionIdSymbol | number,
76
- options: RowQuery.RequiredColumnsOptions<TTableDef> & { store?: Store },
77
- ): UseRowResult<TTableDef>
78
- } = <
79
- TTableDef extends DbSchema.TableDef<
80
- DbSchema.DefaultSqliteTableDefConstrained,
81
- DbSchema.TableOptions & { deriveMutations: { enabled: true; clientOnly: true } }
82
- >,
83
- >(
84
- table: TTableDef,
85
- idOrOptions?: string | SessionIdSymbol | number | { store?: Store },
86
- options_?: Partial<RowQuery.RequiredColumnsOptions<TTableDef>> & { store?: Store },
87
- ): UseRowResult<TTableDef> => {
88
- const sqliteTableDef = table.sqliteDef
89
- const id =
90
- typeof idOrOptions === 'string' || idOrOptions === SessionIdSymbol || typeof idOrOptions === 'number'
91
- ? idOrOptions
92
- : undefined
93
- const options: (Partial<RowQuery.RequiredColumnsOptions<TTableDef>> & { store?: Store }) | undefined =
94
- typeof idOrOptions === 'string' || idOrOptions === SessionIdSymbol || typeof idOrOptions === 'number'
95
- ? options_
96
- : idOrOptions
97
- const { insertValues } = options ?? {}
98
-
99
- type TComponentState = SqliteDsl.FromColumns.RowDecoded<TTableDef['sqliteDef']['columns']>
100
-
101
- React.useMemo(() => validateTableOptions(table), [table])
102
-
103
- const tableName = table.sqliteDef.name
104
-
105
- const { store } = useStore({ store: options?.store })
106
-
107
- if (
108
- store.schema.tables.has(table.sqliteDef.name) === false &&
109
- table.sqliteDef.name.startsWith('__livestore') === false
110
- ) {
111
- shouldNeverHappen(`Table "${table.sqliteDef.name}" not found in schema`)
112
- }
113
-
114
- // console.debug('useRow', tableName, id)
115
-
116
- const idVal = id === SessionIdSymbol ? 'session' : id
117
- const rowQuery = table.query.row as any
118
-
119
- type QueryDef = LiveQueryDef<RowQuery.Result<TTableDef>, QueryInfo.Row>
120
- const queryDef: QueryDef = React.useMemo(
121
- () =>
122
- DbSchema.tableIsSingleton(table)
123
- ? queryDb(rowQuery(), {})
124
- : queryDb(rowQuery(id!, { insertValues: insertValues! }), { deps: idVal! }),
125
- [id, insertValues, rowQuery, table, idVal],
126
- )
127
-
128
- const queryRef = useQueryRef(queryDef, {
129
- otelSpanName: `LiveStore:useRow:${tableName}${idVal === undefined ? '' : `:${idVal}`}`,
130
- store: options?.store,
131
- })
132
-
133
- const setState = React.useMemo<StateSetters<TTableDef>>(() => {
134
- if (table.options.isSingleColumn) {
135
- return (newValueOrFn: RowQuery.Result<TTableDef>) => {
136
- const newValue = typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current) : newValueOrFn
137
- if (queryRef.valueRef.current === newValue) return
138
-
139
- // NOTE we need to account for the short-hand syntax for single-column+singleton tables
140
- if (table.options.isSingleton) {
141
- store.commit(table.update(newValue))
142
- } else {
143
- store.commit(table.update({ where: { id }, values: { value: newValue } }))
144
- }
145
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, { value: newValue }))
146
- }
147
- } else {
148
- const setState = // TODO: do we have a better type for the values that can go in SQLite?
149
- ReadonlyRecord.map(sqliteTableDef.columns, (column, columnName) => (newValueOrFn: any) => {
150
- const newValue =
151
- // @ts-expect-error TODO fix typing
152
- typeof newValueOrFn === 'function' ? newValueOrFn(queryRef.valueRef.current[columnName]) : newValueOrFn
153
-
154
- // Don't update the state if it's the same as the value already seen in the component
155
- // @ts-expect-error TODO fix typing
156
- if (queryRef.valueRef.current[columnName] === newValue) return
157
-
158
- store.commit(table.update({ where: { id: id ?? 'singleton' }, values: { [columnName]: newValue } }))
159
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, { [columnName]: newValue }))
160
- })
161
-
162
- setState.setMany = (columnValuesOrFn: Partial<TComponentState>) => {
163
- const columnValues =
164
- // @ts-expect-error TODO fix typing
165
- typeof columnValuesOrFn === 'function' ? columnValuesOrFn(queryRef.valueRef.current) : columnValuesOrFn
166
-
167
- // TODO use hashing instead
168
- // Don't update the state if it's the same as the value already seen in the component
169
- if (
170
- // @ts-expect-error TODO fix typing
171
- Object.entries(columnValues).every(([columnName, value]) => queryRef.valueRef.current[columnName] === value)
172
- ) {
173
- return
174
- }
175
-
176
- store.commit(table.update({ where: { id: id ?? 'singleton' }, values: columnValues }))
177
- // store.commit(updateMutationForQueryInfo(query$.queryInfo!, columnValues))
178
- }
179
-
180
- return setState as any
181
- }
182
- }, [id, queryRef.valueRef, sqliteTableDef.columns, store, table])
183
-
184
- return [queryRef.valueRef.current, setState, queryRef.queryRcRef.value]
185
- }
186
-
187
- export type Dispatch<A> = (action: A) => void
188
- export type SetStateAction<S> = S | ((previousValue: S) => S)
189
-
190
- export type StateSetters<TTableDef extends DbSchema.TableDefBase> = TTableDef['options']['isSingleColumn'] extends true
191
- ? Dispatch<SetStateAction<RowQuery.Result<TTableDef>>>
192
- : {
193
- [K in keyof RowQuery.Result<TTableDef>]: Dispatch<SetStateAction<RowQuery.Result<TTableDef>[K]>>
194
- } & {
195
- setMany: Dispatch<SetStateAction<Partial<RowQuery.Result<TTableDef>>>>
196
- }
197
-
198
- const validateTableOptions = (table: DbSchema.TableDef<any, any>) => {
199
- if (table.options.deriveMutations.clientOnly === false) {
200
- return shouldNeverHappen(
201
- `useRow called on table "${table.sqliteDef.name}" which does not have 'deriveMutations: { clientOnly: true }' set`,
202
- )
203
- }
204
-
205
- if (table.options.deriveMutations.enabled === false) {
206
- return shouldNeverHappen(
207
- `useRow called on table "${table.sqliteDef.name}" which does not have 'deriveMutations: { clientOnly: true }' set`,
208
- )
209
- }
210
- }