import * as React from 'react'; import { type ExtractReadFromStore, type IsographEntrypoint, } from '../core/entrypoint'; import { type FragmentReference } from '../core/FragmentReference'; import { type NetworkRequestReaderOptions } from '../core/read'; import { useResult } from './useResult'; import type { NetworkResponseObject } from '../core/cache'; export type IsExactlyIntrinsicAttributes = T extends JSX.IntrinsicAttributes ? JSX.IntrinsicAttributes extends T ? true : false : false; export function FragmentRenderer< TProps extends Record, TRawResponseType extends NetworkResponseObject, TEntrypoint extends IsographEntrypoint< any, React.FC, any, TRawResponseType >, >( props: IsExactlyIntrinsicAttributes extends true ? { fragmentReference: FragmentReference< ExtractReadFromStore, React.FC >; additionalProps?: Record; networkRequestOptions?: Partial; } : { fragmentReference: FragmentReference< ExtractReadFromStore, React.FC >; additionalProps: Omit; networkRequestOptions?: Partial; }, ): React.ReactNode { const Component = useResult( props.fragmentReference, props.networkRequestOptions, ); // TypeScript is not understanding that if additionalProps is Record, // it means that TProps === JSX.IntrinsicAttributes. // @ts-expect-error return ; }