Compare commits

...

19 Commits

Author SHA1 Message Date
victorAnumudu 38766c9cb7 changed Dashboard aside link name to Home 2024-02-26 15:30:30 +01:00
ameye fc04855d3f Merge branch 'banner-card' of WrenchBoard/Users-Wrench into master 2024-02-26 13:17:11 +00:00
victorAnumudu 56cb956482 adjusted banner card design 2024-02-26 14:07:15 +01:00
ameye 2f5abc8931 Merge branch 'home-banners-dashboard' of WrenchBoard/Users-Wrench into master 2024-02-26 10:39:34 +00:00
ameye 026dbb1a0a Merge branch 'family-banner-bug' of WrenchBoard/Users-Wrench into master 2024-02-26 10:39:23 +00:00
Ebube efd464ba8a Merge branch 'master' of https://gitlab.chiefsoft.net/WrenchBoard/Users-Wrench into home-banners-dashboard 2024-02-26 02:49:58 +01:00
Ebube 8c400c7ce1 fixed market bug, fixed key issue and added texts fork the cards 2024-02-26 02:49:35 +01:00
victorAnumudu d3d2b3cb5a changed to three cards banner 2024-02-26 02:40:25 +01:00
victorAnumudu 3054a5eb9a remove unused API from family login 2024-02-26 01:55:52 +01:00
Ebube 670f4bbf1a Added color to component and toggler to the env 2024-02-26 00:12:29 +01:00
ameye ae73f10c42 Merge branch 'family-banners' of WrenchBoard/Users-Wrench into master 2024-02-25 22:14:19 +00:00
victorAnumudu de477f32ed added banner to family dashboard banner list 2024-02-25 21:16:38 +01:00
ameye 2c6e36aea9 Merge branch 'home-banners-dashboard' of WrenchBoard/Users-Wrench into master 2024-02-23 20:12:12 +00:00
ameye dc3aa1470e Merge branch 'family_new_dashboard' of WrenchBoard/Users-Wrench into master 2024-02-23 20:12:07 +00:00
victorAnumudu 9029953432 added familybanners API 2024-02-23 17:29:18 +01:00
Ebube fa47de7292 Added empty component to the dashboard 2024-02-23 17:19:41 +01:00
victorAnumudu d0a2b804b9 configured family new dashboard to show only on dev 2024-02-23 16:27:17 +01:00
victorAnumudu aa48529dca configured family new dashboard to show only on dev 2024-02-23 16:15:46 +01:00
ameye ad2745dfce Merge branch 'section-addition' of WrenchBoard/Users-Wrench into master 2024-02-19 17:37:50 +00:00
17 changed files with 199 additions and 81 deletions
+7 -1
View File
@@ -102,4 +102,10 @@ REACT_APP_NEW_LOGIN_LAYOUT=1
#APP DOWNLOAD LINKS
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
# Displays the new family dashboard with boxes
REACT_APP_SHOW_NEW_FAMILY_DASH=1
# Displays the account dashboard
REACT_APP_SHOW_ACCOUNT_DASH=1
+7 -1
View File
@@ -70,4 +70,10 @@ REACT_APP_NEW_LOGIN_LAYOUT=1
#APP DOWNLOAD LINKS
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
# Displays the new family dashboard with boxes
REACT_APP_SHOW_NEW_FAMILY_DASH=1
# Displays the account dashboard
REACT_APP_SHOW_ACCOUNT_DASH=1
+6
View File
@@ -77,3 +77,9 @@ REACT_APP_NEW_LOGIN_LAYOUT=1
#APP DOWNLOAD LINKS
REACT_APP_ANDROID_APP='https://play.google.com/store/apps/details?id=com.wrenchboard.users'
REACT_APP_APPLE_APP='https://itunes.apple.com/us/app/wrenchboard/id1435718367?ls=1&mt=8'
# Displays the new family dashboard with boxes
REACT_APP_SHOW_NEW_FAMILY_DASH=0
# Displays the account dashboard
REACT_APP_SHOW_ACCOUNT_DASH=0
@@ -1,4 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.5 0H2.5C1.12125 0 0 1.12125 0 2.5V17.5C0 18.8787 1.12125 20 2.5 20H17.5C18.8787 20 20 18.8787 20 17.5V2.5C20 1.12125 18.8787 0 17.5 0Z" fill="#1976D2"/>
<path d="M16.875 10H13.75V7.5C13.75 6.81 14.31 6.875 15 6.875H16.25V3.75H13.75C11.6788 3.75 10 5.42875 10 7.5V10H7.5V13.125H10V20H13.75V13.125H15.625L16.875 10Z" fill="#FAFAFA"/>
</svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.5 0H2.5C1.12125 0 0 1.12125 0 2.5V17.5C0 18.8787 1.12125 20 2.5 20H17.5C18.8787 20 20 18.8787 20 17.5V2.5C20 1.12125 18.8787 0 17.5 0Z" fill="#1976D2"/>
<path d="M16.875 10H13.75V7.5C13.75 6.81 14.31 6.875 15 6.875H16.25V3.75H13.75C11.6788 3.75 10 5.42875 10 7.5V10H7.5V13.125H10V20H13.75V13.125H15.625L16.875 10Z" fill="#FAFAFA"/>
</svg>

