diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-10-17 19:46:08 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:14:41 +0100 |
| commit | c153f93dc8691a71dc76aad3dd618298da9d238a (patch) | |
| tree | 9c116c1472bab5585f98bceee19cfeca5041360d /src/pages/index.tsx | |
| parent | 006b15b467a5cd835a6eab1b49023100bdc8f2e6 (diff) | |
refactor(components): rewrite Card component
* make the component more generic
* merge `<Summary />` and `<Comment />` styles into card component
to avoid repeating the same structure
* remove most of the props to use composition
However the CSS is a bit complex because of the two variants...
Also, the component should be refactored when the CSS pseudo-class
`:has` has enough support: the provider and the `cover` and `meta`
props should be removed.
Diffstat (limited to 'src/pages/index.tsx')
| -rw-r--r-- | src/pages/index.tsx | 59 |
1 files changed, 45 insertions, 14 deletions
diff --git a/src/pages/index.tsx b/src/pages/index.tsx index fb6ba9a..e482fb4 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -8,19 +8,25 @@ import type { FC, HTMLAttributes } from 'react'; import { useIntl } from 'react-intl'; import { ButtonLink, + Card, + CardCover, + CardFooter, + CardHeader, + CardMeta, + CardTitle, CardsList, type CardsListItem, Column, Columns, type ColumnsProps, + Figure, getLayout, + Heading, Icon, List, ListItem, Section, type SectionProps, - Heading, - Figure, Time, } from '../components'; import HomePageContent from '../content/pages/homepage.mdx'; @@ -299,22 +305,47 @@ const HomePage: NextPageWithLayout<HomeProps> = ({ recentPosts }) => { const getRecentPosts = (): JSX.Element => { const posts: CardsListItem[] = recentPosts.map((post) => { return { - cover: post.cover, - id: post.slug, - meta: [ - { - id: 'publication-date', - label: publicationDate, - value: <Time date={post.dates.publication} />, - }, - ], - title: post.title, - url: `${ROUTES.ARTICLE}/${post.slug}`, + card: ( + <Card + cover={ + post.cover ? ( + <CardCover hasBorders> + <NextImage + {...post.cover} + style={{ objectFit: 'scale-down' }} + /> + </CardCover> + ) : undefined + } + meta={ + <CardMeta + hasBorderedValues + hasInlinedValues + isCentered + items={[ + { + id: 'publication-date', + label: publicationDate, + value: <Time date={post.dates.publication} />, + }, + ]} + /> + } + isCentered + linkTo={`${ROUTES.ARTICLE}/${post.slug}`} + > + <CardHeader> + <CardTitle level={3}>{post.title}</CardTitle> + </CardHeader> + <CardFooter /> + </Card> + ), + id: `${post.id}`, }; }); const listClass = `${styles.list} ${styles['list--cards']}`; - return <CardsList className={listClass} items={posts} titleLevel={3} />; + return <CardsList className={listClass} items={posts} />; }; const components: MDXComponents = { |
