feat: handle avatar uploading on verify

This commit is contained in:
2025-06-07 02:10:11 +02:00
parent 83535acf1c
commit 13f9da1a67

View File

@ -1,5 +1,6 @@
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { useAuth } from "@/store/auth"; import { useAuth } from "@/store/auth";
import { useVerify } from "@/store/verify";
import { User } from "lucide-react"; import { User } from "lucide-react";
import { useCallback, useEffect, useRef, useState, type FC } from "react"; import { useCallback, useEffect, useRef, useState, type FC } from "react";
import { Link } from "react-router"; import { Link } from "react-router";
@ -16,6 +17,9 @@ const VerifyAvatarPage: FC = () => {
const fileInputRef = useRef<HTMLInputElement | null>(null); const fileInputRef = useRef<HTMLInputElement | null>(null);
const uploadAvatar = useVerify((s) => s.uploadAvatar);
const uploading = useVerify((s) => s.uploading);
useEffect(() => { useEffect(() => {
if (profile?.profile_picture) setAvatar(profile.profile_picture); if (profile?.profile_picture) setAvatar(profile.profile_picture);
}, [profile?.profile_picture]); }, [profile?.profile_picture]);
@ -97,6 +101,17 @@ const VerifyAvatarPage: FC = () => {
setTakingPicture(false); setTakingPicture(false);
}, []); }, []);
const handleUpload = useCallback(async () => {
if (!avatar) return;
const res = await fetch(avatar);
const blob = await res.blob();
const file = new File([blob], "avatar.png", { type: blob.type });
uploadAvatar(file);
}, [avatar, uploadAvatar]);
return ( return (
<div className="w-full sm:max-w-sm mx-auto p-4"> <div className="w-full sm:max-w-sm mx-auto p-4">
<div className="flex flex-col gap-2 w-full max-w-xs mx-auto"> <div className="flex flex-col gap-2 w-full max-w-xs mx-auto">
@ -161,7 +176,14 @@ const VerifyAvatarPage: FC = () => {
{avatar && ( {avatar && (
<> <>
<Link to="/verify/review" className="w-full"> <Link to="/verify/review" className="w-full">
<Button className="w-full">Next</Button> <Button
className="w-full"
loading={uploading}
disabled={uploading}
onClick={handleUpload}
>
Next
</Button>
</Link> </Link>
<Button <Button
className="border-yellow-500 text-yellow-500 hover:border-yellow-600 hover:text-yellow-600" className="border-yellow-500 text-yellow-500 hover:border-yellow-600 hover:text-yellow-600"