1- import React , { useImperativeHandle , useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
22import { useUser } from '../contexts/UserContext' ;
3- import { useNavigate } from 'react-router-dom' ;
43import EmptyState from '../components/ui/EmptyState' ;
54import { Input } from '../components/ui/input' ;
65import { Button } from '../components/ui/button' ;
6+ import { sanitizeAvatarUrl } from '../lib/avatar' ;
77
88const Profile : React . FC = ( ) => {
9- const { user, login, logout } = useUser ( ) ;
9+ const { user, login, logout, updateUser } = useUser ( ) ;
1010 const [ email , setEmail ] = useState ( '' ) ;
1111 const [ loading , setLoading ] = useState ( false ) ;
1212 const [ error , setError ] = useState ( '' ) ;
@@ -19,7 +19,6 @@ const Profile: React.FC = () => {
1919 company : user ?. company || '' ,
2020 website : user ?. website || ''
2121 } ) ;
22- const navigate = useNavigate ( ) ;
2322
2423 const handleLogin = async ( e : React . FormEvent ) => {
2524 e . preventDefault ( ) ;
@@ -35,12 +34,22 @@ const Profile: React.FC = () => {
3534 } ;
3635
3736 const handleSave = ( ) => {
38- // Update user context and localStorage
39- Object . assign ( user ! , form ) ;
40- localStorage . setItem ( 'user' , JSON . stringify ( user ) ) ;
37+ if ( ! user ) return ;
38+ updateUser ( form ) ;
4139 setEditMode ( false ) ;
4240 } ;
4341
42+ useEffect ( ( ) => {
43+ setForm ( {
44+ phone : user ?. phone || '' ,
45+ address : user ?. address || '' ,
46+ birthdate : user ?. birthdate || '' ,
47+ gender : user ?. gender || '' ,
48+ company : user ?. company || '' ,
49+ website : user ?. website || ''
50+ } ) ;
51+ } , [ user ] ) ;
52+
4453 if ( ! user ) {
4554 return (
4655 < div className = "min-h-screen flex flex-col items-center justify-center py-8" >
@@ -70,7 +79,7 @@ const Profile: React.FC = () => {
7079 return (
7180 < div className = "min-h-screen flex flex-col items-center justify-center py-8" >
7281 < div className = "bg-white rounded-lg shadow p-8 flex flex-col items-center" >
73- < img src = { user . avatar } alt = { user . name } className = "w-24 h-24 rounded-full mb-4" />
82+ < img src = { sanitizeAvatarUrl ( user . avatar ) } alt = { user . name } className = "w-24 h-24 rounded-full mb-4" />
7483 < h2 className = "text-xl font-bold mb-2" > { user . name } </ h2 >
7584 < div className = "text-gray-600 mb-2" > { user . email } </ div >
7685 < div className = "text-gray-600 mb-2" > @{ user . username } </ div >
0 commit comments