@@ -3,16 +3,25 @@ import React from 'react';
33import Link from 'next/link' ;
44import { Card , CardContent , CardHeader , CardTitle } from '@/components/ui/card' ;
55
6+ interface Author {
7+ name : string ;
8+ photo ?: string ;
9+ }
10+
611interface DocTableProps {
712 frontmatter : {
8- Specification : string ;
9- Published : string ;
10- authors : string [ ] ;
11- Metaschema : string ;
13+ Specification ? : string ;
14+ Published ? : string ;
15+ authors ?: ( string | Author ) [ ] ;
16+ Metaschema ? : string ;
1217 } ;
1318}
1419
1520const DocTable = ( { frontmatter } : DocTableProps ) => {
21+ const authors = frontmatter . authors ?? [ ] ;
22+ const getAuthorName = ( author : string | Author ) : string =>
23+ typeof author === 'string' ? author : author . name ;
24+
1625 return (
1726 < Card className = 'w-full overflow-hidden py-0 border-2 border-primary shadow-lg gap-0' >
1827 < CardHeader className = 'bg-primary text-primary-foreground p-2 rounded-none' >
@@ -22,63 +31,71 @@ const DocTable = ({ frontmatter }: DocTableProps) => {
2231 </ CardHeader >
2332 < CardContent className = 'p-0' >
2433 < div className = 'bg-[#e2e8f0] dark:bg-[#0f172a]' >
25- < div className = 'border-b border-border' >
26- < div className = 'flex' >
27- < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
28- Specification
29- </ div >
30- < div className = 'w-2/3 p-4' >
31- < Link
32- href = { frontmatter . Specification }
33- className = 'text-primary hover:underline dark:text-blue-400'
34- target = '_blank'
35- rel = 'noopener noreferrer'
36- >
37- { frontmatter . Specification }
38- </ Link >
34+ { frontmatter . Specification && (
35+ < div className = 'border-b border-border' >
36+ < div className = 'flex' >
37+ < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
38+ Specification
39+ </ div >
40+ < div className = 'w-2/3 p-4' >
41+ < Link
42+ href = { frontmatter . Specification }
43+ className = 'text-primary hover:underline dark:text-blue-400'
44+ target = '_blank'
45+ rel = 'noopener noreferrer'
46+ >
47+ { frontmatter . Specification }
48+ </ Link >
49+ </ div >
3950 </ div >
4051 </ div >
41- </ div >
42- < div className = 'border-b border-border' >
43- < div className = 'flex' >
44- < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
45- Published
52+ ) }
53+ { frontmatter . Published && (
54+ < div className = 'border-b border-border' >
55+ < div className = 'flex' >
56+ < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
57+ Published
58+ </ div >
59+ < div className = 'w-2/3 p-4' > { frontmatter . Published } </ div >
4660 </ div >
47- < div className = 'w-2/3 p-4' > { frontmatter . Published } </ div >
4861 </ div >
49- </ div >
50- < div className = 'border-b border-border' >
51- < div className = 'flex' >
52- < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
53- Authors
54- </ div >
55- < div className = 'w-2/3 p-4' >
56- { frontmatter . authors . map ( ( author : string , index : number ) => (
57- < span key = { index } >
58- { author }
59- { index < frontmatter . authors . length - 1 ? ', ' : '' }
60- </ span >
61- ) ) }
62+ ) }
63+ { authors . length > 0 && (
64+ < div className = 'border-b border-border' >
65+ < div className = 'flex' >
66+ < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
67+ Authors
68+ </ div >
69+ < div className = 'w-2/3 p-4' >
70+ { authors . map ( ( author , index : number ) => (
71+ < span key = { index } >
72+ { getAuthorName ( author ) }
73+ { index < authors . length - 1 ? ', ' : '' }
74+ </ span >
75+ ) ) }
76+ </ div >
6277 </ div >
6378 </ div >
64- </ div >
65- < div >
66- < div className = 'flex' >
67- < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
68- Metaschema
69- </ div >
70- < div className = 'w-2/3 p-4' >
71- < Link
72- href = { frontmatter . Metaschema }
73- className = 'text-primary hover:underline dark:text-blue-400'
74- target = '_blank'
75- rel = 'noopener noreferrer'
76- >
77- { frontmatter . Metaschema }
78- </ Link >
79+ ) }
80+ { frontmatter . Metaschema && (
81+ < div >
82+ < div className = 'flex' >
83+ < div className = 'w-1/3 p-4 font-semibold text-base text-[#334155] dark:text-slate-300' >
84+ Metaschema
85+ </ div >
86+ < div className = 'w-2/3 p-4' >
87+ < Link
88+ href = { frontmatter . Metaschema }
89+ className = 'text-primary hover:underline dark:text-blue-400'
90+ target = '_blank'
91+ rel = 'noopener noreferrer'
92+ >
93+ { frontmatter . Metaschema }
94+ </ Link >
95+ </ div >
7996 </ div >
8097 </ div >
81- </ div >
98+ ) }
8299 </ div >
83100 </ CardContent >
84101 </ Card >
0 commit comments