@isograph/react 0.0.0-main-3de26263 → 0.0.0-main-709dc2bb
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/.turbo/turbo-compile-libs.log +9 -2
- package/dist/_virtual/rolldown_runtime.js +25 -0
- package/dist/core/FragmentReference.d.mts +38 -0
- package/dist/core/FragmentReference.d.mts.map +1 -0
- package/dist/core/FragmentReference.d.ts +31 -29
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +7 -5
- package/dist/core/FragmentReference.mjs +10 -0
- package/dist/core/FragmentReference.mjs.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +89 -0
- package/dist/core/IsographEnvironment.d.mts.map +1 -0
- package/dist/core/IsographEnvironment.d.ts +76 -81
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +59 -82
- package/dist/core/IsographEnvironment.mjs +67 -0
- package/dist/core/IsographEnvironment.mjs.map +1 -0
- package/dist/core/PromiseWrapper.d.mts +36 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -0
- package/dist/core/PromiseWrapper.d.ts +26 -23
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +45 -43
- package/dist/core/PromiseWrapper.mjs +49 -0
- package/dist/core/PromiseWrapper.mjs.map +1 -0
- package/dist/core/areEqualWithDeepComparison.js +56 -93
- package/dist/core/areEqualWithDeepComparison.mjs +62 -0
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
- package/dist/core/brand.d.mts +19 -0
- package/dist/core/brand.d.mts.map +1 -0
- package/dist/core/brand.d.ts +6 -6
- package/dist/core/brand.d.ts.map +1 -1
- package/dist/core/cache.d.mts +20 -0
- package/dist/core/cache.d.mts.map +1 -0
- package/dist/core/cache.d.ts +18 -24
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +203 -306
- package/dist/core/cache.mjs +237 -0
- package/dist/core/cache.mjs.map +1 -0
- package/dist/core/check.d.mts +28 -0
- package/dist/core/check.d.mts.map +1 -0
- package/dist/core/check.d.ts +21 -19
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -122
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +9 -10
- package/dist/core/componentCache.mjs +12 -0
- package/dist/core/componentCache.mjs.map +1 -0
- package/dist/core/entrypoint.d.mts +99 -0
- package/dist/core/entrypoint.d.mts.map +1 -0
- package/dist/core/entrypoint.d.ts +83 -80
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/entrypoint.js +6 -5
- package/dist/core/entrypoint.mjs +8 -0
- package/dist/core/entrypoint.mjs.map +1 -0
- package/dist/core/garbageCollection.d.mts +18 -0
- package/dist/core/garbageCollection.d.mts.map +1 -0
- package/dist/core/garbageCollection.d.ts +15 -16
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +76 -120
- package/dist/core/garbageCollection.mjs +89 -0
- package/dist/core/garbageCollection.mjs.map +1 -0
- package/dist/core/getOrCreateCacheForArtifact.js +35 -38
- package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
- package/dist/core/logging.d.mts +95 -0
- package/dist/core/logging.d.mts.map +1 -0
- package/dist/core/logging.d.ts +66 -61
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +17 -18
- package/dist/core/logging.mjs +20 -0
- package/dist/core/logging.mjs.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts +13 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -0
- package/dist/core/makeNetworkRequest.d.ts +12 -10
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +180 -260
- package/dist/core/makeNetworkRequest.mjs +195 -0
- package/dist/core/makeNetworkRequest.mjs.map +1 -0
- package/dist/core/optimisticProxy.d.mts +43 -0
- package/dist/core/optimisticProxy.d.mts.map +1 -0
- package/dist/core/optimisticProxy.d.ts +37 -53
- package/dist/core/optimisticProxy.d.ts.map +1 -1
- package/dist/core/optimisticProxy.js +245 -353
- package/dist/core/optimisticProxy.mjs +268 -0
- package/dist/core/optimisticProxy.mjs.map +1 -0
- package/dist/core/read.d.mts +29 -0
- package/dist/core/read.d.mts.map +1 -0
- package/dist/core/read.d.ts +23 -29
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +435 -634
- package/dist/core/read.mjs +456 -0
- package/dist/core/read.mjs.map +1 -0
- package/dist/core/reader.d.mts +89 -0
- package/dist/core/reader.d.mts.map +1 -0
- package/dist/core/reader.d.ts +78 -79
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +115 -149
- package/dist/core/startUpdate.mjs +125 -0
- package/dist/core/startUpdate.mjs.map +1 -0
- package/dist/core/subscribe.d.mts +12 -0
- package/dist/core/subscribe.d.mts.map +1 -0
- package/dist/core/subscribe.d.ts +11 -7
- package/dist/core/subscribe.d.ts.map +1 -1
- package/dist/core/subscribe.js +67 -109
- package/dist/core/subscribe.mjs +79 -0
- package/dist/core/subscribe.mjs.map +1 -0
- package/dist/core/util.d.mts +27 -0
- package/dist/core/util.d.mts.map +1 -0
- package/dist/core/util.d.ts +21 -24
- package/dist/core/util.d.ts.map +1 -1
- package/dist/core/util.js +17 -23
- package/dist/core/util.mjs +21 -0
- package/dist/core/util.mjs.map +1 -0
- package/dist/core/writeData.d.mts +11 -0
- package/dist/core/writeData.d.mts.map +1 -0
- package/dist/core/writeData.d.ts +10 -6
- package/dist/core/writeData.d.ts.map +1 -1
- package/dist/core/writeData.js +39 -34
- package/dist/core/writeData.mjs +42 -0
- package/dist/core/writeData.mjs.map +1 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.d.ts +32 -32
- package/dist/index.js +70 -72
- package/dist/index.mjs +31 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -13
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +13 -44
- package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
- package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +26 -22
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -176
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
- package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
- package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +118 -164
- package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
- package/dist/react/FragmentReader.d.mts +18 -0
- package/dist/react/FragmentReader.d.mts.map +1 -0
- package/dist/react/FragmentReader.d.ts +16 -8
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +8 -7
- package/dist/react/FragmentReader.mjs +10 -0
- package/dist/react/FragmentReader.mjs.map +1 -0
- package/dist/react/FragmentRenderer.d.mts +20 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -0
- package/dist/react/FragmentRenderer.d.ts +18 -14
- package/dist/react/FragmentRenderer.d.ts.map +1 -1
- package/dist/react/FragmentRenderer.js +11 -33
- package/dist/react/FragmentRenderer.mjs +12 -0
- package/dist/react/FragmentRenderer.mjs.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/IsographEnvironmentProvider.js +15 -39
- package/dist/react/IsographEnvironmentProvider.mjs +17 -0
- package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts +21 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -0
- package/dist/react/LoadableFieldReader.d.ts +15 -13
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -47
- package/dist/react/LoadableFieldReader.mjs +14 -0
- package/dist/react/LoadableFieldReader.mjs.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts +22 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.ts +16 -14
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -70
- package/dist/react/LoadableFieldRenderer.mjs +14 -0
- package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +9 -0
- package/dist/react/createIsographEnvironment.d.mts.map +1 -0
- package/dist/react/createIsographEnvironment.d.ts +7 -3
- package/dist/react/createIsographEnvironment.d.ts.map +1 -1
- package/dist/react/createIsographEnvironment.js +8 -6
- package/dist/react/createIsographEnvironment.mjs +11 -0
- package/dist/react/createIsographEnvironment.mjs.map +1 -0
- package/dist/react/maybeUnwrapNetworkRequest.js +9 -12
- package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
- package/dist/react/useImperativeReference.d.mts +15 -0
- package/dist/react/useImperativeReference.d.mts.map +1 -0
- package/dist/react/useImperativeReference.d.ts +13 -11
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -30
- package/dist/react/useImperativeReference.mjs +35 -0
- package/dist/react/useImperativeReference.mjs.map +1 -0
- package/dist/react/useLazyReference.d.mts +13 -0
- package/dist/react/useLazyReference.d.mts.map +1 -0
- package/dist/react/useLazyReference.d.ts +11 -9
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +17 -40
- package/dist/react/useLazyReference.mjs +18 -0
- package/dist/react/useLazyReference.mjs.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +20 -0
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.ts +14 -11
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +54 -63
- package/dist/react/useReadAndSubscribe.mjs +59 -0
- package/dist/react/useReadAndSubscribe.mjs.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts +12 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -0
- package/dist/react/useRerenderOnChange.d.ts +10 -6
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useRerenderOnChange.js +16 -20
- package/dist/react/useRerenderOnChange.mjs +17 -0
- package/dist/react/useRerenderOnChange.mjs.map +1 -0
- package/dist/react/useResult.d.mts +8 -0
- package/dist/react/useResult.d.mts.map +1 -0
- package/dist/react/useResult.d.ts +7 -3
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +27 -30
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +16 -8
- package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
- package/dist/core/brand.js +0 -2
- package/dist/core/componentCache.d.ts +0 -5
- package/dist/core/componentCache.d.ts.map +0 -1
- package/dist/core/getOrCreateCacheForArtifact.d.ts +0 -8
- package/dist/core/getOrCreateCacheForArtifact.d.ts.map +0 -1
- package/dist/core/reader.js +0 -2
- package/dist/core/startUpdate.d.ts +0 -9
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/react/maybeUnwrapNetworkRequest.d.ts +0 -4
- package/dist/react/maybeUnwrapNetworkRequest.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useClientSideDefer.mjs","names":[],"sources":["../../src/loadable-hooks/useClientSideDefer.ts"],"sourcesContent":["import { useLazyDisposableState } from '@isograph/react-disposable-state';\nimport { getOrCreateItemInSuspenseCache } from '../core/cache';\nimport type { FetchOptions } from '../core/check';\nimport type {\n ExtractParameters,\n FragmentReference,\n} from '../core/FragmentReference';\nimport { type UnknownTReadFromStore } from '../core/FragmentReference';\nimport type { LoadableField } from '../core/reader';\nimport { useIsographEnvironment } from '../react/IsographEnvironmentProvider';\n\ntype ArgsWithoutProvidedArgs<\n TReadFromStore extends UnknownTReadFromStore,\n TProvidedArgs extends object,\n> = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;\n\nexport function useClientSideDefer<\n TReadFromStore extends UnknownTReadFromStore,\n TResult,\n TProvidedArgs extends object,\n>(\n loadableField: LoadableField<\n TReadFromStore,\n TResult,\n Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>\n >,\n ...maybeRequiredArgs: {} extends ArgsWithoutProvidedArgs<\n TReadFromStore,\n TProvidedArgs\n >\n ? [\n args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,\n fetchOptions?: FetchOptions<TResult, never>,\n ]\n : [\n args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>,\n fetchOptions?: FetchOptions<TResult, never>,\n ]\n): { fragmentReference: FragmentReference<TReadFromStore, TResult> } {\n const [args, fetchOptions] = maybeRequiredArgs;\n\n const [id, loader] = loadableField(args, fetchOptions ?? {});\n const environment = useIsographEnvironment();\n const cache = getOrCreateItemInSuspenseCache(environment, id, loader);\n\n const fragmentReference = useLazyDisposableState(cache).state;\n\n return { fragmentReference };\n}\n\n// @ts-ignore\nfunction tsTests() {\n let neverArgs!: LoadableField<\n {\n parameters: Record<string, never>;\n data: {};\n },\n unknown\n >;\n\n let optionalArgs!: LoadableField<\n {\n parameters: {\n foo?: string;\n };\n data: {};\n },\n unknown\n >;\n\n let requiredArgs!: LoadableField<\n {\n parameters: {\n foo: string;\n };\n data: {};\n },\n unknown\n >;\n\n useClientSideDefer(neverArgs);\n useClientSideDefer(neverArgs, {});\n useClientSideDefer(neverArgs, {\n // @ts-expect-error\n foo: 'bar',\n });\n\n useClientSideDefer(optionalArgs);\n useClientSideDefer(optionalArgs, {});\n useClientSideDefer(optionalArgs, {\n foo: 'bar',\n });\n useClientSideDefer(optionalArgs, {\n // @ts-expect-error\n foo: 12,\n });\n\n // @ts-expect-error\n useClientSideDefer(requiredArgs);\n // @ts-expect-error\n useClientSideDefer(requiredArgs, {});\n useClientSideDefer(requiredArgs, {\n foo: 'bar',\n });\n useClientSideDefer(requiredArgs, {\n // @ts-expect-error\n foo: 12,\n });\n}\n"],"mappings":";;;;;AAgBA,SAAgB,mBAKd,eAKA,GAAG,mBAYgE;CACnE,MAAM,CAAC,MAAM,gBAAgB;CAE7B,MAAM,CAAC,IAAI,UAAU,cAAc,MAAM,gBAAgB,EAAE,CAAC;AAM5D,QAAO,EAAE,mBAFiB,uBAFZ,+BADM,wBAAwB,EACc,IAAI,OAAO,CAEd,CAAC,OAE5B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FetchOptions } from "../core/check.mjs";
|
|
2
|
+
import { LoadableField } from "../core/reader.mjs";
|
|
3
|
+
import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/loadable-hooks/useConnectionSpecPagination.d.ts
|
|
6
|
+
type UsePaginationReturnValue<TReadFromStore extends UnknownTReadFromStore, TItem> = {
|
|
7
|
+
kind: 'Pending';
|
|
8
|
+
pendingFragment: FragmentReference<TReadFromStore, Connection<TItem>>;
|
|
9
|
+
results: ReadonlyArray<TItem>;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'HasMoreRecords';
|
|
12
|
+
fetchMore: (count: number, fetchOptions?: FetchOptions<Connection<TItem>, never>) => void;
|
|
13
|
+
results: ReadonlyArray<TItem>;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'NoMoreRecords';
|
|
16
|
+
results: ReadonlyArray<TItem>;
|
|
17
|
+
};
|
|
18
|
+
type PageInfo = {
|
|
19
|
+
readonly hasNextPage: boolean;
|
|
20
|
+
readonly endCursor: string | null;
|
|
21
|
+
};
|
|
22
|
+
type Connection<T> = {
|
|
23
|
+
readonly edges: ReadonlyArray<T> | null;
|
|
24
|
+
readonly pageInfo: PageInfo;
|
|
25
|
+
};
|
|
26
|
+
type UseConnectionSpecPaginationArgs = {
|
|
27
|
+
first: number;
|
|
28
|
+
after: string | null;
|
|
29
|
+
};
|
|
30
|
+
declare function useConnectionSpecPagination<TReadFromStore extends UnknownTReadFromStore, TItem>(loadableField: LoadableField<TReadFromStore, Connection<TItem>, UseConnectionSpecPaginationArgs>, initialState?: PageInfo): UsePaginationReturnValue<TReadFromStore, TItem>;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { Connection, PageInfo, UseConnectionSpecPaginationArgs, UsePaginationReturnValue, useConnectionSpecPagination };
|
|
33
|
+
//# sourceMappingURL=useConnectionSpecPagination.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConnectionSpecPagination.d.mts","names":[],"sources":["../../src/loadable-hooks/useConnectionSpecPagination.ts"],"sourcesContent":[],"mappings":";;;;;KAyBY,gDACa;;EADb,eAAA,EAMW,iBANa,CAMK,cANL,EAMqB,UANrB,CAMgC,KANhC,CAAA,CAAA;EACX,OAAA,EAMV,aANU,CAMI,KANJ,CAAA;CAKgB,GAAA;EAA2B,IAAA,EAAA,gBAAA;EAAX,SAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAOlC,YAPkC,CAOrB,UAPqB,CAOV,KAPU,CAAA,EAAA,KAAA,CAAA,EAAA,GAAA,IAAA;EAAlC,OAAA,EASR,aATQ,CASM,KATN,CAAA;CACM,GAAA;EAAd,IAAA,EAAA,eAAA;EAMgC,OAAA,EAMhC,aANgC,CAMlB,KANkB,CAAA;CAAX;AAAb,KA+BX,QAAA,GA/BW;EAEM,SAAA,WAAA,EAAA,OAAA;EAAd,SAAA,SAAA,EAAA,MAAA,GAAA,IAAA;CAIc;AAAd,KA8BH,UA9BG,CAAA,CAAA,CAAA,GAAA;EAAa,SAAA,KAAA,EA+BV,aA/BU,CA+BI,CA/BJ,CAAA,GAAA,IAAA;EAyBhB,SAAA,QAAQ,EAOC,QAPD;AAKpB,CAAA;AACgC,KASpB,+BAAA,GAToB;EAAd,KAAA,EAAA,MAAA;EACG,KAAA,EAAA,MAAA,GAAA,IAAA;CAAQ;AAQjB,iBAKI,2BAL2B,CAAA,uBAMlB,qBANkB,EAAA,KAAA,CAAA,CAAA,aAAA,EAS1B,aAT0B,CAUvC,cAVuC,EAWvC,UAXuC,CAW5B,KAX4B,CAAA,EAYvC,+BAZuC,CAAA,EAAA,YAAA,CAAA,EAc1B,QAd0B,CAAA,EAexC,wBAfwC,CAef,cAfe,EAeC,KAfD,CAAA"}
|
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { FetchOptions } from "../core/check.js";
|
|
2
|
+
import { LoadableField } from "../core/reader.js";
|
|
3
|
+
import { FragmentReference, UnknownTReadFromStore } from "../core/FragmentReference.js";
|
|
4
|
+
|
|
5
|
+
//#region src/loadable-hooks/useConnectionSpecPagination.d.ts
|
|
6
|
+
type UsePaginationReturnValue<TReadFromStore extends UnknownTReadFromStore, TItem> = {
|
|
7
|
+
kind: 'Pending';
|
|
8
|
+
pendingFragment: FragmentReference<TReadFromStore, Connection<TItem>>;
|
|
9
|
+
results: ReadonlyArray<TItem>;
|
|
8
10
|
} | {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
kind: 'HasMoreRecords';
|
|
12
|
+
fetchMore: (count: number, fetchOptions?: FetchOptions<Connection<TItem>, never>) => void;
|
|
13
|
+
results: ReadonlyArray<TItem>;
|
|
12
14
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
kind: 'NoMoreRecords';
|
|
16
|
+
results: ReadonlyArray<TItem>;
|
|
15
17
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
type PageInfo = {
|
|
19
|
+
readonly hasNextPage: boolean;
|
|
20
|
+
readonly endCursor: string | null;
|
|
19
21
|
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
type Connection<T> = {
|
|
23
|
+
readonly edges: ReadonlyArray<T> | null;
|
|
24
|
+
readonly pageInfo: PageInfo;
|
|
23
25
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
type UseConnectionSpecPaginationArgs = {
|
|
27
|
+
first: number;
|
|
28
|
+
after: string | null;
|
|
27
29
|
};
|
|
28
|
-
|
|
30
|
+
declare function useConnectionSpecPagination<TReadFromStore extends UnknownTReadFromStore, TItem>(loadableField: LoadableField<TReadFromStore, Connection<TItem>, UseConnectionSpecPaginationArgs>, initialState?: PageInfo): UsePaginationReturnValue<TReadFromStore, TItem>;
|
|
31
|
+
//#endregion
|
|
32
|
+
export { Connection, PageInfo, UseConnectionSpecPaginationArgs, UsePaginationReturnValue, useConnectionSpecPagination };
|
|
29
33
|
//# sourceMappingURL=useConnectionSpecPagination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConnectionSpecPagination.d.ts","
|
|
1
|
+
{"version":3,"file":"useConnectionSpecPagination.d.ts","names":[],"sources":["../../src/loadable-hooks/useConnectionSpecPagination.ts"],"sourcesContent":[],"mappings":";;;;;KAyBY,gDACa;;EADb,eAAA,EAMW,iBANa,CAMK,cANL,EAMqB,UANrB,CAMgC,KANhC,CAAA,CAAA;EACX,OAAA,EAMV,aANU,CAMI,KANJ,CAAA;CAKgB,GAAA;EAA2B,IAAA,EAAA,gBAAA;EAAX,SAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,YAAA,CAAA,EAOlC,YAPkC,CAOrB,UAPqB,CAOV,KAPU,CAAA,EAAA,KAAA,CAAA,EAAA,GAAA,IAAA;EAAlC,OAAA,EASR,aATQ,CASM,KATN,CAAA;CACM,GAAA;EAAd,IAAA,EAAA,eAAA;EAMgC,OAAA,EAMhC,aANgC,CAMlB,KANkB,CAAA;CAAX;AAAb,KA+BX,QAAA,GA/BW;EAEM,SAAA,WAAA,EAAA,OAAA;EAAd,SAAA,SAAA,EAAA,MAAA,GAAA,IAAA;CAIc;AAAd,KA8BH,UA9BG,CAAA,CAAA,CAAA,GAAA;EAAa,SAAA,KAAA,EA+BV,aA/BU,CA+BI,CA/BJ,CAAA,GAAA,IAAA;EAyBhB,SAAA,QAAQ,EAOC,QAPD;AAKpB,CAAA;AACgC,KASpB,+BAAA,GAToB;EAAd,KAAA,EAAA,MAAA;EACG,KAAA,EAAA,MAAA,GAAA,IAAA;CAAQ;AAQjB,iBAKI,2BAL2B,CAAA,uBAMlB,qBANkB,EAAA,KAAA,CAAA,CAAA,aAAA,EAS1B,aAT0B,CAUvC,cAVuC,EAWvC,UAXuC,CAW5B,KAX4B,CAAA,EAYvC,+BAZuC,CAAA,EAAA,YAAA,CAAA,EAc1B,QAd0B,CAAA,EAexC,wBAfwC,CAef,cAfe,EAeC,KAfD,CAAA"}
|
|
@@ -1,180 +1,137 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
+
const require_PromiseWrapper = require('../core/PromiseWrapper.js');
|
|
3
|
+
const require_startUpdate = require('../core/startUpdate.js');
|
|
4
|
+
const require_read = require('../core/read.js');
|
|
5
|
+
const require_cache = require('../core/cache.js');
|
|
6
|
+
const require_IsographEnvironmentProvider = require('../react/IsographEnvironmentProvider.js');
|
|
7
|
+
const require_maybeUnwrapNetworkRequest = require('../react/maybeUnwrapNetworkRequest.js');
|
|
8
|
+
const require_useReadAndSubscribe = require('../react/useReadAndSubscribe.js');
|
|
9
|
+
let __isograph_react_disposable_state = require("@isograph/react-disposable-state");
|
|
10
|
+
__isograph_react_disposable_state = require_rolldown_runtime.__toESM(__isograph_react_disposable_state);
|
|
11
|
+
let react = require("react");
|
|
12
|
+
react = require_rolldown_runtime.__toESM(react);
|
|
13
|
+
let __isograph_reference_counted_pointer = require("@isograph/reference-counted-pointer");
|
|
14
|
+
__isograph_reference_counted_pointer = require_rolldown_runtime.__toESM(__isograph_reference_counted_pointer);
|
|
15
|
+
|
|
16
|
+
//#region src/loadable-hooks/useConnectionSpecPagination.ts
|
|
14
17
|
function flatten(arr) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
outArray.push(item);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return outArray;
|
|
18
|
+
let outArray = [];
|
|
19
|
+
for (const subarr of arr) for (const item of subarr) outArray.push(item);
|
|
20
|
+
return outArray;
|
|
22
21
|
}
|
|
23
22
|
function useConnectionSpecPagination(loadableField, initialState) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
kind: 'HasMoreRecords',
|
|
136
|
-
fetchMore: getFetchMore((_c = initialState === null || initialState === void 0 ? void 0 : initialState.endCursor) !== null && _c !== void 0 ? _c : null),
|
|
137
|
-
results: [],
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
return {
|
|
142
|
-
kind: 'NoMoreRecords',
|
|
143
|
-
results: [],
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
switch (networkRequestStatus.state.kind) {
|
|
148
|
-
case 'Pending': {
|
|
149
|
-
const unsubscribe = (0, cache_1.subscribeToAnyChange)(environment, () => {
|
|
150
|
-
unsubscribe();
|
|
151
|
-
rerender({});
|
|
152
|
-
});
|
|
153
|
-
const results = readCompletedFragmentReferences(completedFragmentReferences);
|
|
154
|
-
return {
|
|
155
|
-
results: results.edges,
|
|
156
|
-
kind: 'Pending',
|
|
157
|
-
pendingFragment: networkRequestStatus.mostRecentFragmentReference,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
case 'Err': {
|
|
161
|
-
throw networkRequestStatus.state.error;
|
|
162
|
-
}
|
|
163
|
-
case 'Ok': {
|
|
164
|
-
const results = readCompletedFragmentReferences(completedFragmentReferences);
|
|
165
|
-
if (results.pageInfo.hasNextPage) {
|
|
166
|
-
return {
|
|
167
|
-
kind: 'HasMoreRecords',
|
|
168
|
-
fetchMore: getFetchMore(results.pageInfo.endCursor),
|
|
169
|
-
results: results.edges,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
return {
|
|
174
|
-
kind: 'NoMoreRecords',
|
|
175
|
-
results: results.edges,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
23
|
+
const networkRequestOptions = {
|
|
24
|
+
suspendIfInFlight: true,
|
|
25
|
+
throwOnNetworkError: true
|
|
26
|
+
};
|
|
27
|
+
const { state, setState } = (0, __isograph_react_disposable_state.useUpdatableDisposableState)();
|
|
28
|
+
const environment = require_IsographEnvironmentProvider.useIsographEnvironment();
|
|
29
|
+
function readCompletedFragmentReferences(completedReferences) {
|
|
30
|
+
const results = completedReferences.map((fragmentReference, i) => {
|
|
31
|
+
const readerWithRefetchQueries = require_PromiseWrapper.readPromise(fragmentReference.readerWithRefetchQueries);
|
|
32
|
+
const data = readOutDataAndRecords[i]?.item;
|
|
33
|
+
if (data == null) throw new Error("Parameter data is unexpectedly null. This is indicative of a bug in Isograph.");
|
|
34
|
+
const firstParameter = {
|
|
35
|
+
data,
|
|
36
|
+
parameters: fragmentReference.variables,
|
|
37
|
+
...readerWithRefetchQueries.readerArtifact.hasUpdatable ? { startUpdate: require_startUpdate.getOrCreateCachedStartUpdate(environment, fragmentReference, networkRequestOptions) } : void 0
|
|
38
|
+
};
|
|
39
|
+
if (readerWithRefetchQueries.readerArtifact.kind !== "EagerReaderArtifact") throw new Error(`@loadable field of kind "${readerWithRefetchQueries.readerArtifact.kind}" is not supported by useSkipLimitPagination`);
|
|
40
|
+
return readerWithRefetchQueries.readerArtifact.resolver(firstParameter);
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
edges: flatten(results.map((result) => result.edges ?? [])),
|
|
44
|
+
pageInfo: results[results.length - 1]?.pageInfo ?? {
|
|
45
|
+
endCursor: null,
|
|
46
|
+
hasNextPage: true
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function subscribeCompletedFragmentReferences(completedReferences) {
|
|
51
|
+
return completedReferences.map((fragmentReference, i) => {
|
|
52
|
+
require_maybeUnwrapNetworkRequest.maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
53
|
+
const readerWithRefetchQueries = require_PromiseWrapper.readPromise(fragmentReference.readerWithRefetchQueries);
|
|
54
|
+
const records = readOutDataAndRecords[i];
|
|
55
|
+
if (records == null) throw new Error("subscribeCompletedFragmentReferences records is unexpectedly null");
|
|
56
|
+
return {
|
|
57
|
+
fragmentReference,
|
|
58
|
+
readerAst: readerWithRefetchQueries.readerArtifact.readerAst,
|
|
59
|
+
records,
|
|
60
|
+
callback(_data) {
|
|
61
|
+
rerender({});
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const getFetchMore = (after) => (count, fetchOptions) => {
|
|
67
|
+
const newPointer = (0, __isograph_reference_counted_pointer.createReferenceCountedPointer)(loadableField({
|
|
68
|
+
after,
|
|
69
|
+
first: count
|
|
70
|
+
}, fetchOptions ?? {})[1]());
|
|
71
|
+
const clonedPointers = loadedReferences.map(([refCountedPointer]) => {
|
|
72
|
+
const clonedRefCountedPointer = refCountedPointer.cloneIfNotDisposed();
|
|
73
|
+
if (clonedRefCountedPointer == null) throw new Error("This reference counted pointer has already been disposed. This is indicative of a bug in useSkipLimitPagination.");
|
|
74
|
+
return clonedRefCountedPointer;
|
|
75
|
+
});
|
|
76
|
+
clonedPointers.push(newPointer);
|
|
77
|
+
setState([clonedPointers, () => {
|
|
78
|
+
clonedPointers.forEach(([, dispose]) => {
|
|
79
|
+
dispose();
|
|
80
|
+
});
|
|
81
|
+
}]);
|
|
82
|
+
};
|
|
83
|
+
const [, rerender] = (0, react.useState)({});
|
|
84
|
+
const loadedReferences = state === __isograph_react_disposable_state.UNASSIGNED_STATE ? [] : state;
|
|
85
|
+
const mostRecentItem = loadedReferences[loadedReferences.length - 1];
|
|
86
|
+
const mostRecentFragmentReference = mostRecentItem?.[0].getItemIfNotDisposed();
|
|
87
|
+
if (mostRecentItem != null && mostRecentFragmentReference == null) throw new Error("FragmentReference is unexpectedly disposed. This is indicative of a bug in Isograph.");
|
|
88
|
+
const networkRequestStatus = mostRecentFragmentReference != null ? {
|
|
89
|
+
mostRecentFragmentReference,
|
|
90
|
+
state: require_PromiseWrapper.getPromiseState(mostRecentFragmentReference.networkRequest)
|
|
91
|
+
} : null;
|
|
92
|
+
const completedFragmentReferences = (networkRequestStatus?.state?.kind === "Ok" ? loadedReferences : loadedReferences.slice(0, loadedReferences.length - 1)).map(([pointer]) => {
|
|
93
|
+
const fragmentReference = pointer.getItemIfNotDisposed();
|
|
94
|
+
if (fragmentReference == null) throw new Error("FragmentReference is unexpectedly disposed. This is indicative of a bug in Isograph.");
|
|
95
|
+
return fragmentReference;
|
|
96
|
+
});
|
|
97
|
+
const readOutDataAndRecords = completedFragmentReferences.map((fragmentReference) => require_read.readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions));
|
|
98
|
+
require_useReadAndSubscribe.useSubscribeToMultiple(subscribeCompletedFragmentReferences(completedFragmentReferences));
|
|
99
|
+
if (networkRequestStatus == null) if (initialState?.hasNextPage ?? true) return {
|
|
100
|
+
kind: "HasMoreRecords",
|
|
101
|
+
fetchMore: getFetchMore(initialState?.endCursor ?? null),
|
|
102
|
+
results: []
|
|
103
|
+
};
|
|
104
|
+
else return {
|
|
105
|
+
kind: "NoMoreRecords",
|
|
106
|
+
results: []
|
|
107
|
+
};
|
|
108
|
+
switch (networkRequestStatus.state.kind) {
|
|
109
|
+
case "Pending": {
|
|
110
|
+
const unsubscribe = require_cache.subscribeToAnyChange(environment, () => {
|
|
111
|
+
unsubscribe();
|
|
112
|
+
rerender({});
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
results: readCompletedFragmentReferences(completedFragmentReferences).edges,
|
|
116
|
+
kind: "Pending",
|
|
117
|
+
pendingFragment: networkRequestStatus.mostRecentFragmentReference
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
case "Err": throw networkRequestStatus.state.error;
|
|
121
|
+
case "Ok": {
|
|
122
|
+
const results = readCompletedFragmentReferences(completedFragmentReferences);
|
|
123
|
+
if (results.pageInfo.hasNextPage) return {
|
|
124
|
+
kind: "HasMoreRecords",
|
|
125
|
+
fetchMore: getFetchMore(results.pageInfo.endCursor),
|
|
126
|
+
results: results.edges
|
|
127
|
+
};
|
|
128
|
+
else return {
|
|
129
|
+
kind: "NoMoreRecords",
|
|
130
|
+
results: results.edges
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
180
134
|
}
|
|
135
|
+
|
|
136
|
+
//#endregion
|
|
137
|
+
exports.useConnectionSpecPagination = useConnectionSpecPagination;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { getPromiseState, readPromise } from "../core/PromiseWrapper.mjs";
|
|
2
|
+
import { getOrCreateCachedStartUpdate } from "../core/startUpdate.mjs";
|
|
3
|
+
import { readButDoNotEvaluate } from "../core/read.mjs";
|
|
4
|
+
import { subscribeToAnyChange } from "../core/cache.mjs";
|
|
5
|
+
import { useIsographEnvironment } from "../react/IsographEnvironmentProvider.mjs";
|
|
6
|
+
import { maybeUnwrapNetworkRequest } from "../react/maybeUnwrapNetworkRequest.mjs";
|
|
7
|
+
import { useSubscribeToMultiple } from "../react/useReadAndSubscribe.mjs";
|
|
8
|
+
import { UNASSIGNED_STATE, useUpdatableDisposableState } from "@isograph/react-disposable-state";
|
|
9
|
+
import { useState } from "react";
|
|
10
|
+
import { createReferenceCountedPointer } from "@isograph/reference-counted-pointer";
|
|
11
|
+
|
|
12
|
+
//#region src/loadable-hooks/useConnectionSpecPagination.ts
|
|
13
|
+
function flatten(arr) {
|
|
14
|
+
let outArray = [];
|
|
15
|
+
for (const subarr of arr) for (const item of subarr) outArray.push(item);
|
|
16
|
+
return outArray;
|
|
17
|
+
}
|
|
18
|
+
function useConnectionSpecPagination(loadableField, initialState) {
|
|
19
|
+
const networkRequestOptions = {
|
|
20
|
+
suspendIfInFlight: true,
|
|
21
|
+
throwOnNetworkError: true
|
|
22
|
+
};
|
|
23
|
+
const { state, setState } = useUpdatableDisposableState();
|
|
24
|
+
const environment = useIsographEnvironment();
|
|
25
|
+
function readCompletedFragmentReferences(completedReferences) {
|
|
26
|
+
const results = completedReferences.map((fragmentReference, i) => {
|
|
27
|
+
const readerWithRefetchQueries = readPromise(fragmentReference.readerWithRefetchQueries);
|
|
28
|
+
const data = readOutDataAndRecords[i]?.item;
|
|
29
|
+
if (data == null) throw new Error("Parameter data is unexpectedly null. This is indicative of a bug in Isograph.");
|
|
30
|
+
const firstParameter = {
|
|
31
|
+
data,
|
|
32
|
+
parameters: fragmentReference.variables,
|
|
33
|
+
...readerWithRefetchQueries.readerArtifact.hasUpdatable ? { startUpdate: getOrCreateCachedStartUpdate(environment, fragmentReference, networkRequestOptions) } : void 0
|
|
34
|
+
};
|
|
35
|
+
if (readerWithRefetchQueries.readerArtifact.kind !== "EagerReaderArtifact") throw new Error(`@loadable field of kind "${readerWithRefetchQueries.readerArtifact.kind}" is not supported by useSkipLimitPagination`);
|
|
36
|
+
return readerWithRefetchQueries.readerArtifact.resolver(firstParameter);
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
edges: flatten(results.map((result) => result.edges ?? [])),
|
|
40
|
+
pageInfo: results[results.length - 1]?.pageInfo ?? {
|
|
41
|
+
endCursor: null,
|
|
42
|
+
hasNextPage: true
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function subscribeCompletedFragmentReferences(completedReferences) {
|
|
47
|
+
return completedReferences.map((fragmentReference, i) => {
|
|
48
|
+
maybeUnwrapNetworkRequest(fragmentReference.networkRequest, networkRequestOptions);
|
|
49
|
+
const readerWithRefetchQueries = readPromise(fragmentReference.readerWithRefetchQueries);
|
|
50
|
+
const records = readOutDataAndRecords[i];
|
|
51
|
+
if (records == null) throw new Error("subscribeCompletedFragmentReferences records is unexpectedly null");
|
|
52
|
+
return {
|
|
53
|
+
fragmentReference,
|
|
54
|
+
readerAst: readerWithRefetchQueries.readerArtifact.readerAst,
|
|
55
|
+
records,
|
|
56
|
+
callback(_data) {
|
|
57
|
+
rerender({});
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const getFetchMore = (after) => (count, fetchOptions) => {
|
|
63
|
+
const newPointer = createReferenceCountedPointer(loadableField({
|
|
64
|
+
after,
|
|
65
|
+
first: count
|
|
66
|
+
}, fetchOptions ?? {})[1]());
|
|
67
|
+
const clonedPointers = loadedReferences.map(([refCountedPointer]) => {
|
|
68
|
+
const clonedRefCountedPointer = refCountedPointer.cloneIfNotDisposed();
|
|
69
|
+
if (clonedRefCountedPointer == null) throw new Error("This reference counted pointer has already been disposed. This is indicative of a bug in useSkipLimitPagination.");
|
|
70
|
+
return clonedRefCountedPointer;
|
|
71
|
+
});
|
|
72
|
+
clonedPointers.push(newPointer);
|
|
73
|
+
setState([clonedPointers, () => {
|
|
74
|
+
clonedPointers.forEach(([, dispose]) => {
|
|
75
|
+
dispose();
|
|
76
|
+
});
|
|
77
|
+
}]);
|
|
78
|
+
};
|
|
79
|
+
const [, rerender] = useState({});
|
|
80
|
+
const loadedReferences = state === UNASSIGNED_STATE ? [] : state;
|
|
81
|
+
const mostRecentItem = loadedReferences[loadedReferences.length - 1];
|
|
82
|
+
const mostRecentFragmentReference = mostRecentItem?.[0].getItemIfNotDisposed();
|
|
83
|
+
if (mostRecentItem != null && mostRecentFragmentReference == null) throw new Error("FragmentReference is unexpectedly disposed. This is indicative of a bug in Isograph.");
|
|
84
|
+
const networkRequestStatus = mostRecentFragmentReference != null ? {
|
|
85
|
+
mostRecentFragmentReference,
|
|
86
|
+
state: getPromiseState(mostRecentFragmentReference.networkRequest)
|
|
87
|
+
} : null;
|
|
88
|
+
const completedFragmentReferences = (networkRequestStatus?.state?.kind === "Ok" ? loadedReferences : loadedReferences.slice(0, loadedReferences.length - 1)).map(([pointer]) => {
|
|
89
|
+
const fragmentReference = pointer.getItemIfNotDisposed();
|
|
90
|
+
if (fragmentReference == null) throw new Error("FragmentReference is unexpectedly disposed. This is indicative of a bug in Isograph.");
|
|
91
|
+
return fragmentReference;
|
|
92
|
+
});
|
|
93
|
+
const readOutDataAndRecords = completedFragmentReferences.map((fragmentReference) => readButDoNotEvaluate(environment, fragmentReference, networkRequestOptions));
|
|
94
|
+
useSubscribeToMultiple(subscribeCompletedFragmentReferences(completedFragmentReferences));
|
|
95
|
+
if (networkRequestStatus == null) if (initialState?.hasNextPage ?? true) return {
|
|
96
|
+
kind: "HasMoreRecords",
|
|
97
|
+
fetchMore: getFetchMore(initialState?.endCursor ?? null),
|
|
98
|
+
results: []
|
|
99
|
+
};
|
|
100
|
+
else return {
|
|
101
|
+
kind: "NoMoreRecords",
|
|
102
|
+
results: []
|
|
103
|
+
};
|
|
104
|
+
switch (networkRequestStatus.state.kind) {
|
|
105
|
+
case "Pending": {
|
|
106
|
+
const unsubscribe = subscribeToAnyChange(environment, () => {
|
|
107
|
+
unsubscribe();
|
|
108
|
+
rerender({});
|
|
109
|
+
});
|
|
110
|
+
return {
|
|
111
|
+
results: readCompletedFragmentReferences(completedFragmentReferences).edges,
|
|
112
|
+
kind: "Pending",
|
|
113
|
+
pendingFragment: networkRequestStatus.mostRecentFragmentReference
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
case "Err": throw networkRequestStatus.state.error;
|
|
117
|
+
case "Ok": {
|
|
118
|
+
const results = readCompletedFragmentReferences(completedFragmentReferences);
|
|
119
|
+
if (results.pageInfo.hasNextPage) return {
|
|
120
|
+
kind: "HasMoreRecords",
|
|
121
|
+
fetchMore: getFetchMore(results.pageInfo.endCursor),
|
|
122
|
+
results: results.edges
|
|
123
|
+
};
|
|
124
|
+
else return {
|
|
125
|
+
kind: "NoMoreRecords",
|
|
126
|
+
results: results.edges
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
//#endregion
|
|
133
|
+
export { useConnectionSpecPagination };
|
|
134
|
+
//# sourceMappingURL=useConnectionSpecPagination.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConnectionSpecPagination.mjs","names":["outArray: Array<T>","mostRecentItem:\n | LoadedFragmentReference<TReadFromStore, Connection<TItem>>\n | undefined"],"sources":["../../src/loadable-hooks/useConnectionSpecPagination.ts"],"sourcesContent":["import type { ItemCleanupPair } from '@isograph/disposable-types';\nimport {\n UNASSIGNED_STATE,\n useUpdatableDisposableState,\n} from '@isograph/react-disposable-state';\nimport type { ReferenceCountedPointer } from '@isograph/reference-counted-pointer';\nimport { createReferenceCountedPointer } from '@isograph/reference-counted-pointer';\nimport { useState } from 'react';\nimport { subscribeToAnyChange } from '../core/cache';\nimport type { FetchOptions } from '../core/check';\nimport type {\n FragmentReference,\n UnknownTReadFromStore,\n} from '../core/FragmentReference';\nimport { getPromiseState, readPromise } from '../core/PromiseWrapper';\nimport {\n readButDoNotEvaluate,\n type WithEncounteredRecords,\n} from '../core/read';\nimport type { LoadableField, ReaderAst } from '../core/reader';\nimport { getOrCreateCachedStartUpdate } from '../core/startUpdate';\nimport { useIsographEnvironment } from '../react/IsographEnvironmentProvider';\nimport { maybeUnwrapNetworkRequest } from '../react/maybeUnwrapNetworkRequest';\nimport { useSubscribeToMultiple } from '../react/useReadAndSubscribe';\n\nexport type UsePaginationReturnValue<\n TReadFromStore extends UnknownTReadFromStore,\n TItem,\n> =\n | {\n kind: 'Pending';\n pendingFragment: FragmentReference<TReadFromStore, Connection<TItem>>;\n results: ReadonlyArray<TItem>;\n }\n | {\n kind: 'HasMoreRecords';\n fetchMore: (\n count: number,\n fetchOptions?: FetchOptions<Connection<TItem>, never>,\n ) => void;\n results: ReadonlyArray<TItem>;\n }\n | {\n kind: 'NoMoreRecords';\n results: ReadonlyArray<TItem>;\n };\n\ntype LoadedFragmentReferences<\n TReadFromStore extends { parameters: object; data: object },\n TItem,\n> = ReadonlyArray<LoadedFragmentReference<TReadFromStore, TItem>>;\n\ntype LoadedFragmentReference<\n TReadFromStore extends { parameters: object; data: object },\n TItem,\n> = ItemCleanupPair<\n ReferenceCountedPointer<FragmentReference<TReadFromStore, TItem>>\n>;\n\nfunction flatten<T>(arr: ReadonlyArray<ReadonlyArray<T>>): ReadonlyArray<T> {\n let outArray: Array<T> = [];\n for (const subarr of arr) {\n for (const item of subarr) {\n outArray.push(item);\n }\n }\n return outArray;\n}\n\nexport type PageInfo = {\n readonly hasNextPage: boolean;\n readonly endCursor: string | null;\n};\n\nexport type Connection<T> = {\n readonly edges: ReadonlyArray<T> | null;\n readonly pageInfo: PageInfo;\n};\n\ntype NonNullConnection<T> = {\n readonly edges: ReadonlyArray<T>;\n readonly pageInfo: PageInfo;\n};\n\nexport type UseConnectionSpecPaginationArgs = {\n first: number;\n after: string | null;\n};\n\nexport function useConnectionSpecPagination<\n TReadFromStore extends UnknownTReadFromStore,\n TItem,\n>(\n loadableField: LoadableField<\n TReadFromStore,\n Connection<TItem>,\n UseConnectionSpecPaginationArgs\n >,\n initialState?: PageInfo,\n): UsePaginationReturnValue<TReadFromStore, TItem> {\n const networkRequestOptions = {\n suspendIfInFlight: true,\n throwOnNetworkError: true,\n };\n const { state, setState } =\n useUpdatableDisposableState<\n LoadedFragmentReferences<TReadFromStore, Connection<TItem>>\n >();\n\n const environment = useIsographEnvironment();\n\n // TODO move this out of useSkipLimitPagination, and pass environment and networkRequestOptions\n // as parameters (or recreate networkRequestOptions)\n function readCompletedFragmentReferences(\n completedReferences: FragmentReference<TReadFromStore, Connection<TItem>>[],\n ): NonNullConnection<TItem> {\n const results = completedReferences.map((fragmentReference, i) => {\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n // invariant: readOutDataAndRecords.length === completedReferences.length\n const data = readOutDataAndRecords[i]?.item;\n if (data == null) {\n throw new Error(\n 'Parameter data is unexpectedly null. This is indicative of a bug in Isograph.',\n );\n }\n\n const firstParameter = {\n data,\n parameters: fragmentReference.variables,\n ...(readerWithRefetchQueries.readerArtifact.hasUpdatable\n ? {\n startUpdate: getOrCreateCachedStartUpdate(\n environment,\n fragmentReference,\n networkRequestOptions,\n ),\n }\n : undefined),\n };\n\n if (\n readerWithRefetchQueries.readerArtifact.kind !== 'EagerReaderArtifact'\n ) {\n throw new Error(\n `@loadable field of kind \"${readerWithRefetchQueries.readerArtifact.kind}\" is not supported by useSkipLimitPagination`,\n );\n }\n\n return readerWithRefetchQueries.readerArtifact.resolver(firstParameter);\n });\n\n const items = flatten(results.map((result) => result.edges ?? []));\n\n return {\n edges: items,\n pageInfo: results[results.length - 1]?.pageInfo ?? {\n endCursor: null,\n hasNextPage: true,\n },\n };\n }\n\n function subscribeCompletedFragmentReferences(\n completedReferences: FragmentReference<TReadFromStore, Connection<TItem>>[],\n ) {\n return completedReferences.map(\n (\n fragmentReference,\n i,\n ): {\n records: WithEncounteredRecords<TReadFromStore>;\n callback: (\n updatedRecords: WithEncounteredRecords<TReadFromStore>,\n ) => void;\n fragmentReference: FragmentReference<TReadFromStore, Connection<TItem>>;\n readerAst: ReaderAst<Connection<TItem>>;\n } => {\n maybeUnwrapNetworkRequest(\n fragmentReference.networkRequest,\n networkRequestOptions,\n );\n\n const readerWithRefetchQueries = readPromise(\n fragmentReference.readerWithRefetchQueries,\n );\n\n const records = readOutDataAndRecords[i];\n if (records == null) {\n throw new Error(\n 'subscribeCompletedFragmentReferences records is unexpectedly null',\n );\n }\n\n return {\n fragmentReference,\n readerAst: readerWithRefetchQueries.readerArtifact.readerAst,\n records,\n callback(_data) {\n rerender({});\n },\n };\n },\n );\n }\n\n const getFetchMore =\n (after: string | null) =>\n (\n count: number,\n fetchOptions?: FetchOptions<Connection<TItem>, never>,\n ): void => {\n const loadedField = loadableField(\n {\n after: after,\n first: count,\n },\n fetchOptions ?? {},\n )[1]();\n const newPointer = createReferenceCountedPointer(loadedField);\n const clonedPointers = loadedReferences.map(([refCountedPointer]) => {\n const clonedRefCountedPointer = refCountedPointer.cloneIfNotDisposed();\n if (clonedRefCountedPointer == null) {\n throw new Error(\n 'This reference counted pointer has already been disposed. \\\n This is indicative of a bug in useSkipLimitPagination.',\n );\n }\n return clonedRefCountedPointer;\n });\n clonedPointers.push(newPointer);\n\n const totalItemCleanupPair: ItemCleanupPair<\n ReadonlyArray<\n ItemCleanupPair<\n ReferenceCountedPointer<\n FragmentReference<TReadFromStore, Connection<TItem>>\n >\n >\n >\n > = [\n clonedPointers,\n () => {\n clonedPointers.forEach(([, dispose]) => {\n dispose();\n });\n },\n ];\n\n setState(totalItemCleanupPair);\n };\n\n const [, rerender] = useState({});\n\n const loadedReferences = state === UNASSIGNED_STATE ? [] : state;\n\n const mostRecentItem:\n | LoadedFragmentReference<TReadFromStore, Connection<TItem>>\n | undefined = loadedReferences[loadedReferences.length - 1];\n const mostRecentFragmentReference =\n mostRecentItem?.[0].getItemIfNotDisposed();\n\n if (mostRecentItem != null && mostRecentFragmentReference == null) {\n throw new Error(\n 'FragmentReference is unexpectedly disposed. \\\n This is indicative of a bug in Isograph.',\n );\n }\n\n const networkRequestStatus =\n mostRecentFragmentReference != null\n ? {\n mostRecentFragmentReference,\n state: getPromiseState(mostRecentFragmentReference.networkRequest),\n }\n : null;\n\n const slicedFragmentReferences =\n networkRequestStatus?.state?.kind === 'Ok'\n ? loadedReferences\n : loadedReferences.slice(0, loadedReferences.length - 1);\n\n const completedFragmentReferences = slicedFragmentReferences.map(\n ([pointer]) => {\n const fragmentReference = pointer.getItemIfNotDisposed();\n if (fragmentReference == null) {\n throw new Error(\n 'FragmentReference is unexpectedly disposed. \\\n This is indicative of a bug in Isograph.',\n );\n }\n return fragmentReference;\n },\n );\n\n const readOutDataAndRecords = completedFragmentReferences.map(\n (fragmentReference) =>\n readButDoNotEvaluate(\n environment,\n fragmentReference,\n networkRequestOptions,\n ),\n );\n\n useSubscribeToMultiple<TReadFromStore>(\n subscribeCompletedFragmentReferences(completedFragmentReferences),\n );\n\n if (networkRequestStatus == null) {\n if (initialState?.hasNextPage ?? true) {\n return {\n kind: 'HasMoreRecords',\n fetchMore: getFetchMore(initialState?.endCursor ?? null),\n results: [],\n };\n } else {\n return {\n kind: 'NoMoreRecords',\n results: [],\n };\n }\n }\n\n switch (networkRequestStatus.state.kind) {\n case 'Pending': {\n const unsubscribe = subscribeToAnyChange(environment, () => {\n unsubscribe();\n rerender({});\n });\n\n const results = readCompletedFragmentReferences(\n completedFragmentReferences,\n );\n return {\n results: results.edges,\n kind: 'Pending',\n pendingFragment: networkRequestStatus.mostRecentFragmentReference,\n };\n }\n case 'Err': {\n throw networkRequestStatus.state.error;\n }\n case 'Ok': {\n const results = readCompletedFragmentReferences(\n completedFragmentReferences,\n );\n\n if (results.pageInfo.hasNextPage) {\n return {\n kind: 'HasMoreRecords',\n fetchMore: getFetchMore(results.pageInfo.endCursor),\n results: results.edges,\n };\n } else {\n return {\n kind: 'NoMoreRecords',\n results: results.edges,\n };\n }\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/loadable-hooks/useImperativeExposedMutationField.d.ts
|
|
2
|
+
type UseImperativeLoadableFieldReturn<TArgs> = {
|
|
3
|
+
loadFragmentReference: (args: TArgs) => void;
|
|
4
|
+
};
|
|
5
|
+
declare function useImperativeExposedMutationField<TArgs>(exposedField: (args: TArgs) => [string, () => void]): UseImperativeLoadableFieldReturn<TArgs>;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { UseImperativeLoadableFieldReturn, useImperativeExposedMutationField };
|
|
8
|
+
//# sourceMappingURL=useImperativeExposedMutationField.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImperativeExposedMutationField.d.mts","names":[],"sources":["../../src/loadable-hooks/useImperativeExposedMutationField.ts"],"sourcesContent":[],"mappings":";KAAY;EAAA,qBAAA,EAAA,CAAA,IAAA,EACoB,KADY,EAAA,GAAA,IAAA;AAO5C,CAAA;AACuB,iBADP,iCACO,CAAA,KAAA,CAAA,CAAA,YAAA,EAAA,CAAA,IAAA,EAAA,KAAA,EAAA,GAAA,CAAA,MAAA,EAAA,GAAA,GAAA,IAAA,CAAA,CAAA,EACpB,gCADoB,CACa,KADb,CAAA"}
|