diff options
| author | Armand Philippot <git@armandphilippot.com> | 2022-04-01 17:11:25 +0200 | 
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2022-04-01 17:22:39 +0200 | 
| commit | 163f9dc0fe436b708de4e59999e87005c6685a0f (patch) | |
| tree | 34f25b014b606f88976710e622cda7eb38e2dd49 /src/components/atoms/links/social-link.tsx | |
| parent | 2385ec8ca0963306f6b87564467301cb5a2a1834 (diff) | |
chore: add a social link component
Diffstat (limited to 'src/components/atoms/links/social-link.tsx')
| -rw-r--r-- | src/components/atoms/links/social-link.tsx | 51 | 
1 files changed, 51 insertions, 0 deletions
| diff --git a/src/components/atoms/links/social-link.tsx b/src/components/atoms/links/social-link.tsx new file mode 100644 index 0000000..489c8b4 --- /dev/null +++ b/src/components/atoms/links/social-link.tsx @@ -0,0 +1,51 @@ +import GithubIcon from '@assets/images/social-media/github.svg'; +import GitlabIcon from '@assets/images/social-media/gitlab.svg'; +import LinkedInIcon from '@assets/images/social-media/linkedin.svg'; +import TwitterIcon from '@assets/images/social-media/twitter.svg'; +import { FC } from 'react'; +import styles from './social-link.module.scss'; + +type SocialLinkProps = { +  /** +   * The social website name. +   */ +  name: 'Github' | 'Gitlab' | 'LinkedIn' | 'Twitter'; +  /** +   * The social profile url. +   */ +  url: string; +}; + +/** + * SocialLink component + * + * Render a social icon link. + */ +const SocialLink: FC<SocialLinkProps> = ({ name, url }) => { +  /** +   * Retrieve a social link icon by id. +   * @param {string} id - The social website id. +   */ +  const getIcon = (id: string) => { +    switch (id) { +      case 'Github': +        return <GithubIcon className={styles.icon} aria-hidden="true" />; +      case 'Gitlab': +        return <GitlabIcon className={styles.icon} aria-hidden="true" />; +      case 'LinkedIn': +        return <LinkedInIcon className={styles.icon} aria-hidden="true" />; +      case 'Twitter': +        return <TwitterIcon className={styles.icon} aria-hidden="true" />; +      default: +        break; +    } +  }; + +  return ( +    <a href={url} className={styles.link} aria-label={name}> +      {getIcon(name)} +    </a> +  ); +}; + +export default SocialLink; | 
