From 9b12ffe0cd627352f13010e1b902e5fade1a6661 Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Mon, 18 Mar 2024 19:29:35 +0100 Subject: [PATCH 1/2] initial commit --- src/components/Contexts/SocketIOContext.js | 13 ++++++++++++- src/middleware/AuthRoute.jsx | 7 ++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/components/Contexts/SocketIOContext.js b/src/components/Contexts/SocketIOContext.js index f0d55de..1671c56 100644 --- a/src/components/Contexts/SocketIOContext.js +++ b/src/components/Contexts/SocketIOContext.js @@ -36,6 +36,12 @@ export default function SocketIOContextProvider({children}) { } }; + const parentAssignJobToKid = (message, room) => { + if(message && room){ + socket.emit("family", { message:{...message}, room }); + } + }; + useEffect(() => { socket.on("receive_message", (data) => { // setSocketMsgReceived(data.message); @@ -45,6 +51,11 @@ export default function SocketIOContextProvider({children}) { // setSocketMsgReceived(data.message); dispatch(tableReload({type:'MARKETTABLELIST'})) }); + socket.on("family_actions", (data) => { + // setSocketMsgReceived(data.message); + // dispatch(tableReload({type:'MARKETTABLELIST'})) + console.log('working') + }); }, [socket]); let values = { @@ -52,8 +63,8 @@ export default function SocketIOContextProvider({children}) { sendMessage, joinRoom, setSocketMsgReceived, - socketMsgReceived, marketUpdate, + socketMsgReceived, // room, // setRoom, // message, diff --git a/src/middleware/AuthRoute.jsx b/src/middleware/AuthRoute.jsx index 8d5a93c..101ea7f 100644 --- a/src/middleware/AuthRoute.jsx +++ b/src/middleware/AuthRoute.jsx @@ -32,7 +32,7 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { ); const { - userDetails: { username, uid, session, account_type }, + userDetails: { username, uid, session, account_type, parent_uid }, } = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active let loggedIn = username && session && uid ? true : false; // variable to determine if user is logged in @@ -323,6 +323,11 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { joinRoom('full-markets-jobs') },[isLogin.status]) + useEffect(()=>{ // sends an event to the socket to enable user join a room to be able to receive update for parent child job assign + joinRoom(`FAMILY-${account_type == 'FULL' ? uid : parent_uid}`) + console.log(`Room joined for parent child task assign as ${account_type} with ${account_type == 'FULL' ? uid : parent_uid}}, => ${uid}, ${parent_uid}`) +},[isLogin.status]) + // RENDER PAGE return isLogin.loading && !loggedIn ? ( From ae346d5ac5ac5ee006c9950bf7050b54c114a4ca Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Mon, 18 Mar 2024 21:38:41 +0100 Subject: [PATCH 2/2] parent assign job triggers update in child account --- src/components/AuthPages/Login/index2.jsx | 3 ++- src/components/Contexts/SocketIOContext.js | 3 ++- .../FamilyAcc/FamilyPendingOffer.jsx | 7 ++++--- .../FamilyPopout/AssignTaskPopout.jsx | 16 +++++++++++++++- src/components/Partials/Layout.jsx | 5 +---- src/middleware/AuthRoute.jsx | 18 +++++++++--------- src/store/TableReloads.js | 4 ++++ 7 files changed, 37 insertions(+), 19 deletions(-) diff --git a/src/components/AuthPages/Login/index2.jsx b/src/components/AuthPages/Login/index2.jsx index 6fe2ca9..d2535fe 100644 --- a/src/components/AuthPages/Login/index2.jsx +++ b/src/components/AuthPages/Login/index2.jsx @@ -145,8 +145,9 @@ export default function Login() { localStorage.setItem("member_id", `${res.data.member_id}`); localStorage.setItem("uid", `${res.data.uid}`); localStorage.setItem("session_token", `${res.data.session}`); - if (name === "family") { + if (res.data?.account_type == "FAMILY") { sessionStorage.setItem("family_uid", res.data?.family_uid); + sessionStorage.setItem("parent_uid", res.data?.parent_uid); } // localStorage.setItem("session", `${res.data.session}`); dispatch(updateUserDetails({ ...res.data })); diff --git a/src/components/Contexts/SocketIOContext.js b/src/components/Contexts/SocketIOContext.js index 1671c56..886c6f3 100644 --- a/src/components/Contexts/SocketIOContext.js +++ b/src/components/Contexts/SocketIOContext.js @@ -53,7 +53,7 @@ export default function SocketIOContextProvider({children}) { }); socket.on("family_actions", (data) => { // setSocketMsgReceived(data.message); - // dispatch(tableReload({type:'MARKETTABLELIST'})) + dispatch(tableReload({type:'FAMILYOFFERLIST'})) console.log('working') }); }, [socket]); @@ -64,6 +64,7 @@ export default function SocketIOContextProvider({children}) { joinRoom, setSocketMsgReceived, marketUpdate, + parentAssignJobToKid, socketMsgReceived, // room, // setRoom, diff --git a/src/components/FamilyAcc/FamilyPendingOffer.jsx b/src/components/FamilyAcc/FamilyPendingOffer.jsx index df878f6..8289366 100644 --- a/src/components/FamilyAcc/FamilyPendingOffer.jsx +++ b/src/components/FamilyAcc/FamilyPendingOffer.jsx @@ -4,26 +4,27 @@ import MyOffersFamilyTable from '../MyTasks/MyOffersFamilyTable' import LoadingSpinner from '../Spinners/LoadingSpinner'; import usersService from '../../services/UsersService'; import CustomBreadcrumb from '../Breadcrumb/CustomBreadcrumb'; +import { useSelector } from 'react-redux'; export default function FamilyPendingOffer() { const userApi = new usersService(); + const {familyOfferList} = useSelector((state) => state.tableReload) + const [myOffersList, setMyOffersList] = useState({loading: true, data: []}); const getMyOffersList = async () => { try { const res = await userApi.getOffersList(); setMyOffersList({loading:false, data:res.data}); - console.log('SAME', res.data) } catch (error) { setMyOffersList({loading:false, data:[]}); - console.log("Error getting offers", error); } }; useEffect(()=>{ getMyOffersList() - },[]) + },[familyOfferList]) return ( {myOffersList.loading ? diff --git a/src/components/FamilyAcc/FamilyPopout/AssignTaskPopout.jsx b/src/components/FamilyAcc/FamilyPopout/AssignTaskPopout.jsx index 072a1ac..58b5f82 100644 --- a/src/components/FamilyAcc/FamilyPopout/AssignTaskPopout.jsx +++ b/src/components/FamilyAcc/FamilyPopout/AssignTaskPopout.jsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from "react"; -import { useDispatch } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import { useLocation } from "react-router-dom"; import usersService from "../../../services/UsersService"; import { tableReload } from "../../../store/TableReloads"; @@ -8,6 +8,7 @@ import { PriceFormatter } from "../../Helpers/PriceFormatter"; import LoadingSpinner from "../../Spinners/LoadingSpinner"; import Detail from "../../jobPopout/popoutcomponent/Detail"; import { NewTasks } from "./forms"; +import { SocketValues } from "../../Contexts/SocketIOContext"; const AssignTaskPopout = ({ action, @@ -21,9 +22,12 @@ const AssignTaskPopout = ({ assignTaskChecker, }) => { + const {parentAssignJobToKid} = SocketValues() const apiCall = new usersService(); let { pathname, state } = useLocation(); + const {userDetails} = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active + const [selectedFamilyUid, setSelectedFamilyUid] = useState(''); const handleFamChange = (event) => { @@ -188,6 +192,16 @@ const AssignTaskPopout = ({ dispatch(tableReload({ type: "WALLETTABLE" })); // RELOADS USER WALLET + //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT + // message, room + let socketMsg = { + "audience": "MEMBER", + "action": "REFRESH_OFFER", + "family_uid": reqData.family_uid, + } + let socketRoom = `FAMILY-${userDetails.uid}` + parentAssignJobToKid(socketMsg, socketRoom) //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT + setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); action(); // FUNCTION THAT CLOSES THE MODAL BOX diff --git a/src/components/Partials/Layout.jsx b/src/components/Partials/Layout.jsx index 81f0b0b..295563c 100644 --- a/src/components/Partials/Layout.jsx +++ b/src/components/Partials/Layout.jsx @@ -20,10 +20,7 @@ export default function Layout({ children }) { }; const navigate = useNavigate(); const logOut = () => { - localStorage.removeItem("session_token"); - localStorage.removeItem("member_id"); - localStorage.removeItem("uid"); - sessionStorage.removeItem("family_uid"); + sessionStorage.clear(); localStorage.clear(); // toast.success("Come Back Soon", { // icon: `🙂`, diff --git a/src/middleware/AuthRoute.jsx b/src/middleware/AuthRoute.jsx index 101ea7f..535c535 100644 --- a/src/middleware/AuthRoute.jsx +++ b/src/middleware/AuthRoute.jsx @@ -36,14 +36,11 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { } = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active let loggedIn = username && session && uid ? true : false; // variable to determine if user is logged in - + useEffect(() => { //Removing Data stored at localStorage after session expires const expireSession = () => { - localStorage.removeItem("uid"); - localStorage.removeItem("member_id"); - localStorage.removeItem("session_token"); - sessionStorage.removeItem("family_uid"); + sessionStorage.clear(); localStorage.clear(); navigate("/login", { replace: true }); // redirects user to login page after session expires }; @@ -109,6 +106,8 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { }); }; loadProfile(); + }else{ + setIsLogin({ loading: false, status: true }); } }, []); @@ -324,10 +323,11 @@ const AuthRoute = ({ redirectPath = "/login", children }) => { },[isLogin.status]) useEffect(()=>{ // sends an event to the socket to enable user join a room to be able to receive update for parent child job assign - joinRoom(`FAMILY-${account_type == 'FULL' ? uid : parent_uid}`) - console.log(`Room joined for parent child task assign as ${account_type} with ${account_type == 'FULL' ? uid : parent_uid}}, => ${uid}, ${parent_uid}`) -},[isLogin.status]) - + if(loggedIn || isLogin.status){ + joinRoom(`FAMILY-${account_type == 'FULL' ? uid : sessionStorage.getItem('parent_uid')}`) + console.log(`Room joined for parent child task assign as ${account_type} with ${account_type == 'FULL' ? uid : sessionStorage.getItem('parent_uid')}}`) + } + },[isLogin.status]) // RENDER PAGE return isLogin.loading && !loggedIn ? ( diff --git a/src/store/TableReloads.js b/src/store/TableReloads.js index ea5f766..42a5365 100644 --- a/src/store/TableReloads.js +++ b/src/store/TableReloads.js @@ -11,6 +11,7 @@ const initialState = { familyBannersListTable: false, chatMessageList: false, marketTableList: false, + familyOfferList: false, }; export const tableReloadSlice = createSlice({ @@ -49,6 +50,9 @@ export const tableReloadSlice = createSlice({ case "MARKETTABLELIST": state.marketTableList = !state.marketTableList; return; + case "FAMILYOFFERLIST": + state.familyOfferList = !state.familyOfferList; + return; default: return state; }