import React, { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import Layout from "../Partials/Layout"; import CommonHead from "../UserHeader/CommonHead"; import usersService from "../../services/UsersService"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import OthersInterestedTable from "./OthersInterestedTable"; import { useDispatch, useSelector } from "react-redux"; import { tableReload } from "../../store/TableReloads"; import { PriceFormatter } from "../Helpers/PriceFormatter"; export default function ManageInterestOffer(props) { const { walletDetails } = useSelector((state) => state?.walletDetails); // WALLET STORE let { othersInterestedTable } = useSelector((state) => state.tableReload); // FOR OTHERS INTERESTED TABLE RELOAD let walletBal = walletDetails?.data?.filter(wallet => wallet.code == props?.offerDetails?.currency_code) // USER WALLET BALANCE FOR CORRESPONDING TASK CURRENCY let clientAdded = new Date(props.offerDetails?.client_added) const dispatch = useDispatch() const navigate = useNavigate() const apiCall = new usersService() let [redirectTime, setRedirectTime] = useState(5) let [messageToSend, setMessageToSend] = useState('') let [tab, setTab] = useState("info"); //message STATE FOR SWITCHING BETWEEN TABS let [requestStatus, setRequestStatus] = useState({loading: false, status: false, message: '', processType: ''}) let [messageListReload, setMessageListReload] = useState(false) // STATE TO DETERMINE WHEN MESSAGE LIST WILL RELOAD const [messageList, setMessageList] = useState({loading: true, data: []}) // TO BE REMOVED AND REPLACE WITH REAL MESSAGE FROM API CALL const [interestStats, setInterestStats] = useState({loading: true, data: []}) // STATE TO HOLD INTEREST STATS const [selectTab, setValue] = useState("today"); const filterHandler = (value) => { setValue(value); }; //FUNCTION TO HANDLE ON CHANGE MESSAGE IN TEXTAREA const onMessageChange = ({target:{value}}) => { if(messageToSend.length > 149){ setRequestStatus({loading: false, status: false, message: 'max of 150 characters', processType: 'sendmessage'}) }else{ setRequestStatus({loading: false, status: false, message: '', processType: 'sendmessage'}) } setMessageToSend(value) } //FUNCTION TO SEND MESSAGE TO CLIENT const sendMessage = () => { let reqData = { // API PAYLOADS msg_type: 'MRKTINT', yourmessage: messageToSend, offer_uid: props.offerDetails.offer_uid, interest_uid: props.offerDetails.interest_uid } setRequestStatus(prev => ({...prev, loading: true, processType: 'sendmessage'})) if(!messageToSend){ setRequestStatus({loading: false, status: false, message: 'Please enter message to send', processType: 'sendmessage'}) return } if(messageToSend.length > 149){ return } apiCall.offerInterestMsg(reqData).then(res=>{ if(res.status != 200 || res.data.internal_return < 0){ setRequestStatus({loading: false, status: false, message: 'message not sent, try again', processType: 'sendmessage'}) return } setRequestStatus({loading: false, status: true, message: 'message sent', processType: 'sendmessage'}) setMessageToSend('') // sets message to empty strings setMessageListReload(prev => !prev) //A FUNCTION TO MAKE MESSAGE LIST RELOAD }).catch(error => { setRequestStatus({loading: false, status: false, message: 'Opps, an error occured', processType: 'sendmessage'}) }).finally(()=>{ setTimeout(() => { setRequestStatus({loading: false, status: false, message: '', processType: ''}) }, 5000); }) } //FUNCTION TO ACCEPT/REJECT OFFER INTEREST const interestOfferProcess = ({target:{name}}) => { setRequestStatus(prev => ({...prev, loading: true, processType: name})) let reqData = { // API PAYLOADS proc: name.toUpperCase(), client_uid : props.offerDetails?.client_uid, offer_code : props.offerDetails?.offer_code, offer_uid: props.offerDetails?.offer_uid, } apiCall.offersInterestProc(reqData).then(res => { if(res.status != 200 || res.data.internal_return < 0){ setRequestStatus({loading: false, status: false, message: 'Unable to complete request', processType: ''}) return } let intervalTime = setInterval(() => { // SETS REDIRECT COUNT DOWN setRedirectTime(prev => prev - 1) }, 1000); setRequestStatus({loading: false, status: true, message: `Offer ${name}ed`, processType: ''}) dispatch(tableReload({ type: "WALLETTABLE" })); setTimeout(()=>{ navigate('/offer-interest', {replace: true}) clearInterval(intervalTime) },5000) }).catch(err => { setRequestStatus({loading: false, status: false, message: 'Opps! something went wrong. Try again', processType: ''}) }).finally(()=>{ setTimeout(()=>{ setRequestStatus({loading: false, status: false, message: '', processType: ''}) },5000) }) } useEffect(()=>{ //API to get Offer Interest message list let reqData = { // API PAYLOADS msg_type: 'MRKTINT', offer_uid: props.offerDetails?.offer_uid, interest_uid: props.offerDetails?.interest_uid } setMessageList(prev => ({...prev, loading: true})) apiCall.offerInterestListMsg(reqData).then(res=>{ setMessageList({loading: false, data:res?.data?.result_list}) }).catch(err => { setMessageList(prev => ({...prev, loading: false})) console.log('Failed', err) }) },[messageListReload]) useEffect(()=>{ //API to get Interest stats let reqData = { // API PAYLOADS interest_uid: props?.offerDetails?.interest_uid, client_uid: props?.offerDetails?.client_uid } setInterestStats(prev => ({...prev, loading: true})) apiCall.interestStatistics(reqData).then(res=>{ setInterestStats({loading: false, data:res?.data}) }).catch(err => { setInterestStats(prev => ({...prev, loading: false})) console.log('Failed', err) }) },[othersInterestedTable]) return (
{/* heading */}

Manage Offer Interest

{/* manage offer section */}
{/* Detail section */}

{props.offerDetails?.offer_code && props.offerDetails.offer_code}

{props.offerDetails?.title}

{/* switch button */}
{/* END OF switch button */} {/* info tab */} {tab == 'info' ?

Name : {' '} {props.offerDetails?.client_name}

Member Since : {' '} {clientAdded.getFullYear()}{" - "} {clientAdded.getMonth() < 9 ? '0'+ (clientAdded.getMonth() + 1) : clientAdded.getMonth() + 1}

<> {interestStats.loading ? : <>

Previous Job Statistics

Completed :

{interestStats.data?.job_completed && interestStats.data?.job_completed}

Active :

{interestStats.data?.job_active && interestStats.data?.job_active}

% Completion :

{interestStats.data?.job_percent_complete && interestStats.data?.job_percent_complete}

Last Completed :

{interestStats.data?.job_last_date && interestStats.data?.job_last_date}

Uncompleted :

{interestStats.data?.job_uncompleted && interestStats.data?.job_uncompleted}

Pending Offers :

{interestStats.data?.job_pending && interestStats.data?.job_pending}

{/*

Completed:

{interestStats.data?.job_completed && interestStats.data?.job_completed}

Completed:

{interestStats.data?.job_last_date && interestStats.data?.job_last_date}

*/} {/*

Active:

{interestStats.data?.job_active && interestStats.data?.job_active}

Uncompleted:

{interestStats.data?.job_uncompleted && interestStats.data?.job_uncompleted}

*/} {/*

% Completion:

{interestStats.data?.job_percent_complete && interestStats.data?.job_percent_complete}

Pending Offers:

{interestStats.data?.job_pending && interestStats.data?.job_pending}

*/} }
: tab == 'message' ?

To: {props.offerDetails?.client_name}