@isograph/react 0.0.0-main-5c3c47b2 → 0.0.0-main-79f9cbbb

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/index.d.ts CHANGED
@@ -17,3 +17,4 @@ export { useLazyReference } from './react/useLazyReference';
17
17
  export { useRerenderOnChange } from './react/useRerenderOnChange';
18
18
  export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
19
19
  export { useSkipLimitPagination } from './loadable-hooks/useSkipLimitPagination';
20
+ export { useImperativeLoadableField } from './loadable-hooks/useImperativeLoadableField';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSkipLimitPagination = exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.wrapPromise = exports.wrapResolvedValue = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
3
+ exports.useImperativeLoadableField = exports.useSkipLimitPagination = exports.useClientSideDefer = exports.useRerenderOnChange = exports.useLazyReference = exports.useSubscribeToMultiple = exports.useReadAndSubscribe = exports.useResult = exports.FragmentReader = exports.useImperativeReference = exports.useIsographEnvironment = exports.IsographEnvironmentProvider = exports.stableIdForFragmentReference = exports.readButDoNotEvaluate = exports.assertIsEntrypoint = exports.defaultMissingFieldHandler = exports.createIsographStore = exports.createIsographEnvironment = exports.ROOT_ID = exports.makeNetworkRequest = exports.normalizeData = exports.subscribe = exports.wrapPromise = exports.wrapResolvedValue = exports.getPromiseState = exports.readPromise = exports.garbageCollectEnvironment = exports.unretainQuery = exports.retainQuery = void 0;
4
4
  var garbageCollection_1 = require("./core/garbageCollection");
5
5
  Object.defineProperty(exports, "retainQuery", { enumerable: true, get: function () { return garbageCollection_1.retainQuery; } });
6
6
  Object.defineProperty(exports, "unretainQuery", { enumerable: true, get: function () { return garbageCollection_1.unretainQuery; } });
@@ -46,3 +46,5 @@ var useClientSideDefer_1 = require("./loadable-hooks/useClientSideDefer");
46
46
  Object.defineProperty(exports, "useClientSideDefer", { enumerable: true, get: function () { return useClientSideDefer_1.useClientSideDefer; } });
47
47
  var useSkipLimitPagination_1 = require("./loadable-hooks/useSkipLimitPagination");
48
48
  Object.defineProperty(exports, "useSkipLimitPagination", { enumerable: true, get: function () { return useSkipLimitPagination_1.useSkipLimitPagination; } });
