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 (