aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/ProjectPreview/ProjectPreview.tsx
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-01-20 11:57:16 +0100
committerArmand Philippot <git@armandphilippot.com>2022-01-20 11:57:16 +0100
commitf5ba1046b13acd239c472e361f345902937662fb (patch)
treed2468fa51f3d2f9dda61eb9cdf6594ad8e618352 /src/components/ProjectPreview/ProjectPreview.tsx
parent08855874397399459b281f6f0506fa5e91cdfdc0 (diff)
chore: add a page for projects
Diffstat (limited to 'src/components/ProjectPreview/ProjectPreview.tsx')
-rw-r--r--src/components/ProjectPreview/ProjectPreview.tsx55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/components/ProjectPreview/ProjectPreview.tsx b/src/components/ProjectPreview/ProjectPreview.tsx
new file mode 100644
index 0000000..91969b0
--- /dev/null
+++ b/src/components/ProjectPreview/ProjectPreview.tsx
@@ -0,0 +1,55 @@
+import { t } from '@lingui/macro';
+import { Project } from '@ts/types/app';
+import { slugify } from '@utils/helpers/slugify';
+import Image from 'next/image';
+import Link from 'next/link';
+import styles from './ProjectPreview.module.scss';
+
+const ProjectPreview = ({ project }: { project: Project }) => {
+ return (
+ <Link href={`/projet/${project.slug}`}>
+ <a className={styles.link}>
+ <article className={styles.article}>
+ <header>
+ {project.cover && (
+ <div className={styles.cover}>
+ <Image
+ src={project.cover}
+ layout="fill"
+ objectFit="contain"
+ objectPosition="center"
+ alt={`${project.meta.title} picture`}
+ />
+ </div>
+ )}
+ <h2 className={styles.title}>{project.meta.title}</h2>
+ </header>
+ <div
+ className={styles.body}
+ dangerouslySetInnerHTML={{ __html: project.intro }}
+ ></div>
+ <footer>
+ <dl className={styles.meta}>
+ {project.meta.license && (
+ <div className={styles.meta__item}>
+ <dt>{t`License:`}</dt>
+ <dd>{project.meta.license}</dd>
+ </div>
+ )}
+ {project.meta.technologies && (
+ <div className={styles.meta__item}>
+ <dt>{t`Technologies:`}</dt>
+ {project.meta.technologies.map((techno) => (
+ <dd key={slugify(techno)}>{techno}</dd>
+ ))}
+ </div>
+ )}
+ </dl>
+ </footer>
+ </article>
+ </a>
+ </Link>
+ );
+};
+
+export default ProjectPreview;