Skip to content

Commit ba93e57

Browse files
Add profile update functionality in front end.
1 parent 6177af4 commit ba93e57

File tree

1 file changed

+99
-94
lines changed

1 file changed

+99
-94
lines changed

giftlink-frontend/src/components/Profile/Profile.js

Lines changed: 99 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -5,129 +5,134 @@ import {urlConfig} from '../../config';
55
import { useAppContext } from '../../context/AuthContext';
66

77
const Profile = () => {
8-
const [userDetails, setUserDetails] = useState({});
9-
const [updatedDetails, setUpdatedDetails] = useState({});
10-
const {setUserName} = useAppContext();
11-
const [changed, setChanged] = useState("");
8+
const [userDetails, setUserDetails] = useState({});
9+
const [updatedDetails, setUpdatedDetails] = useState({});
10+
const {setUserName} = useAppContext();
11+
const [changed, setChanged] = useState("");
1212

13-
const [editMode, setEditMode] = useState(false);
14-
const navigate = useNavigate();
15-
useEffect(() => {
16-
const authtoken = sessionStorage.getItem("auth-token");
17-
if (!authtoken) {
18-
navigate("/app/login");
19-
} else {
20-
fetchUserProfile();
21-
}
22-
}, [navigate]);
13+
const [editMode, setEditMode] = useState(false);
14+
const navigate = useNavigate();
15+
useEffect(() => {
16+
const authtoken = sessionStorage.getItem("auth-token");
17+
if (!authtoken) {
18+
navigate("/app/login");
19+
} else {
20+
fetchUserProfile();
21+
}
22+
}, [navigate]);
2323

24-
const fetchUserProfile = async () => {
25-
try {
26-
const authtoken = sessionStorage.getItem("auth-token");
27-
const email = sessionStorage.getItem("email");
28-
const name=sessionStorage.getItem('name');
29-
if (name || authtoken) {
24+
const fetchUserProfile = async () => {
25+
try {
26+
const authtoken = sessionStorage.getItem("auth-token");
27+
const email = sessionStorage.getItem("email");
28+
const name=sessionStorage.getItem('name');
29+
if (name || authtoken) {
3030
const storedUserDetails = {
31-
name: name,
32-
email:email
31+
name: name,
32+
email:email
3333
};
3434

3535
setUserDetails(storedUserDetails);
3636
setUpdatedDetails(storedUserDetails);
37-
}
38-
} catch (error) {
39-
console.error(error);
40-
// Handle error case
41-
}
42-
};
37+
}
38+
} catch (error) {
39+
console.error(error);
40+
// Handle error case
41+
}
42+
};
4343

44-
const handleEdit = () => {
45-
setEditMode(true);
46-
};
44+
const handleEdit = () => {
45+
setEditMode(true);
46+
};
4747

48-
const handleInputChange = (e) => {
49-
setUpdatedDetails({
50-
...updatedDetails,
51-
[e.target.name]: e.target.value,
52-
});
53-
};
54-
const handleSubmit = async (e) => {
55-
e.preventDefault();
48+
const handleInputChange = (e) => {
49+
setUpdatedDetails({
50+
...updatedDetails,
51+
[e.target.name]: e.target.value,
52+
});
53+
};
54+
55+
const handleSubmit = async (e) => {
56+
e.preventDefault();
5657

57-
try {
58+
try {
5859
const authtoken = sessionStorage.getItem("auth-token");
5960
const email = sessionStorage.getItem("email");
6061

6162
if (!authtoken || !email) {
62-
navigate("/app/login");
63-
return;
63+
navigate("/app/login");
64+
return;
6465
}
6566

6667
const payload = { ...updatedDetails };
6768
const response = await fetch(`${urlConfig.backendUrl}/api/auth/update`, {
68-
//Step 1: Task 1
69-
//Step 1: Task 2
70-
//Step 1: Task 3
69+
method: "PUT",//Step 1: Task 1
70+
headers: {//Step 1: Task 2
71+
"Authorization": `Bearer ${authtoken}`,
72+
"Content-Type": "application/json",
73+
"Email": email,
74+
},
75+
body: JSON.stringify(payload),//Step 1: Task 3
7176
});
7277

7378
if (response.ok) {
74-
// Update the user details in session storage
75-
//Step 1: Task 4
76-
//Step 1: Task 5
77-
setUserDetails(updatedDetails);
78-
setEditMode(false);
79-
// Display success message to the user
80-
setChanged("Name Changed Successfully!");
81-
setTimeout(() => {
79+
// Update the user details in session storage
80+
setUserName(updatedDetails.name);//Step 1: Task 4
81+
sessionStorage.setItem("name", updatedDetails.name);//Step 1: Task 5
82+
setUserDetails(updatedDetails);
83+
setEditMode(false);
84+
// Display success message to the user
85+
setChanged("Name Changed Successfully!");
86+
setTimeout(() => {
8287
setChanged("");
8388
navigate("/");
84-
}, 1000);
89+
}, 1000);
8590

8691
} else {
87-
// Handle error case
88-
throw new Error("Failed to update profile");
92+
// Handle error case
93+
throw new Error("Failed to update profile");
8994
}
90-
} catch (error) {
91-
console.error(error);
95+
} catch (error) {
96+
console.error(error);
9297
// Handle error case
93-
}
98+
}
9499
};
95100

96-
return (
97-
<div className="profile-container">
98-
{editMode ? (
99-
<form onSubmit={handleSubmit}>
100-
<label>
101-
Email
102-
<input
103-
type="email"
104-
name="email"
105-
value={userDetails.email}
106-
disabled // Disable the email field
107-
/>
108-
</label>
109-
<label>
110-
Name
111-
<input
112-
type="text"
113-
name="name"
114-
value={updatedDetails.name}
115-
onChange={handleInputChange}
116-
/>
117-
</label>
101+
return (
102+
<div className="profile-container">
103+
{editMode ? (
104+
<form onSubmit={handleSubmit}>
105+
<label>
106+
Email
107+
<input
108+
type="email"
109+
name="email"
110+
value={userDetails.email}
111+
disabled // Disable the email field
112+
/>
113+
</label>
114+
<label>
115+
Name
116+
<input
117+
type="text"
118+
name="name"
119+
value={updatedDetails.name}
120+
onChange={handleInputChange}
121+
/>
122+
</label>
118123

119-
<button type="submit">Save</button>
120-
</form>
121-
) : (
122-
<div className="profile-details">
123-
<h1>Hi, {userDetails.name}</h1>
124-
<p> <b>Email:</b> {userDetails.email}</p>
125-
<button onClick={handleEdit}>Edit</button>
126-
<span style={{color:'green',height:'.5cm',display:'block',fontStyle:'italic',fontSize:'12px'}}>{changed}</span>
127-
</div>
128-
)}
129-
</div>
130-
);
124+
<button type="submit">Save</button>
125+
</form>
126+
) : (
127+
<div className="profile-details">
128+
<h1>Hi, {userDetails.name}</h1>
129+
<p> <b>Email:</b> {userDetails.email}</p>
130+
<button onClick={handleEdit}>Edit</button>
131+
<span style={{color:'green',height:'.5cm',display:'block',fontStyle:'italic',fontSize:'12px'}}>{changed}</span>
132+
</div>
133+
)}
134+
</div>
135+
);
131136
};
132137

133-
export default Profile;
138+
export default Profile;

0 commit comments

Comments
 (0)