import React, { Suspense, lazy, useEffect, useMemo, useState } from "react"; import { useLocation } from "react-router-dom"; import { apiConst } from "../../lib/apiConst"; import usersService from "../../services/UsersService"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import AssignTaskPopout from "./FamilyPopout/AssignTaskPopout"; import { useSelector } from "react-redux"; // Lazy Imports for components const FamilyWaitlist = lazy(() => import("./Tabs/FamilyNewWaitlist")); const FamilyTasks = lazy(() => import("./Tabs/FamilyNewTasks")); const FamilyPending = lazy(() => import("./Tabs/FamilyNewPending")); export default function FamilyTableNew() { const { parentFamilyTaskList } = useSelector((state) => state.tableReload); console.log('parentFamilyTaskList', parentFamilyTaskList) let { pathname } = useLocation(); // Initial state for family details const initialDetailState = { loading: true, data: null, link: "", }; const [assignTaskChecker, setAssignTaskChecker] = useState(false); // console.log('accountDetails',accountDetails) // State for family details, tasks, waitlist, and pending const [details, setDetails] = useState({ familyDetails: { ...initialDetailState }, familyTasks: { ...initialDetailState }, familyWaitList: { ...initialDetailState }, familyPending: { ...initialDetailState }, }); // Function to reset family details, tasks, waitlist, and pending const resetDetails = () => { setDetails({ familyDetails: { ...initialDetailState }, familyTasks: { ...initialDetailState }, familyWaitList: { ...initialDetailState }, familyPending: { ...initialDetailState }, }); }; const [updatePage, setUpdatePage] = useState(false); // State to determine when to update the page // State for family task data const [familyTask, setFamilyTask] = useState({ loading: false, data: [] }); // State for active task const [activeTask, setActiveTask] = useState({ id: 0, data: {} }); // State for error messages const [errMsg, setErrMsg] = useState(""); // State for family task popout const [familyTaskPopout, setFamilyTaskPopout] = useState(false); // Create an instance of the usersService class const apiCall = useMemo(() => new usersService(), []); // Function to handle toggling the family task popout const familyPopUpHandler = () => { setFamilyTaskPopout((prev) => !prev); }; // Array of tab names const tabs = [ { id: 1, name: "Tasks" }, { id: 2, name: "Waiting" }, { id: 3, name: "Pending" }, ]; // State for the currently selected tab const [tab, setTab] = useState(tabs[0].name); // Function to handle tab changes const tabHandler = (value) => { setTab(value); }; // Object that maps tab names to their corresponding components const tabComponents = { Tasks: ( ), Waiting: ( ), Pending: ( ), }; const defaultTabComponent = tabComponents.Tasks; // Selected tab component based on the current 'tab' const selectedTabComponent = tabComponents[tab] || defaultTabComponent; // Effect to manage family details and related data useEffect(() => { const manageFamily = async () => { try { // resetDetails(); // setDetails({ // familyTasks: { loading: true }, // familyWaitList: { loading: true }, // familyPending: { loading: true }, // }); // const { family_uid } = accountDetails; // const reqData = { family_uid }; const [familyTasksData, familyWaitingRes, familyPendingRes] = await Promise.all([ apiCall.getMyActiveJobList(), apiCall.ManageFamilyNewWaitlist(), apiCall.ManageFamilyPending(), ]); let tasksData = familyTasksData?.data?.result_list; let _familyWaitData = familyWaitingRes?.data?.result_list; let familyPendingData = familyPendingRes?.data?.result_list; // Getting the image server link let imageServerLink = familyWaitingRes.data?.session_image_server; // Function to check for errors in data const checkDataError = (data) => data?.internal_return < 0; if ( checkDataError(tasksData) || checkDataError(_familyWaitData) || checkDataError(familyPendingData) ) { return; } setDetails({ familyTasks: { loading: false, data: tasksData, link: imageServerLink, }, familyWaitList: { loading: false, data: _familyWaitData, link: imageServerLink, }, familyPending: { loading: false, data: familyPendingData, link: imageServerLink, }, }); } catch (error) { // resetDetails(); setDetails({ familyDetails: { ...initialDetailState, loading: false, }, familyTasks: { ...initialDetailState, loading: false, }, familyWaitList: { ...initialDetailState, loading: false,}, familyPending: { ...initialDetailState, loading: false, }, }) setErrMsg("An error occurred"); throw new Error(error); } }; // Invoke the manageFamily function when the component mounts manageFamily(); }, [updatePage, parentFamilyTaskList]); // Effect to manage family tasks useEffect(() => { let checkFamilyTask = true; const reqData = { limit: 30, offset: 0, job_type: "FAMILY", action: apiConst.WRENCHBOARD_PICTURE_FAMMEMBER, }; if (checkFamilyTask) { setFamilyTask({ loading: true }); apiCall .getMyJobList(reqData) .then((res) => { setFamilyTask({ loading: false, data: res?.data?.result_list }); if (res?.data?.result_list?.length) { setActiveTask((prev) => ({ ...prev, data: res?.data?.result_list[0], })); } }) .catch((err) => { setFamilyTask({ loading: false, data: [] }); console.log("Error", err); }); } // Cleanup function to prevent memory leaks return () => { checkFamilyTask = false; }; }, []); // console.log(updatePage); 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 && ( )} ); }