2
2
mirror of https://github.com/Thream/website.git synced 2024-07-21 09:28:32 +02:00
website/components/design/SocialMediaButton/SocialMediaButton.tsx

103 lines
2.6 KiB
TypeScript
Raw Normal View History

import { useMemo } from "react"
import Image from "next/image"
import classNames from "clsx"
2021-10-24 05:48:06 +02:00
import type { ProviderOAuth } from "../../../models/OAuth"
import styles from "./SocialMediaButton.module.css"
export type SocialMedia = ProviderOAuth
2021-10-24 05:48:06 +02:00
type SocialMediaColors = {
[key in SocialMedia]: string
}
const socialMediaColors: SocialMediaColors = {
Discord: "#404EED",
GitHub: "#24292E",
Google: "#FCFCFC",
2021-10-24 05:48:06 +02:00
}
const className =
"py-2 px-6 inline-flex outline-none items-center font-paragraph rounded-lg cursor-pointer transition duration-300 ease-in-out hover:opacity-80 focus:outline-none"
interface SocialMediaChildrenProps {
socialMedia: SocialMedia
}
const SocialMediaChildren: React.FC<SocialMediaChildrenProps> = (props) => {
const { socialMedia } = props
return (
<>
<Image
quality={100}
width={20}
height={20}
src={`/images/svg/web/${socialMedia}.svg`}
alt={socialMedia}
/>
<span className="ml-2">{socialMedia}</span>
</>
)
}
export interface SocialMediaButtonProps
extends React.ComponentPropsWithRef<"button">,
SocialMediaChildrenProps {}
2021-10-24 05:48:06 +02:00
export const SocialMediaButton: React.FC<SocialMediaButtonProps> = (props) => {
const { socialMedia, className: givenClassName, ...rest } = props
2021-10-24 05:48:06 +02:00
const socialMediaColor = useMemo(() => {
return socialMediaColors[socialMedia]
}, [socialMedia])
return (
2022-12-13 22:31:32 +01:00
<button
{...rest}
style={{ background: socialMediaColor }}
className={classNames(
className,
styles["button"],
2022-12-13 22:31:32 +01:00
{
[styles["buttonGoogle"] as string]: socialMedia === "Google",
[styles["buttonMedia"] as string]: socialMedia !== "Google",
2022-12-13 22:31:32 +01:00
},
givenClassName,
2022-12-13 22:31:32 +01:00
)}
>
<SocialMediaChildren socialMedia={socialMedia} />
</button>
2021-10-24 05:48:06 +02:00
)
}
export interface SocialMediaLinkProps
extends React.ComponentPropsWithRef<"a">,
SocialMediaChildrenProps {}
export const SocialMediaLink: React.FC<SocialMediaLinkProps> = (props) => {
const { socialMedia, className: givenClassName, ...rest } = props
const socialMediaColor = useMemo(() => {
return socialMediaColors[socialMedia]
}, [socialMedia])
return (
2022-12-13 22:31:32 +01:00
<a
{...rest}
style={{ background: socialMediaColor }}
className={classNames(
className,
styles["button"],
2022-12-13 22:31:32 +01:00
{
[styles["buttonGoogle"] as string]: socialMedia === "Google",
[styles["buttonMedia"] as string]: socialMedia !== "Google",
2022-12-13 22:31:32 +01:00
},
givenClassName,
2022-12-13 22:31:32 +01:00
)}
>
<SocialMediaChildren socialMedia={socialMedia} />
</a>
)
}