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

104 lines
4.0 KiB
TypeScript
Raw Normal View History

import Image from "next/image"
import date from "date-and-time"
import useTranslation from "next-translate/useTranslation"
import type { UserPublic } from "../../../models/User"
import type { Guild } from "../../../models/Guild"
export interface UserProfileProps {
className?: string
user: UserPublic
guilds: Guild[]
}
export const UserProfile: React.FC<UserProfileProps> = (props) => {
2022-03-16 12:18:09 +01:00
const { user } = props
const { t } = useTranslation()
return (
<div className="relative flex h-full flex-col items-center justify-center">
<div className="transition">
<div className="max-w-[1000px] px-12">
<div className="flex items-center justify-between">
<div className="flex w-max flex-col items-center gap-7 md:flex-row">
<div className="relative flex items-center justify-center overflow-hidden rounded-full shadow-lg transition-all">
2022-12-13 22:31:32 +01:00
<Image
quality={100}
className="rounded-full"
2022-12-13 22:31:32 +01:00
src={
user.logo != null
? user.logo
: "/images/data/user-default.png"
2022-12-13 22:31:32 +01:00
}
alt="Profil Picture"
draggable="false"
2022-12-13 22:31:32 +01:00
height={125}
width={125}
/>
</div>
<div className="ml-10 flex flex-col">
<div className="mb-2 flex items-center">
2022-12-13 22:31:32 +01:00
<p
className="space text-dark text-3xl font-bold tracking-wide dark:text-white"
data-cy="user-name"
2022-12-13 22:31:32 +01:00
>
{user.name}
</p>
<p
className="ml-8 select-none text-sm tracking-widest text-white opacity-40"
data-cy="user-createdAt"
2022-12-13 22:31:32 +01:00
>
{date.format(new Date(user.createdAt), "DD/MM/YYYY")}
2022-12-13 22:31:32 +01:00
</p>
2022-01-14 23:15:51 +01:00
</div>
<div className="my-2 text-left">
2022-12-13 22:31:32 +01:00
{user.email != null && (
<p className="font-bold">
Email:{" "}
2022-12-13 22:31:32 +01:00
<a
href={`mailto:${user.email}`}
target="_blank"
className="relative ml-2 font-normal tracking-wide no-underline opacity-80 transition-all after:absolute after:bottom-[-1px] after:left-0 after:h-[1px] after:w-0 after:bg-black after:transition-all hover:opacity-100 hover:after:w-full dark:after:bg-white"
rel="noreferrer"
data-cy="user-email"
2022-12-13 22:31:32 +01:00
>
{user.email}
</a>
</p>
)}
{user.website != null && (
<p className="font-bold">
{t("application:website")}:{" "}
2022-12-13 22:31:32 +01:00
<a
target="_blank"
rel="noreferrer"
2022-12-13 22:31:32 +01:00
href={user.website}
className="relative ml-2 font-normal tracking-wide no-underline opacity-80 transition-all after:absolute after:bottom-[-2px] after:left-0 after:h-[1px] after:w-0 after:bg-black after:transition-all hover:opacity-100 hover:after:w-full dark:after:bg-white"
2022-12-13 22:31:32 +01:00
>
{user.website}
</a>
2022-01-14 23:15:51 +01:00
</p>
2022-12-13 22:31:32 +01:00
)}
{user.status != null && (
<p className="flex font-bold">
{t("application:status")}:{" "}
<span className="ml-2 font-normal tracking-wide">
2022-12-13 22:31:32 +01:00
{user.status}
</span>
2022-01-14 23:15:51 +01:00
</p>
2022-12-13 22:31:32 +01:00
)}
2022-01-14 23:15:51 +01:00
</div>
</div>
</div>
</div>
2022-12-13 22:31:32 +01:00
{user.biography != null && (
<div className="mt-7 text-center">
2022-12-13 22:31:32 +01:00
<p>{user.biography}</p>
</div>
)}
</div>
2022-01-14 23:15:51 +01:00
</div>
2022-12-13 22:31:32 +01:00
</div>
)
}