import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react"; import { useSelector } from "react-redux"; 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 [reloadCardList, setReloadCardList] = useState(false); // STATE TO DETERMINE WHEN CARD LIST RELOADS. EG: WHEN USER DELETES A CARD // 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]); // 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: (
), payment: (
), recipients_account: (
), notification: (
), login_activity: , password: , faq: , privacy: , terms: , }; // Default tab component const defaultTabComponent = (
); // Selected tab component based on the current 'tab' const selectedTabComponent = tabComponents[tab] || defaultTabComponent; 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}

  • ))}
{selectedTabComponent}
); }