From 36d8c70fd9760c60da34c7b9a6d189e2ff98176b Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Wed, 27 Mar 2024 23:17:58 +0100 Subject: [PATCH] refactored some components and seperated their API calls --- src/components/FamilyAcc/FamilyManageTabs.jsx | 202 ++++++++--------- .../FamilyPopout/AssignPrevNewTask.jsx | 10 +- .../FamilyPopout/AssignTaskPopout.jsx | 8 +- src/components/FamilyAcc/FamilyTableNew.jsx | 206 +++++++----------- .../FamilyAcc/Tabs/FamilyAccount.jsx | 10 +- .../FamilyAcc/Tabs/FamilyNewPending.jsx | 21 +- .../FamilyAcc/Tabs/FamilyNewTasks.jsx | 20 +- .../FamilyAcc/Tabs/FamilyNewWaitlist.jsx | 18 +- .../FamilyAcc/Tabs/FamilyPending.jsx | 15 +- src/components/FamilyAcc/Tabs/FamilyTasks.jsx | 27 ++- .../FamilyAcc/Tabs/FamilyWaitlist.jsx | 15 +- .../FamilyAcc/Tabs/FamilyWallet.jsx | 2 - src/components/FamilyPopup/SuggestTask.jsx | 2 - 13 files changed, 255 insertions(+), 301 deletions(-) diff --git a/src/components/FamilyAcc/FamilyManageTabs.jsx b/src/components/FamilyAcc/FamilyManageTabs.jsx index ebb1099..2ea8e27 100644 --- a/src/components/FamilyAcc/FamilyManageTabs.jsx +++ b/src/components/FamilyAcc/FamilyManageTabs.jsx @@ -14,6 +14,7 @@ import LoadingSpinner from "../Spinners/LoadingSpinner"; import AssignTaskPopout from "./FamilyPopout/AssignTaskPopout"; import FamilyWallet from "./Tabs/FamilyWallet"; import { apiConst } from "../../lib/apiConst"; +import { useSelector } from "react-redux"; // Lazy Imports for components const FamilyWaitlist = lazy(() => import("./Tabs/FamilyWaitlist")); @@ -29,43 +30,32 @@ export default function FamilyManageTabs({ listReload, loader, }) { + + const { jobListTable, pendingListTable, parentFamilyTaskList } = useSelector((state) => state.tableReload); // TABLE RELOAD TRIGGERS + // Initial state for family details const initialDetailState = { loading: false, - data: null, + data: [], }; -// 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 }, - }); - }; + // State for family details, tasks, waitlist, and pending + let [familyDetails, setFamilyDetails] = useState({loading: false, data: {}}) + let [familyTasks, setFamilyTasks] = useState({...initialDetailState}) + let [familyWaitList, setFamilyWaitList] = useState({...initialDetailState}) + let [familyPending, setFamilyPending] = useState({...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 list of created jobs by FULL USER + const [jobList, setJobList] = useState({ loading: false, data: [] }); - // State for active task + // State for active/selected job 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); + const [assignTaskPopout, setAssignTaskPopout] = useState(false); let [uploadStatus, setUploadStatus] = useState({loading: false, status: false, message:''}) // HOLDS STATE FOR UPLOAD PROFILE PICTURE STATUS @@ -79,8 +69,8 @@ export default function FamilyManageTabs({ const apiCall = useMemo(() => new usersService(), []); // Function to handle toggling the family task popout - const familyPopUpHandler = () => { - setFamilyTaskPopout((prev) => !prev); + const familyAssignPopUpHandler = () => { + setAssignTaskPopout((prev) => !prev); }; // Function to trigger a click on the hidden profile image input @@ -177,45 +167,40 @@ export default function FamilyManageTabs({ Tasks: ( ), Waiting: ( ), Pending: ( ), Account: ( ), - Profile: , - wallet: , + Profile: , + wallet: , }; // Default tab component const defaultTabComponent = ( ); @@ -223,67 +208,90 @@ export default function FamilyManageTabs({ // Selected tab component based on the current 'tab' const selectedTabComponent = tabComponents[tab] || defaultTabComponent; - // Effect to manage family details and related data + // Effect to manage family details useEffect(() => { const manageFamily = async () => { + setFamilyDetails({loading:true, data: {}}) try { - resetDetails(); - - 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; - - // Function to check for errors in data - const checkDataError = (data) => data?.internal_return < 0; - - if ( - checkDataError(familyData) || - checkDataError(tasksData) || - checkDataError(familyWaitData) || - checkDataError(familyPendingData) - ) { - return; + const response = await apiCall.ManageFamily(reqData) + if(response.status != 200 || !response?.data){ + return setFamilyDetails({loading:false, data: {}}) } - - setDetails({ - familyDetails: { loading: false, data: familyData }, - familyTasks: { loading: false, data: tasksData }, - familyWaitList: { loading: false, data: familyWaitData }, - familyPending: { loading: false, data: familyPendingData }, - }); + setFamilyDetails({loading:false, data: response?.data}) } catch (error) { - resetDetails(); - setErrMsg("An error occurred"); throw new Error(error); + setFamilyDetails({loading:false, data: {}}) } }; - // Invoke the manageFamily function when the component mounts manageFamily(); + }, []); + + // Effect to manage active family task details + useEffect(() => { + const manageTasks = async () => { + setFamilyTasks({loading:true, data: []}) + try { + const { family_uid } = accountDetails; + const reqData = { family_uid }; + + const response = await apiCall.ManageTasks(reqData) + if(response.status != 200 || !response?.data){ + return setFamilyTasks({loading:false, data: []}) + } + setFamilyTasks({loading:false, data: response?.data}) + } catch (error) { + throw new Error(error); + setFamilyTasks({loading:false, data: []}) + } + }; + // Invoke the manageFamily function when the component mounts + manageTasks(); + }, [updatePage, parentFamilyTaskList]); + + // Effect to manage family wait task details + useEffect(() => { + const manageFamilyWaitlist = async () => { + setFamilyWaitList({loading:true, data: []}) + try { + const response = await apiCall.ManageFamilyWaitlist() + if(response.status != 200 || !response?.data){ + return setFamilyWaitList({loading:false, data: []}) + } + setFamilyWaitList({loading:false, data: response?.data}) + } catch (error) { + throw new Error(error); + setFamilyWaitList({loading:false, data: []}) + } + }; + // Invoke the manageFamily function when the component mounts + manageFamilyWaitlist(); }, [updatePage]); - // Effect to manage family tasks + // Effect to manage family pending task details + useEffect(() => { + const manageFamilyPending = async () => { + setFamilyPending({loading:true, data: []}) + try { + const response = await apiCall.ManageFamilyPending() + if(response.status != 200 || !response?.data){ + return setFamilyPending({loading:false, data: []}) + } + setFamilyPending({loading:false, data: response?.data}) + } catch (error) { + throw new Error(error); + setFamilyPending({loading:false, data: []}) + } + }; + // Invoke the manageFamily function when the component mounts + manageFamilyPending(); + }, [updatePage, pendingListTable]); + + // Effect to get all parent job list useEffect(() => { - let checkFamilyTask = true; const reqData = { limit: 30, offset: 0, @@ -291,12 +299,11 @@ export default function FamilyManageTabs({ action: apiConst.WRENCHBOARD_PICTURE_FAMMEMBER, }; - if (checkFamilyTask) { - setFamilyTask({ loading: true }); + setJobList({ loading: true }); apiCall .getMyJobList(reqData) .then((res) => { - setFamilyTask({ loading: false, data: res?.data?.result_list }); + setJobList({ loading: false, data: res?.data?.result_list }); if (res?.data?.result_list?.length) { setActiveTask((prev) => ({ ...prev, @@ -305,15 +312,9 @@ export default function FamilyManageTabs({ } }) .catch((err) => { - setFamilyTask({ loading: false, data: [] }); + setJobList({ loading: false, data: [] }); console.log("Error", err); }); - } - - // Cleanup function to prevent memory leaks - return () => { - checkFamilyTask = false; - }; }, []); return ( @@ -396,7 +397,7 @@ export default function FamilyManageTabs({