import type { ServiceUserUserInfoData } from '@/client'; import { identicon } from '@dicebear/collection'; import { createAvatar } from '@dicebear/core'; import MDEditor from '@uiw/react-md-editor'; import { isEmpty, isNil, } from 'lodash-es'; import { Mail, Pencil } from 'lucide-react'; import { useMemo, useState } from 'react'; import Markdown from 'react-markdown'; import { toast } from 'sonner'; import { Avatar, AvatarImage } from '@/components/ui/avatar'; import { base64ToUtf8 } from '@/lib/utils'; import { Button } from '../ui/button'; import { Spinner } from '../ui/spinner'; import { EditProfileDialogContainer } from './edit-profile.dialog.container'; export function ProfileView({ user, onSaveBio }: { user: ServiceUserUserInfoData; onSaveBio: (bio: string) => Promise }) { const [bio, setBio] = useState(() => base64ToUtf8(user.bio ?? '')); const [enableBioEdit, setEnableBioEdit] = useState(false); const [isSubmittingBio, setIsSubmittingBio] = useState(false); const IdentIcon = useMemo(() => { const avatar = createAvatar(identicon, { size: 128, seed: user.user_id, }).toDataUri(); return Avatar; }, [user.user_id]); return (
{!isEmpty(user.avatar) ? : IdentIcon}
{user.email}
{/* Bio */} {enableBioEdit ? ( ) :
{bio}
}
); }