diff --git a/src/components/Contexts/SocketIOContext.js b/src/components/Contexts/SocketIOContext.js index 0ecc8b5..436fe24 100644 --- a/src/components/Contexts/SocketIOContext.js +++ b/src/components/Contexts/SocketIOContext.js @@ -44,6 +44,12 @@ export default function SocketIOContextProvider({children}) { } }; + const sendJobInterestToOwner = (message, room) => { + if(message && room){ + socket.emit("marketjob", { message:{...message}, room }); + } + }; + useEffect(() => { socket.on("receive_message", (data) => { // setSocketMsgReceived(data.message); @@ -70,6 +76,15 @@ export default function SocketIOContextProvider({children}) { } // console.log('DATA', data) }); + + socket.on("marketjob_actions", (data) => { // Triggers refresh on owner side, when somebody sends/shows interest in a job + // let user_uid = userDetails.account_type == 'FULL' ? userDetails.uid : sessionStorage.getItem('family_uid') // gets user UID + let {message} = data + if(message.action == "REFRESH_OFFERS" && message.audience == "MERCHANT"){ // for refreshing job owner offer interest list when any worker sends interest + dispatch(tableReload({type:'OFFERINTERESTLISTRELOAD'})) + } + }); + }, [socket]); let values = { @@ -79,6 +94,7 @@ export default function SocketIOContextProvider({children}) { setSocketMsgReceived, marketUpdate, parentAssignJobToKid, + sendJobInterestToOwner, socketMsgReceived, // room, // setRoom, diff --git a/src/components/MarketPlace/PopUp/MarketPopUp.jsx b/src/components/MarketPlace/PopUp/MarketPopUp.jsx index f364281..c9158e4 100644 --- a/src/components/MarketPlace/PopUp/MarketPopUp.jsx +++ b/src/components/MarketPlace/PopUp/MarketPopUp.jsx @@ -1,11 +1,26 @@ -import { useMemo, useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { toast } from "react-toastify"; import usersService from "../../../services/UsersService"; import ModalCom from "../../Helpers/ModalCom"; import { PriceFormatter } from "../../Helpers/PriceFormatter"; import LoadingSpinner from "../../Spinners/LoadingSpinner"; +import { SocketValues } from "../../Contexts/SocketIOContext"; const MarketPopUp = ({ details, onClose, situation, marketInt }) => { + + let {sendJobInterestToOwner} = SocketValues() // function to emit job interest request + const emitOfferInterest = () => { + let message = { + "audience": "MERCHANT", + "action": "REFRESH_OFFERS", + "offer_code": details?.offer_code, + "offer_uid": details?.offer_uid, + "job_uid": details?.job_uid, + } + let room = `INTEREST-${details?.market_uid}` + sendJobInterestToOwner(message, room) + } + const [textValue, setTextValue] = useState(""); const [errMsg, setErrMsg] = useState({ market: false, @@ -88,7 +103,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => { state: true, }); } - + emitOfferInterest() // FUNCTIONS TO EMIT EVENT INDICATING SOMEONE SENDS AN INTEREST IN YOUR JOB setTimeout(() => setManageInt({ msg: "" }), 3000); } catch (error) { throw new Error(error); @@ -296,6 +311,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => { ); }; + export default MarketPopUp; const CloseIcon = ({ onClose }) => ( diff --git a/src/store/TableReloads.js b/src/store/TableReloads.js index e2f9b7c..34fad9f 100644 --- a/src/store/TableReloads.js +++ b/src/store/TableReloads.js @@ -13,6 +13,7 @@ const initialState = { marketTableList: false, familyOfferList: false, parentFamilyTaskList: false, + offerInterestListReload: false, }; export const tableReloadSlice = createSlice({ @@ -57,6 +58,9 @@ export const tableReloadSlice = createSlice({ case "PARENTFAMILYTASKLIST": // reloads list of active family task on parent side state.parentFamilyTaskList = !state.parentFamilyTaskList; return; + case "OFFERINTERESTLISTRELOAD": // to reload offer interest list of owner when a worker sends interest in a job + state.offerInterestListReload = !state.offerInterestListReload; + return; default: return state; } diff --git a/src/views/OffersInterestPage.jsx b/src/views/OffersInterestPage.jsx index bc70271..f3ecdcd 100644 --- a/src/views/OffersInterestPage.jsx +++ b/src/views/OffersInterestPage.jsx @@ -5,7 +5,16 @@ import OffersInterest from "../components/OffersInterest"; import usersService from "../services/UsersService"; +import { SocketValues } from "../components/Contexts/SocketIOContext"; // for reading socket context values + export default function OffersInterestPage() { + + const { offerInterestListReload } = useSelector((state) => state.tableReload); // table/list reload variable + + const {userDetails} = useSelector((state) => state?.userDetails); // Gets USER Details + + let {joinRoom} = SocketValues() // function to join room for socket + const apiCall = new usersService() let {commonHeadBanner} = useSelector(state => state.commonHeadBanner) @@ -19,6 +28,10 @@ export default function OffersInterestPage() { setOfferInterestList({loading: false, data: [], imgServer:''}) console.log('Error: ', err) }) + },[offerInterestListReload]) + + useEffect(()=>{ + joinRoom(`INTEREST-${userDetails?.uid}`) },[]) return (