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, H3Code, 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 isProp = (child: PropData) => child.kind === TypeDocKind.Property && !child.overwrites && !child.name.startsWith('_') && !child.implementationOf; const isMethod = (child: PropData) => child.kind === TypeDocKind.Method && !child.overwrites; const renderClass = (clx: ClassDefinitionData, hasMultipleClasses: boolean): JSX.Element => { const { name, comment, type, extendedTypes, children, implementedTypes } = clx; const properties = children?.filter(isProp); const methods = children?.filter(isMethod); return (
{hasMultipleClasses ? ( {name} ) : (

{name}

)} {(extendedTypes?.length || implementedTypes?.length) && (

Type: {type ? {resolveTypeName(type)} : 'Class'} {extendedTypes?.length && ( <> extends {extendedTypes.map(extendedType => ( {resolveTypeName(extendedType)} ))} )} {implementedTypes?.length && ( <> implements {implementedTypes.map(implementedType => ( {resolveTypeName(implementedType)} ))} )}

)} {properties?.length ? ( <> {hasMultipleClasses ? ( <>

{name} Properties


) : (

{name} Properties

)} ) : null} {methods?.length ? ( <> {hasMultipleClasses ?

{name} Methods

:

{name} Methods

}
{methods.map((method, index) => renderMethod(method, index, methods.length, undefined, undefined, !hasMultipleClasses) )}
) : null}
); }; const APISectionClasses = ({ data }: APISectionClassesProps) => { if (data?.length) { const hasMultipleClasses = data.length > 1; return ( <> {hasMultipleClasses ?

Classes

: null} {data.map(cls => renderClass(cls, hasMultipleClasses))} ); } return null; }; export default APISectionClasses;