import React from 'react'; import { Navigate, useParams } from 'react-router'; import BetaNotice from '../components/BetaNotice.js'; import EventCard from '../components/cards/EventCard.js'; import MethodCard from '../components/cards/MethodCard.js'; import PropertyCard from '../components/cards/PropertyCard.js'; import DeprecationNotice from '../components/DeprecationNotice.js'; import OverviewTable from '../components/overviewTable/OverviewTable.js'; import SymbolHeader from '../components/SymbolHeader.js'; import PageContent from '../containers/PageContent.js'; import type { PackageContainerRouteParams } from '../containers/ReferencePackageContainer.js'; import type { AccessorReferenceNode, CallSignatureReferenceNode, ClassReferenceNode, ConstructorReferenceNode, MethodReferenceNode, PropertyReferenceNode } from '../reference/index.js'; import { partition } from '../tools/ArrayTools.js'; import { getPageType, getTag, hasTag } from '../tools/CodeTools.js'; import MarkdownParser from '../tools/markdown/MarkdownParser.js'; import { checkVisibility, defaultNodeSort } from '../tools/NodeTools.js'; import { filterChildrenByMember, findSymbolByMember } from '../tools/ReferenceTools.js'; import { getPackagePath } from '../tools/StringTools.js'; interface ClassPageRouteParams extends PackageContainerRouteParams { name: string; } const ClassPage: React.FC = () => { const { name, packageName } = useParams() as unknown as ClassPageRouteParams; const symbolDef = findSymbolByMember('name', name, packageName); if (!symbolDef) { // TODO return null; } const symbol = symbolDef.symbol as ClassReferenceNode; const correctPageType = getPageType(symbol); if (correctPageType !== 'classes') { return ; } const constructor: ConstructorReferenceNode | undefined = symbol.ctor && checkVisibility(symbol.ctor, symbol) ? symbol.ctor : undefined; const constructorSigs: CallSignatureReferenceNode[] = constructor?.signatures ?? []; const methods: MethodReferenceNode[] = filterChildrenByMember(symbol, 'kind', 'method'); methods.sort(defaultNodeSort); const properties: PropertyReferenceNode[] = filterChildrenByMember(symbol, 'kind', 'property'); const [propertiesWithoutEvents, events] = partition(properties, prop => hasTag(prop, 'eventListener')); events.sort(defaultNodeSort); const accessors: AccessorReferenceNode[] = filterChildrenByMember(symbol, 'kind', 'accessor'); const allGetProps = [...propertiesWithoutEvents, ...accessors] .filter(prop => prop.kind === 'property' || !!prop.getSignature) .sort(defaultNodeSort); return ( <> {hasTag(symbol, 'deprecated') && ( )} {hasTag(symbol, 'beta') && } {properties.length || methods.length || accessors.length ? ( <>

Overview

) : null} {symbol.comment?.text && } {constructorSigs.length ? ( <>

{constructorSigs.length === 1 ? 'Constructor' : 'Constructors'}

{constructorSigs.map(sig => ( ))} ) : null} {events.length ? ( <>

Events

{events.map(prop => ( ))} ) : null} {propertiesWithoutEvents.length || accessors.length ? ( <>

Properties

{allGetProps.map(prop => { if (prop.kind === 'property') { return ; } if (!prop.getSignature) { return null; } return ; })} ) : null} {methods.length ? ( <>

Methods

{methods.map(method => method.signatures?.map(sig => ( )) )} ) : null}
); }; export default ClassPage;