diff options
Diffstat (limited to 'src/components/PostHeader/PostHeader.tsx')
| -rw-r--r-- | src/components/PostHeader/PostHeader.tsx | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/src/components/PostHeader/PostHeader.tsx b/src/components/PostHeader/PostHeader.tsx new file mode 100644 index 0000000..5c5aff4 --- /dev/null +++ b/src/components/PostHeader/PostHeader.tsx @@ -0,0 +1,72 @@ +import { t } from '@lingui/macro'; +import { ArticleAuthor, ArticleDates } from '@ts/types/articles'; +import { ThematicPreview } from '@ts/types/taxonomies'; +import Link from 'next/link'; +import { useRouter } from 'next/router'; +import styles from './PostHeader.module.scss'; + +const PostHeader = ({ +  author, +  date, +  intro, +  title, +  thematics, +}: { +  author: ArticleAuthor; +  date: ArticleDates; +  intro: string; +  title: string; +  thematics: ThematicPreview[]; +}) => { +  const { locale } = useRouter(); + +  const getAuthor = () => { +    return author.firstName +      ? `${author.firstName} ${author.lastName}` +      : author.name; +  }; + +  const getLocaleDate = (date: string) => { +    const dateOptions: Intl.DateTimeFormatOptions = { +      day: 'numeric', +      month: 'long', +      year: 'numeric', +    }; +    return new Date(date).toLocaleDateString(locale, dateOptions); +  }; + +  const getThematics = () => { +    return thematics.map((thematic) => { +      return ( +        <dd key={thematic.id}> +          <Link href={`/thematique/${thematic.slug}`}> +            <a>{thematic.title}</a> +          </Link> +        </dd> +      ); +    }); +  }; + +  return ( +    <header> +      <h1>{title}</h1> +      <ul className={styles.meta}> +        <li>{t`Written by ${getAuthor()} on ${getLocaleDate( +          date.publication +        )}.`}</li> +        <li>{t`Last update on ${getLocaleDate(date.update)}.`}</li> +        {thematics.length > 0 && ( +          <li> +            <dl> +              <dt className={styles.label}>{t`Posted in:`}</dt> +              {getThematics()} +            </dl> +          </li> +        )} +      </ul> +      <div dangerouslySetInnerHTML={{ __html: intro }}></div> +    </header> +  ); +}; + +export default PostHeader; | 
