diff options
Diffstat (limited to 'src/components/organisms/layout/overview.tsx')
| -rw-r--r-- | src/components/organisms/layout/overview.tsx | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/components/organisms/layout/overview.tsx b/src/components/organisms/layout/overview.tsx new file mode 100644 index 0000000..b110e68 --- /dev/null +++ b/src/components/organisms/layout/overview.tsx @@ -0,0 +1,61 @@ +import ResponsiveImage, { + type ResponsiveImageProps, +} from '@components/molecules/images/responsive-image'; +import Meta, { type MetaData } from '@components/molecules/layout/meta'; +import { FC } from 'react'; +import styles from './overview.module.scss'; + +export type OverviewMeta = Pick< + MetaData, + | 'creation' + | 'license' + | 'popularity' + | 'repositories' + | 'technologies' + | 'update' +>; + +export type OverviewProps = { + /** + * Set additional classnames to the overview wrapper. + */ + className?: string; + /** + * The overview cover. + */ + cover?: Pick<ResponsiveImageProps, 'alt' | 'src' | 'width' | 'height'>; + /** + * The overview meta. + */ + meta: OverviewMeta; +}; + +/** + * Overview component + * + * Render an overview. + */ +const Overview: FC<OverviewProps> = ({ className = '', cover, meta }) => { + const { technologies, ...remainingMeta } = meta; + const metaModifier = technologies ? styles['meta--has-techno'] : ''; + + return ( + <div className={`${styles.wrapper} ${className}`}> + {cover && ( + <ResponsiveImage + className={styles.cover} + objectFit="contain" + {...cover} + /> + )} + <Meta + data={{ ...remainingMeta, technologies }} + layout="inline" + className={`${styles.meta} ${metaModifier}`} + withSeparator={false} + /> + </div> + ); +}; + +export default Overview; |
