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

This commit is contained in:
2024-03-06 16:24:44 +00:00
committed by Gogs
9 changed files with 73 additions and 207 deletions
@@ -1,5 +1,4 @@
import React from "react"; import React from "react";
import CountDown from "../Helpers/CountDown";
// import HomeSliders from "./HomeSliders"; // import HomeSliders from "./HomeSliders";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
@@ -41,39 +40,6 @@ export default function FamilyParentDashboard({
</p> </p>
</div> </div>
</div> </div>
{/* countdown */}
{nextDueTask?.next_due &&
Object.keys(nextDueTask.next_due)?.length != 0 && (
<div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity">
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Current Task
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{nextDueTask.next_due.item_code.substr(0, 4) + "..."}
</p>
<p className="text-base text-white tracking-wide">
{nextDueTask.next_due.price * 0.01} Naira
</p>
</div>
<div className="w-[1px] h-full bg-white-opacity"></div>
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Next due in
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{/* <CountDown lastDate="2023-04-26 4:00:00" /> */}
<CountDown lastDate={nextDueTask.next_due.due_date} />
</p>
<div className="text-base text-white tracking-wide flex gap-[23px]">
<span>Hrs</span>
<span>Min</span>
<span>Sec</span>
</div>
</div>
</div>
)}
<span className="text-base font-thin tracking-wide text-white flex items-end"> <span className="text-base font-thin tracking-wide text-white flex items-end">
Last Login : {loginDate} Last Login : {loginDate}
</span> </span>
@@ -1,5 +1,4 @@
import React from "react"; import React from "react";
import CountDown from "../Helpers/CountDown";
// import HomeSliders from "./HomeSliders"; // import HomeSliders from "./HomeSliders";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
@@ -38,38 +37,6 @@ export default function HomeDashboard({ className, bannerList, nextDueTask }) {
</div> </div>
</div> </div>
{/* countdown */}
{nextDueTask?.next_due &&
Object.keys(nextDueTask.next_due)?.length != 0 && (
<div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity">
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Current Task
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{nextDueTask.next_due.item_code.substr(0, 4) + "..."}
</p>
<p className="text-base text-white tracking-wide">
{nextDueTask.next_due.price * 0.01} Naira
</p>
</div>
<div className="w-[1px] h-full bg-white-opacity"></div>
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Next due in
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{/* <CountDown lastDate="2023-04-26 4:00:00" /> */}
<CountDown lastDate={nextDueTask.next_due.due_date} />
</p>
<div className="text-base text-white tracking-wide flex gap-[23px]">
<span>Hrs</span>
<span>Min</span>
<span>Sec</span>
</div>
</div>
</div>
)}
<span className="text-base font-thin tracking-wide text-white flex items-end"> <span className="text-base font-thin tracking-wide text-white flex items-end">
Last Login : {loginDate} Last Login : {loginDate}
</span> </span>
@@ -1,5 +1,4 @@
import React from "react"; import React from "react";
import CountDown from "../Helpers/CountDown";
// import HomeSliders from "./HomeSliders"; // import HomeSliders from "./HomeSliders";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
@@ -42,38 +41,6 @@ export default function JobOwnerDashboard({
</div> </div>
</div> </div>
{/* countdown */}
{nextDueTask?.next_due &&
Object.keys(nextDueTask.next_due)?.length != 0 && (
<div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity">
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Current Task
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{nextDueTask.next_due.item_code.substr(0, 4) + "..."}
</p>
<p className="text-base text-white tracking-wide">
{nextDueTask.next_due.price * 0.01} Naira
</p>
</div>
<div className="w-[1px] h-full bg-white-opacity"></div>
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Next due in
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{/* <CountDown lastDate="2023-04-26 4:00:00" /> */}
<CountDown lastDate={nextDueTask.next_due.due_date} />
</p>
<div className="text-base text-white tracking-wide flex gap-[23px]">
<span>Hrs</span>
<span>Min</span>
<span>Sec</span>
</div>
</div>
</div>
)}
<span className="text-base font-thin tracking-wide text-white flex items-end"> <span className="text-base font-thin tracking-wide text-white flex items-end">
Last Login : {loginDate} Last Login : {loginDate}
</span> </span>
+35 -28
View File
@@ -1,14 +1,16 @@
import React, { useState } from "react"; import React from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { toast } from "react-toastify";
import heroBg from "../../assets/images/bg-sky-blue.jpg"; //hero-bg.svg";
import heroUser from "../../assets/images/hero-user.png"; import heroUser from "../../assets/images/hero-user.png";
import CountDown from "../Helpers/CountDown"; import CountDown from "../Helpers/CountDown";
// import HomeSliders from "./HomeSliders"; // import HomeSliders from "./HomeSliders";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import HomeSliders from "../Home/HomeSliders"; import HomeSliders from "../Home/HomeSliders";
export default function WorkerDashboard({ className, bannerList, nextDueTask }) { export default function WorkerDashboard({
className,
bannerList,
nextDueTask,
}) {
const settings = { const settings = {
autoplay: true, autoplay: true,
dots: true, dots: true,
@@ -57,32 +59,37 @@ export default function WorkerDashboard({ className, bannerList, nextDueTask })
</div> </div>
</div> </div>
{/* countdown */} {/* countdown */}
{nextDueTask?.next_due && Object.keys(nextDueTask.next_due)?.length != 0 && ( {nextDueTask?.next_due &&
<div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity"> Object.keys(nextDueTask.next_due)?.length != 0 && (
<div className="flex flex-col justify-between"> <div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity">
<p className="text-base text-white tracking-wide">Current Task</p> <div className="flex flex-col justify-between">
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white"> <p className="text-base text-white tracking-wide">
{(nextDueTask.next_due.item_code).substr(0,4)+'...'} Current Task
</p> </p>
<p className="text-base text-white tracking-wide"> <p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{nextDueTask.next_due.price * 0.01} Naira {nextDueTask.next_due.item_code.substr(0, 4) + "..."}
</p> </p>
</div> <p className="text-base text-white tracking-wide">
<div className="w-[1px] h-full bg-white-opacity"></div> {nextDueTask.next_due.price * 0.01} Naira
<div className="flex flex-col justify-between"> </p>
<p className="text-base text-white tracking-wide">Next due in</p> </div>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white"> <div className="w-[1px] h-full bg-white-opacity"></div>
{/* <CountDown lastDate="2023-04-26 4:00:00" /> */} <div className="flex flex-col justify-between">
<CountDown lastDate={nextDueTask.next_due.due_date} /> <p className="text-base text-white tracking-wide">
</p> Next due in
<div className="text-base text-white tracking-wide flex gap-[23px]"> </p>
<span>Hrs</span> <p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
<span>Min</span> {/* <CountDown lastDate="2023-04-26 4:00:00" /> */}
<span>Sec</span> <CountDown lastDate={nextDueTask.next_due.due_date} />
</p>
<div className="text-base text-white tracking-wide flex gap-[23px]">
<span>Hrs</span>
<span>Min</span>
<span>Sec</span>
</div>
</div> </div>
</div> </div>
</div> )}
)}
{/* action */} {/* action */}
<div className="flex lg:space-x-3 space-x-1 items-center"> <div className="flex lg:space-x-3 space-x-1 items-center">
<Link to="/mytask" className="text-white text-base"> <Link to="/mytask" className="text-white text-base">
@@ -1,5 +1,4 @@
import React from "react"; import React from "react";
import CountDown from "../Helpers/CountDown";
// import HomeSliders from "./HomeSliders"; // import HomeSliders from "./HomeSliders";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
@@ -41,39 +40,6 @@ export default function WorkerDashboard({
</p> </p>
</div> </div>
</div> </div>
{/* countdown */}
{nextDueTask?.next_due &&
Object.keys(nextDueTask.next_due)?.length != 0 && (
<div className="w-full h-32 flex justify-evenly items-center sm:p-6 p-1 rounded-2xl border back-dark1 border-white-opacity">
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Current Task
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{nextDueTask.next_due.item_code.substr(0, 4) + "..."}
</p>
<p className="text-base text-white tracking-wide">
{nextDueTask.next_due.price * 0.01} Naira
</p>
</div>
<div className="w-[1px] h-full bg-white-opacity"></div>
<div className="flex flex-col justify-between">
<p className="text-base text-white tracking-wide">
Next due in
</p>
<p className="lg:text-2xl text-lg font-bold tracking-wide text-white">
{/* <CountDown lastDate="2023-04-26 4:00:00" /> */}
<CountDown lastDate={nextDueTask.next_due.due_date} />
</p>
<div className="text-base text-white tracking-wide flex gap-[23px]">
<span>Hrs</span>
<span>Min</span>
<span>Sec</span>
</div>
</div>
</div>
)}
<span className="text-base font-thin tracking-wide text-white flex items-end"> <span className="text-base font-thin tracking-wide text-white flex items-end">
Last Login : {loginDate} Last Login : {loginDate}
</span> </span>
@@ -14,6 +14,7 @@ export default function InputCom({
forgotPassword, forgotPassword,
parentClass, parentClass,
labelClass, labelClass,
labalClass,
inputClass, inputClass,
fieldClass, fieldClass,
onClick, onClick,
@@ -53,7 +54,7 @@ export default function InputCom({
<div className={`flex items-center justify-between mb-2.5 ${labelClass}`}> <div className={`flex items-center justify-between mb-2.5 ${labelClass}`}>
{label && ( {label && (
<label <label
className="input-label text-[#181c32] text-[13.975px] leading-[20.9625px] font-semibold flex items-center gap-1" className={`input-label text-[#181c32] text-[13.975px] leading-[20.9625px] font-semibold flex items-center gap-1 ${labalClass}`}
htmlFor={name} htmlFor={name}
> >
{label} {label}
+1 -1
View File
@@ -6,7 +6,7 @@ const LoadedPage = ({reloader}) => {
const { loading, data, error } = GetMyPageLoad(reloader); const { loading, data, error } = GetMyPageLoad(reloader);
return ( return (
<div className="w-full border border-gray-400 rounded-md p-4 flex flex-col h-72 gap-2 overflow-y-auto"> <div className="w-full border border-gray-400 rounded-md p-4 flex flex-col h-72 gap-2 overflow-y-auto dark:text-white">
{loading ? ( {loading ? (
<> <>
<h1 className="text-xl font-bold tracking-wide">...</h1> <h1 className="text-xl font-bold tracking-wide">...</h1>
+2 -1
View File
@@ -8,6 +8,7 @@ const YourPageForm = ({ values, onChange, onSubmit, loading, msg }) => (
fieldClass="px-4" fieldClass="px-4"
parentClass="flex items-center gap-1 justify-between" parentClass="flex items-center gap-1 justify-between"
labelClass="flex-[0.2] mb-0 font-semibold" labelClass="flex-[0.2] mb-0 font-semibold"
labalClass="dark:text-white"
inputClass="flex-[0.8]" inputClass="flex-[0.8]"
inputBg="bg-slate-100" inputBg="bg-slate-100"
label="Introduction: " label="Introduction: "
@@ -24,7 +25,7 @@ const YourPageForm = ({ values, onChange, onSubmit, loading, msg }) => (
</label> </label>
<textarea <textarea
style={{ resize: "none" }} style={{ resize: "none" }}
className="text-base px-4 py-2 rounded-md min-h-[100px] text-dark-gray dark:text-white w-full bg-slate-100 dark:bg-[#11131F] focus:ring-0 focus:outline-none flex-[0.8]" className="text-base px-4 py-2 rounded-[36px] min-h-[100px] text-dark-gray dark:text-white w-full bg-slate-100 focus:ring-0 focus:outline-none flex-[0.8]"
name="description" name="description"
cols="30" cols="30"
rows="2" rows="2"
+33 -42
View File
@@ -13,12 +13,39 @@ const YourPage = () => {
const handleChange = ({ target: { name, value } }) => const handleChange = ({ target: { name, value } }) =>
setPageValues((prev) => ({ ...prev, [name]: value })); setPageValues((prev) => ({ ...prev, [name]: value }));
const updateYourPageDetails = updateYourPage( const updateYourPageDetails = async () => {
pageValues, if (!pageValues.intro || !pageValues.description) return;
setResponse,
setPageValues, try {
setReloader setResponse({ loading: true, error: "", msg: "" });
);
let api = new usersService();
const res = await api.MyPageIntro(pageValues);
setTimeout(() => {
setResponse({
loading: false,
data: res.data,
msg: "Update Complete",
});
setReloader((prev) => !prev);
}, 1000);
setTimeout(() => {
setResponse({ msg: "" });
// Clear form after successful update
setPageValues({ intro: "", description: "" });
}, 3000);
} catch (error) {
return setResponse({
loading: false,
data: {},
error: "Error updating page",
msg: "",
});
}
};
return ( return (
<Layout> <Layout>
@@ -57,39 +84,3 @@ const responseInitialValues = {
error: "", error: "",
msg: "", msg: "",
}; };
function updateYourPage(pageValues, setResponse, setPageValues, setReloader) {
return async () => {
if (!pageValues.intro || !pageValues.description) return;
try {
setResponse({ loading: true, error: "", msg: "" });
let api = new usersService();
const res = await api.MyPageIntro(pageValues);
setTimeout(() => {
setResponse({
loading: false,
data: res.data,
msg: "Update Complete",
});
setReloader((prev) => !prev);
}, 1000);
setTimeout(() => {
setResponse({ msg: "" });
// Clear form after successful update
setPageValues({ intro: "", description: "" });
}, 3000);
} catch (error) {
return setResponse({
loading: false,
data: {},
error: "Error updating page",
msg: "",
});
}
};
}