Before

Width:  |  Height:  |  Size: 452 B

After

Width:  |  Height:  |  Size: 448 B

+1 -1
View File
@@ -2,7 +2,7 @@ import React, { useEffect, useLayoutEffect, useState } from "react";
import { Link, useLocation, useNavigate } from "react-router-dom";
import linkedInLogo from "../../../assets/images/Linkedin.png";
import appleLogo from "../../../assets/images/apple-black.svg";
import facebookLogo from "../../../assets/images/facebook-4.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 usersService from "../../../services/UsersService";
+1 -1
View File
@@ -2,7 +2,7 @@ import React, { useEffect, useLayoutEffect, useState } from "react";
import { Link, useLocation, useNavigate } from "react-router-dom";
import linkedInLogo from "../../../assets/images/Linkedin.png";
import appleLogo from "../../../assets/images/apple-black.svg";
import facebookLogo from "../../../assets/images/facebook-4.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 usersService from "../../../services/UsersService";
+12 -28
View File
@@ -1,10 +1,11 @@
import { useEffect, useState } from "react";
import { useState } from "react";
import { PriceFormatter } from "../Helpers/PriceFormatter";
import MarketPopUp from "../MarketPlace/PopUp/MarketPopUp";
export default function AvailableJobsCard({
className,
datas,
key,
hidden = false,
contentDisplay,
image_server,
@@ -19,10 +20,10 @@ export default function AvailableJobsCard({
datas?.currency
);
useEffect(() => {
const imagePath = require(`../../assets/images/${datas.thumbnil}`); // Replace with your directory path for local images
setImageUrl(imagePath);
}, []);
// useEffect(() => {
// const imagePath = require(`../../assets/images/${datas.thumbnil}`); // Replace with your directory path for local images
// setImageUrl(imagePath);
// }, []);
const image = localStorage.getItem("session_token")
? `${image_server}${localStorage.getItem("session_token")}/job/${
@@ -37,6 +38,7 @@ export default function AvailableJobsCard({
className={`card-style-two w-full h-[426px] p-[20px] bg-white dark:bg-dark-white rounded-2xl section-shadow ${
className || ""
}`}
key={key}
>
<div
onClick={() => {
@@ -75,34 +77,16 @@ export default function AvailableJobsCard({
<div
className="w-full h-[236px] p-6 rounded-xl overflow-hidden bg-center bg-cover bg-no-repeat"
style={{
backgroundImage: `url('${imageUrl}')`,
backgroundImage: `url('${image}')`,
}}
>
<div className="flex justify-center">{datas.description}</div>
<div className="flex justify-center bg-slate-100 p-2 rounded-md">
{datas.description}
</div>
</div>
</div>
<div className="details-area">
<div className="product-two-options flex justify-between mb-5 relative">
{/* <div className="status">*/}
{/* {datas.isActive && (*/}
{/* <span className="text-xs px-3 py-1.5 tracking-wide rounded-full bg-gold text-white">*/}
{/* Active*/}
{/*</span>*/}
{/* )}*/}
{/* </div>*/}
{/*<div className=" review flex space-x-2">*/}
{/* <button*/}
{/* onClick={favoriteHandler}*/}
{/* type="button"*/}
{/* className={`w-7 h-7 bg-white rounded-full flex justify-center items-center ${*/}
{/* addFavorite ? "text-red-500" : "text-thin-light-gray"*/}
{/* }`}*/}
{/* >*/}
{/* <Icons name="star" />*/}
{/* </button>*/}
{/*</div>*/}
</div>
<div className="product-two-options flex justify-between mb-5 relative"></div>
<div className="flex justify-between">
<div className="flex items-center space-x-2">
@@ -0,0 +1,15 @@
import React from 'react'
const AccountDashboard = ({className}) => {
return (
<div className={`w-full min-h-[400px] md:grid grid-cols-2 lg:p-8 p-4 justify-between items-center gap-2 rounded-2xl overflow-hidden bg-[#ffed00] ${
className || ""
}`}>
<div className="w-full h-full flex items-center justify-center text-5xl text-center">
Account Dashboard
</div>
</div>
)
}
export default AccountDashboard
+2
View File
@@ -2,10 +2,12 @@ import FamilyParentDashboard from "./FamilyParentDashboard";
import HomeDashboard from "./HomeDashboard";
import JobOwnerDashboard from "./JobOwnerDashboard";
import WorkerDashboard from "./WorkerDashboard";
import AccountDashboard from "./AccountDashboard";
export {
FamilyParentDashboard,
HomeDashboard,
JobOwnerDashboard,
WorkerDashboard,
AccountDashboard
};
+87 -21
View File
@@ -1,40 +1,106 @@
import React from "react";
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import usersService from "../../services/UsersService";
import ParentWaiting from "../MyOffers/ParentWaiting";
import MyOffersFamilyTable from "../MyTasks/MyOffersFamilyTable";
import FamilyActiveLSlde from "./FamilyActiveLSlde";
import { Link } from "react-router-dom";
export default function FamilyDash({ familyOffers, MyActiveJobList }) {
// console.log("PROPS IN FAMILY DASH->", familyOffers?.result_list);
const userApi = new usersService();
const trending = MyActiveJobList;
let [familyBannersList, setFamilyBannersList] = useState({loading:false, result:{}})
const getFamilyBanners = async () => { // FUNCTION TO GET FAMILY BANNERS
setFamilyBannersList({loading:true, result:[]});
try {
const res = await userApi.getFamilyBannersList();
setFamilyBannersList({loading:false, result:res.data});
// console.log('TEST RESPONSE', res.data)
} catch (error) {
setFamilyBannersList({loading:false, result:[]});
console.log("Error getting tasks");
}
};
useEffect(()=>{
getFamilyBanners()
},[])
return (
<div>
<div className="home-page-wrapper">
{/* <CommonHead commonHeadData={props.commonHeadData} /> */}
<div className="w-full mb-4 grid grid-cols-2 md:grid-cols-4 gap-2 md:gap-4">
{[1,2,3,4,5].map((item, index) => (
<Link to='/' className={`h-40 rounded-lg shadow-sm ${index%2==0 ? 'bg-red-200/50' : 'bg-sky-300/50'}`}>
<div >
{process.env.REACT_APP_SHOW_NEW_FAMILY_DASH == '1' &&
<>
{!familyBannersList.loading && familyBannersList?.result?.result_list && Object.keys(familyBannersList?.result?.result_list).length > 0 &&
// Loop for Family Banners
<div className="w-full mb-4 grid grid-cols-2 md:grid-cols-3 gap-2 md:gap-4">
{Object.keys(familyBannersList?.result?.result_list).map((item, index) => {
let content = familyBannersList?.result?.result_list[item]
let action = item == 'recommend' ? 'familymarket' : 'mytask'
return (
<Link key={item} to={`/${action}`} className={`h-44 rounded-lg bg-white dark:bg-dark-white shadow-md flex justify-center items-center transition-all duration-300 hover:shadow-sm`}>
<div className="h-full w-full">
<img className="w-full h-1/2 object-cover rounded-t-lg" src={content.banner.image} alt='banner image' />
<div className="px-2 py-1">
<h1 className="text-lg text-black dark:text-white font-medium tracking-wide">{content.banner.text}</h1>
<p className="text-sm text-black dark:text-white">{content.banner.description}</p>
</div>
{/* Horizontal Line */}
<div className="w-full h-[1px] bg-slate-300"></div>
</div>
</Link>
))}
</div>
<div className="my-4">
<h1 className="my-4 text-26 font-bold text-dark-gray dark:text-white tracking-wide">Resources</h1>
<div className="w-full grid grid-cols-2 md:grid-cols-3 gap-2 md:gap-4">
{[1,2,3,4,5].map((item, index) => (
<Link to='/' className={`h-40 rounded-lg shadow-sm ${index%2==0 ? 'bg-red-200/50' : 'bg-sky-300/50'}`}>
<div >
<div className="px-2 py-1 flex justify-between items-center">
<span className="text-slate-400 dark:text-slate-200 text-sm">6w ago</span>
{/* Dots */}
<div className="flex justify-center gap-1">
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
</div>
</div>
</div>
</Link>
)
})}
</div>
}
<div className="my-4">
<h1 className="my-4 text-26 font-bold text-dark-gray dark:text-white tracking-wide">Resources</h1>
<div className="w-full grid grid-cols-2 md:grid-cols-3 gap-2 md:gap-4">
{[1,2,3,4,5].map((item, index) => (
<Link key={item} to={`/`} className={`h-44 rounded-lg bg-white dark:bg-dark-white shadow-md flex justify-center items-center transition-all duration-300 hover:shadow-sm`}>
<div className="h-full w-full">
<img className="w-full h-1/2 object-cover rounded-t-lg" src={''} alt='banner image' />
<div className="px-2 py-1">
<h1 className="text-lg text-black dark:text-white font-medium tracking-wide">{'Heading'}</h1>
<p className="text-sm text-black dark:text-white">{'Description'}</p>
</div>
{/* Horizontal Line */}
<div className="w-full h-[1px] bg-slate-300"></div>
</div>
</Link>
))}
<div className="px-2 py-1 flex justify-between items-center">
<span className="text-slate-400 dark:text-slate-200 text-sm">6w ago</span>
{/* Dots */}
<div className="flex justify-center gap-1">
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
<div className="w-1 h-1 bg-slate-400 rounded-full"></div>
</div>
</div>
</div>
</Link>
))}
</div>
</div>
</div>
</>
}
{familyOffers?.result_list && familyOffers?.result_list.length > 0 && (
<MyOffersFamilyTable
+14 -3
View File
@@ -1,10 +1,15 @@
import { useSelector } from "react-redux";
import {
AccountDashboard,
FamilyParentDashboard,
HomeDashboard,
JobOwnerDashboard,
WorkerDashboard,
} from "../Dashboards";
import MyJobTable from "../MyTasks/MyJobTable";
import MyOffersTable from "../MyTasks/MyOffersTable";
import LoadingSpinner from "../Spinners/LoadingSpinner";
import Hero from "./Hero";
import HomeActivities from "./HomeActivities";
import { FamilyParentDashboard, HomeDashboard, JobOwnerDashboard, WorkerDashboard } from "../Dashboards";
export default function FullAccountDash(props) {
// console.log("PROPS IN HOME->", props);
@@ -54,12 +59,18 @@ export default function FullAccountDash(props) {
}
};
console.log(process.env.REACT_APP_SHOW_ACCOUNT_DASH)
return (
<>
<div className="home-page-wrapper">
{process.env.REACT_APP_SHOW_ACCOUNT_DASH == "1" && (
<AccountDashboard className="mb-4" />
)}
{renderDashboard()}
{props?.dashTypes !== "undefined" && props.offersList?.data?.result_list?.length ? (
{props?.dashTypes !== "undefined" &&
props.offersList?.data?.result_list?.length ? (
<MyOffersTable
MyActiveOffersList={props.offersList?.data}
className="mb-10"
+1 -1
View File
@@ -112,7 +112,7 @@ export default function MainSection({
<AvailableJobsCard
contentDisplay={contentDisplay}
image_server={image_server}
key={datas.id}
key={datas.job_uid}
datas={datas}
/>
)}
+1 -1
View File
@@ -89,7 +89,7 @@ export default function MobileSidebar({
<ul className="flex flex-col space-y-6">
{/* Using mini component reduces the bulk amount of html */}
<ListItem
title="Dashboard"
title= {userDetails?.account_type == "FULL" ? "Dashboard" : "Home"}
route="/"
sidebar={sidebar}
iconName="new-dashboard"
+1 -1
View File
@@ -110,7 +110,7 @@ export default function Sidebar({
<ul className="flex flex-col space-y-6">
{/* Using mini component reduces the bulk amount of html */}
<ListItem
title="Dashboard"
title={userDetails?.account_type == "FULL" ? "Dashboard" : "Home"}
route="/"
sidebar={sidebar}
iconName="new-dashboard"
+1
View File
@@ -132,6 +132,7 @@ export const apiConst = {
WRENCHBOARD_ACCOUNT_HOMEBANNERS: 11200,
WRENCHBOARD_ACCOUNT_PLAYGROUND: 11201,
WRENCHBOARD_ACCOUNT_FAMILY_BANNERS: 22005,
WRENCHBOARD_ACCOUNT_RECENTS: 11202,
WRENCHBOARD_ACCOUNT_NOTIFICATIONS: 11205,
+26 -18
View File
@@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Navigate, Outlet, useNavigate } from "react-router-dom";
import LoadingSpinner from "../components/Spinners/LoadingSpinner";
import { formattedDate } from "../lib";
import usersService from "../services/UsersService";
import { commonHeadBanner } from "../store/CommonHeadBanner";
import { recentActivitiesData } from "../store/RecentActivitiesData";
@@ -10,8 +11,6 @@ import { updateJobs } from "../store/jobLists";
import { updateNotifications } from "../store/notifications";
import { updateUserJobList } from "../store/userJobList";
import { updateWalletDetails } from "../store/walletDetails";
import { formattedDate } from "../lib";
import { tableReload } from "../store/TableReloads";
const AuthRoute = ({ redirectPath = "/login", children }) => {
const apiCall = useMemo(() => new usersService(), []);
@@ -26,7 +25,7 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
);
const {
userDetails: { username, uid, session},
userDetails: { username, uid, session, account_type },
} = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active
let loggedIn = username && session && uid ? true : false; // variable to determine if user is logged in
@@ -167,6 +166,9 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
}, []);
useEffect(() => {
if((!loggedIn && !isLogin.status) || account_type == 'FAMILY'){ // DO NOT CALL THIS, IF USER ACCOUNT TYPE IS FAMILY
return
}
const getMyJobList = async () => {
dispatch(updateUserJobList({ loading: true, data: [] }));
try {
@@ -181,7 +183,7 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
}
};
getMyJobList();
}, [jobListTable]);
}, [jobListTable, isLogin.status]);
useEffect(() => {
const getMyWalletList = async () => {
@@ -201,6 +203,9 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
}, [walletTable]);
useEffect(() => {
if((!loggedIn && !isLogin.status) || account_type == 'FAMILY'){ // DO NOT CALL THIS, IF USER ACCOUNT TYPE IS FAMILY
return
}
// Getting market data
const getMarketActiveJobList = async () => {
try {
@@ -211,23 +216,26 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
}
};
getMarketActiveJobList();
}, [apiCall, dispatch, jobListTable]);
}, [apiCall, dispatch, jobListTable, isLogin.status]);
//FUNCTION TO GET COMMON HEAD DATA
useEffect(() => {
apiCall
.getHeroJBanners()
.then((res) => {
if (res.data.internal_return < 0) {
return;
}
dispatch(commonHeadBanner(res.data));
})
.catch((error) => {
console.log("ERROR ", error);
});
}, []);
if((!loggedIn && !isLogin.status) || account_type == 'FAMILY'){ // DO NOT CALL THIS, IF USER ACCOUNT TYPE IS FAMILY
return
}
apiCall
.getHeroJBanners()
.then((res) => {
if (res.data.internal_return < 0) {
return;
}
dispatch(commonHeadBanner(res.data));
})
.catch((error) => {
console.log("ERROR ", error);
});
}, [isLogin.status]);
//FUNCTION TO GET COMMON HEAD DATA
useEffect(() => {
apiCall
+13
View File
@@ -1249,6 +1249,19 @@ class usersService {
};
return this.postAuxEnd("/familyrelinvite", postData);
}
// API FUNCTION TO FAMILY BANNERS
getFamilyBannersList() {
var postData = {
uid: localStorage.getItem("uid"),
member_id: localStorage.getItem("member_id"),
sessionid: localStorage.getItem("session_token"),
action: apiConst.WRENCHBOARD_ACCOUNT_FAMILY_BANNERS,
limit: 20,
offset: 1
};
return this.postAuxEnd("/familybanners", postData);
}
/*
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(username)
- 20:27:30.118 FLOG_MAX [757411]: REQ_STRING(password)