From 8e35839ddfd0b57be5128aa98cf1123de0b41ecc Mon Sep 17 00:00:00 2001 From: victorAnumudu Date: Tue, 13 Jun 2023 23:09:55 +0100 Subject: [PATCH] owner review job API added and API name changed --- .../JobActions/CurrentTaskAction.jsx | 2 +- .../JobActions/PastDueJobAction.jsx | 33 ++- .../JobActions/ReviewJobAction.jsx | 200 +++++++++++++++++- src/services/UsersService.js | 6 +- 4 files changed, 226 insertions(+), 15 deletions(-) diff --git a/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx b/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx index d18c17c..adc72f1 100644 --- a/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx +++ b/src/components/MyActiveJobs/JobActions/CurrentTaskAction.jsx @@ -40,7 +40,7 @@ function CurrentTaskAction({jobDetails}) { } // API CALL TO MARK TASK AS COMPLETED BY WORKER - apiCall.taskCompleted(reqData).then((res)=>{ + apiCall.workerJobAction(reqData).then((res)=>{ if(res.status != 200 || res.data.internal_return < 0){ setReqStatus({loading:false, status: false, message: 'unable to complete request. Try again'}) return diff --git a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx index 58e81db..25cd43d 100644 --- a/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/PastDueJobAction.jsx @@ -31,15 +31,36 @@ function PastDueJobAction({jobDetails}) { setAction('cancel') setReqStatus({loading:true, status: false, message: ''}) + let reqData = { // API PAYLOADS + contract: jobDetails.contract, + contract_uid: jobDetails.contract_uid, + job_action: '', + } + if(!checked){ // CHECKS IF CHECKBOX IS SELECTED setReqStatus({loading:false, status: false, message: 'Please check the box above'}) return setTimeout(()=>{ setReqStatus({loading:false, status: false, message: ''}) }, 3000) } - setTimeout(()=>{ - setReqStatus({loading:false, status: false, message: ''}) - }, 3000) + // API CALL TO ACCEPT COMPLETION BY OWNER + apiCall.ownerJobAction(reqData).then((res)=>{ + if(res.status != 200 || res.data.internal_return < 0){ + setReqStatus({loading:false, status: false, message: 'unable to complete request. Try again'}) + return + } + setReqStatus({loading:false, status: true, message: 'job cancelled successfully'}) + setTimeout(()=>{ // Sets popout to false and navigates user to /my-pastdue-jobs after 3 seconds + popUpHandler() + navigate('/my-pastdue-jobs', {replace: true}) + }, 3000) + }).catch(err => { + setReqStatus({loading:false, status: false, message: 'Opps! Network error. Try again'}) + }).finally(()=>{ + setTimeout(()=>{ + setReqStatus({loading:false, status: false, message: ''}) + }, 3000) + }) } // FUNCTION TO HANDLE WHEN USER/OWNER CLICKS ON EXTEND TIMELINE FOR A JOB @@ -60,7 +81,7 @@ function PastDueJobAction({jobDetails}) { } // API CALL EXTEND TIMELINE BY OWNER - apiCall.extendJobTimeline(reqData).then((res)=>{ + apiCall.ownerJobAction(reqData).then((res)=>{ if(res.status != 200 || res.data.internal_return < 0){ setReqStatus({loading:false, status: false, message: 'unable to complete request. Try again'}) return @@ -156,7 +177,7 @@ function PastDueJobAction({jobDetails}) { {reqStatus.loading && action=='cancel'? : - } @@ -180,7 +201,7 @@ function PastDueJobAction({jobDetails}) { {reqStatus.loading && action=='extend' ? : - } diff --git a/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx b/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx index 957c4f8..4b66f06 100644 --- a/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx +++ b/src/components/MyActiveJobs/JobActions/ReviewJobAction.jsx @@ -1,9 +1,97 @@ -import React from 'react' +import React,{useState} from 'react' +import ModalCom from '../../Helpers/ModalCom' +import LoadingSpinner from '../../Spinners/LoadingSpinner' +import { useNavigate } from 'react-router-dom' +import usersService from '../../../services/UsersService' -function ReviewJobAction() { +function ReviewJobAction({jobDetails}) { + + const apiCall = new usersService() + const navigate = useNavigate() + + const [checked, setChecked] = useState(false) + + const [action, setAction] = useState('') // VALUE OF NEW EXTENDED TIME + + const [reqStatus, setReqStatus] = useState({loading:false, status: false, message: ''}) + + let [popUp, setPopUp] = useState(false) + + const popUpHandler = () => { + if(popUp){ + setChecked(false) + } + setPopUp(prev => !prev) + } + + // FUNCTION TO HANDLE WHEN OWNER ACCEPTS COMPLETION OF JOB + const acceptCompletion = () => { + setAction('accept') + setReqStatus({loading:true, status: false, message: ''}) + + let reqData = { // API PAYLOADS + contract: jobDetails.contract, + contract_uid: jobDetails.contract_uid, + job_action: 'ACCEPT_COMPLETE', + } + + if(!checked){ // CHECKS IF CHECKBOX IS SELECTED + setReqStatus({loading:false, status: false, message: 'Please check the box above'}) + return setTimeout(()=>{ + setReqStatus({loading:false, status: false, message: ''}) + }, 3000) + } + // API CALL TO ACCEPT COMPLETION BY OWNER + apiCall.ownerJobAction(reqData).then((res)=>{ + if(res.status != 200 || res.data.internal_return < 0){ + setReqStatus({loading:false, status: false, message: 'unable to complete request. Try again'}) + return + } + setReqStatus({loading:false, status: true, message: 'job completion accepted successfully'}) + setTimeout(()=>{ // Sets popout to false and navigates user to /my-review-jobs after 3 seconds + popUpHandler() + navigate('/my-review-jobs', {replace: true}) + }, 3000) + }).catch(err => { + setReqStatus({loading:false, status: false, message: 'Opps! Network error. Try again'}) + }).finally(()=>{ + setTimeout(()=>{ + setReqStatus({loading:false, status: false, message: ''}) + }, 3000) + }) + } + + // FUNCTION TO HANDLE WHEN USER/OWNER CLICKS ON REJECT COMPLETION OF JOB + const rejectCompletion = () => { + setAction('reject') + setReqStatus({loading:true, status: false, message: ''}) // Sets loading spinner active + let reqData = { // API PAYLOADS + contract: jobDetails.contract, + contract_uid: jobDetails.contract_uid, + job_action: 'REJECT_COMPLETE', + } + // API CALL TO REJECT COMPLETION BY OWNER + apiCall.ownerJobAction(reqData).then((res)=>{ + if(res.status != 200 || res.data.internal_return < 0){ + setReqStatus({loading:false, status: false, message: 'unable to complete request. Try again'}) + return + } + setReqStatus({loading:false, status: true, message: 'job completion rejected successfully'}) + setTimeout(()=>{ // Sets popout to false and navigates user to /my-review-jobs after 3 seconds + popUpHandler() + navigate('/my-review-jobs', {replace: true}) + }, 3000) + }).catch(err => { + setReqStatus({loading:false, status: false, message: 'Opps! Network error. Try again'}) + }).finally(()=>{ + setTimeout(()=>{ + setReqStatus({loading:false, status: false, message: ''}) + }, 3000) + }) + } return (
-

