Skip to content

Commit 6385358

Browse files
author
Jacob Logan
committed
update breadcrumbs separator, render nested typeArgs, render nested arraytypes
1 parent 44cd92c commit 6385358

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

src/components/ApiDocs/display/ParameterType.tsx

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,47 @@ interface ParameterComponentType {
2424
typeData: typeDataType;
2525
}
2626

27+
type TypeArguments = (string | React.JSX.Element)[];
28+
2729
export const ParameterType = ({ typeData }: ParameterComponentType) => {
2830
if (!typeData) return;
2931
const typeArgs = typeData.typeArguments;
3032
let typeType = typeData.type;
3133
if (typeData.kind === 256) {
3234
typeType = 'declaration';
3335
}
36+
37+
// adds type arguments to an array to be rendered
38+
const addTypeArgs = (
39+
typeArgs: LinkDataType[],
40+
displayArray: TypeArguments
41+
): TypeArguments => {
42+
const typeArgArray = typeArgs.reduce<TypeArguments>((acc, tArg, index) => {
43+
let retValue;
44+
if (index === 0) {
45+
retValue = [<TypeLink key={tArg.name} linkData={tArg} />];
46+
} else {
47+
retValue = [...acc, ', ', <TypeLink key={tArg.name} linkData={tArg} />];
48+
}
49+
if (tArg?.typeArguments?.length) {
50+
addTypeArgs(tArg.typeArguments, retValue);
51+
}
52+
return retValue;
53+
}, []);
54+
if (typeArgArray.length) {
55+
typeArgArray.push('>');
56+
typeArgArray.unshift('<');
57+
displayArray.push(...typeArgArray);
58+
}
59+
return displayArray;
60+
};
61+
3462
switch (typeType) {
3563
case 'reference':
3664
return (
3765
<>
3866
<ReferenceType data={typeData} />{' '}
39-
{typeArgs && (
40-
<>
41-
&lt;
42-
{typeArgs.reduce<(string | React.JSX.Element)[]>(
43-
(acc, tArg, index) => {
44-
if (index === 0)
45-
return [<TypeLink key={tArg.name} linkData={tArg} />];
46-
return [
47-
...acc,
48-
', ',
49-
<TypeLink key={tArg.name} linkData={tArg} />
50-
];
51-
},
52-
[]
53-
)}
54-
&gt;
55-
</>
56-
)}
67+
{typeArgs && <>{addTypeArgs(typeArgs, [])}</>}
5768
</>
5869
);
5970
case 'intersection':
@@ -82,6 +93,8 @@ export const ParameterType = ({ typeData }: ParameterComponentType) => {
8293
};
8394

8495
const ArrayType = ({ data }) => {
96+
console.log('ARRAY TYPE');
97+
console.log(data);
8598
return (
8699
<>
87100
<ParameterType typeData={data} />

src/components/ApiDocs/display/TypeLink.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export interface LinkDataType {
88
type: string | LinkDataType;
99
target: number;
1010
value: string;
11+
typeArguments: LinkDataType[];
12+
elementType: LinkDataType;
1113
}
1214

1315
export interface TypeLinkInterface {
@@ -37,6 +39,15 @@ export const TypeLink = ({ linkData, breadCrumbs }: TypeLinkInterface) => {
3739
return <View as="span">{linkData.name}</View>;
3840
} else if (linkData.type === 'literal') {
3941
return <View as="span">{linkData.value}</View>;
42+
} else if (linkData.type === 'array') {
43+
return [
44+
<TypeLink
45+
linkData={linkData.elementType}
46+
breadCrumbs={breadCrumbs}
47+
key={linkData.elementType.name}
48+
/>,
49+
'[]'
50+
];
4051
} else {
4152
return (
4253
<button className={className} onClick={onClickHandler}>

src/styles/reference.scss

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
overflow: scroll;
4646
align-items: baseline;
4747
gap: 2px;
48+
&__separator {
49+
color: var(--amplify-colors-neutral-90);
50+
}
4851
}
4952

5053
.api-modal__breadcrumbs__current {

0 commit comments

Comments
 (0)