From 314c1eadafb92fbe8c46a9639925bde2e1e76d2d Mon Sep 17 00:00:00 2001 From: mperezsa <19-mperezsa@users.noreply.022e47118ec0> Date: Thu, 25 Nov 2021 12:48:34 +0000 Subject: [PATCH] Upload New File --- .../src/components/pages/UpdateProfile.js | 308 ++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 PROF-XXI FW Tool/client/src/components/pages/UpdateProfile.js diff --git a/PROF-XXI FW Tool/client/src/components/pages/UpdateProfile.js b/PROF-XXI FW Tool/client/src/components/pages/UpdateProfile.js new file mode 100644 index 0000000..7b958bc --- /dev/null +++ b/PROF-XXI FW Tool/client/src/components/pages/UpdateProfile.js @@ -0,0 +1,308 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; +import Footer from "../../components/Footer"; + +function UpdateProfile() { + const [profile, setProfile] = useState( + JSON.parse(localStorage.getItem("profile")) + ); + + const [user, setUser] = useState({ + organizationName: profile?.user?.organizationName, + universityWebsite: profile?.user?.universityWebsite, + firstName: profile?.user?.firstName, + lastName: profile?.user?.lastName, + position: profile?.user?.position, + profile: profile?.user?.profile, + email: profile?.user?.email, + password: profile?.user?.password, + }); + + const [resetPassword, setResetPassword] = useState({ + password: "", + confirmedPassword: "", + }); + + const [toggleConfirmation, setToggleConfirmation] = useState(false); + const [toggleReset, setToggleReset] = useState(false); + const [action, setAction] = useState(""); + const [text, setText] = useState(); + + const config = { + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${profile.token}`, + }, + }; + + const handleChange = (e) => { + const fieldName = e.target.name; + const fieldValue = e.target.value; + setUser({ ...user, [fieldName]: fieldValue }); + }; + + const handlePasswordChange = (e) => { + const fieldName = e.target.name; + const fieldValue = e.target.value; + setResetPassword({ ...resetPassword, [fieldName]: fieldValue }); + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + + const { data } = await axios.put( + `/api/user/update`, + { email: user.email, user: user }, + config + ); + localStorage.setItem( + "profile", + JSON.stringify({ loggedIn: true, token: profile.token, user: data.user }) + ); + setText(data.message); + }; + + const reset = async (e) => { + e.preventDefault(); + if (resetPassword.password === resetPassword.confirmedPassword) { + const { data } = await axios.put( + `/api/user/resetpassword`, + { + password: resetPassword.password, + }, + config + ); + setText(data.message); + } else { + setText("passwords don't match"); + } + }; + + const handleDelete = () => { + if (action === "data") { + handleDeleteAllData(); + } else { + handleDeleteProfile(); + } + }; + const handleDeleteProfile = async () => { + const { data } = await axios.delete(`/api/user/deleteprofile`, config, {}); + setText(data.message); + localStorage.removeItem("profile"); + window.location = "/login"; + }; + + const handleDeleteAllData = async () => { + const { data } = await axios.delete(`/api/user/deletedata`, config, {}); + setText(data.message); + }; + + const handleConfirmation = (e) => { + if (e.target.value === "data") { + setAction("data"); + } else { + setAction("profile"); + } + + if (!toggleConfirmation) { + setToggleConfirmation(true); + setText( + "Are you sure you want to delete with the suppression of your " + + action + + " ? " + ); + } else { + setToggleConfirmation(false); + setText(""); + } + }; + + useEffect(() => { + document.title = "Update Profile"; + setProfile(JSON.parse(localStorage.getItem("profile"))); + if (!profile?.token) { + window.location = "/login"; + } + }, []); + + return ( + <> + <h2> Your Profile </h2> + <div className="middle-container"> + <article className="form"> + <form> + <div> + <label htmlFor="organizationName">Name of organization : </label> + <input + type="text" + id="organizationName" + name="organizationName" + value={user.organizationName} + onChange={handleChange} + /> + </div> + + <div> + <label htmlFor="universityWebsite"> + Your university's official website : + </label> + <input + type="text" + id="universityWebsite" + name="universityWebsite" + value={user.universityWebsite} + onChange={handleChange} + /> + </div> + + <div> + <label htmlFor="firstName">First Name :</label> + <input + type="text" + id="firstName" + name="firstName" + value={user.firstName} + onChange={handleChange} + /> + </div> + + <div> + <label htmlFor="lastName">Last Name :</label> + <input + type="text" + id="lastName" + name="lastName" + value={user.lastName} + onChange={handleChange} + /> + </div> + + <div> + <label htmlFor="position">Position :</label> + <select + name="position" + id="position" + value={user.position} + onChange={handleChange} + > + <option defaultValue="Teacher">Teacher</option> + <option value="Administrator"> Administrator</option> + <option value="Manager"> Manager</option> + </select> + </div> + + <div> + <label htmlFor="profile">Your profile :</label> + <input + type="text" + id="profile" + name="profile" + value={user.profile} + onChange={handleChange} + /> + <p style={{ color: "blue" }}> + Examples : LinkedIn / researchGate / University profile + </p> + </div> + + <div> + <label htmlFor="email">Your email :</label> + <input + type="email" + id="email" + name="email" + value={user.email} + onChange={handleChange} + /> + </div> + + <button type="submit" className="btn" onClick={handleSubmit}> + Update + </button> + <h4 style={{ color: "red", marginTop: "2rem" }}>{text}</h4> + </form> + <div> + <button + className="btn" + onClick={handleConfirmation} + value="profile" + > + Delete Your Profile + </button> + <button className="btn" onClick={handleConfirmation} value="data"> + Delete All your data + </button> + + <button className="btn" onClick={() => setToggleReset((v) => !v)}> + Reset your password + </button> + + {toggleConfirmation && ( + <> + <div> + <button + style={{ backgroundColor: "red" }} + className="btn" + onClick={handleDelete} + > + Continue ! + </button> + <button + style={{ backgroundColor: "orange" }} + className="btn" + onClick={handleConfirmation} + > + Abondon Deleting + </button> + </div> + </> + )} + + {toggleReset && ( + <> + <div> + <label htmlFor="password">Your new password :</label> + <input + type="password" + id="password" + name="password" + onChange={handlePasswordChange} + /> + </div> + <div> + <label htmlFor="confirmedpassword"> + Confirm your new password : + </label> + <input + type="password" + id="confirmedPassword" + name="confirmedPassword" + onChange={handlePasswordChange} + /> + </div> + <button className="btn" onClick={reset}> + Confirm + </button> + </> + )} + </div> + </article> + + <div + className="column-container" + style={{ width: "60rem", height: "40rem", margin: "2rem" }} + > + <p> + If you want to change you whole organization, you need to create a + new account for that. In case, you want just to rename the same + organization, you can update it via the field beside. + </p> + <img width="100%" height="80%" src="images/design8.jpg" alt="" /> + </div> + </div> + <Footer /> + </> + ); +} + +export default UpdateProfile; -- GitLab