1import { CodeBlock } from '~/components/base/code'; 2import { TypeDefinitionData } from '~/components/plugins/api/APIDataTypes'; 3import { resolveTypeName } from '~/components/plugins/api/APISectionUtils'; 4import { CODE } from '~/ui/components/Text'; 5 6const typeDefinitionContainsObject = (typDef: TypeDefinitionData) => 7 typDef.type === 'reflection' && typDef.declaration?.children; 8 9type APIDataTypeProps = { typeDefinition: TypeDefinitionData; inline?: boolean }; 10 11export const APIDataType = ({ typeDefinition, inline = true }: APIDataTypeProps) => { 12 const { type, declaration, types, elementType, typeArguments } = typeDefinition; 13 14 const isObjectDefinition = type === 'reflection' && declaration?.children?.length; 15 const isIntersectionWithObject = 16 type === 'intersection' && types?.filter(typeDefinitionContainsObject).length; 17 const isUnionWithObject = 18 (type === 'union' || (elementType && elementType.type === 'union')) && 19 types?.filter(typeDefinitionContainsObject).length; 20 const isObjectWrapped = 21 type === 'reference' && 22 typeArguments && 23 typeArguments?.filter(typeDefinitionContainsObject).length; 24 25 return isObjectDefinition || isIntersectionWithObject || isUnionWithObject || isObjectWrapped ? ( 26 <CodeBlock inline={inline} key={typeDefinition.name}> 27 {resolveTypeName(typeDefinition)} 28 </CodeBlock> 29 ) : ( 30 <CODE key={typeDefinition.name}>{resolveTypeName(typeDefinition)}</CODE> 31 ); 32}; 33