Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e6b59624f | |||
| 1b6b4f17b0 | |||
| 8a9ec35994 | |||
| fa2102eb61 | |||
| bf73461c64 | |||
| 5a0d8aebdb | |||
| e8ed10ddbf |
@@ -7,15 +7,66 @@ import { PriceFormatter } from '../../Helpers/PriceFormatter'
|
|||||||
|
|
||||||
function AssignTaskPopout({action, situation, familyDetails}) {
|
function AssignTaskPopout({action, situation, familyDetails}) {
|
||||||
const apiCall = new usersService()
|
const apiCall = new usersService()
|
||||||
|
|
||||||
|
let [requestStatus, setRequestStatus] = useState({loading: false, status: false, message: ''}) // HOLDS RESPONSE FOR SENDING API REQUEST
|
||||||
|
|
||||||
let [familyTask, setFamilyTask] = useState({loading: true, data: []})
|
let [familyTask, setFamilyTask] = useState({loading: true, data: []})
|
||||||
|
|
||||||
let [activeTask, setActiveTask] = useState({id: 0, data: {}})
|
let [taskType, setTaskType] = useState('select') // SWITCHES BTW SELECT TASK AND NEW TASK
|
||||||
console.log('TESTING',activeTask.data)
|
|
||||||
const handleActiveTask = (id=0, data={}) => {
|
let [activeTask, setActiveTask] = useState({id: 0, data: {}}) // HOLDS SELECTED TASK
|
||||||
|
|
||||||
|
const switchTaskType = ({target:{value}}) => { // FUNCTION TO CHANGE SELECTED ACTIVE TASK
|
||||||
|
setTaskType(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleActiveTask = (id=0, data={}) => { // FUNCTION TO CHANGE SELECTED ACTIVE TASK
|
||||||
setActiveTask({id, data})
|
setActiveTask({id, data})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const assignFamilyTask = () => {
|
||||||
|
setRequestStatus({loading: true, status: false, message: ''})
|
||||||
|
let reqData = {}
|
||||||
|
if(taskType == 'select'){ // RUNS HERE IF TASK TYPE IS SELECT
|
||||||
|
if(!Object.keys(activeTask.data).length){
|
||||||
|
setRequestStatus({loading: false, status: false, message: 'No Task is seleted'})
|
||||||
|
return setTimeout(()=>{
|
||||||
|
setRequestStatus({loading: false, status: false, message: ''})
|
||||||
|
}, 3000)
|
||||||
|
}
|
||||||
|
reqData = { // API PAYLOADS
|
||||||
|
job_id: activeTask.data?.job_id,
|
||||||
|
job_uid: activeTask.data?.job_uid,
|
||||||
|
family_uid: familyDetails.uid,
|
||||||
|
job_description: activeTask.data?.description,
|
||||||
|
assign_mode: 110011,
|
||||||
|
}
|
||||||
|
|
||||||
|
apiCall.assignFamilyTask(reqData).then(res => {
|
||||||
|
if(res.status != 200 || res.data.internal_return < 0){
|
||||||
|
setRequestStatus({loading: false, status: false, message: 'failed to assign task'})
|
||||||
|
return setTimeout(()=>{
|
||||||
|
setRequestStatus({loading: false, status: false, message: ''})
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
setRequestStatus({loading: false, status: true, message: 'action successful'})
|
||||||
|
setTimeout(()=>{
|
||||||
|
setRequestStatus({loading: false, status: false, message: ''})
|
||||||
|
action() // FUNCTION THAT CLOSES THE MODAL BOX
|
||||||
|
}, 5000)
|
||||||
|
}).catch(err => {
|
||||||
|
setRequestStatus({loading: false, status: false, message: 'An Error occured, try again'})
|
||||||
|
setTimeout(()=>{
|
||||||
|
setRequestStatus({loading: false, status: false, message: ''})
|
||||||
|
}, 5000)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if(taskType == 'new'){ // RUNS HERE IF TASK TYPE IS NEW TASK
|
||||||
|
console.log('TESTING')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(()=>{
|
useEffect(()=>{
|
||||||
const reqData = {
|
const reqData = {
|
||||||
limit: 30,
|
limit: 30,
|
||||||
@@ -25,7 +76,9 @@ console.log('TESTING',activeTask.data)
|
|||||||
}
|
}
|
||||||
apiCall.getMyJobList(reqData).then(res => {
|
apiCall.getMyJobList(reqData).then(res => {
|
||||||
setFamilyTask({loading: false, data: res?.data?.result_list})
|
setFamilyTask({loading: false, data: res?.data?.result_list})
|
||||||
setActiveTask(prev => ({...prev, data:res?.data?.result_list[0]}))
|
if(res?.data?.result_list?.length){
|
||||||
|
setActiveTask(prev => ({...prev, data:res?.data?.result_list[0]}))
|
||||||
|
}
|
||||||
}).catch(err => {
|
}).catch(err => {
|
||||||
setFamilyTask({loading: false, data: []})
|
setFamilyTask({loading: false, data: []})
|
||||||
console.log('Error', err)
|
console.log('Error', err)
|
||||||
@@ -37,7 +90,7 @@ console.log('TESTING',activeTask.data)
|
|||||||
action={action}
|
action={action}
|
||||||
situation={situation}
|
situation={situation}
|
||||||
>
|
>
|
||||||
<div className="w-full h-full lg:min-w-[700px] lg:h-auto bg-white dark:bg-dark-white lg:rounded-2xl">
|
<div className="w-full h-full lg:w-[700px] lg:h-auto bg-white dark:bg-dark-white lg:rounded-2xl">
|
||||||
<div className="w-full flex items-center justify-between lg:px-10 lg:py-8 px-[30px] py-[23px] border-b dark:border-[#5356fb29] border-light-purple">
|
<div className="w-full flex items-center justify-between lg:px-10 lg:py-8 px-[30px] py-[23px] border-b dark:border-[#5356fb29] border-light-purple">
|
||||||
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
||||||
Assign task to {familyDetails?.firstname}
|
Assign task to {familyDetails?.firstname}
|
||||||
@@ -69,55 +122,64 @@ console.log('TESTING',activeTask.data)
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{familyTask.loading ?
|
{familyTask.loading ?
|
||||||
<div className='h-[100px] flex justify-center items-center'>
|
<div className='h-[100px] w-full flex justify-center items-center'>
|
||||||
<LoadingSpinner color='sky-blue' size='16' />
|
<LoadingSpinner color='sky-blue' size='16' />
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
familyTask.data.length ?
|
|
||||||
<>
|
<>
|
||||||
<div className="job-action-modal-body w-full md:grid md:grid-cols-2">
|
<div className="job-action-modal-body w-full md:grid md:grid-cols-2">
|
||||||
<div className="p-4">
|
<div className="p-4">
|
||||||
<div className="mb-2 w-full flex items-center gap-4">
|
<div className="mb-2 w-full flex items-center gap-4">
|
||||||
<div className="flex items-center gap-2 text-sky-blue text-base">
|
<div className="flex items-center gap-2 text-sky-blue text-base">
|
||||||
<input type="radio" name='task-type' className="w-[20px] h-[20px]" /><span>Select Task</span>
|
<input type="radio" name='task-type' value='select' className="w-[20px] h-[20px] cursor-pointer" checked={taskType=='select'} onChange={switchTaskType}/>
|
||||||
|
<span>Select Task</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2 text-sky-blue text-base">
|
<div className="flex items-center gap-2 text-sky-blue text-base">
|
||||||
<input type="radio" name='task-type' className="w-[20px] h-[20px]" /><span>New Task</span>
|
<input type="radio" name='task-type' value='new' className="w-[20px] h-[20px] cursor-pointer" checked={taskType=='new'} onChange={switchTaskType}/>
|
||||||
|
<span>New Task</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className='p-4 w-full h-[400px] overflow-y-auto bg-slate-100'>
|
<div className='p-4 w-full h-[400px] overflow-y-auto bg-slate-100'>
|
||||||
{familyTask?.data?.map((item, index)=>(
|
{
|
||||||
<div key={item.job_uid} className="mb-2 flex justify-start items-center gap-2 text-sky-blue text-base cursor-pointer" onClick={()=>handleActiveTask(item.job_uid, item)}>
|
taskType == 'select' ?
|
||||||
<input
|
familyTask?.data?.length ?
|
||||||
type="radio"
|
familyTask?.data?.map((item, index)=>(
|
||||||
name='task-list'
|
<div key={item.job_uid} className="mb-2 flex justify-start items-center gap-2 text-sky-blue text-base cursor-pointer" onClick={()=>handleActiveTask(item.job_uid, item)}>
|
||||||
checked={(activeTask.id == item.job_uid) || (activeTask.id==index)&& true}
|
<input
|
||||||
onChange={()=>handleActiveTask(item.job_uid, item)}
|
type="radio"
|
||||||
className="w-[15px] h-[15px] cursor-pointer"
|
name='task-list'
|
||||||
/>
|
checked={(activeTask.id == item.job_uid) || (activeTask.id==index)&& true}
|
||||||
<p className="text-dark-gray tracking-wide">{item?.title}</p>
|
onChange={()=>handleActiveTask(item.job_uid, item)}
|
||||||
</div>
|
className="w-[15px] h-[15px] cursor-pointer"
|
||||||
))
|
/>
|
||||||
|
<p className="text-dark-gray tracking-wide">{item?.title}</p>
|
||||||
|
</div>
|
||||||
|
))
|
||||||
|
:
|
||||||
|
<p className="p-8 text-lg text-dark-gray dark:text-white tracking-wide text-center">No Task found!</p>
|
||||||
|
:
|
||||||
|
<p className="p-8 text-lg text-dark-gray dark:text-white tracking-wide text-center">SPACE FOR NEW TASK</p>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{familyTask?.data?.length > 0 ?
|
||||||
<div className="p-4">
|
<div className="p-4">
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<p className="text-lg font-bold text-dark-gray dark:text-white tracking-wide border-b-2">{activeTask?.data?.title}</p>
|
<p className="text-lg font-bold text-dark-gray dark:text-white tracking-wide border-b-2">{activeTask?.data?.title}</p>
|
||||||
<div className="my-3 sm:flex items-center">
|
<div className="my-3">
|
||||||
<Detail label="Description" value={activeTask?.data?.description} />
|
<Detail label="Description" value={activeTask?.data?.description} />
|
||||||
</div>
|
</div>
|
||||||
|
<div className='flex items-center'>
|
||||||
|
<div className="my-3 w-full flex items-center gap-1">
|
||||||
|
<label className='text-slate-900 dark:text-white tracking-wide font-semibold'>Price</label>
|
||||||
|
<p className='p-1 text-sm text-slate-900 dark:text-white'>{PriceFormatter(activeTask?.data?.price*0.01, activeTask?.data?.currency, activeTask?.data?.curreny_code)}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div className="my-3 sm:flex items-center">
|
<div className="my-3 w-full flex items-center gap-1">
|
||||||
<Detail label="Price" value={PriceFormatter(activeTask?.data?.price*0.01, activeTask?.data?.currency, activeTask?.data?.curreny_code)} />
|
<label className='text-slate-900 dark:text-white tracking-wide font-semibold'>Timeline</label>
|
||||||
</div>
|
<p className='p-1 text-sm text-slate-900 dark:text-white'>{`${activeTask?.data?.timeline_days} day(s)`}</p>
|
||||||
|
</div>
|
||||||
<div className="my-3 sm:flex items-center">
|
|
||||||
<Detail
|
|
||||||
label="Timeline"
|
|
||||||
value={`${activeTask?.data?.timeline_days} day(s)`}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="my-3 sm:flex items-center">
|
<div className="my-3 sm:flex items-center">
|
||||||
@@ -135,30 +197,62 @@ console.log('TESTING',activeTask.data)
|
|||||||
className={`p-1 w-full text-sm text-slate-900 outline-none border border-slate-300 rounded-md`}
|
className={`p-1 w-full text-sm text-slate-900 outline-none border border-slate-300 rounded-md`}
|
||||||
rows="5"
|
rows="5"
|
||||||
style={{ resize: "none" }}
|
style={{ resize: "none" }}
|
||||||
defaultValue={activeTask?.data?.job_detail}
|
value={activeTask?.data?.job_detail}
|
||||||
|
readOnly
|
||||||
// onChange={handleInputChange}
|
// onChange={handleInputChange}
|
||||||
/>
|
/>
|
||||||
{/* <p>{errMsg.deliveryDetail}</p> */}
|
{/* <p>{}</p> */}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
:
|
||||||
|
<></>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* BTN */}
|
{/* BTN */}
|
||||||
<div className='p-2 border-t-2 flex justify-end items-center gap-3'>
|
<div className='p-2 border-t-2 flex justify-end items-center gap-3'>
|
||||||
<button onClick={action} type="button" className="w-20 h-11 flex justify-center items-center border-gradient text-base rounded-full text-white">
|
{/* error or success display */}
|
||||||
<span className='text-gradient'>Close</span>
|
{requestStatus.message != "" &&
|
||||||
</button>
|
(!requestStatus.status ? (
|
||||||
|
<div
|
||||||
|
className={`relative p-2 text-[#912741] bg-[#fcd9e2] border-[#fbc6d3] mb-4 rounded-[0.475rem] text-md font-light leading-[19.5px] text-[13px]`}
|
||||||
|
>
|
||||||
|
{requestStatus.message}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
requestStatus.status && (
|
||||||
|
<div
|
||||||
|
className={`relative p-2 text-green-700 bg-slate-200 border-slate-800 mb-4 rounded-[0.475rem] text-md font-light leading-[19.5px] text-[13px]`}
|
||||||
|
>
|
||||||
|
{requestStatus.message}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
))}
|
||||||
|
{/* End of error or success display */}
|
||||||
|
<button
|
||||||
|
disabled={requestStatus.loading}
|
||||||
|
onClick={action} type="button"
|
||||||
|
className="w-20 h-11 flex justify-center items-center border-gradient text-base rounded-full text-white cursor-pointer"
|
||||||
|
>
|
||||||
|
<span className='text-gradient'>Close</span>
|
||||||
|
</button>
|
||||||
|
<div className=''>
|
||||||
|
{requestStatus.loading ?
|
||||||
|
<LoadingSpinner color='sky-blue' size='8' />
|
||||||
|
:
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
className="px-1 w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white"
|
disabled={requestStatus.loading}
|
||||||
|
onClick={assignFamilyTask}
|
||||||
|
className="px-1 w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white cursor-pointer"
|
||||||
>
|
>
|
||||||
Assign
|
Assign
|
||||||
</button>
|
</button>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
:
|
|
||||||
<p className="p-8 text-lg text-dark-gray dark:text-white tracking-wide text-center">No Task found!</p>
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</ModalCom>
|
</ModalCom>
|
||||||
|
|||||||
@@ -3,11 +3,10 @@ import slider2 from "../../assets/images/slider-2.jpg";
|
|||||||
import HomeBannerOffersCard from "../Cards/HomeBannerOffersCard";
|
import HomeBannerOffersCard from "../Cards/HomeBannerOffersCard";
|
||||||
|
|
||||||
export default function HomeSliders(props) {
|
export default function HomeSliders(props) {
|
||||||
// console.log("BANNER LIST IN HomeSliders->", props.bannerList);
|
|
||||||
// debugger;
|
// debugger;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="hero-slider relative 2xl:w-[600px] xl:w-[500px] lg:w-[420px] w-full mb-2 lg:mb-0 ">
|
<div className="hero-slider relative 2xl:w-[600px] xl:w-[400px] lg:w-[420px] w-full mb-2 lg:mb-0 ">
|
||||||
<div className="w-full">
|
<div className="w-full">
|
||||||
<SliderCom settings={props.settings}>
|
<SliderCom settings={props.settings}>
|
||||||
{props.bannerList?.length <= 0 && (
|
{props.bannerList?.length <= 0 && (
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { PriceFormatter } from "../Helpers/PriceFormatter";
|
|||||||
|
|
||||||
const noTasksBg = require("../../assets/images/no-task-background.jpg");
|
const noTasksBg = require("../../assets/images/no-task-background.jpg");
|
||||||
|
|
||||||
export default function MyJobTable({ className, ActiveJobList }) {
|
export default function MyJobTable({ className, ActiveJobList, Account }) {
|
||||||
let navigate = useNavigate();
|
let navigate = useNavigate();
|
||||||
let { pathname } = useLocation();
|
let { pathname } = useLocation();
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ export default function MyJobTable({ className, ActiveJobList }) {
|
|||||||
const navigateMarket = () => {
|
const navigateMarket = () => {
|
||||||
setBtnLoader(true);
|
setBtnLoader(true);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
navigate("/market", { replace: true });
|
navigate(Account == "FULL" ? "/market" : "/", { replace: true });
|
||||||
setBtnLoader(false);
|
setBtnLoader(false);
|
||||||
}, 2500);
|
}, 2500);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,16 +1,20 @@
|
|||||||
import React, { useState } from "react";
|
import React, { useState } from "react";
|
||||||
import { Link } from "react-router-dom";
|
|
||||||
import Layout from "../Partials/Layout";
|
import Layout from "../Partials/Layout";
|
||||||
import MyJobTable from "./MyJobTable";
|
import MyJobTable from "./MyJobTable";
|
||||||
import CommonHead from "../UserHeader/CommonHead";
|
import CommonHead from "../UserHeader/CommonHead";
|
||||||
import TopSellerTopBuyerSliderSection from "../Home/TopSellerTopBuyerSliderSection";
|
// import TopSellerTopBuyerSliderSection from "../Home/TopSellerTopBuyerSliderSection";
|
||||||
import MyOffersTable from "./MyOffersTable";
|
import MyOffersTable from "./MyOffersTable";
|
||||||
|
import { useSelector } from "react-redux";
|
||||||
|
|
||||||
export default function MyTasks({
|
export default function MyTasks({
|
||||||
MyActiveOffersList,
|
MyActiveOffersList,
|
||||||
ActiveJobList,
|
ActiveJobList,
|
||||||
commonHeadData,
|
commonHeadData,
|
||||||
}) {
|
}) {
|
||||||
|
const { userDetails: account_type } = useSelector(
|
||||||
|
(state) => state?.userDetails
|
||||||
|
);
|
||||||
|
|
||||||
const [selectTab, setValue] = useState("today");
|
const [selectTab, setValue] = useState("today");
|
||||||
const filterHandler = (value) => {
|
const filterHandler = (value) => {
|
||||||
setValue(value);
|
setValue(value);
|
||||||
@@ -45,7 +49,7 @@ export default function MyTasks({
|
|||||||
className="mb-10"
|
className="mb-10"
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<MyJobTable ActiveJobList={ActiveJobList} />
|
<MyJobTable ActiveJobList={ActiveJobList} Account={account_type} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Layout>
|
</Layout>
|
||||||
|
|||||||
@@ -787,6 +787,19 @@ class usersService {
|
|||||||
};
|
};
|
||||||
return this.postAuxEnd("/offerinterestlistmsg", postData);
|
return this.postAuxEnd("/offerinterestlistmsg", postData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION TO ASSIGN TASK TO FAMILY MEMBER
|
||||||
|
assignFamilyTask(reqData) {
|
||||||
|
var postData = {
|
||||||
|
uid: localStorage.getItem("uid"),
|
||||||
|
member_id: localStorage.getItem("member_id"),
|
||||||
|
sessionid: localStorage.getItem("session_token"),
|
||||||
|
action: 13025,
|
||||||
|
...reqData
|
||||||
|
};
|
||||||
|
return this.postAuxEnd("/assigntask", postData);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
|
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
|
||||||
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password)
|
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password)
|
||||||
|
|||||||
Reference in New Issue
Block a user