+

@@ -20,7 +108,7 @@ function ReviewJobAction() {
-
@@ -28,7 +116,109 @@ function ReviewJobAction() {
-

+
+ + {popUp && ( + +
+
+

+ Past Due Task +

+ +
+
+
+
+ {setChecked(prev => !prev)}} + className='w-6 h-6 text-sky-blue bg-gray-100 focus:ring-sky-blue' + /> +

I am ready to accept completion

+
+ +
+ {reqStatus.loading && action=='accept'? + + : + + } +
+ + {/* EXTEND TIMELINE SECTION */} +
+
+

I am not ready to accept completion of task

+
+ {reqStatus.loading && action=='reject' ? + + : + +} +
+ + {/* FOR SUCCESS/ERROR DISPLAY SECTION*/} +
+ {reqStatus.message != "" && + (!reqStatus.status ? ( +
+ {reqStatus.message} +
+ ) : ( + reqStatus.status && ( +
+ {reqStatus.message} +
+ ) + ))} +
+ {/* END OF FOR SUCCESS/ERROR DISPLAY SECTION*/} +
+ + {/* cancel btn */} +
+ +
+
+
+
+ )}
) } diff --git a/src/services/UsersService.js b/src/services/UsersService.js index f820c97..a29a277 100644 --- a/src/services/UsersService.js +++ b/src/services/UsersService.js @@ -654,7 +654,7 @@ class usersService { } // END POINT FOR WORKER TO MARK TASK AS COMPLETED - taskCompleted(reqData) { + workerJobAction(reqData) { var postData = { uid: localStorage.getItem("uid"), member_id: localStorage.getItem("member_id"), @@ -665,8 +665,8 @@ class usersService { return this.postAuxEnd("/activetaskstatus", postData); } - // END POINT FOR OWNER TO EXTEND TIMELINE/DURATON OF JOB - extendJobTimeline(reqData) { + // END POINT FOR OWNER JOB ACTION + ownerJobAction(reqData) { var postData = { uid: localStorage.getItem("uid"), member_id: localStorage.getItem("member_id"),