Merge branch 'home-banners-dashboard' of WrenchBoard/Users-Wrench into master

This commit is contained in:
2024-03-11 17:20:31 +00:00
committed by Gogs
6 changed files with 89 additions and 41 deletions
@@ -1,12 +1,13 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useDispatch } from "react-redux";
import { useLocation } from "react-router-dom";
import usersService from "../../../services/UsersService"; import usersService from "../../../services/UsersService";
import { tableReload } from "../../../store/TableReloads";
import ModalCom from "../../Helpers/ModalCom"; import ModalCom from "../../Helpers/ModalCom";
import { PriceFormatter } from "../../Helpers/PriceFormatter"; import { PriceFormatter } from "../../Helpers/PriceFormatter";
import LoadingSpinner from "../../Spinners/LoadingSpinner"; import LoadingSpinner from "../../Spinners/LoadingSpinner";
import Detail from "../../jobPopout/popoutcomponent/Detail"; import Detail from "../../jobPopout/popoutcomponent/Detail";
import { NewTasks } from "./forms"; import { NewTasks } from "./forms";
import { tableReload } from "../../../store/TableReloads";
import { useDispatch } from "react-redux";
const AssignTaskPopout = React.memo( const AssignTaskPopout = React.memo(
({ ({
@@ -17,11 +18,27 @@ const AssignTaskPopout = React.memo(
familyTask, familyTask,
activeTask, activeTask,
setActiveTask, setActiveTask,
setUpdatePage setUpdatePage,
assignTaskChecker,
}) => { }) => {
const apiCall = new usersService(); const apiCall = new usersService();
let { pathname, state } = useLocation();
const dispatch = useDispatch() const [selectedFamilyUid, setSelectedFamilyUid] = useState(null);
const handleFamChange = (event) => {
setSelectedFamilyUid(event.target.value);
};
const dispatch = useDispatch();
const getFamilySession = JSON.parse(sessionStorage.getItem("family_list"));
const familyList = getFamilySession?.map((member) => (
<option key={member?.family_uid} value={member?.family_uid}>
{member?.firstname} {member?.lastname}
</option>
));
let [requestStatus, setRequestStatus] = useState({ let [requestStatus, setRequestStatus] = useState({
loading: false, loading: false,
@@ -73,7 +90,9 @@ const AssignTaskPopout = React.memo(
// API PAYLOADS // API PAYLOADS
job_id: activeTask.data?.job_id, job_id: activeTask.data?.job_id,
job_uid: activeTask.data?.job_uid, job_uid: activeTask.data?.job_uid,
family_uid: familyDetailsData?.uid || details?.family_uid, family_uid: selectedFamilyUid
? selectedFamilyUid
: familyDetailsData?.uid || details?.family_uid,
job_description: activeTask.data?.description, job_description: activeTask.data?.description,
assign_mode: 110011, assign_mode: 110011,
}; };
@@ -94,11 +113,11 @@ const AssignTaskPopout = React.memo(
const requiredFields = { const requiredFields = {
banner, banner,
// category, // category,
currency:country, currency: country,
description, description,
'job detail':job_detail, "job detail": job_detail,
price, price,
timeline:timeline_days, timeline: timeline_days,
title, title,
}; };
@@ -108,7 +127,9 @@ const AssignTaskPopout = React.memo(
setRequestStatus({ setRequestStatus({
loading: false, loading: false,
status: false, status: false,
message: `${field[0].toUpperCase()+field.slice(1).toLowerCase()} is empty`, message: `${
field[0].toUpperCase() + field.slice(1).toLowerCase()
} is empty`,
}); });
return setTimeout(() => { return setTimeout(() => {
setRequestStatus({ loading: false, status: false, message: "" }); setRequestStatus({ loading: false, status: false, message: "" });
@@ -148,7 +169,7 @@ const AssignTaskPopout = React.memo(
status: true, status: true,
message: "action successful", message: "action successful",
}); });
setUpdatePage(prev => !prev) // Updates family task page by calling the useeffect hook setUpdatePage((prev) => !prev); // Updates family task page by calling the useeffect hook
dispatch(tableReload({ type: "WALLETTABLE" })); // RELOADS USER WALLET dispatch(tableReload({ type: "WALLETTABLE" })); // RELOADS USER WALLET
setTimeout(() => { setTimeout(() => {
setRequestStatus({ loading: false, status: false, message: "" }); setRequestStatus({ loading: false, status: false, message: "" });
@@ -169,15 +190,29 @@ const AssignTaskPopout = React.memo(
return ( return (
<> <>
<ModalCom <ModalCom action={action} situation={situation}>
action={action}
situation={situation}
>
<div className="w-11/12 lg:w-[700px] bg-white dark:bg-dark-white lg:rounded-2xl overflow-y-auto"> <div className="w-11/12 lg:w-[700px] bg-white dark:bg-dark-white lg:rounded-2xl overflow-y-auto">
<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 flex items-center">
Assign task to{" "} Assign task to{" "}
{familyDetailsData?.firstname || details?.firstName} {pathname === "/acc-family/activities" ? (
<div className="w-[200px] h-[30px] ml-2">
<select
name=""
id=""
className="text-black/70 bg-transparent px-2 transition-all cursor-pointer focus:outline-none border border-gray-200 rounded-lg w-full h-full text-[1.2rem]"
onChange={handleFamChange}
value={selectedFamilyUid}
>
<option value="" disabled selected>
Select a member
</option>
{familyList}
</select>
</div>
) : (
<>{familyDetailsData?.firstname || details?.firstName}</>
)}
</h1> </h1>
<button <button
type="button" type="button"
+10 -2
View File
@@ -3,6 +3,7 @@ import { apiConst } from "../../lib/apiConst";
import usersService from "../../services/UsersService"; import usersService from "../../services/UsersService";
import LoadingSpinner from "../Spinners/LoadingSpinner"; import LoadingSpinner from "../Spinners/LoadingSpinner";
import AssignTaskPopout from "./FamilyPopout/AssignTaskPopout"; import AssignTaskPopout from "./FamilyPopout/AssignTaskPopout";
import { useLocation } from "react-router-dom";
// Lazy Imports for components // Lazy Imports for components
const FamilyWaitlist = lazy(() => import("./Tabs/FamilyNewWaitlist")); const FamilyWaitlist = lazy(() => import("./Tabs/FamilyNewWaitlist"));
@@ -10,12 +11,17 @@ const FamilyTasks = lazy(() => import("./Tabs/FamilyNewTasks"));
const FamilyPending = lazy(() => import("./Tabs/FamilyNewPending")); const FamilyPending = lazy(() => import("./Tabs/FamilyNewPending"));
export default function FamilyTableNew() { export default function FamilyTableNew() {
let { pathname } = useLocation();
// Initial state for family details // Initial state for family details
const initialDetailState = { const initialDetailState = {
loading: false, loading: false,
data: null, data: null,
link: "", link: "",
}; };
const [assignTaskChecker, setAssignTaskChecker] = useState(false);
// console.log('accountDetails',accountDetails) // console.log('accountDetails',accountDetails)
// State for family details, tasks, waitlist, and pending // State for family details, tasks, waitlist, and pending
const [details, setDetails] = useState({ const [details, setDetails] = useState({
@@ -80,6 +86,7 @@ export default function FamilyTableNew() {
loader={details.familyTasks.loading} loader={details.familyTasks.loading}
familyData={details.familyTasks.data} familyData={details.familyTasks.data}
action={familyPopUpHandler} action={familyPopUpHandler}
setAssignTaskChecker={setAssignTaskChecker}
/> />
), ),
Waiting: ( Waiting: (
@@ -120,7 +127,7 @@ export default function FamilyTableNew() {
const [familyTasksData, familyWaitingRes, familyPendingRes] = const [familyTasksData, familyWaitingRes, familyPendingRes] =
await Promise.all([ await Promise.all([
apiCall.getMyActiveTaskList(), apiCall.getMyActiveJobList(),
apiCall.ManageFamilyNewWaitlist(), apiCall.ManageFamilyNewWaitlist(),
apiCall.ManageFamilyPending(), apiCall.ManageFamilyPending(),
]); ]);
@@ -269,8 +276,9 @@ export default function FamilyTableNew() {
setFamilyTask={setFamilyTask} setFamilyTask={setFamilyTask}
setActiveTask={setActiveTask} setActiveTask={setActiveTask}
activeTask={activeTask} activeTask={activeTask}
// familyDetailsData={details.familyDetails.data}
setUpdatePage={setUpdatePage} setUpdatePage={setUpdatePage}
pathname={pathname}
assignTaskChecker={assignTaskChecker}
/> />
)} )}
</div> </div>
@@ -25,7 +25,7 @@ export default function FamilyPending({ familyData, image_link, loader }) {
handlePagingFunc(e, setCurrentPage); handlePagingFunc(e, setCurrentPage);
}; };
console.log(image_link) console.log(image_link);
return ( return (
<div <div
@@ -10,33 +10,33 @@ export default function FamilyNewTasks({
familyData, familyData,
className, className,
loader, loader,
accountDetails,
action, action,
image_link,
}) { }) {
let navigate = useNavigate(); let navigate = useNavigate();
let { pathname } = useLocation(); let { pathname } = useLocation();
// ... // ...
const filteredFamilyData = useMemo( let filteredFamilyData = useMemo(
() => () => familyData?.filter((data) => data.family_uid !== ""),
familyData?.result_list?.filter( [familyData]
(data) => data?.family_uid === accountDetails?.family_uid
),
[familyData, accountDetails]
); );
const [currentPage, setCurrentPage] = useState(0); const [currentPage, setCurrentPage] = useState(0);
const indexOfFirstItem = Number(currentPage); const indexOfFirstItem = Number(currentPage);
const indexOfLastItem = const indexOfLastItem =
Number(indexOfFirstItem) + Number(process.env.REACT_APP_ITEM_PER_PAGE); Number(indexOfFirstItem) + Number(process.env.REACT_APP_ITEM_PER_PAGE);
const currentTasks = familyData?.slice(indexOfFirstItem, indexOfLastItem); const currentTasks = filteredFamilyData?.slice(
indexOfFirstItem,
indexOfLastItem
);
const handlePagination = (e) => handlePagingFunc(e, setCurrentPage); const handlePagination = (e) => handlePagingFunc(e, setCurrentPage);
return ( return (
<div <div
className={`update-table w-full bg-white dark:bg-dark-white h-full lg:min-h-[538px] overflow-hidden rounded-2xl section-shadow p-3 ${ className={`update-table w-full bg-white dark:bg-dark-white h-full lg:min-h-[538px] overflow-hidden rounded-2xl section-shadow p-3 ${
familyData && "flex items-center justify-center" familyData?.length <= 0 && "flex items-center justify-center"
}`} }`}
> >
{loader ? ( {loader ? (
@@ -76,11 +76,9 @@ export default function FamilyNewTasks({
value?.currency_code, value?.currency_code,
value?.currency value?.currency
); );
let image = `${ let image = `${image_link}${localStorage.getItem(
familyData.session_image_server "session_token"
}${localStorage.getItem("session_token")}/job/${ )}/job/${value.job_uid}`;
value.job_uid
}`;
return ( return (
<tr <tr
key={index} key={index}
@@ -133,7 +131,6 @@ export default function FamilyNewTasks({
state: { state: {
...value, ...value,
pathname, pathname,
accountDetails,
}, },
}); });
}} }}
@@ -156,11 +153,11 @@ export default function FamilyNewTasks({
prev={currentPage == 0 ? true : false} prev={currentPage == 0 ? true : false}
next={ next={
currentPage + Number(process.env.REACT_APP_ITEM_PER_PAGE) >= currentPage + Number(process.env.REACT_APP_ITEM_PER_PAGE) >=
familyData?.result_list?.length filteredFamilyData?.length
? true ? true
: false : false
} }
data={familyData?.result_list} data={filteredFamilyData}
start={indexOfFirstItem} start={indexOfFirstItem}
stop={indexOfLastItem} stop={indexOfLastItem}
/> />
+2 -1
View File
@@ -109,6 +109,7 @@ export default function FamilyAcc() {
if (data?.internal_return >= 0 && data?.status === "OK") { if (data?.internal_return >= 0 && data?.status === "OK") {
const { result_list, session_image_server } = data; const { result_list, session_image_server } = data;
setFamilyList({ result_list, session_image_server }); setFamilyList({ result_list, session_image_server });
sessionStorage.setItem("family_list", JSON.stringify(result_list))
setLoader(false); setLoader(false);
} else { } else {
return; return;
@@ -165,7 +166,7 @@ export default function FamilyAcc() {
</div> </div>
<div className="flex gap-4 items-center"> <div className="flex gap-4 items-center">
<Link to="/acc-family/activities" className={`nav-item flex items-center rounded-md shadow-sm justify-center cursor-pointer dark:bg-[linear-gradient(134.38deg,#f539f8_0%,#c342f9_43.55%,#5356fb_104.51%)] bg-[#76a5df] text-white px-2 gap-2`}> <Link state={familyList} to="/acc-family/activities" className={`nav-item flex items-center rounded-md shadow-sm justify-center cursor-pointer dark:bg-[linear-gradient(134.38deg,#f539f8_0%,#c342f9_43.55%,#5356fb_104.51%)] bg-[#76a5df] text-white px-2 gap-2`}>
<span className="item-icon group-hover:bg-purple group-hover:text-white w-8 h-8 flex justify-center items-center transition-all duration-300 ease-in-out bg-light-purple dark:bg-dark-light-purple rounded-full text-dark-gray dark:text-white dark:text-lighter-gray"> <span className="item-icon group-hover:bg-purple group-hover:text-white w-8 h-8 flex justify-center items-center transition-all duration-300 ease-in-out bg-light-purple dark:bg-dark-light-purple rounded-full text-dark-gray dark:text-white dark:text-lighter-gray">
<Icons name="pending-job" /> <Icons name="pending-job" />
</span> </span>
+11 -4
View File
@@ -254,10 +254,17 @@ const SuggestTask = ({ details, onClose, situation, continuePopupData }) => {
> >
{pathname === "/acc-family/activities" ? ( {pathname === "/acc-family/activities" ? (
<> <>
{" "} {submitTask.loading ? (
<> "Sending..."
Continue <Icons name="chevron-right" /> ) : submitTask.state === "success" ? (
</> "Completed"
) : submitTask.state === "bad" ? (
"An Error Occurred"
) : (
<>
Continue <Icons name="chevron-right" />
</>
)}
</> </>
) : ( ) : (
<> <>