import React, { Suspense, useCallback, useEffect, useMemo, useRef, useState, } from "react"; import { useReactToPrint } from "react-to-print"; import profile from "../../assets/images/profile-info-profile.png"; import usersService from "../../services/UsersService"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import AssignTaskPopout from "./FamilyPopout/AssignTaskPopout"; import { FamilyWaitlist, FamilyAccount, FamilyProfile, FamilyTasks, ProfileInfo, FamilyPending, } from "./Tabs"; export default function FamilyManageTabs({ className, accountDetails, listReload, loader, }) { const [details, setDetails] = useState({ familyDetails: { loading: false, data: null }, familyTasks: { loading: false, data: null }, familyWaitList: { loading: false, data: null }, familyPending: { loading: false, data: null }, }); const [errMsg, setErrMsg] = useState(""); const [familyTaskPopout, setFamilyTaskPopout] = useState(false); const familyPopUpHandler = () => { setFamilyTaskPopout((prev) => !prev); }; const [profileImg, setProfileImg] = useState(profile); const profileImgInput = useRef(null); const browseProfileImg = () => { profileImgInput.current.click(); }; const profileImgChangeHandler = (e) => { if (e.target.value !== "") { const imgReader = new FileReader(); imgReader.onload = (event) => { setProfileImg(event.target.result); }; imgReader.readAsDataURL(e.target.files[0]); } }; const apiCall = useMemo(() => new usersService(), []); const manageFamily = useCallback(async () => { try { setDetails({ familyDetails: { loading: true }, familyTasks: { loading: true }, familyWaitList: { loading: true }, familyPending: { loading: true }, }); const { family_uid } = accountDetails; const reqData = { family_uid }; const [familyRes, tasksRes, familyWaitRes, familyPending] = await Promise.all([ apiCall.ManageFamily(reqData), apiCall.ManageTasks(reqData), apiCall.ManageFamilyWaitlist(), apiCall.ManageFamilyPending(), ]); const familyData = familyRes.data; const tasksData = tasksRes.data; const familyWaitData = familyWaitRes.data; const familyPendingData = familyPending.data; if ( familyData?.internal_return < 0 || tasksData?.internal_return < 0 || familyWaitData?.internal_return < 0 || familyPendingData?.internal_return < 0 ) return; setDetails({ familyDetails: { loading: false, data: familyData }, familyTasks: { loading: false, data: tasksData }, familyWaitList: { loading: false, data: familyWaitData }, familyPending: { loading: false, data: familyPendingData }, }); } catch (error) { setDetails({ familyDetails: { loading: false }, familyTasks: { loading: false }, familyWaitList: { loading: false }, familyPending: { loading: false }, }); setErrMsg("An error occurred"); throw new Error(error); } }, [apiCall, accountDetails]); const accountRef = useRef(); const useHandlePrint = useReactToPrint({ content: () => accountRef.current, }); const tabs = [ { id: 1, name: "Tasks" }, { id: 2, name: "Waiting" }, { id: 3, name: "Pending" }, { id: 4, name: "Account" }, { id: 5, name: "Profile" }, ]; const [tab, setTab] = useState(tabs[0].name); const tabHandler = (value) => { setTab(value); }; const tabComponents = { Tasks: ( ), Waiting: ( ), Pending: ( ), Account: ( ), Profile: , }; const defaultTabComponent = ( ); const selectedTabComponent = tabComponents[tab] || defaultTabComponent; useEffect(() => { manageFamily(); }, [tab, manageFamily]); return (
} >
    {tabs.map(({ name, id }) => (
  • tabHandler(name)} className={`p-4 flex hover:text-purple transition-all ease-in-out items-center cursor-pointer overflow-hidden text-xl relative top-[2px] ${ tab === name ? "text-purple border-r" : "text-thin-light-gray" }`} key={id} >

    {name}

  • ))}
{selectedTabComponent}
{familyTaskPopout && ( )} ); }