{"version":3,"file":"LoadableFieldReader.mjs","names":[],"sources":["../../src/react/LoadableFieldReader.tsx"],"sourcesContent":["import React from 'react';\nimport { type FetchOptions } from '../core/check';\nimport type { ExtractParameters } from '../core/FragmentReference';\nimport { type UnknownTReadFromStore } from '../core/FragmentReference';\nimport { type NetworkRequestReaderOptions } from '../core/read';\nimport { type LoadableField } from '../core/reader';\nimport { useClientSideDefer } from '../loadable-hooks/useClientSideDefer';\nimport { useResult } from './useResult';\n\ntype ArgsWithoutProvidedArgs<\n  TReadFromStore extends UnknownTReadFromStore,\n  TProvidedArgs extends object,\n> = Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>;\n\ntype MaybeRequiredArgs<\n  TReadFromStore extends UnknownTReadFromStore,\n  TProvidedArgs extends object,\n> =\n  {} extends ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>\n    ? {\n        args?: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;\n      }\n    : {\n        args: ArgsWithoutProvidedArgs<TReadFromStore, TProvidedArgs>;\n      };\n\nexport function LoadableFieldReader<\n  TReadFromStore extends UnknownTReadFromStore,\n  TResult,\n  TProvidedArgs extends object,\n  TChildrenResult,\n>(\n  props: {\n    loadableField: LoadableField<\n      TReadFromStore,\n      TResult,\n      Omit<ExtractParameters<TReadFromStore>, keyof TProvidedArgs>\n    >;\n    fetchOptions?: FetchOptions<TResult, never>;\n    networkRequestOptions?: Partial<NetworkRequestReaderOptions>;\n    children: (arg: TResult) => TChildrenResult;\n  } & MaybeRequiredArgs<TReadFromStore, TProvidedArgs>,\n): TChildrenResult {\n  const { fragmentReference } = useClientSideDefer(\n    props.loadableField,\n    // @ts-expect-error\n    props.args,\n    props.fetchOptions,\n  );\n\n  const readOutFragmentData = useResult(\n    fragmentReference,\n    props.networkRequestOptions,\n  );\n\n  return props.children(readOutFragmentData);\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  <LoadableFieldReader loadableField={neverArgs} children={() => {}} />;\n  <LoadableFieldReader\n    loadableField={neverArgs}\n    children={() => {}}\n    args={{}}\n  />;\n  <LoadableFieldReader\n    loadableField={neverArgs}\n    children={() => {}}\n    args={{\n      // @ts-expect-error\n      foo: 'bar',\n    }}\n  />;\n\n  <LoadableFieldReader loadableField={optionalArgs} children={() => {}} />;\n  <LoadableFieldReader\n    loadableField={optionalArgs}\n    children={() => {}}\n    args={{}}\n  />;\n  <LoadableFieldReader\n    loadableField={optionalArgs}\n    children={() => {}}\n    args={{\n      foo: 'bar',\n    }}\n  />;\n  <LoadableFieldReader\n    loadableField={optionalArgs}\n    children={() => {}}\n    args={{\n      // @ts-expect-error\n      foo: 12,\n    }}\n  />;\n\n  // @ts-expect-error\n  <LoadableFieldReader loadableField={requiredArgs} children={() => {}} />;\n  <LoadableFieldReader\n    loadableField={requiredArgs}\n    children={() => {}}\n    // @ts-expect-error\n    args={{}}\n  />;\n  <LoadableFieldReader\n    loadableField={requiredArgs}\n    children={() => {}}\n    args={{\n      foo: 'bar',\n    }}\n  />;\n  <LoadableFieldReader\n    loadableField={requiredArgs}\n    children={() => {}}\n    args={{\n      // @ts-expect-error\n      foo: 12,\n    }}\n  />;\n}\n"],"mappings":";;;;;AA0BA,SAAgB,oBAMd,OAUiB;CACjB,MAAM,EAAE,sBAAsB,mBAC5B,MAAM,eAEN,MAAM,MACN,MAAM,aACP;CAED,MAAM,sBAAsB,UAC1B,mBACA,MAAM,sBACP;AAED,QAAO,MAAM,SAAS,oBAAoB"}