/* eslint-disable @typescript-eslint/no-use-before-define */
// https://github.com/TypeStrong/typedoc-default-themes/blob/master/src/default/partials/Parameter.hbs
import { useMinimalLayout } from '../hooks/useMinimalLayout';
import type { TSDDeclarationReflection } from '../types';
import { Comment } from './Comment';
import { Flags } from './Flags';
import { Icon } from './Icon';
import { hasSigBody, MemberSignatureBody } from './MemberSignatureBody';
import { MemberSignatures } from './MemberSignatures';
import { MemberSignatureTitle } from './MemberSignatureTitle';
import { extractDeclarationFromType, Type } from './Type';
export interface ParameterProps {
param?: TSDDeclarationReflection;
}
function ParameterChild({ param }: ParameterProps) {
if (!param) {
return null;
}
if (param.signatures && param.signatures.length > 0) {
return (
{param.flags?.isRest && ...}
{param.name}
{param.flags?.isOptional && '?'}:
function
);
}
if (param.type) {
return (
{param.flags?.isRest && ...}
{param.name}
{param.flags?.isOptional && '?'}:
{param.children?.map((child) => )}
);
}
const getter = param.getSignature;
const setter = param.setSignature;
return (
<>
{getter && (
get
{getter.name}
():
)}
{setter && (
set
{setter.name}
(
{setter.parameters?.map((p, i) => (
{i > 0 && ', '}
{p.name}
:
{p.type ? : 'any'}
))}
):
)}
>
);
}
export function Parameter({ param }: ParameterProps) {
const minimal = useMinimalLayout();
if (!param || minimal) {
return null;
}
const hasSomeBody = param.signatures?.some((sig) => hasSigBody(sig, minimal, true));
return (
{param.signatures && param.signatures.length > 0 && (
-
{param.signatures.map((sig) => (
-
))}
{hasSomeBody && (
{param.signatures.map((sig) => (
-
))}
)}
)}
{param.indexSignature && (
-
[
{param.indexSignature.parameters?.map((p) => (
{p.flags?.isRest && ...}
{p.name}
))}
]:
)}
{param.children?.map((child) => )}
);
}