{"version":3,"file":"useImperativeReference.mjs","names":[],"sources":["../../src/react/useImperativeReference.ts"],"sourcesContent":["import {\n  UNASSIGNED_STATE,\n  useUpdatableDisposableState,\n} from '@isograph/react-disposable-state';\nimport type { NetworkResponseObject } from '../core/cache';\nimport type { FetchOptions } from '../core/check';\nimport { type RequiredFetchOptions } from '../core/check';\nimport type { IsographEntrypoint } from '../core/entrypoint';\nimport {\n  type NormalizationAst,\n  type NormalizationAstLoader,\n} from '../core/entrypoint';\nimport type {\n  ExtractParameters,\n  FragmentReference,\n} from '../core/FragmentReference';\nimport { type UnknownTReadFromStore } from '../core/FragmentReference';\nimport {\n  getOrLoadReaderWithRefetchQueries,\n  ROOT_ID,\n} from '../core/IsographEnvironment';\nimport { maybeMakeNetworkRequest } from '../core/makeNetworkRequest';\nimport { useIsographEnvironment } from './IsographEnvironmentProvider';\n\nexport type UseImperativeReferenceResult<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n  TRawResponseType,\n> = {\n  fragmentReference: FragmentReference<\n    TReadFromStore,\n    TClientFieldValue\n  > | null;\n  loadFragmentReference: (\n    variables: ExtractParameters<TReadFromStore>,\n    ...[fetchOptions]: NormalizationAstLoader extends TNormalizationAst\n      ? [fetchOptions: RequiredFetchOptions<TClientFieldValue>]\n      : [fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>]\n  ) => void;\n};\n\nexport function useImperativeReference<\n  TReadFromStore extends UnknownTReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst extends NormalizationAst | NormalizationAstLoader,\n  TRawResponseType extends NetworkResponseObject,\n>(\n  entrypoint: IsographEntrypoint<\n    TReadFromStore,\n    TClientFieldValue,\n    TNormalizationAst,\n    TRawResponseType\n  >,\n): UseImperativeReferenceResult<\n  TReadFromStore,\n  TClientFieldValue,\n  TNormalizationAst,\n  TRawResponseType\n> {\n  const { state, setState } =\n    useUpdatableDisposableState<\n      FragmentReference<TReadFromStore, TClientFieldValue>\n    >();\n  const environment = useIsographEnvironment();\n  return {\n    fragmentReference: state !== UNASSIGNED_STATE ? state : null,\n    loadFragmentReference: (\n      variables: ExtractParameters<TReadFromStore>,\n      fetchOptions?: FetchOptions<TClientFieldValue, TRawResponseType>,\n    ) => {\n      const { fieldName, readerArtifactKind, readerWithRefetchQueries } =\n        getOrLoadReaderWithRefetchQueries(\n          environment,\n          entrypoint.readerWithRefetchQueries,\n        );\n      const [networkRequest, disposeNetworkRequest] = maybeMakeNetworkRequest(\n        environment,\n        entrypoint,\n        variables,\n        readerWithRefetchQueries,\n        fetchOptions ?? null,\n      );\n      setState([\n        {\n          kind: 'FragmentReference',\n          readerWithRefetchQueries,\n          fieldName,\n          readerArtifactKind,\n          root: { __link: ROOT_ID, __typename: entrypoint.concreteType },\n          variables,\n          networkRequest,\n        },\n        () => {\n          disposeNetworkRequest();\n        },\n      ]);\n    },\n  };\n}\n"],"mappings":";;;;;;AA0CA,SAAgB,uBAMd,YAWA;CACA,MAAM,EAAE,OAAO,aACb,6BAEG;CACL,MAAM,cAAc,wBAAwB;AAC5C,QAAO;EACL,mBAAmB,UAAU,mBAAmB,QAAQ;EACxD,wBACE,WACA,iBACG;GACH,MAAM,EAAE,WAAW,oBAAoB,6BACrC,kCACE,aACA,WAAW,yBACZ;GACH,MAAM,CAAC,gBAAgB,yBAAyB,wBAC9C,aACA,YACA,WACA,0BACA,gBAAgB,KACjB;AACD,YAAS,CACP;IACE,MAAM;IACN;IACA;IACA;IACA,MAAM;KAAE,QAAQ;KAAS,YAAY,WAAW;KAAc;IAC9D;IACA;IACD,QACK;AACJ,2BAAuB;KAE1B,CAAC;;EAEL"}