1- import Link from 'next/link' ;
21import Image from 'next/image' ;
32import { format } from 'date-fns' ;
43
54import { getArticleById } from '@/core/blog' ;
6- import { BlockRenderer } from '@/components/renderer/BlockRenderer' ;
75import Label from '@/components/Label' ;
8- import Text from '@/components/Text' ;
96import Heading from '@/components/Heading' ;
7+ import Container from '@/components/Container' ;
8+ import { BlockRenderer } from '@/components/renderer/BlockRenderer' ;
109
11- import { backLink , bodyContainer , categories , categoryChip , date , thumbnailImageWrapper , label , thumbnailImage , title } from './index.css' ;
10+ import { bodyContainer , articleInfo , thumbnailImageWrapper , thumbnailImage , articleTitle , dimmedFilter , titleContainer } from './index.css' ;
1211
1312
1413interface ArticlePageProps {
@@ -23,55 +22,36 @@ async function ArticlePage({ params }: ArticlePageProps) {
2322
2423 return (
2524 < >
26- < Link href = '/articles' className = { backLink } >
27- < BackIcon />
28- < Text size = 's' className = { label } > 뒤로 가기</ Text >
29- </ Link >
30- { article . thumbnail && (
31- < div className = { thumbnailImageWrapper } >
32- < Image
33- src = { article . thumbnail . url }
34- alt = 'Thumbnail Image'
35- fill
36- className = { thumbnailImage }
37- />
38- </ div >
39- ) }
40- < div className = { categories } >
41- { article . category && (
42- < >
43- { /* <Link href={`/category/articles?category=${encode(article.category)}`}> */ }
44- < Text className = { categoryChip } >
45- { article . category }
46- </ Text >
47- { /* </Link> */ }
48- </ >
49- ) }
50- </ div >
51- < Heading as = "h1" size = 'headline-l' className = { title } >
52- { article . title }
53- </ Heading >
54- < Label size = 'm' className = { date } >
55- { article . publishedAt && format ( article . publishedAt , 'yyyy.MM.dd' ) }
56- </ Label >
57- < Text className = { bodyContainer } >
25+ { article . thumbnail
26+ ? (
27+ < div className = { thumbnailImageWrapper } >
28+ < Image
29+ src = { article . thumbnail . url }
30+ alt = 'Thumbnail Image'
31+ fill
32+ className = { thumbnailImage }
33+ />
34+ < div className = { dimmedFilter } >
35+ < Container className = { titleContainer } >
36+ < Label size = 'l' serif className = { articleInfo } >
37+ { article . category } | { article . publishedAt && format ( article . publishedAt , 'yyyy.MM.dd' ) }
38+ </ Label >
39+ < Heading as = "h1" size = 'display-m' serif className = { articleTitle } >
40+ { article . title }
41+ </ Heading >
42+ </ Container >
43+ </ div >
44+ </ div >
45+ )
46+ : (
47+ null
48+ )
49+ }
50+ < Container className = { bodyContainer } >
5851 < BlockRenderer blocks = { article . blocks } />
59- </ Text >
52+ </ Container >
6053 </ >
6154 ) ;
6255}
6356
64- export default ArticlePage ;
65-
66- function BackIcon ( props : React . SVGProps < SVGSVGElement > ) {
67- return (
68- < svg width = { 20 } height = { 20 } fill = 'none' xmlns = 'http://www.w3.org/2000/svg' { ...props } >
69- < path
70- fillRule = 'evenodd'
71- clipRule = 'evenodd'
72- d = 'M13.852 2.642a.498.498 0 010 .7L7.194 10l6.658 6.658a.498.498 0 010 .7.498.498 0 01-.7 0L6.144 10.35a.498.498 0 010-.7l7.008-7.008a.498.498 0 01.7 0z'
73- fill = '#808388'
74- />
75- </ svg >
76- ) ;
77- }
57+ export default ArticlePage ;
0 commit comments