import React from 'react'; import { InlineCode } from '~/components/base/code'; import { UL } from '~/components/base/list'; import { B, P } from '~/components/base/paragraph'; import { H2, H4 } from '~/components/plugins/Headings'; import { ClassDefinitionData, GeneratedData, PropData, } from '~/components/plugins/api/APIDataTypes'; import { renderMethod } from '~/components/plugins/api/APISectionMethods'; import { renderProp } from '~/components/plugins/api/APISectionProps'; import { CommentTextBlock, resolveTypeName, TypeDocKind, } from '~/components/plugins/api/APISectionUtils'; export type APISectionClassesProps = { data: GeneratedData[]; }; const renderProperty = (prop: PropData) => { return prop.signatures?.length ? renderMethod(prop) : renderProp(prop, prop?.defaultValue, true); }; const renderClass = ( { name, comment, type, extendedTypes, children }: ClassDefinitionData, classCount: number ): JSX.Element => { const properties = children?.filter( child => child.kind === TypeDocKind.Property && !child.overwrites ); const methods = children?.filter(child => child.kind === TypeDocKind.Method && !child.overwrites); return (

{name}

{extendedTypes?.length && (

Type: {type ? {resolveTypeName(type)} : 'Class'} extends {resolveTypeName(extendedTypes[0])}

)} {properties?.length ? ( <> {classCount === 1 ?

{name} Properties

:

{name} Properties

} ) : null} {methods?.length ? ( <> {classCount === 1 ?

{name} Methods

:

{name} Methods

} <>{methods.map(renderProperty)} ) : null}
); }; const APISectionClasses = ({ data }: APISectionClassesProps) => data?.length ? <>{data.map(cls => renderClass(cls, data?.length))} : null; export default APISectionClasses;