Compare commits

...

19 Commits

Author SHA1 Message Date
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
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
11 changed files with 166 additions and 124 deletions
+39 -3
View File
@@ -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}
@@ -177,6 +177,42 @@ function AddJob({ popUpHandler, categories }) {
}
/>
</div>
{/* Timeline */}
<div className="field w-full">
<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>
+1 -1
View File
@@ -25,7 +25,7 @@ export default function LoginLayout({ slogan, children }) {
>
</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="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>
+1 -1
View File
@@ -4,7 +4,7 @@ import linkedInLogo from "../../../assets/images/Linkedin.png";
import appleLogo from "../../../assets/images/apple-black.svg";
import facebookLogo from "../../../assets/images/facebook.svg";
import googleLogo from "../../../assets/images/google-logo.svg";
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";
+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}
>
@@ -108,8 +108,8 @@ const LowerBanner = ({ image, title = "", desc = "", btn, link_path, key }) => {
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">
{title}
@@ -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>
@@ -93,9 +93,9 @@ const FamilyWaitlist = memo(
</div>
</div>
<div className="px-2 flex flex-col items-center justify-center">
<p className="text-sm font-bold text-dark-gray dark:text-white">
{/* <p className="text-sm font-bold text-dark-gray dark:text-white">
{addedDate}
</p>
</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>
@@ -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}
@@ -544,6 +544,7 @@ function ActiveJobs(props) {
<AttachFile
data={props.details}
showOnData={true}
fontSize={'text-lg'}
/>
</div>
<div className="flex justify-between items-center gap-5">
+55 -51
View File
@@ -4,7 +4,7 @@ import axios from 'axios'
import usersService from '../../services/UsersService'
export default function AttachFile({data='', showOnData=false}) {
export default function AttachFile({data='', fontSize='text-sm', showOnData=false}) {
const apiCall = new usersService()
@@ -37,7 +37,7 @@ export default function AttachFile({data='', showOnData=false}) {
}
axios.post(`${process.env.REACT_APP_MEDIA_LINK}/upload/task`,formData).then(res => {
if(res.data.status < 1){
if(res.data.internal_return < 0){
inputFile.current.value = null
setRequestStatus({loading: false, status:false, message:'upload failed'})
setTimeout(()=>{
@@ -73,7 +73,7 @@ export default function AttachFile({data='', showOnData=false}) {
return (
<>
{!showOnData ?
<div className='w-full h-full flex flex-col justify-center items-center rounded-md'>
<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'>
@@ -84,37 +84,39 @@ export default function AttachFile({data='', showOnData=false}) {
<span className={`text-[10px] ${requestStatus.status ? 'text-emerald-600' : 'text-red-500'}`}>{requestStatus.message}</span>
}
</div>
<label htmlFor='file' className={`cursor-pointer text-[12px] py-1 px-2 rounded-full border ${ requestStatus.loading && 'pointer-events-none'}`}>+ Add</label>
<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>
<div className='text-[12px] w-full px-2 py-1 h-20 overflow-y-auto flex flex-col gap-1 border'>
{uploadedList.loading ?
<div className='w-full h-full justify-center items-center'>
<LoadingSpinner size='6' height='h-full' />
<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]
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={`${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`}
>
{(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>
:
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]
return(
<div key={item.file_uid} className='my-1 flex justify-start gap-2'>
<span>{index + 1}:</span>
<a
target='_blank'
alt='download-link'
className=''
href={`${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`}
>
{(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>
<input
type="file"
@@ -126,31 +128,33 @@ export default function AttachFile({data='', showOnData=false}) {
</div>
</div>
:showOnData && uploadedList?.data?.result_list?.length > 0 ?
<div className='w-full h-full flex flex-col justify-center items-center rounded-md'>
<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='text-[12px] w-full px-2 py-1 h-20 overflow-y-auto flex flex-col gap-1 border'>
{uploadedList.data.result_list.map((item, index) => {
let fileNameExt = item.originalname.split('.')[item.originalname.split('.').length - 1]
return(
<div key={item.file_uid} className='flex justify-start gap-2'>
<span>{index + 1}:</span>
<a
target='_blank'
alt='download-link'
className=''
href={`${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`}
>
{(item.originalname).toString().length > 30 ? (item.originalname).toString().slice(0, 26) + '..._.' + fileNameExt : (item.originalname).toString()}
</a>
</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]
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={`${uploadedList?.data?.session_image_server}/${localStorage.getItem("session_token")}/jobfile/${item.file_uid}`}
>
{(item.originalname).toString().length > 30 ? (item.originalname).toString().slice(0, 26) + '..._.' + fileNameExt : (item.originalname).toString()}
</a>
</div>
)
})
}
</div>
</div>
<input
type="file"
@@ -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}