Merge branch 'Server-path-added' of WrenchBoard/Users-Wrench into master
This commit is contained in:
@@ -36,6 +36,10 @@ export default function Header({ logoutModalHandler, sidebarHandler }) {
|
|||||||
const { notifications } = useSelector((state) => state?.notifications); // NOTIFICATION STORE
|
const { notifications } = useSelector((state) => state?.notifications); // NOTIFICATION STORE
|
||||||
const { walletDetails } = useSelector((state) => state?.walletDetails); // WALLET STORE
|
const { walletDetails } = useSelector((state) => state?.walletDetails); // WALLET STORE
|
||||||
|
|
||||||
|
const image = `${userDetails.session_image_server}${localStorage.getItem(
|
||||||
|
"session_token"
|
||||||
|
)}/profile/${userDetails.uid}`;
|
||||||
|
|
||||||
const handlerBalance = () => {
|
const handlerBalance = () => {
|
||||||
setbalanceValue.toggle();
|
setbalanceValue.toggle();
|
||||||
if (notificationDropdown) {
|
if (notificationDropdown) {
|
||||||
@@ -91,7 +95,7 @@ export default function Header({ logoutModalHandler, sidebarHandler }) {
|
|||||||
// User Profile
|
// User Profile
|
||||||
let { firstname, lastname, email, profile_pic_url } = userDetails;
|
let { firstname, lastname, email, profile_pic_url } = userDetails;
|
||||||
let userEmail = email?.split("@")[0];
|
let userEmail = email?.split("@")[0];
|
||||||
const userProfileImage = profile_pic_url || DEFAULT_PROFILE_IMAGE;
|
const userProfileImage = image || DEFAULT_PROFILE_IMAGE;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useRef, useState } from "react";
|
||||||
import { useSelector } from "react-redux";
|
import { useSelector } from "react-redux";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
import usersService from "../../../services/UsersService";
|
import usersService from "../../../services/UsersService";
|
||||||
@@ -6,6 +6,9 @@ import Icons from "../../Helpers/Icons";
|
|||||||
import InputCom from "../../Helpers/Inputs/InputCom";
|
import InputCom from "../../Helpers/Inputs/InputCom";
|
||||||
import LoadingSpinner from "../../Spinners/LoadingSpinner";
|
import LoadingSpinner from "../../Spinners/LoadingSpinner";
|
||||||
|
|
||||||
|
import cover from "../../../assets/images/profile-info-cover.png";
|
||||||
|
import profileImage from "../../../assets/images/profile.jpg";
|
||||||
|
|
||||||
import { Form, Formik } from "formik";
|
import { Form, Formik } from "formik";
|
||||||
import * as Yup from "yup";
|
import * as Yup from "yup";
|
||||||
|
|
||||||
@@ -43,18 +46,13 @@ export default function PersonalInfoTab({
|
|||||||
frstNmeHndlr,
|
frstNmeHndlr,
|
||||||
lstNmeHndlr,
|
lstNmeHndlr,
|
||||||
dscrphn,
|
dscrphn,
|
||||||
profileImg,
|
|
||||||
coverImg,
|
|
||||||
profileImgInput,
|
|
||||||
browseProfileImg,
|
|
||||||
profileImgChangHandler,
|
|
||||||
coverImgInput,
|
|
||||||
browseCoverImg,
|
|
||||||
coverImgChangHandler,
|
|
||||||
uploadStatus
|
|
||||||
}) {
|
}) {
|
||||||
let { userDetails } = useSelector((state) => state.userDetails);
|
let { userDetails } = useSelector((state) => state.userDetails);
|
||||||
|
|
||||||
|
const image = `${userDetails.session_image_server}${localStorage.getItem(
|
||||||
|
"session_token"
|
||||||
|
)}/profile/${userDetails.uid}`;
|
||||||
|
|
||||||
const apiCall = new usersService();
|
const apiCall = new usersService();
|
||||||
|
|
||||||
let navigate = useNavigate();
|
let navigate = useNavigate();
|
||||||
@@ -85,6 +83,123 @@ export default function PersonalInfoTab({
|
|||||||
status: false,
|
status: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const [profileImg, setProfileImg] = useState(
|
||||||
|
userDetails?.session_image_server ? image : profileImage
|
||||||
|
);
|
||||||
|
|
||||||
|
let [uploadStatus, setUploadStatus] = useState({
|
||||||
|
loading: false,
|
||||||
|
status: false,
|
||||||
|
message: "",
|
||||||
|
}); // HOLDS STATE FOR UPLOAD PROFILE PICTURE STATUS
|
||||||
|
|
||||||
|
const [coverImg, setCoverImg] = useState(cover);
|
||||||
|
|
||||||
|
// profile img
|
||||||
|
const profileImgInput = useRef(null);
|
||||||
|
const browseProfileImg = () => {
|
||||||
|
profileImgInput.current.click();
|
||||||
|
};
|
||||||
|
|
||||||
|
const profileImgChangHandler = (e) => {
|
||||||
|
setUploadStatus({ loading: false, status: false, message: "" });
|
||||||
|
const acceptedFormat = ["jpeg", "jpg", "png", "bmp", "gif"]; // ARRAY OF SUPPORTED FORMATS
|
||||||
|
const uploadedFile = e.target.files[0]; //UPLOADED FILE
|
||||||
|
|
||||||
|
const fileFormat = uploadedFile?.type?.split("/")[1]?.toLowerCase();
|
||||||
|
const MAX_FILE_SIZE = 5 * 1048576; // 5MB
|
||||||
|
|
||||||
|
if (!acceptedFormat.includes(fileFormat)) {
|
||||||
|
//CHECKING FOR CORRECT UPLOAD FORMAT
|
||||||
|
const msg = `Please select ${acceptedFormat
|
||||||
|
.slice(0, -1)
|
||||||
|
.join(", ")} or ${acceptedFormat.slice(-1)}`;
|
||||||
|
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 > MAX_FILE_SIZE) {
|
||||||
|
// 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: 11300,
|
||||||
|
};
|
||||||
|
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(uploadedFile);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 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]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleUpdateUser = (values, helpers) => {
|
const handleUpdateUser = (values, helpers) => {
|
||||||
setRequestState({ message: "", loading: true, status: false });
|
setRequestState({ message: "", loading: true, status: false });
|
||||||
|
|
||||||
@@ -374,7 +489,7 @@ export default function PersonalInfoTab({
|
|||||||
<p className="text-base text-thin-light-gray mb-5">
|
<p className="text-base text-thin-light-gray mb-5">
|
||||||
Profile of at least Size
|
Profile of at least Size
|
||||||
<span className="ml-1 text-dark-gray dark:text-white">
|
<span className="ml-1 text-dark-gray dark:text-white">
|
||||||
300x300
|
200x200
|
||||||
</span>
|
</span>
|
||||||
. Gifs work too.
|
. Gifs work too.
|
||||||
<span className="ml-1 text-dark-gray dark:text-white">
|
<span className="ml-1 text-dark-gray dark:text-white">
|
||||||
@@ -383,11 +498,11 @@ export default function PersonalInfoTab({
|
|||||||
.
|
.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex justify-center">
|
<div className="flex justify-center">
|
||||||
<div className="w-full relative">
|
<div className="w-[200px] h-[200px] relative">
|
||||||
<img
|
<img
|
||||||
src={profileImg}
|
src={profileImg}
|
||||||
alt="profile"
|
alt="profile"
|
||||||
className="sm:w-[198px] sm:h-[198px] w-[120px] h-[120px] rounded-full overflow-hidden object-contain object-center"
|
className="sm:w-[198px] sm:h-[198px] w-full h-full rounded-full overflow-hidden object-cover object-center"
|
||||||
/>
|
/>
|
||||||
<input
|
<input
|
||||||
ref={profileImgInput}
|
ref={profileImgInput}
|
||||||
@@ -397,7 +512,7 @@ export default function PersonalInfoTab({
|
|||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
onClick={browseProfileImg}
|
onClick={browseProfileImg}
|
||||||
className="w-[32px] h-[32px] absolute bottom-7 sm:right-10 right-[105px] hover:bg-pink bg-dark-gray rounded-full cursor-pointer"
|
className="w-[32px] h-[32px] absolute bottom-4 right-4 hover:bg-pink bg-dark-gray rounded-full cursor-pointer"
|
||||||
>
|
>
|
||||||
<svg
|
<svg
|
||||||
width="32"
|
width="32"
|
||||||
@@ -418,8 +533,20 @@ export default function PersonalInfoTab({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{uploadStatus.message && !uploadStatus.loading && <p className={`text-center ${uploadStatus.status ? 'text-green-500':'text-red-500'}`}>{uploadStatus.message}</p>}
|
{uploadStatus.message && !uploadStatus.loading && (
|
||||||
{uploadStatus.loading && <p className="text-center">{uploadStatus.message}</p>}
|
<p
|
||||||
|
className={`text-center ${
|
||||||
|
uploadStatus.status
|
||||||
|
? "text-green-500"
|
||||||
|
: "text-red-500"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{uploadStatus.message}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
{uploadStatus.loading && (
|
||||||
|
<p className="text-center">{uploadStatus.message}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/* } */}
|
{/* } */}
|
||||||
|
|||||||
+115
-194
@@ -6,8 +6,6 @@ import React, {
|
|||||||
useState,
|
useState,
|
||||||
} from "react";
|
} from "react";
|
||||||
import { useSelector } from "react-redux";
|
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 usersService from "../../services/UsersService";
|
||||||
import Icons from "../Helpers/Icons";
|
import Icons from "../Helpers/Icons";
|
||||||
import Layout from "../Partials/Layout";
|
import Layout from "../Partials/Layout";
|
||||||
@@ -26,161 +24,8 @@ import RecipientAccountTab from "./Tabs/RecipientAccountTab";
|
|||||||
export default function Settings({ faq }) {
|
export default function Settings({ faq }) {
|
||||||
const apiCall = new usersService();
|
const apiCall = new usersService();
|
||||||
const { userDetails } = useSelector((state) => state?.userDetails);
|
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
|
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
|
// Recipient Account
|
||||||
const [recipientAccount, setRecipientAccount] = useState({
|
const [recipientAccount, setRecipientAccount] = useState({
|
||||||
state: false,
|
state: false,
|
||||||
@@ -223,6 +68,120 @@ export default function Settings({ faq }) {
|
|||||||
getRecipientAccount();
|
getRecipientAccount();
|
||||||
}, [reloadCardList]);
|
}, [reloadCardList]);
|
||||||
|
|
||||||
|
// 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(() => {
|
||||||
|
// Retrieve the active tab from local storage or use the default tab
|
||||||
|
return localStorage.getItem("activeTab") || tabs[0].name;
|
||||||
|
});
|
||||||
|
|
||||||
|
const tabHandler = (value) => {
|
||||||
|
setTab(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Update local storage when the tab changes
|
||||||
|
useEffect(() => {
|
||||||
|
localStorage.setItem("activeTab", tab);
|
||||||
|
}, [tab]);
|
||||||
|
|
||||||
|
const tabComponents = {
|
||||||
|
personal: (
|
||||||
|
<div className="tab-item">
|
||||||
|
<PersonalInfoTab />
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
payment: (
|
||||||
|
<div className="tab-item">
|
||||||
|
<PaymentMathodsTab />
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
recipients_account: (
|
||||||
|
<div className="tab-item">
|
||||||
|
<RecipientAccountTab
|
||||||
|
recipientAccount={recipientAccount}
|
||||||
|
setRecipientAccount={setRecipientAccount}
|
||||||
|
setReloadCardList={setReloadCardList}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
notification: (
|
||||||
|
<div className="tab-item">
|
||||||
|
<NotificationSettingTab />
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
login_activity: <LoginActivityTab />,
|
||||||
|
password: <ChangePasswordTab />,
|
||||||
|
faq: <FaqTab datas={faq} />,
|
||||||
|
privacy: <PrivacyPolicyTab />,
|
||||||
|
terms: <TermsConditionTab />,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Default tab component
|
||||||
|
const defaultTabComponent = (
|
||||||
|
<div className="tab-item">
|
||||||
|
<PersonalInfoTab />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
// Selected tab component based on the current 'tab'
|
||||||
|
const selectedTabComponent = tabComponents[tab] || defaultTabComponent;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Layout>
|
<Layout>
|
||||||
@@ -263,45 +222,7 @@ export default function Settings({ faq }) {
|
|||||||
</div>
|
</div>
|
||||||
<div className="w-[1px] bg-[#E3E4FE] dark:bg-[#a7a9b533] mr-10"></div>
|
<div className="w-[1px] bg-[#E3E4FE] dark:bg-[#a7a9b533] mr-10"></div>
|
||||||
<div className="content-body-items flex-1">
|
<div className="content-body-items flex-1">
|
||||||
{tab === "personal" && (
|
{selectedTabComponent}
|
||||||
<div className="tab-item">
|
|
||||||
<PersonalInfoTab
|
|
||||||
profileImg={profileImg}
|
|
||||||
coverImg={coverImg}
|
|
||||||
browseProfileImg={browseProfileImg}
|
|
||||||
profileImgInput={profileImgInput}
|
|
||||||
profileImgChangHandler={profileImgChangHandler}
|
|
||||||
coverImgChangHandler={coverImgChangHandler}
|
|
||||||
browseCoverImg={browseCoverImg}
|
|
||||||
coverImgInput={coverImgInput}
|
|
||||||
uploadStatus={uploadStatus}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{tab === "payment" && (
|
|
||||||
<div className="tab-item">
|
|
||||||
<PaymentMathodsTab />
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{tab === "recipients-account" && (
|
|
||||||
<div className="tab-item">
|
|
||||||
<RecipientAccountTab
|
|
||||||
recipientAccount={recipientAccount}
|
|
||||||
setRecipientAccount={setRecipientAccount}
|
|
||||||
setReloadCardList={setReloadCardList}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{tab === "notification" && (
|
|
||||||
<div className="tab-item">
|
|
||||||
<NotificationSettingTab />
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
{tab === "login_activity" && <LoginActivityTab />}
|
|
||||||
{tab === "password" && <ChangePasswordTab />}
|
|
||||||
{tab === "faq" && <FaqTab datas={faq} />}
|
|
||||||
{tab === "privacy" && <PrivacyPolicyTab />}
|
|
||||||
{tab === "terms" && <TermsConditionTab />}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -838,11 +838,11 @@ class usersService {
|
|||||||
action: 14010,
|
action: 14010,
|
||||||
...reqData,
|
...reqData,
|
||||||
};
|
};
|
||||||
|
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
for (let data in postData) {
|
for (let data in postData) {
|
||||||
formData.append(data, postData[data]);
|
formData.append(data, postData[data]);
|
||||||
}
|
}
|
||||||
// return this.postAuxEnd("/uploads", formData);
|
|
||||||
|
|
||||||
return this.postAuxEnd("/uploads", postData);
|
return this.postAuxEnd("/uploads", postData);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user