import React, { Suspense, lazy, useCallback, useEffect, useMemo, useRef, useState, useTransition, } 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 localImgLoad from "../../lib/localImgLoad"; // Lazy Imports for components const FamilyWaitlist = lazy(() => import("./Tabs/FamilyWaitlist")); const FamilyAccount = lazy(() => import("./Tabs/FamilyAccount")); const FamilyProfile = lazy(() => import("./Tabs/FamilyProfile")); const FamilyTasks = lazy(() => import("./Tabs/FamilyTasks")); const ProfileInfo = lazy(() => import("./Tabs/ProfileInfo")); const FamilyPending = lazy(() => import("./Tabs/FamilyPending")); 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 [profileImg, setProfileImg] = useState(profile); const profileImgInput = useRef(null); const [isPending, startTransition] = useTransition(); const apiCall = useMemo(() => new usersService(), []); const familyPopUpHandler = () => { setFamilyTaskPopout((prev) => !prev); }; 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 manageFamily = useCallback(async () => { try { setDetails((prevDetails) => ({ ...prevDetails, 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; } startTransition(() => { setDetails({ familyDetails: { loading: false, data: familyData }, familyTasks: { loading: false, data: tasksData }, familyWaitList: { loading: false, data: familyWaitData }, familyPending: { loading: false, data: familyPendingData }, }); }); } catch (error) { setDetails((prevDetails) => ({ ...prevDetails, 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" }, ]; const [tab, setTab] = useState(tabs[0].name); const tabHandler = (value) => { startTransition(() => { setTab(value); }); }; const tabComponents = { Tasks: ( ), Waiting: ( ), Pending: ( ), Account: ( ), Profile: , }; const defaultTabComponent = ( ); const selectedTabComponent = tabComponents[tab] || defaultTabComponent; useEffect(() => { let __manageFamily = true; if (__manageFamily) { manageFamily(); } return () => { __manageFamily = false; }; }, [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 && ( )} ); }