Compare commits

...

49 Commits

Author SHA1 Message Date
victorAnumudu b3c2785a4b video new window popout added 2024-05-28 20:47:42 +01:00
ameye ff129480a5 Merge branch 'login-logo-update' of WrenchBoard/Users-Wrench into master 2024-05-28 11:09:38 +00:00
victorAnumudu 8cf0c8da89 login logo changed 2024-05-27 17:37:03 +01:00
ameye 6aaf682d38 Merge branch 'mytask-file-download-link' of WrenchBoard/Users-Wrench into master 2024-05-27 11:18:26 +00:00
ameye 9f77a01bb2 Merge branch 'resource-mp4-download' of WrenchBoard/Users-Wrench into master 2024-05-27 11:18:18 +00:00
victorAnumudu 9d79e1c709 updated task file download link for video 2024-05-26 22:17:48 +01:00
victorAnumudu 78ac5d5b24 changed the download link for video files 2024-05-26 21:53:14 +01:00
tokslaw 75657350a3 Merge branch 'new-upload-link' of WrenchBoard/Users-Wrench into master 2024-05-24 22:45:02 +00:00
victorAnumudu 171f99d997 new upload server link added 2024-05-24 19:50:35 +01:00
ameye 25c7cd75c7 Merge branch 'family-job-list' of WrenchBoard/Users-Wrench into master 2024-05-23 16:43:20 +00:00
victorAnumudu fd68800b00 filtered family job list 2024-05-21 21:12:06 +01:00
ameye 33f1515d2c Merge branch 'joblist-listing' of WrenchBoard/Users-Wrench into master 2024-05-21 19:56:19 +00:00
victorAnumudu 2cc30d6c47 job list page filtered to display only jobs with job mode of general 2024-05-21 16:32:59 +01:00
ameye cfadb42811 Merge branch 'waiting-list-adjust' of WrenchBoard/Users-Wrench into master 2024-05-21 13:26:25 +00:00
victorAnumudu 1bb2eb3203 waiting list adjusted 2024-05-21 14:14:35 +01:00
ameye cd68861dfa Merge branch 'assign-btn-disable' of WrenchBoard/Users-Wrench into master 2024-05-21 09:24:18 +00:00
victorAnumudu 9fb0a65e46 disabled assign btn after task is assigned 2024-05-21 09:35:04 +01:00
ameye 15fce205a6 Merge branch 'font-match' of WrenchBoard/Users-Wrench into master 2024-05-21 01:25:26 +00:00
victorAnumudu dddf6af401 select option tag font changed 2024-05-20 20:59:32 +01:00
ameye 1a86361fbb Merge branch 'blog-page-display' of WrenchBoard/Users-Wrench into master 2024-05-20 16:57:50 +00:00
victorAnumudu 4f69786f19 blog page bug fixed 2024-05-20 17:51:13 +01:00
CHIEFSOFT\ameye 5634c1542b Merge branch 'master' of https://gitlab.chiefsoft.net/WrenchBoard/Users-Wrench 2024-05-19 14:06:31 -04:00
CHIEFSOFT\ameye f9e3d2aad2 due job banner 2024-05-19 14:06:20 -04:00
tokslaw 921d1af7f0 Merge branch 'add-job-mobile-view' of WrenchBoard/Users-Wrench into master 2024-05-14 17:06:58 +00:00
tokslaw c98d2e41ef Merge branch 'text-overlap' of WrenchBoard/Users-Wrench into master 2024-05-14 17:06:36 +00:00
victorAnumudu ea260fa15a height adjust 2024-05-14 13:15:00 +01:00
victorAnumudu b604e0b527 fixed text overlapping issue 2024-05-14 13:11:29 +01:00
victorAnumudu 991571b2d2 fixed text overlapping issue 2024-05-14 13:09:58 +01:00
victorAnumudu 1f98a3eacb adjusted add job mobile view 2024-05-14 12:32:43 +01:00
tokslaw 031a2f6680 Merge branch 'assign-job-space' of WrenchBoard/Users-Wrench into master 2024-05-13 17:23:18 +00:00
tokslaw bf22570857 Merge branch 'add-job-rearrange' of WrenchBoard/Users-Wrench into master 2024-05-13 17:22:57 +00:00
victorAnumudu 89aa5e0aef rearranged add job 2024-05-13 11:57:35 +01:00
victorAnumudu 680833d5be added space btw attched file and job details 2024-05-04 16:20:43 +01:00
ameye 1e0af67542 Merge branch 'signup-page-dark-mode' of WrenchBoard/Users-Wrench into master 2024-04-18 20:51:04 +00:00
victorAnumudu 406af95861 adjusted signup page dark mode style 2024-04-18 21:36:38 +01:00
ameye 14f69d4c3b Merge branch 'fixed-upload-payload' of WrenchBoard/Users-Wrench into master 2024-04-16 15:24:34 +00:00
victorAnumudu 24f915ee55 upload error message bud fixed 2024-04-16 15:46:33 +01:00
ameye 5da67c4c06 Merge branch 'font-increase' of WrenchBoard/Users-Wrench into master 2024-04-15 17:03:21 +00:00
victorAnumudu a21eaa40f2 increased font size 2024-04-15 17:40:09 +01:00
ameye a00e40dbe9 Merge branch 'attached-file-font' of WrenchBoard/Users-Wrench into master 2024-04-15 15:17:10 +00:00
victorAnumudu fa51914987 added margin 2024-04-15 14:47:30 +01:00
victorAnumudu c8d40c1630 increased font size 2024-04-15 14:31:42 +01:00
ameye f673fe99ef Merge branch 'login-logo' of WrenchBoard/Users-Wrench into master 2024-04-15 11:43:03 +00:00
victorAnumudu 8d5d0672cc added new login login 2024-04-15 12:16:56 +01:00
ameye 09def50875 Merge branch 'files-uploaded-com' of WrenchBoard/Users-Wrench into master 2024-04-15 09:38:45 +00:00
victorAnumudu d6920b320c added file component to accept offer model 2024-04-15 10:09:23 +01:00
ameye cbfaf1e073 Merge branch 'upload-file-list' of WrenchBoard/Users-Wrench into master 2024-04-14 20:31:37 +00:00
victorAnumudu 3d59b36850 added file upload list API 2024-04-14 21:10:37 +01:00
ameye f1d659b273 Merge branch 'add-file-api' of WrenchBoard/Users-Wrench into master 2024-04-12 21:32:24 +00:00
29 changed files with 444 additions and 171 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

