From 1d5875d4e29728b646d40fb09e23c81f9a1edfc1 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Fri, 14 Jul 2023 20:28:22 +0100 Subject: [PATCH] reset profile password implemented --- .../Settings/Tabs/ChangePasswordTab.jsx | 138 ++++++++++++++++-- src/services/UsersService.js | 12 ++ 2 files changed, 137 insertions(+), 13 deletions(-) diff --git a/src/components/Settings/Tabs/ChangePasswordTab.jsx b/src/components/Settings/Tabs/ChangePasswordTab.jsx index b3e5236..a4c5eaf 100644 --- a/src/components/Settings/Tabs/ChangePasswordTab.jsx +++ b/src/components/Settings/Tabs/ChangePasswordTab.jsx @@ -3,11 +3,39 @@ import React, { useState } from "react"; import Icons from "../../Helpers/Icons"; import PasswordSvg from "../PasswordSvg"; +import LoadingSpinner from "../../Spinners/LoadingSpinner"; +import usersService from "../../../services/UsersService"; +import { useNavigate } from "react-router-dom"; export default function ChangePasswordTab() { + const apiUrl = new usersService() + const navigate = useNavigate() + const [oldPass, setOldPass] = useState("hide-password"); const [newPass, setNewPass] = useState("hide-password"); const [confirmPass, setConfirmPass] = useState("hide-password"); + + const [requestStatus, setRequestStatus] = useState({loading: false, status: false, message: ''}) + + const [inputEmpty, setInputEmpty] = useState(false) + let [inputs, setInputs] = useState({ + old_pwd: '', + new_pwd: '', + confirm_new_pwd: '' + }) + + const handleInputChange = ({target:{name, value}}) => { // FUNCTION TO HANDLE WHEN AN INPUT CHANGES + setInputs(prev => ({...prev, [name]:value})) + } + + const handleCancel = () => { // FUNCTION TO CLEAR ALL TYPED INPUTS + setInputs({ + old_pwd: '', + new_pwd: '', + confirm_new_pwd: '' + }) + } + const showPassword = (value) => { const password = document.getElementById(`${value}`); if (value && value === "old_password") { @@ -38,16 +66,61 @@ export default function ChangePasswordTab() { } } }; + + const handlePwdUpdate = () => { + setInputEmpty(false) // SETS THE STATE OF ANY INPUT IS EMPTY TO FALSE + if(!inputs.old_pwd || !inputs.new_pwd || !inputs.confirm_new_pwd){ // CHECKS IF ANY INPUT FIELD IS EMPTY AND SETS INPUT EMPTY TO TRUE + setInputEmpty(true) + return setTimeout(()=>{setInputEmpty(false)},3000) + } + + if(inputs.new_pwd != inputs.confirm_new_pwd){ // CHECKS IF PASSWORD MATCHES CONFIRM PASSWORD + setRequestStatus({loading: false, status: false, message: 'new password must match confirm password'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + if(/^[a-zA-Z0-9]*$/.test(inputs.new_pwd) == false){ // CHECKS IF PASSWORD IS ALPHANUMERIC + setRequestStatus({loading: false, status: false, message: 'password must be alphanumeric'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + if(inputs.new_pwd.length < 6){ // CHECKS IF PASSWORD IS UPTO SIX CHARACTERS + setRequestStatus({loading: false, status: false, message: 'password must be upto six characters'}) + return setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},3000) + } + + + let reqData = { // REQUEST PAYLOAD + current_pass: inputs.old_pwd, + new_pass: inputs.new_pwd + } + + + setRequestStatus({loading: true, status: false, message: ''}) + + apiUrl.profilePassChange(reqData).then(res => { + if(res.status != 200 || res.data.internal_return < 0){ + setRequestStatus({loading: false, status: false, message: 'unable to complete request'}) + return + } + setRequestStatus({loading: false, status: true, message: 'password update was successful'}) + setTimeout(()=>{navigate('/settings', {replace: true})}, 5000) + }).catch(err => { + setRequestStatus({loading: false, status: false, message: 'unable to complete request'}) + }).finally(()=>{ + setTimeout(()=>{setRequestStatus({loading: false, status: false, message: ''})},4000) + }) + } return (
-
+
@@ -58,6 +131,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="old_password" + value={inputs.old_pwd} + name='old_pwd' + onChange={handleInputChange} + autoComplete='false' />
- New Password + New Password {(inputEmpty && !inputs.new_pwd) && 'required'}
@@ -83,6 +160,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="new_password" + value={inputs.new_pwd} + name='new_pwd' + onChange={handleInputChange} + autoComplete='false' />
- Confirm Password + Confirm Password {(inputEmpty && !inputs.confirm_new_pwd) && 'required'}
@@ -108,6 +189,10 @@ export default function ChangePasswordTab() { className="input-field placeholder:text-base text-bese px-12 text-dark-gray dark:text-white w-full h-full bg-[#FAFAFA] dark:bg-[#11131F] focus:ring-0 focus:outline-none" type="password" id="confirm_password" + value={inputs.confirm_new_pwd} + name='confirm_new_pwd' + onChange={handleInputChange} + autoComplete='false' />
- + {requestStatus.loading ? + + : + + }
+ + {/* error or success display */} + {requestStatus.message != "" && + (!requestStatus.status ? ( +
+ {requestStatus.message} +
+ ) : ( + requestStatus.status && ( +
+ {requestStatus.message} +
+ ) + ))} + {/* End of error or success display */}
diff --git a/src/services/UsersService.js b/src/services/UsersService.js index bf27810..79cb4a4 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -921,6 +921,18 @@ class usersService { return this.postAuxEnd("/familysuggestlist", postData); } + // FUNCTION TO CHANGE PROFILE PASSWORD + profilePassChange(reqData) { + var postData = { + uid: localStorage.getItem("uid"), + member_id: localStorage.getItem("member_id"), + sessionid: localStorage.getItem("session_token"), + action: 11005, + ...reqData, + }; + return this.postAuxEnd("/profilepasschange", postData); + } + /* - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username) - 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password) -- 2.34.1