Skip to content

Commit cb54aae

Browse files
committed
More robust undefined behaviour
1 parent e2ab4c2 commit cb54aae

3 files changed

Lines changed: 26 additions & 8 deletions

File tree

templates/next/components/common/ReferenceLinks.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,20 @@ import Link from "next/link";
22
import { Fragment, FunctionComponent } from "react";
33

44
interface Props {
5-
items: string | string[] | { href: string; name: string } | { href: string; name: string }[];
5+
items:
6+
| string
7+
| string[]
8+
| { href: string; name: string | undefined }
9+
| { href: string; name: string | undefined }[]
10+
| null
11+
| undefined;
612
}
713

814
const ReferenceLinks: FunctionComponent<Props> = ({ items }) => {
15+
if (!items) {
16+
return null;
17+
}
18+
919
if (Array.isArray(items)) {
1020
return (
1121
<Fragment>
@@ -23,7 +33,7 @@ const ReferenceLinks: FunctionComponent<Props> = ({ items }) => {
2333
href={typeof items === "string" ? items : items.href}
2434
className="text-cyan-700 font-bold"
2535
>
26-
{typeof items === "string" ? items : items.name}
36+
{typeof items === "string" ? items : items.name || items.href}
2737
</Link>
2838
);
2939
};

templates/next/components/foo/List.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,17 @@ export const List: FunctionComponent<Props> = ({ {{{lc}}}s }) => (
4040
{{#each fields}}
4141
<td>
4242
{{#if isReferences}}
43-
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((ref: any) => ({ href: getItemPath(ref, '/{{{lowercase reference.title}}}s/[id]'), name: ref })) } />
43+
{ {{{../lc}}}['{{{name}}}'] && (
44+
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((ref: any) => ({ href: getItemPath(ref, '/{{{lowercase reference.title}}}s/[id]'), name: ref })) } />
45+
)}
4446
{{else if reference}}
4547
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}'], '/{{{lowercase reference.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}'] } } />
4648
{{else if isEmbeddeds}}
47-
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((emb: any) => ({ href: getItemPath(emb['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: emb['@id'] })) } />
49+
{ {{{../lc}}}['{{{name}}}'] && (
50+
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((emb: any) => ({ href: getItemPath(emb['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: emb['@id'] })) } />
51+
)}
4852
{{else if embedded}}
49-
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}']['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}']['@id'] } } />
53+
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}']?.['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}']?.['@id'] } } />
5054
{{else if (compare type "==" "Date") }}
5155
{ {{{../lc}}}['{{{name}}}']?.toLocaleString() }
5256
{{else}}

templates/next/components/foo/Show.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,17 @@ export const Show: FunctionComponent<Props> = ({ {{{lc}}}, text }) => {
5555
<th scope="row">{{name}}</th>
5656
<td>
5757
{{#if isReferences}}
58-
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((ref: any) => ({ href: getItemPath(ref, '/{{{lowercase reference.title}}}s/[id]'), name: ref })) } />
58+
{ {{{../lc}}}['{{{name}}}'] && (
59+
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((ref: any) => ({ href: getItemPath(ref, '/{{{lowercase reference.title}}}s/[id]'), name: ref })) } />
60+
)}
5961
{{else if reference}}
6062
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}'], '/{{{lowercase reference.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}'] } } />
6163
{{else if isEmbeddeds}}
62-
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((emb: any) => ({ href: getItemPath(emb['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: emb['@id'] })) } />
64+
{ {{{../lc}}}['{{{name}}}'] && (
65+
<ReferenceLinks items={ {{{../lc}}}['{{{name}}}'].map((emb: any) => ({ href: getItemPath(emb['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: emb['@id'] })) } />
66+
)}
6367
{{else if embedded}}
64-
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}']['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}']['@id'] } } />
68+
<ReferenceLinks items={ { href: getItemPath({{{../lc}}}['{{{name}}}']?.['@id'], '/{{{lowercase embedded.title}}}s/[id]'), name: {{{../lc}}}['{{{name}}}']?.['@id'] } } />
6569
{{else if (compare type "==" "Date") }}
6670
{ {{{../lc}}}['{{{name}}}']?.toLocaleString() }
6771
{{else}}

0 commit comments

Comments
 (0)