+43 -7
View File
@@ -92,13 +92,13 @@ function AddJob({ popUpHandler, categories }) {
>
{(props) => {
return (
<Form>
<div className="add-job p-5 w-full bg-white dark:bg-dark-white dark:text-white rounded-md flex flex-col justify-between">
<Form className='contents'>
<div className="add-job p-5 w-full h-full rounded-md flex flex-col justify-between overflow-y-auto">
<div className="flex flex-col-reverse sm:flex-row">
<div className="fields w-full">
{/* inputs starts here */}
<div className="xl:flex xl:space-x-7 mb-[5px]">
<div className="field w-full mb-6 xl:mb-0">
<div className="field w-full mb-[5px] xl:mb-0">
<label
htmlFor="country"
className="job-label job-label-flex"
@@ -114,7 +114,7 @@ function AddJob({ popUpHandler, categories }) {
id="country"
name="country"
value={props.values.country}
className={`input-field p-2 mt-3 rounded-md placeholder:text-base text-dark-gray dark:text-white w-full h-10 bg-slate-100 dark:bg-[#11131F] focus:ring-0 focus:outline-none border`}
className={`input-field p-2 mt-3 rounded-full placeholder:text-base text-dark-gray w-full h-[42px] bg-slate-100 focus:ring-0 focus:outline-none border`}
onChange={props.handleChange}
onBlur={props.handleBlur}
disabled={walletDetails.data.length == 1}
@@ -159,7 +159,7 @@ function AddJob({ popUpHandler, categories }) {
</div>
{/* Price */}
<div className="field w-full">
<div className="field w-full mb-[5px] xl:mb-0">
<InputCom
fieldClass="px-6 text-right flex"
label="Price"
@@ -177,6 +177,42 @@ function AddJob({ popUpHandler, categories }) {
}
/>
</div>
{/* Timeline */}
<div className="field w-full mb-[5px] xl:mb-0">
<label
className="job-label job-label-flex"
htmlFor="timeline_days"
>
Timeline
<span className="text-green-700 text-[12px] tracking-wide">
- Duration
</span>
</label>
<Field
component="select"
name="timeline_days"
className={`input-field p-2 mt-3 rounded-full placeholder:text-base text-dark-gray w-full h-[42px] bg-slate-100 focus:ring-0 focus:outline-none border ${
props.errors.timeline_days &&
props.touched.timeline_days
? "border-[#ff0a0a63] shadow-red-500 animate-shake"
: "dark:border-[#5e6278]"
}`}
value={props.values.timeline_days}
>
<option value="" className='text-slate-500 text-lg'>Select Duration</option>
{publicArray.map(({ name, duration }, idx) => (
<option
key={idx}
className="text-slate-500 text-lg"
value={duration}
>
{name}
</option>
))}
</Field>
</div>
</div>
{/* Title */}
@@ -288,7 +324,7 @@ function AddJob({ popUpHandler, categories }) {
</div>
</div>
<div className="field w-full mb-[5px]">
{/* <div className="field w-full mb-[5px]">
<div className={`flex items-center justify-between mb-2.5`}>
<label
className="job-label"
@@ -323,7 +359,7 @@ function AddJob({ popUpHandler, categories }) {
</option>
))}
</Field>
</div>
</div> */}
{/* inputs ends here */}
</div>
</div>
+4 -4
View File
@@ -18,14 +18,14 @@ export default function LoginLayout({ slogan, children }) {
backgroundImage: `url(${countryMode == "NG" ? bgImgNig : bgImgCom})`,
}}
>
<div className={`w-full grid grid-cols-1 lg:grid-cols-2`}>
<div className={`w-full grid grid-cols-1 xl:grid-cols-2`}>
{/* <div
className={`auth-bg hidden lg:block bg-blue-50 relative bg-cover bg-no-repeat border-0 after:content-[''] after:absolute after:inset-0`}
className={`auth-bg hidden xl:block bg-blue-50 relative bg-cover bg-no-repeat border-0 after:content-[''] after:absolute after:inset-0`}
style={{backgroundImage: `url(${bgImg})`}}
>
</div> */}
<div className="p-5 sm:p-7 flex place-content-center lg:col-start-2">
<div className="py-5 w-full sm:w-11/12 max-w-[550px] shadow-md bg-slate-50 rounded-[0.475rem]">
<div className="p-5 sm:p-7 flex place-content-center xl:col-start-2">
<div className="py-5 w-full sm:w-11/12 max-w-[550px] shadow-md bg-slate-50 dark:bg-dark-white rounded-[0.475rem]">
<div className="w-full flex justify-center items-center">
{children && children}
</div>
+5 -5
View File
@@ -1,6 +1,6 @@
import React, { useCallback, useEffect, useState } from "react";
import { Link, useLocation, useNavigate } from "react-router-dom";
import WrenchBoard from "../../../assets/images/wrenchboard-logo-text.png";
import WrenchBoard from "../../../assets/images/wrenchboard-logo-text_new.png";
import usersService from "../../../services/UsersService";
import InputCom from "../../Helpers/Inputs/InputCom";
import AuthLayout from "../AuthLayout2";
@@ -180,11 +180,11 @@ export default function SignUp() {
</span>
</div>
<div className="w-full flex items-center gap-2">
<div className="border-b border-[#eff2f5] max-w-[50%] w-full"></div>
<span className="text-[#b5b5c3] font-medium text-[0.7rem] w-[2%]">
<div className="border-b border-[#eff2f5] w-[48%]"></div>
<span className="text-[#b5b5c3] font-medium text-[0.7rem]">
OR
</span>
<div className="border-b border-[#eff2f5] max-w-[50%] w-full"></div>
<div className="border-b border-[#eff2f5] w-[48%]"></div>
</div>
<div className="input-area">
<SelectOption
@@ -413,7 +413,7 @@ const SelectOption = ({
disabled={disable}
name={name}
id={name}
className="input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-full rounded-full h-[42px] overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-gray-100 bg-[#f5f8fa] dark:bg-[#5e6278] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent "
className="px-6 input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-full rounded-full h-[42px] overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-dark-gray bg-[#f5f8fa] dark:bg-[#FAFAFA] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent "
onChange={inputHandler}
value={value}
>
@@ -5,6 +5,7 @@ import debounce from "../../../hooks/debounce";
import usersService from "../../../services/UsersService";
import InputCom from "../../Helpers/Inputs/InputCom";
import AuthLayout from "../AuthLayout2";
import LoadingSpinner from '../../../components/Spinners/LoadingSpinner'
export default function VerifyLink() {
const [email, setEmail] = useState("");
@@ -119,7 +120,14 @@ export default function VerifyLink() {
<>
<AuthLayout slogan="Welcome to WrenchBoard">
{pageLoader ? (
<img src={WrenchBoard} alt="wrenchboard" className="h-10 mx-auto" />
<div className='flex flex-col justify-center items-center gap-4'>
<img src={WrenchBoard} alt="wrenchboard" className="h-10 mx-auto" />
<div className='flex flex-col justify-center items-center'>
<LoadingSpinner height='h-40' size='8' />
<p>Loading...</p>
<p>please do not refresh</p>
</div>
</div>
) : (
<div className="w-full">
<div className="mb-12">
+12 -8
View File
@@ -45,7 +45,7 @@ const AccountDashboard = ({ className, bannerList }) => {
{getLowerBanner?.map((props, idx) => {
let image = getImage(props);
let { short_title, short_description, short_button_text, link_path } =
let { short_title, short_description, short_button_text, link_path, card_type, blog_id } =
props;
return (
@@ -56,6 +56,8 @@ const AccountDashboard = ({ className, bannerList }) => {
title={short_title}
desc={short_description}
link_path={link_path}
card_type={card_type}
blog_id={blog_id}
/>
</div>
);
@@ -102,24 +104,26 @@ const TopBanner = ({ image, title = "", desc = "", btn, link_path, key }) => {
);
};
const LowerBanner = ({ image, title = "", desc = "", btn, link_path, key }) => {
const LowerBanner = ({ image, title = "", desc = "", btn, link_path, card_type, blog_id, key }) => {
const newLinkPath = card_type == 'BLOG' ? `${link_path}?blog_id=${blog_id}` : link_path
return (
<div
key={key}
className="flex flex-col bg-white shadow-md h-full rounded-xl dark:border-[#5356fb29] dark:bg-dark-white"
>
<div className="w-full flex justify-between border-b border-slate-300 p-2">
<div className="h-[130px] flex justify-between items-center">
<div className="w-full xxs:flex justify-between items-center border-b border-slate-300 p-2">
<div className="min-h-[150px] sm:min-h-[130px] flex justify-between items-center">
<div className="px-2 flex flex-col gap-2 dark:text-white">
<Link to={link_path} className="text-lg font-bold">
<Link to={newLinkPath} className="text-lg font-bold">
{title}
</Link>
<p to={link_path} className="text-sm">
<p to={newLinkPath} className="text-sm">
{desc}
</p>
</div>
</div>
<Link to={link_path} className="w-[150px] h-[100px]">
<Link to={newLinkPath} className="w-[150px] h-[100px]">
<img
src={image}
alt="banner-img"
@@ -129,7 +133,7 @@ const LowerBanner = ({ image, title = "", desc = "", btn, link_path, key }) => {
</Link>
</div>
<div className="flex justify-between w-full px-2 items-center">
<Link to={link_path} className="text-slate-300 font-semibold text-sm">
<Link to={newLinkPath} className="text-slate-300 font-semibold text-sm">
{btn}
</Link>
<button className="flex items-center justify-center gap-2">
@@ -176,6 +176,9 @@ export default function FamilyManageTabs({
familyData={familyWaitList}
accountDetails={accountDetails}
setUpdatePage={setUpdatePage}
jobList={jobList}
setActiveTask={setActiveTask}
activeTask={activeTask}
/>
),
Pending: (
@@ -85,10 +85,10 @@ export default function AssignMediaTask({
>
{(props) => {
return (
<Form>
<Form className='contents'>
<>
<div
className={`job-action-modal-body w-full h-[500px] overflow-y-auto md:grid md:grid-cols-2`}
className={`job-action-modal-body w-full h-full overflow-y-auto md:grid md:grid-cols-2`}
>
<div className="p-4 pt-0">
<div className="p-4 w-full h-[450px] overflow-y-auto bg-slate-100 rounded-md dark:bg-[#11131f] dark:text-white">
@@ -124,7 +124,7 @@ export default function AssignMediaTask({
{/*Right Hand Side for details && Task Type === select */}
<>
{commonMedia?.data?.length > 0 ? (
<div className="p-4 py-0 h-full">
<div className="p-4 py-0 h-auto">
<div className="w-full">
<div className="mb-3 w-full">
<label className="job-label">
@@ -22,7 +22,7 @@ export default function AssignPrevNewTask({
let imageSrc = (localStorage.getItem("session_token")
? `${userDetails?.session_image_server}${localStorage.getItem("session_token")}/job/${activeTask.data.job_uid}` : ""); // FOR GETTING JOB IMAGE
? `${userDetails?.session_image_server}${localStorage.getItem("session_token")}/job/${activeTask?.data?.job_uid}` : ""); // FOR GETTING JOB IMAGE
return (
<>
@@ -33,7 +33,7 @@ export default function AssignPrevNewTask({
) : (
<>
<div
className={`job-action-modal-body w-full h-[500px] overflow-y-auto md:grid ${
className={`job-action-modal-body w-full h-full overflow-y-auto md:grid ${
taskType !== "new" ? "md:grid-cols-2" : "md:grid-cols-1"
}`}
>
@@ -121,65 +121,67 @@ export default function AssignPrevNewTask({
value={activeTask?.data?.description}
/>
</div> */}
<div className="my-3 w-full">
<label className="job-label">
Description
</label>
<p className="p-1 text-sm text-slate-900 dark:text-white max-h-[100px] overflow-y-auto">
{activeTask?.data?.description}
</p>
</div>
<div className="grid grid-cols-2">
<div className="w-full">
<div className="my-3 w-full flex items-center gap-1">
<label className="job-label">
Reward
</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='flex flex-col gap-2'>
<div className="my-1 w-full">
<label className="job-label">
Description
</label>
<p className="p-1 text-sm text-slate-900 dark:text-white max-h-[100px] overflow-y-auto">
{activeTask?.data?.description}
</p>
</div>
<div className="w-full grid grid-cols-2">
<div className="w-full">
<div className="w-full flex items-center gap-1">
<label className="job-label">
Reward
</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 w-full flex items-center gap-1">
<label className="job-label">
Timeline
</label>
<p className="p-1 text-sm text-slate-900 dark:text-white">{`${activeTask?.data?.timeline_days} day(s)`}</p>
<div className="w-full flex items-center gap-1">
<label className="job-label">
Timeline
</label>
<p className="p-1 text-sm text-slate-900 dark:text-white">{`${activeTask?.data?.timeline_days} day(s)`}</p>
</div>
</div>
<div className="w-full flex items-center justify-center">
<div className="mb-1 w-24 max-h-24 rounded-2xl flex items-center justify-center">
<img
className="w-full h-auto"
loading="lazy"
src={imageSrc}
alt='job image'
/>
</div>
</div>
</div>
<div className="w-full flex items-center justify-center">
<div className="mb-1 w-28 h-28 rounded-2xl flex items-center justify-center">
<img
className="w-full h-auto"
loading="lazy"
src={imageSrc}
alt='job image'
/>
</div>
{/* ATTACHMENT SECTION*/}
<div className="w-full max-h-28">
<AttachFile data={activeTask.data} />
</div>
</div>
{/* ATTACHMENT SECTION*/}
<div className="w-full max-h-28">
<AttachFile data={activeTask.data} />
</div>
<div className="my-3">
<label className="w-full job-label">
Delivery Detail
</label>
<textarea
className={`p-1 w-full text-sm text-slate-900 dark:text-white bg-transparent outline-none border border-slate-300 rounded-md`}
rows="5"
style={{ resize: "none" }}
value={activeTask?.data?.job_detail}
readOnly
// onChange={handleInputChange}
/>
<div className="my-3">
<label className="w-full job-label">
Delivery Detail
</label>
<textarea
className={`p-1 w-full text-sm text-slate-900 dark:text-white bg-transparent outline-none border border-slate-300 rounded-md`}
rows="5"
style={{ resize: "none" }}
value={activeTask?.data?.job_detail}
readOnly
// onChange={handleInputChange}
/>
</div>
</div>
</div>
</div>
@@ -228,9 +230,9 @@ export default function AssignPrevNewTask({
) : (
<button
type="button"
disabled={requestStatus.loading}
disabled={requestStatus.loading || requestStatus.status}
onClick={assignFamilyTask}
className="custom-btn btn-gradient text-white"
className={`custom-btn btn-gradient text-white ${requestStatus.status && 'opacity-50'}`}
>
Assign
</button>
@@ -24,6 +24,8 @@ const AssignTaskPopout = ({
setActiveTask,
setUpdatePage,
}) => {
const newJobList = {...jobList, data:jobList?.data?.filter(item => item?.job_mode == 'FAMILY')}
const {parentAssignJobToKid} = SocketValues()
const { walletDetails } = useSelector((state) => state?.walletDetails); // WALLET STORE
@@ -311,7 +313,7 @@ const AssignTaskPopout = ({
return (
<>
<ModalCom 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="modal-container">
<div className="modal-header-con">
<h1 className="modal-title">
{details ? (
@@ -364,7 +366,7 @@ const AssignTaskPopout = ({
</svg>
</button>
</div>
<div className="modal-body">
<div className="modal-body-wrapper p-[0!important]">
<div className="px-4 py-2 w-full flex items-center gap-4">
<button
name='task'
@@ -383,10 +385,10 @@ const AssignTaskPopout = ({
Media
</button>
</div>
<div className="">
<div className="contents">
{assignType == 'task' ?
<AssignPrevNewTask
jobList={jobList}
jobList={newJobList}
requestStatus={requestStatus}
assignFamilyTask={assignFamilyTask}
taskType={taskType}
@@ -5,7 +5,7 @@ import LoadingSpinner from "../../Spinners/LoadingSpinner";
import AssignTaskPopout from "../FamilyPopout/AssignTaskPopout";
const FamilyWaitlist = memo(
({ familyData, className, accountDetails, setUpdatePage }) => {
({ familyData, className, accountDetails, setUpdatePage, jobList, setActiveTask, activeTask }) => {
const [popUp, setPopUp] = useState({ show: false, data: {} });
const [continueTaskPopup, setContinueTaskPopup] = useState({
show: false,
@@ -73,7 +73,7 @@ const FamilyWaitlist = memo(
className="bg-white dark:bg-dark-white border-b dark:border-[#5356fb29] hover:bg-gray-50"
key={value.uid}
>
<td className="py-4">
<td className="px-2 py-4">
<div className="w-full flex justify-between items-center">
<div className="account-name flex space-x-4 items-center">
<div className="icon w-14 h-14 flex justify-center items-center">
@@ -92,23 +92,40 @@ const FamilyWaitlist = memo(
</p>
</div>
</div>
<div className="px-2 flex flex-col items-center justify-center">
{/* <div className="px-2 flex flex-col items-center justify-center">
<p className="text-sm font-bold text-dark-gray dark:text-white">
{addedDate}
</p>
<p className="text-xs py-1.5 w-[70px] cursor-default tracking-wide rounded-full bg-gold text-white flex justify-center items-center">
{value.status_text}
</p>
</div>
</div> */}
</div>
</td>
<td className="text-right py-4 px-2">
<button
onClick={() => openPopUp(value)}
className="w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white"
>
View
</button>
<td className="text-right px-2 py-4">
<div className='w-full flex justify-end items-center gap-4'>
<p className="text-xs py-1.5 w-[70px] cursor-default tracking-wide rounded-full bg-gold text-white flex justify-center items-center">
{value.status_text}
</p>
<button
onClick={() => openPopUp(value)}
className="w-12 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white"
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 11 20"
id="Arrow"
className="w-[0.7rem]"
>
<path
fillRule="evenodd"
d="M.366 19.708c.405.39 1.06.39 1.464 0l8.563-8.264a1.95 1.95 0 0 0 0-2.827L1.768.292A1.063 1.063 0 0 0 .314.282a.976.976 0 0 0-.011 1.425l7.894 7.617a.975.975 0 0 1 0 1.414L.366 18.295a.974.974 0 0 0 0 1.413"
// fill=""
className="color000000 svgShape fill-[#fff]"
></path>
</svg>
</button>
</div>
</td>
</tr>
);
@@ -144,6 +161,9 @@ const FamilyWaitlist = memo(
action={closeContinueTaskPopup}
situation={continueTaskPopup.show}
setUpdatePage={setUpdatePage}
jobList={jobList}
setActiveTask={setActiveTask}
activeTask={activeTask}
/>
)}
</div>
@@ -95,8 +95,7 @@ export default function InputCom({
value={value}
onChange={inputHandler}
className={`input-field placeholder:text-base text-dark-gray w-full h-full ${
inputBg ? inputBg : "bg-[#FAFAFA] dark:bg-[#11131F] dark:text-white tracking-wide"
} focus:ring-0 focus:outline-none ${fieldClass}`}
inputBg && inputBg} tracking-wide focus:ring-0 focus:outline-none ${fieldClass}`}
type={type}
id={name}
name={name}
+2 -2
View File
@@ -14,9 +14,9 @@ export default function ModalCom({ action, children, situation, isOpen, classNam
<div className="modal-com">
<div
onClick={action || isOpen}
className="fixed top-0 left-0 w-full lg:h-[100vh] h-full bg-black bg-opacity-40 backdrop-filter backdrop-blur-sm z-50"
className="fixed top-0 left-0 bottom-0 w-full bg-black bg-opacity-40 backdrop-filter backdrop-blur-sm z-50"
></div>
<div className={`fixed lg:h-100vh h-full z-[99999999999999] w-full lg:w-auto inset-0 flex flex-col justify-center items-center ${className}`}>
<div className={`fixed h-full z-[99999999999999] w-full lg:w-auto inset-0 flex flex-col justify-center items-center ${className}`}>
{children && children}
</div>
</div>
@@ -20,7 +20,7 @@ export default function ActiveJobMessage({ activeJobMesList }) {
return (
<div className='flex flex-col justify-between'>
<div className="w-full h-full min-h-[400px] max-h-[400px] overflow-y-auto">
<div className="w-full h-full min-h-[250px] max-h-[300px] overflow-y-auto">
<table className="wallet-activity w-full table-auto border-collapse text-left">
<thead className='border-b-2'>
<tr className='text-slate-600'>
+9 -1
View File
@@ -13,6 +13,7 @@ import usersService from "../../services/UsersService";
import { PriceFormatter } from "../Helpers/PriceFormatter";
import { SocketValues } from "../Contexts/SocketIOContext";
import TabButton from "../customTabs/TabButton";
import AttachFile from "../attachmentCom/AttachFile";
function ActiveJobs(props) {
let {sendMessage, joinRoom} = SocketValues() // destructures 'SEND MESSAGE' and 'JOIN ROOM' FUNCTIONS FROM SOCKET
@@ -275,7 +276,7 @@ function ActiveJobs(props) {
<div className="py-[20px] bg-white dark:bg-black dark:text-white px-4 rounded-2xl shadow-md md:flex justify-between items-start gap-8">
{/* job title */}
<div className="w-full">
<div className="w-full flex justify-start space-x-3 items-start">
<div className="w-full flex justify-start space-x-3 items-center">
<button
type="button"
className="min-w-[45px] h-auto text-[#374557] border border-sky-blue p-1 rounded-full"
@@ -539,6 +540,13 @@ function ActiveJobs(props) {
{/* MESSAGE SECTION */}
<div className="w-full lg:w-1/2">
<div className="mb-4">
<AttachFile
data={props.details}
showOnData={true}
fontSize={'text-lg'}
/>
</div>
<div className="flex justify-between items-center gap-5">
<p className="w-full text-lg font-bold text-dark-gray dark:text-white tracking-wide flex items-center gap-2 justify-between">
<span>Message</span>
+9 -8
View File
@@ -104,7 +104,7 @@ export default function MyJobTable({ MyJobList, reloadJobList, className }) {
);
};
const currentJobList = filterJobList();
const currentJobList = filterJobList()?.filter(item => item?.job_mode == 'GENERAL'); // Show only jobs with job mode of GENERAL
// Handling Filter Pagination
const filteredCurrentJobList = currentJobList?.slice(
@@ -358,13 +358,14 @@ function myJobTableFeatures(
{MyJobList?.data?.result_list?.length > 0 ? (
filteredCurrentJobList.length > 0 ? (
filteredCurrentJobList.map((value, index) => (
<JobListItem
key={index}
index={index}
value={value}
image_server={MyJobList.data.session_image_server}
/>
))
<JobListItem
key={index}
index={index}
value={value}
image_server={MyJobList.data.session_image_server}
/>
)
)
) : (
<NoJobsRow text="No Jobs Available In This Category!" />
)
@@ -16,6 +16,22 @@ export default function MyUploadedFiles({ uploadedFiles }) {
const handlePagination = (e) => {
handlePagingFunc(e, setCurrentPage);
};
//FUNCTION TO OPEN NEW WINDOW
const openNewWindow = (e, url, width=1000, height=600) => {
e.preventDefault()
var leftPosition, topPosition;
//Allow for borders.
leftPosition = (window.screen.width / 2) - ((width / 2) + 10);
//Allow for title and status bars.
topPosition = (window.screen.height / 2) - ((height / 2) + 50);
//Open the window.
window.open(url, "",
"status=no,height=" + height + ",width=" + width + ",resizable=yes,left="
+ leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY="
+ topPosition + ",toolbar=no,menubar=no,scrollbars=yes,location=no,directories=no");
}
return (
<>
<div className="mb-4 w-full flex justify-end item-center">
@@ -44,7 +60,8 @@ export default function MyUploadedFiles({ uploadedFiles }) {
currentFiles.map((value, idx) => {
let addedDate = value?.added?.split(" ")[0];
let formattedSize = formatFileSize(value?.file_size);
let imageLink = `${uploadedFiles?.image}${localStorage.getItem('session_token')}/myfile/${value.file_uid}`
let downloadLink = value.file_type == 'video/mp4' ? `${process.env.REACT_APP_MEDIA_LINK}/myfile/${value.file_uid}` : `${uploadedFiles?.image}${localStorage.getItem('session_token')}/myfile/${value.file_uid}`
return (
<tr
key={value?.file_uid}
@@ -103,8 +120,9 @@ export default function MyUploadedFiles({ uploadedFiles }) {
<td className="text-right py-4 px-2">
<div className="flex justify-center items-center">
<a
href={imageLink}
href={downloadLink}
title="download"
onClick={(e)=> openNewWindow(e, downloadLink)}
// className="w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white"
>
<img
+12 -2
View File
@@ -146,10 +146,12 @@ export default function UploadProduct({uploadTypes}) {
let reqData = { // PAYLOAD FOR API CALL
// file_name: selectedFile.substring(0,21).replace(/ /gi, ""),
// file_data: img.file?.split(",")[1],
file_name: `myfile.${imgDetails?.type?.split('/')[1]}`,
file_size: imgDetails.size,
file_type: imgDetails.type,
file_data: img.file?.split(",")[1],
files: imgDetails,
title: itemName,
description: description,
msg_type: 'FILE',
@@ -173,7 +175,7 @@ export default function UploadProduct({uploadTypes}) {
// API CALL TO UPLOAD COMES HERE
setRequestStatus({loading: true, status: null, message: ''}) // SETS REQUEST LOADING TRUE
apiCall.sendFiles(reqData).then(res=>{
apiCall.uploadFile(reqData).then(res=>{
if(res.status != 200 || res.data.internal_return < 0){
return setRequestStatus({loading: false, status: false, message: 'Something went wrong, try again'})
}
@@ -311,6 +313,13 @@ export default function UploadProduct({uploadTypes}) {
className="w-full h-full object-cover"
controls
></video>
) : img.type === "audio" ? (
<audio
type=""
src={img.file}
className="w-full h-full object-cover"
controls
></audio>
) : img.type != null ? (
<p>{selectedFile}</p>
) : null}
@@ -434,6 +443,7 @@ export default function UploadProduct({uploadTypes}) {
// to="/"
onClick={uploadItem}
className="sm:w-[126px] h-[46px] w-[100px] flex justify-center items-center btn-gradient sm:text-18 text-sm rounded-full text-white"
disabled={uploadTypes.loading || requestStatus.loading}
>
Upload
</button>
+141 -35
View File
@@ -1,8 +1,15 @@
import React, { useRef, useState } from 'react'
import React, { useEffect, useRef, useState } from 'react'
import LoadingSpinner from '../Spinners/LoadingSpinner'
import axios from 'axios'
export default function AttachFile({data}) {
import usersService from '../../services/UsersService'
export default function AttachFile({data='', fontSize='text-sm', showOnData=false}) {
const apiCall = new usersService()
let [uploadedList, setUploadedList] = useState({loading: true, data:{}})
let [reloadList, setReloadList] = useState(false) // Triggers list of upload reload
const [requestStatus, setRequestStatus] = useState({loading: false, status:false, message:''})
@@ -12,9 +19,9 @@ export default function AttachFile({data}) {
let inputs = {
file: event.target.files[0],
job_uid: data?.job_uid,
uid: localStorage.getItem("uid"),
// uid: localStorage.getItem("uid"),
// member_id: localStorage.getItem("member_id"),
sessionid: localStorage.getItem("session_token"),
// sessionid: localStorage.getItem("session_token"),
};
setRequestStatus({loading: true, status:false, message:''})
if(!inputs.file){
@@ -24,14 +31,12 @@ export default function AttachFile({data}) {
}, 3000)
return
}
const formData = new FormData()
for (let input in inputs) {
formData.append(input, inputs[input]);
}
console.log('data', formData, inputs)
axios.post(`${process.env.REACT_APP_MEDIA_LINK}/upload/task`,formData).then(res => {
if(res.data.status < 1){
// const formData = new FormData()
// for (let input in inputs) {
// formData.append(input, inputs[input]);
// }
apiCall.uploadTaskFile(inputs).then(res => {
if(res.data.internal_return < 0){
inputFile.current.value = null
setRequestStatus({loading: false, status:false, message:'upload failed'})
setTimeout(()=>{
@@ -39,9 +44,9 @@ export default function AttachFile({data}) {
}, 3000)
return
}
// console.log('RESPONSE', res.data)
setRequestStatus({loading: false, status:true, message:'uploaded'})
inputFile.current.value = null
setReloadList(prev => !prev) // Triggers list of upload reload
setTimeout(()=>{
setRequestStatus({loading: false, status:false, message:''})
}, 3000)
@@ -55,31 +60,132 @@ export default function AttachFile({data}) {
})
}
//FUNCTION TO OPEN NEW WINDOW
const openNewWindow = (e, url, width=1000, height=600) => {
e.preventDefault()
var leftPosition, topPosition;
//Allow for borders.
leftPosition = (window.screen.width / 2) - ((width / 2) + 10);
//Allow for title and status bars.
topPosition = (window.screen.height / 2) - ((height / 2) + 50);
//Open the window.
window.open(url, "",
"status=no,height=" + height + ",width=" + width + ",resizable=yes,left="
+ leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY="
+ topPosition + ",toolbar=no,menubar=no,scrollbars=yes,location=no,directories=no");
}
useEffect(()=>{
apiCall.jobManagerFiles({job_uid:data?.job_uid || data?.origin_job_uid}).then(res => {
setUploadedList({loading: false, data:res.data})
}).catch(err => {
console.log(err)
setUploadedList({loading: false, data:{}})
})
},[data, reloadList])
return (
<div className='w-full h-full flex flex-col justify-center items-center rounded-md'>
<div className='w-full flex flex-col items-start gap-1 overflow-hidden'>
<div className='w-full flex justify-between items-center gap-1'>
<div className='job-label job-label-flex'>
Files {
requestStatus.loading ?
<LoadingSpinner size='6' />
:
<span className={`text-[10px] ${requestStatus.status ? 'text-emerald-600' : 'text-red-500'}`}>{requestStatus.message}</span>
}
<>
{!showOnData ?
<div className='w-full h-full flex flex-col justify-center items-center'>
<div className='w-full flex flex-col items-start gap-1 overflow-hidden'>
<div className='w-full flex justify-between items-center gap-1'>
<div className='job-label job-label-flex'>
Files {
requestStatus.loading ?
<LoadingSpinner size='6' />
:
<span className={`text-[10px] ${requestStatus.status ? 'text-emerald-600' : 'text-red-500'}`}>{requestStatus.message}</span>
}
</div>
<label htmlFor='file' className={`text-black bg-[#f8ffd4] cursor-pointer text-[12px] py-1 px-2 rounded-full border ${ requestStatus.loading && 'pointer-events-none'}`}>+ Add Files</label>
</div>
<label htmlFor='file' className={`cursor-pointer text-[12px] py-1 px-2 rounded-full border ${ requestStatus.loading && 'pointer-events-none'}`}>+ Add</label>
<div className='w-full p-2 rounded-2xl bg-slate-100'>
<div className='text-[12px] w-full h-20 overflow-y-auto flex flex-col gap-2'>
{uploadedList.loading ?
<div className='w-full h-full justify-center items-center'>
<LoadingSpinner size='6' height='h-full' />
</div>
:
Object.keys(uploadedList.data).length > 0 ?
uploadedList.data.result_list.length > 0 ?
uploadedList.data.result_list.map((item, index) => {
let fileNameExt = item.originalname.split('.')[item.originalname.split('.').length - 1]
let downloadLink = fileNameExt == 'mp4' ? `${process.env.REACT_APP_MEDIA_LINK}/mytask/${item.file_uid}` : `${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`
return(
<div key={item.file_uid} className={`my-[6px] flex justify-start gap-2 ${fontSize}`}>
<span>{index + 1}:</span>
<a
target='_blank'
alt='download-link'
className=''
href={downloadLink}
onClick={(e)=> openNewWindow(e, downloadLink)}
>
{(item.originalname).toString().length > 30 ? (item.originalname).toString().slice(0, 26) + '..._.' + fileNameExt : (item.originalname).toString()}
</a>
</div>
)
})
:
<p className='text-sm'>No Uploaded files yet</p>
:
<></>
}
</div>
</div>
<input
type="file"
id='file'
ref={inputFile}
className='hidden file:rounded-full job-label p-1'
onChange={upload}
/>
</div>
<div className='text-[12px] w-full px-2 py-1 h-20 overflow-y-auto flex justify-center items-center border'>
list shows here
</div>
<input
type="file"
id='file'
ref={inputFile}
className='hidden file:rounded-full job-label p-1'
onChange={upload}
/>
</div>
</div>
:showOnData && uploadedList?.data?.result_list?.length > 0 ?
<div className='w-full h-full flex flex-col justify-center items-center'>
<div className='w-full flex flex-col items-start gap-1 overflow-hidden'>
<div className='w-full flex justify-between items-center gap-1'>
<div className='job-label job-label-flex'>
Files
</div>
</div>
<div className='w-full p-2 rounded-2xl bg-slate-100'>
<div className='text-[12px] w-full p-2 h-20 overflow-y-auto flex flex-col gap-2'>
{uploadedList.data.result_list.map((item, index) => {
let fileNameExt = item.originalname.split('.')[item.originalname.split('.').length - 1]
let downloadLink = fileNameExt == 'mp4' ? `${process.env.REACT_APP_MEDIA_LINK}/mytask/${item.file_uid}` : `${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`
return(
<div key={item.file_uid} className={`my-[6px] flex justify-start gap-2 ${fontSize}`}>
<span>{index + 1}:</span>
<a
target='_blank'
alt='download-link'
className=''
href={downloadLink}
onClick={(e)=> openNewWindow(e, downloadLink)}
>
{(item.originalname).toString().length > 30 ? (item.originalname).toString().slice(0, 26) + '..._.' + fileNameExt : (item.originalname).toString()}
</a>
</div>
)
})
}
</div>
</div>
<input
type="file"
id='file'
ref={inputFile}
className='hidden file:rounded-full job-label p-1'
onChange={upload}
/>
</div>
</div>
:
<></>
}
</>
)
}
+1 -1
View File
@@ -145,7 +145,7 @@ function DeleteJobPopout({ details, onClose, situation }) {
{/* End of error or success display */}
</div>
<div className="modal-footer-wrapper grid grid-cols-1 xxs:grid-cols-3">
<div className="w-full col-span-1 xxs:col-span-2 xxs:col-start-2 flex justify-between items-center">
<div className="w-full col-span-1 xxs:col-span-2 xxs:col-start-2 flex justify-between items-center gap-4">
<button
onClick={onClose}
type="button"
@@ -254,7 +254,7 @@ const EditJobPopoutNew = ({
<div className="flex flex-col-reverse sm:flex-row">
<div className="fields w-full">
<div className="sm:flex sm:space-x-7 mb-[0.5rem]">
<div className="field w-full mb-6 sm:mb-0">
<div className="field w-full mb-[0.5rem] sm:mb-0">
<InputCom
fieldClass="px-6 cursor-default"
label="Currency"
@@ -271,7 +271,7 @@ const EditJobPopoutNew = ({
</div>
{/* Price */}
<div className="field w-full mb-6 sm:mb-0">
<div className="field w-full mb-[0.5rem] sm:mb-0">
<InputCom
fieldClass="px-6 text-right"
label="Price"
@@ -289,7 +289,7 @@ const EditJobPopoutNew = ({
/>
</div>
<div className="field w-full">
<div className="field w-full mb-[0.5rem] sm:mb-0">
<label
className="job-label"
htmlFor="timeline_days"
@@ -302,15 +302,15 @@ const EditJobPopoutNew = ({
<Field
component="select"
name="timeline_days"
className={`input-field p-2 mt-3 rounded-full placeholder:text-base text-dark-gray w-full h-[42px] bg-slate-100 focus:ring-0 focus:outline-none ${
className={`input-field p-2 mt-3 rounded-full placeholder:text-base text-dark-gray w-full h-[42px] bg-slate-100 focus:ring-0 focus:outline-none border ${
props.errors.timeline_days &&
props.touched.timeline_days
? "border-[#ff0a0a63] shadow-red-500 border-[0.5px] animate-shake"
: "border border-[#f5f8fa] dark:border-[#5e6278]"
: "dark:border-[#5e6278]"
}`}
value={props.values.timeline_days}
>
<option value="">Select Duration</option>
<option value="" className='text-slate-500 text-lg'>Select Duration</option>
{publicArray.map(({ name, duration }, idx) => (
<option
key={duration}
@@ -11,6 +11,7 @@ import { tableReload } from "../../store/TableReloads";
import { useDispatch } from "react-redux";
import { SocketValues } from "../Contexts/SocketIOContext";
import AttachFile from "../attachmentCom/AttachFile";
const VideoElement = lazy(() => import("../VideoCom/VideoElement"));
const ImageElement = lazy(() => import("../ImageCon/ImageElement"));
@@ -206,11 +207,11 @@ function FamilyOfferJobPopout({ details, onClose, situation }) {
</div>
{/* ACTION SECTION */}
<div className="p-4 w-full md:w-2/5 h-full flex flex-col justify-between">
<div className="p-4 w-full md:w-2/5 h-full flex flex-col gap-4 justify-between">
{ details.job_type == 'TASK' ?
<div className="image-wrapper w-full h-40 flex justify-center items-center">
<Suspense fallback={<p className="w-full text-center">Loading...</p>}>
<ImageElement src={details?.image} alt='banner' className='w-auto h-full' />
<ImageElement src={details?.image} alt='banner' className='w-full h-auto' />
</Suspense>
</div>
:
@@ -222,6 +223,9 @@ function FamilyOfferJobPopout({ details, onClose, situation }) {
</div>
</div>
}
<div className="w-full">
<AttachFile data={details} showOnData={true} />
</div>
<div className="my-3 md:flex md:justify-center">
{requestStatus.loading && requestStatus.trigger == "offer" ? (
<LoadingSpinner size={8} color="sky-blue" />
+1 -1
View File
@@ -560,7 +560,7 @@ const JobFieldInput = ({
<Field
component="select"
name={inputName}
className={`input-field placeholder:text-base text-dark-gray w-full h-full bg-white outline-none px-2`}
className={`options-default`}
value={value}
>
{/* <option value="">{optionText}</option> */}
@@ -3,7 +3,7 @@ import React from 'react'
function Detail({label, value, bg,}) {
return (
<>
<label className='job-label w-full md:w-1/4'>{label}</label>
<label className='job-label w-full md:w-[150px]'>{label}</label>
<p className={`p-1 w-full md:w-3/4 text-sm text-slate-900 dark:text-white ${bg ? bg : null}`}>{value}</p>
</>
)
+6 -3
View File
@@ -160,9 +160,9 @@
@apply flex items-center gap-2
}
/* STYLES FOR MODAL 'NOTE => VIEW JOB EDIT MODAL FOR SAMPLE USAGE'*/
/* STYLES FOR MODAL 'NOTE => VIEW JOB EDIT MODAL/ADD JOB MODAL FOR SAMPLE USAGE'*/
.modal-container {
@apply w-11/12 md:w-[700px] mx-auto h-full flex flex-col bg-white dark:bg-dark-white lg:rounded-2xl overflow-hidden
@apply w-11/12 md:w-[700px] mx-auto h-auto max-h-full flex flex-col bg-white dark:bg-dark-white lg:rounded-2xl overflow-hidden
}
/* Modal Header section*/
@@ -183,7 +183,7 @@
/* modal footer */
.modal-footer-wrapper{
@apply p-4 border-t-2 flex justify-between items-center
@apply p-4 border-t-2 flex justify-between items-center w-full
}
/* END OF STYLES FOR MODAL BOX */
@@ -194,6 +194,9 @@
.logout-btn {
@apply px-4 min-w-[80px] h-[52px] flex justify-center items-center text-xl font-bold rounded-full cursor-pointer
}
.options-default {
@apply px-2 placeholder:text-sm w-full h-full bg-white outline-none text-sm text-slate-900 dark:text-white
}
}
/* ===================== EXTRA ===================== */
+1
View File
@@ -44,6 +44,7 @@ export const apiConst = {
WRENCH_FILE_FAMILY: 400,
WRENCH_FILE_FAMILYBANNER: 410,
WRENCH_FILE_JOB : 500,
JOB_MANAGER_FILES: 13012,
WRENCHBOARD_BKO_START: 10000,
WRENCHBOARD_BKO_LOGIN: 10010,
WRENCHBOARD_BKO_CREATEUSER: 10015,
+50 -2
View File
@@ -908,6 +908,42 @@ class usersService {
return this.postAuxEnd("/uploads", postData);
}
// FUNCTION TO UPLOAD RESOURCE FILES
uploadFile(reqData) {
var postData = {
uid: localStorage.getItem("uid"),
member_id: localStorage.getItem("member_id"),
sessionid: localStorage.getItem("session_token"),
action: apiConst.WRENCHBOARD_CONTRACT_MESSAGE,
...reqData,
};
const formData = new FormData();
for (let data in postData) {
formData.append(data, postData[data]);
}
return this.postAuxEnd("/upload/resources", formData, true);
}
// FUNCTION TO UPLOAD TASK FILES
uploadTaskFile(reqData) {
var postData = {
uid: localStorage.getItem("uid"),
member_id: localStorage.getItem("member_id"),
sessionid: localStorage.getItem("session_token"),
// action: apiConst.WRENCHBOARD_CONTRACT_MESSAGE,
...reqData,
};
const formData = new FormData();
for (let data in postData) {
formData.append(data, postData[data]);
}
return this.postAuxEnd("/upload/task", formData, true);
}
// END POINT TO DELETE A JOB
deleteJob(reqData) {
var postData = {
@@ -1356,6 +1392,18 @@ class usersService {
return this.postAuxEnd("/assignmediatask", postData);
}
// API FUNCTION FOR LISTING JOB MANAGER FILES (TASK FILE UPLAOD)
jobManagerFiles(reqData) {
var postData = {
member_uid: localStorage.getItem("uid"),
member_id: localStorage.getItem("member_id"),
sessionid: localStorage.getItem("session_token"),
action: apiConst.JOB_MANAGER_FILES,
...reqData
};
return this.postAuxEnd("/jobmanagerfiles", postData);
}
/*
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password)
@@ -1444,8 +1492,8 @@ class usersService {
});
}
postAuxEnd(uri, reqData) {
const endPoint = process.env.REACT_APP_USERS_ENDPOINT + uri;
postAuxEnd(uri, reqData, uploadPost=false) {
const endPoint = uploadPost ? process.env.REACT_APP_MEDIA_LINK + uri : process.env.REACT_APP_USERS_ENDPOINT + uri;
const session_token = localStorage.getItem("session_token");
// session_token = session_token !=null ?session_token : '';
// 'Authorization': `Basic ${(session_token !=null) ?session_token : ''}`,
+1 -1
View File
@@ -5,7 +5,7 @@ import ModalCom from "../components/Helpers/ModalCom";
function AddJobPage({ action, situation, categories }) {
return (
<ModalCom action={action} situation={situation}>
<div className="lg:w-[600px] w-11/12 lg:overflow-hidden lg:rounded-2xl bg-white dark:bg-dark-white dark:text-white">
<div className="modal-container">
<div className="modal-header-con">
<h1 className="modal-title">
New Job