49
+ var useImperativeLoadableField_1 = require("./loadable-hooks/useImperativeLoadableField");
50
+ Object.defineProperty(exports, "useImperativeLoadableField", { enumerable: true, get: function () { return useImperativeLoadableField_1.useImperativeLoadableField; } });
@@ -0,0 +1,9 @@
1
+ import { FragmentReference } from '../core/FragmentReference';
2
+ import { UnassignedState } from '@isograph/react-disposable-state';
3
+ import { LoadableField } from '../core/reader';
4
+ type UseImperativeLoadableFieldReturn<TArgs, TResult> = {
5
+ fragmentReference: FragmentReference<any, TResult> | UnassignedState;
6
+ loadField: (args: TArgs) => void;
7
+ };
8
+ export declare function useImperativeLoadableField<TArgs, TResult>(loadableField: LoadableField<TArgs, TResult>): UseImperativeLoadableFieldReturn<TArgs, TResult>;
9
+ export {};
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useImperativeLoadableField = void 0;
4
+ const react_disposable_state_1 = require("@isograph/react-disposable-state");
5
+ function useImperativeLoadableField(loadableField) {
6
+ const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
7
+ return {
8
+ loadField: (args) => {
9
+ const [_id, loader] = loadableField(args);
10
+ setState(loader());
11
+ },
12
+ fragmentReference: state,
13
+ };
14
+ }
15
+ exports.useImperativeLoadableField = useImperativeLoadableField;
@@ -21,6 +21,8 @@ type UseSkipLimitReturnValue<TArgs, TItem> = {
21
21
  * This hook will suspend if any network request is in flight.
22
22
  *
23
23
  * Calling fetchMore before the hook mounts is a no-op.
24
+ *
25
+ * TODO subscribe to changes
24
26
  */
25
27
  export declare function useSkipLimitPagination<TArgs extends {
26
28
  skip: number | void | null;
@@ -26,6 +26,8 @@ function flatten(arr) {
26
26
  * This hook will suspend if any network request is in flight.
27
27
  *
28
28
  * Calling fetchMore before the hook mounts is a no-op.
29
+ *
30
+ * TODO subscribe to changes
29
31
  */
30
32
  function useSkipLimitPagination(loadableField) {
31
33
  const networkRequestOptions = {
@@ -6,6 +6,7 @@ const IsographEnvironmentProvider_1 = require("./IsographEnvironmentProvider");
6
6
  const IsographEnvironment_1 = require("../core/IsographEnvironment");
7
7
  const makeNetworkRequest_1 = require("../core/makeNetworkRequest");
8
8
  const PromiseWrapper_1 = require("../core/PromiseWrapper");
9
+ // TODO rename this to useImperativelyLoadedEntrypoint
9
10
  function useImperativeReference(entrypoint) {
10
11
  const { state, setState } = (0, react_disposable_state_1.useUpdatableDisposableState)();
11
12
  const environment = (0, IsographEnvironmentProvider_1.useIsographEnvironment)();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isograph/react",
3
- "version": "0.0.0-main-5c3c47b2",
3
+ "version": "0.0.0-main-79f9cbbb",
4
4
  "description": "Use Isograph with React",
5
5
  "homepage": "https://isograph.dev",
6
6
  "main": "dist/index.js",
@@ -17,9 +17,9 @@
17
17
  "tsc": "tsc"
18
18
  },
19
19
  "dependencies": {
20
- "@isograph/disposable-types": "0.0.0-main-5c3c47b2",
21
- "@isograph/react-disposable-state": "0.0.0-main-5c3c47b2",
22
- "@isograph/reference-counted-pointer": "0.0.0-main-5c3c47b2"
20
+ "@isograph/disposable-types": "0.0.0-main-79f9cbbb",
21
+ "@isograph/react-disposable-state": "0.0.0-main-79f9cbbb",
22
+ "@isograph/reference-counted-pointer": "0.0.0-main-79f9cbbb"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": "18.2.0"
package/src/index.ts CHANGED
@@ -82,3 +82,4 @@ export { useRerenderOnChange } from './react/useRerenderOnChange';
82
82
 
83
83
  export { useClientSideDefer } from './loadable-hooks/useClientSideDefer';
84
84
  export { useSkipLimitPagination } from './loadable-hooks/useSkipLimitPagination';
85
+ export { useImperativeLoadableField } from './loadable-hooks/useImperativeLoadableField';
@@ -0,0 +1,26 @@
1
+ import { FragmentReference } from '../core/FragmentReference';
2
+ import {
3
+ UnassignedState,
4
+ useUpdatableDisposableState,
5
+ } from '@isograph/react-disposable-state';
6
+ import { LoadableField } from '../core/reader';
7
+
8
+ type UseImperativeLoadableFieldReturn<TArgs, TResult> = {
9
+ fragmentReference: FragmentReference<any, TResult> | UnassignedState;
10
+ loadField: (args: TArgs) => void;
11
+ };
12
+
13
+ export function useImperativeLoadableField<TArgs, TResult>(
14
+ loadableField: LoadableField<TArgs, TResult>,
15
+ ): UseImperativeLoadableFieldReturn<TArgs, TResult> {
16
+ const { state, setState } =
17
+ useUpdatableDisposableState<FragmentReference<any, TResult>>();
18
+
19
+ return {
20
+ loadField: (args: TArgs) => {
21
+ const [_id, loader] = loadableField(args);
22
+ setState(loader());
23
+ },
24
+ fragmentReference: state,
25
+ };
26
+ }
@@ -60,6 +60,8 @@ function flatten<T>(arr: ReadonlyArray<ReadonlyArray<T>>): ReadonlyArray<T> {
60
60
  * This hook will suspend if any network request is in flight.
61
61
  *
62
62
  * Calling fetchMore before the hook mounts is a no-op.
63
+ *
64
+ * TODO subscribe to changes
63
65
  */
64
66
  export function useSkipLimitPagination<
65
67
  TArgs extends {
@@ -9,6 +9,8 @@ import { ROOT_ID } from '../core/IsographEnvironment';
9
9
  import { makeNetworkRequest } from '../core/makeNetworkRequest';
10
10
  import { wrapResolvedValue } from '../core/PromiseWrapper';
11
11
 
12
+ // TODO rename this to useImperativelyLoadedEntrypoint
13
+
12
14
  export function useImperativeReference<
13
15
  TReadFromStore extends Object,
14
16
  TClientFieldValue,