{"version":3,"file":"useImperativeLoadableField.mjs","names":[],"sources":["../../src/loadable-hooks/useImperativeLoadableField.ts"],"sourcesContent":["import {\n  UNASSIGNED_STATE,\n  useUpdatableDisposableState,\n} from '@isograph/react-disposable-state';\nimport type { FetchOptions } from '../core/check';\nimport type {\n  ExtractParameters,\n  FragmentReference,\n} from '../core/FragmentReference';\nimport type { LoadableField } from '../core/reader';\n\nexport type UseImperativeLoadableFieldReturn<\n  TReadFromStore extends { data: object; parameters: object },\n  TResult,\n  TProvidedArgs extends object,\n> = {\n  fragmentReference: FragmentReference<TReadFromStore, TResult> | null;\n  loadFragmentReference: (\n    // TODO this should be void iff all args are provided by the query, like in\n    // useClientSideDefer.\n    args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs> | void,\n    fetchOptions?: FetchOptions<TResult, never>,\n  ) => void;\n};\n\nexport function useImperativeLoadableField<\n  TReadFromStore extends { data: object; parameters: object },\n  TResult,\n  TProvidedArgs extends object,\n>(\n  loadableField: LoadableField<\n    TReadFromStore,\n    TResult,\n    Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>\n  >,\n): UseImperativeLoadableFieldReturn<TReadFromStore, TResult, TProvidedArgs> {\n  const { state, setState } =\n    useUpdatableDisposableState<FragmentReference<TReadFromStore, TResult>>();\n\n  return {\n    loadFragmentReference: (\n      args: Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs> | void,\n      fetchOptions?: FetchOptions<TResult, never>,\n    ) => {\n      const [_id, loader] = loadableField(args, fetchOptions ?? {});\n      setState(loader());\n    },\n    fragmentReference: state !== UNASSIGNED_STATE ? state : null,\n  };\n}\n"],"mappings":";;;AAyBA,SAAgB,2BAKd,eAK0E;CAC1E,MAAM,EAAE,OAAO,aACb,6BAAyE;AAE3E,QAAO;EACL,wBACE,MACA,iBACG;GACH,MAAM,CAAC,KAAK,UAAU,cAAc,MAAM,gBAAgB,EAAE,CAAC;AAC7D,YAAS,QAAQ,CAAC;;EAEpB,mBAAmB,UAAU,mBAAmB,QAAQ;EACzD"}