entity-repository 0.1.1 → 0.1.2
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/react.d.ts +1 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +10 -8
- package/package.json +1 -1
package/dist/react.d.ts
CHANGED
|
@@ -11,6 +11,6 @@ export declare function createRepositoryContext<Definitions extends EntityDefini
|
|
|
11
11
|
useRepository: () => Repository<Definitions, Config>;
|
|
12
12
|
useRepositoryQuery: <Table extends keyof Definitions>(table: Table, id: EntityIdTuple<Definitions, Config, Table>, fetcher: (id: EntityIdTuple<Definitions, Config, Table>) => Promise<Definitions[Table]>) => RepositoryQuery<Definitions[Table]>;
|
|
13
13
|
useRepositoryListQuery: <Table extends keyof Definitions, Param>(table: Table, param: Param, options: ListQueryOptions<Definitions[Table]>, fetcher: (param: Param) => Promise<Definitions[Table][]>) => ListQueryState<Definitions[Table]>;
|
|
14
|
-
useSubscribedState: <Value>(observable: Observable<Value>,
|
|
14
|
+
useSubscribedState: <Value>(observable: Observable<Value>, getSnapshot: () => Value) => Value;
|
|
15
15
|
};
|
|
16
16
|
//# sourceMappingURL=react.d.ts.map
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,SAAS,EAA6E,MAAM,OAAO,CAAC;AAE5H,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,wBAAgB,uBAAuB,CACrC,WAAW,SAAS,iBAAiB,EACrC,MAAM,SAAS,YAAY,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC;oDAOjE;QACD,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC5C,QAAQ,EAAE,SAAS,CAAC;KACrB;;yBAyC2B,KAAK,SAAS,MAAM,WAAW,SAClD,KAAK,MACR,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,WACpC,CAAC,EAAE,EAAE,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,KACtF,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;6BAiBN,KAAK,SAAS,MAAM,WAAW,EAAE,KAAK,SAC7D,KAAK,SACL,KAAK,WACH,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WACpC,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,KACvD,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;yBAnDT,KAAK,cAAc,UAAU,CAAC,KAAK,CAAC,eAAe,MAAM,KAAK;EAgF3F"}
|
package/dist/react.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext, useEffect, useMemo,
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
3
3
|
import { combineLatest, map } from "rxjs";
|
|
4
4
|
export function createRepositoryContext() {
|
|
5
5
|
const RepositoryReactContext = createContext(null);
|
|
@@ -13,15 +13,17 @@ export function createRepositoryContext() {
|
|
|
13
13
|
}
|
|
14
14
|
return context;
|
|
15
15
|
}
|
|
16
|
-
function useSubscribedState(observable,
|
|
17
|
-
const
|
|
18
|
-
|
|
16
|
+
function useSubscribedState(observable, getSnapshot) {
|
|
17
|
+
const snapshotRef = useRef(getSnapshot());
|
|
18
|
+
const subscribe = useCallback((callback) => {
|
|
19
19
|
const subscription = observable.subscribe((value) => {
|
|
20
|
-
|
|
20
|
+
snapshotRef.current = value;
|
|
21
|
+
callback();
|
|
21
22
|
});
|
|
22
23
|
return () => subscription.unsubscribe();
|
|
23
24
|
}, [observable]);
|
|
24
|
-
|
|
25
|
+
const getSnapshotStable = useCallback(() => snapshotRef.current, []);
|
|
26
|
+
return useSyncExternalStore(subscribe, getSnapshotStable);
|
|
25
27
|
}
|
|
26
28
|
/**
|
|
27
29
|
* Subscribes to a single-record query keyed only by `id`.
|
|
@@ -33,7 +35,7 @@ export function createRepositoryContext() {
|
|
|
33
35
|
const repository = useRepository();
|
|
34
36
|
// eslint-disable-next-line react-hooks/exhaustive-deps -- table/fetcher intentionally ignored
|
|
35
37
|
const recordQuery = useMemo(() => repository.recordQuery(table, id, fetcher), [repository, JSON.stringify(id)]);
|
|
36
|
-
return useSubscribedState(recordQuery.$state, recordQuery.$state.value);
|
|
38
|
+
return useSubscribedState(recordQuery.$state, () => recordQuery.$state.value);
|
|
37
39
|
}
|
|
38
40
|
/**
|
|
39
41
|
* Subscribes to a list query keyed only by `param`.
|
|
@@ -49,7 +51,7 @@ export function createRepositoryContext() {
|
|
|
49
51
|
return () => listQuery.dispose();
|
|
50
52
|
}, [listQuery]);
|
|
51
53
|
const $state = useMemo(() => combineLatest([listQuery.$records, listQuery.$status]).pipe(map(([records, status]) => ({ records, ...status }))), [listQuery]);
|
|
52
|
-
return useSubscribedState($state, { records: listQuery.$records.value, ...listQuery.$status.value });
|
|
54
|
+
return useSubscribedState($state, () => ({ records: listQuery.$records.value, ...listQuery.$status.value }));
|
|
53
55
|
}
|
|
54
56
|
return {
|
|
55
57
|
RepositoryProvider,
|