import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react"; import { useSelector } from "react-redux"; import cover from "../../assets/images/profile-info-cover.png"; import profile from "../../assets/images/profile.jpg"; import usersService from "../../services/UsersService"; import Icons from "../Helpers/Icons"; import Layout from "../Partials/Layout"; import { ChangePasswordTab, FaqTab, LoginActivityTab, NotificationSettingTab, PaymentMathodsTab, PersonalInfoTab, PrivacyPolicyTab, TermsConditionTab, } from "./Tabs"; import RecipientAccountTab from "./Tabs/RecipientAccountTab"; export default function Settings({ faq }) { const apiCall = new usersService(); const { userDetails } = useSelector((state) => state?.userDetails); const [profileImg, setProfileImg] = useState( userDetails?.profile_pic_url ? userDetails.profile_pic_url : profile ); let [uploadStatus, setUploadStatus] = useState({loading: false, status: false, message:''}) // HOLDS STATE FOR UPLOAD PROFILE PICTURE STATUS const [coverImg, setCoverImg] = useState(cover); const [reloadCardList, setReloadCardList] = useState(false); // STATE TO DETERMINE WHEN CARD LIST RELOADS. EG: WHEN USER DELETES A CARD // profile img const profileImgInput = useRef(null); const browseProfileImg = () => { profileImgInput.current.click(); }; const profileImgChangHandler = (e) => { // if (e.target.value !== "") { // const imgReader = new FileReader(); // imgReader.onload = (event) => { // setProfileImg(event.target.result); // }; // imgReader.readAsDataURL(e.target.files[0]); // } setUploadStatus({loading: false, status: false, message:''}) let acceptedFormat = ["jpeg", "jpg", "png", "bmp", "gif"] // ARRAY OF SUPPORTED FORMATS let uploadedFile = e.target.files[0] //UPLOADED FILE if(!acceptedFormat.includes(uploadedFile?.type?.split("/")[1]?.toLowerCase())){ //CHECKING FOR CORRECT UPLOAD FORMAT let msg = 'Please select ' for(let i=0; i<=acceptedFormat.length-1; i++){ if(i == acceptedFormat.length-1){ msg+=`or ${acceptedFormat[i]}` }else{ msg+=`${acceptedFormat[i]}, ` } } setUploadStatus({loading: false, status: false, message:msg}) return setTimeout(()=>{ profileImgInput.current.value = '' // clear the input setUploadStatus({loading: false, status: false, message:''}) },5000) } if(uploadedFile.size > 5*1048576){ // CHECKING FOR CORRECT FILE SIZE setUploadStatus({loading: false, status: false, message:'File must not exceed 5MB'}) return setTimeout(()=>{ profileImgInput.current.value = '' // clear the input setUploadStatus({loading: false, status: false, message:''}) },5000) } if (e.target.value !== "") { const imgReader = new FileReader(); imgReader.onload = (event) => { let reqData = { // PAYLOAD FOR API CALL file_name: uploadedFile?.name, file_size: uploadedFile?.size, file_type: uploadedFile?.type?.split("/")[0]?.toLowerCase(), file_data: event?.target?.result, msg_type: 'FILE', action: 'WRENCHBOARD_PICTURE_PROFILE', // action: 11307 } setUploadStatus({loading: true, status: false, message:'Loading...'}) apiCall.sendFiles(reqData).then(res=>{ if(res.status != 200 || res.data.internal_return < 0){ return setUploadStatus({loading: false, status: false, message: 'Something went wrong, try again'}) } setUploadStatus({loading: false, status: true, message: 'Uploaded successfully'}) setProfileImg(event.target.result); }).catch(error=>{ setUploadStatus({loading: false, status: false, message: 'Network error, try again'}) }).finally(()=>{ setTimeout(()=>{ setUploadStatus({loading: false, status: false, message: ''}) },5000) }) }; imgReader.readAsDataURL(e.target.files[0]); } }; // cover img const coverImgInput = useRef(null); const browseCoverImg = () => { coverImgInput.current.click(); }; const coverImgChangHandler = (e) => { if (e.target.value !== "") { const imgReader = new FileReader(); imgReader.onload = (event) => { setCoverImg(event.target.result); }; imgReader.readAsDataURL(e.target.files[0]); } }; // Tabs Handling const tabs = [ { id: 1, name: "personal", title: "Edit Profile", iconName: "people-hover", }, { id: 2, name: "payment", title: "Payment Cards", iconName: "bank-card", }, { id: 3, name: "recipients-account", title: "Recipients Account", iconName: "bank-card", }, { id: 4, name: "notification", title: "Notification Setting", iconName: "notification-setting", }, { id: 5, name: "login_activity", title: "Login Activity", iconName: "login-activity", }, { id: 6, name: "password", title: "Change Password", iconName: "password-hover", }, { id: 7, name: "faq", title: "FAQ", iconName: "block-question", }, { id: 8, name: "privacy", title: "Privacy Policy", iconName: "page-right", }, { id: 9, name: "terms", title: "Terms and Conditions", iconName: "page-right", }, ]; const [tab, setTab] = useState(tabs[0].name); const tabHandler = (value) => { setTab(value); }; // Recipient Account const [recipientAccount, setRecipientAccount] = useState({ state: false, loader: false, msg: "", data: null, }); const getRecipientAccount = useCallback(async () => { setRecipientAccount((prev) => ({ loader: true })); let res; try { res = await apiCall.getRecipient(); res = res.data; if (res?.internal_return < 0) { setRecipientAccount((prev) => ({ loader: false, msg: "Sorry, something went wrong", })); setTimeout(() => setRecipientAccount((prev) => prev), 5000); return; } return setTimeout(() => { setRecipientAccount((prev) => ({ loader: false, data: res })); }); } catch (error) { setRecipientAccount((prev) => ({ loader: false, msg: "Sorry, an error occurred", })); setTimeout(() => setRecipientAccount((prev) => prev), 5000); return; } }, [apiCall]); useEffect(() => { getRecipientAccount(); }, [reloadCardList]); return ( <>
{/* heading */}

Settings

Personal Information

    {tabs.map(({ name, id, title, iconName }) => (
  • tabHandler(name)} key={id} className={`flex lg:space-x-4 space-x-2 hover:text-purple transition-all duration-300 ease-in-out items-center cursor-pointer lg:mb-11 mb-2 mr-6 lg:mr-0 float-left lg:float-none overflow-hidden ${ tab === name ? "text-purple" : " text-thin-light-gray" }`} >

    {title}

  • ))}
{tab === "personal" && (
)} {tab === "payment" && (
)} {tab === "recipients-account" && (
)} {tab === "notification" && (
)} {tab === "login_activity" && } {tab === "password" && } {tab === "faq" && } {tab === "privacy" && } {tab === "terms" && }
); }