Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9b6c5b72ad | |||
| afc5e25cfc | |||
| 58fe5eb82c | |||
| 2f3fdc0695 | |||
| 0a465fceb0 | |||
| 5e968db2f5 | |||
| 1916bc1a65 | |||
| 1103127cae | |||
| 751369071c | |||
| 4cc8f27c14 | |||
| aab455c2c3 | |||
| 79dcd0f2b5 | |||
| a8416a8433 | |||
| 70c9d1778c | |||
| c4af2dfcc8 | |||
| b186549b8d |
@@ -90,4 +90,5 @@ REACT_APP_SHOW_OFFER_GROUP_JOB=0
|
|||||||
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
||||||
|
|
||||||
#GOOGLE RECAPTCHA SITEKEY
|
#GOOGLE RECAPTCHA SITEKEY
|
||||||
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6Ld_qKooAAAAADNL1TPzRLmcBA8vlpvx__39Rj39
|
||||||
|
#6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
||||||
+2
-1
@@ -58,4 +58,5 @@ REACT_APP_SHOW_OFFER_GROUP_JOB=0
|
|||||||
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
||||||
|
|
||||||
#GOOGLE RECAPTCHA SITEKEY
|
#GOOGLE RECAPTCHA SITEKEY
|
||||||
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6Ld_qKooAAAAADNL1TPzRLmcBA8vlpvx__39Rj39
|
||||||
|
#6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
||||||
+2
-1
@@ -64,4 +64,5 @@ REACT_APP_SHOW_OFFER_GROUP_JOB=0
|
|||||||
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE=0
|
||||||
|
|
||||||
#GOOGLE RECAPTCHA SITEKEY
|
#GOOGLE RECAPTCHA SITEKEY
|
||||||
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
REACT_APP_GOOGLE_RECAPTCHA_SITEKEY=6Ld_qKooAAAAADNL1TPzRLmcBA8vlpvx__39Rj39
|
||||||
|
#6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const ForgetPwdResponse = ({title, message, type}) => {
|
|||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => navigate("/login")}
|
onClick={() => navigate("/login")}
|
||||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
className={`h-[48px] rounded-full mb-6 text-[15px] font-semibold text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
||||||
>
|
>
|
||||||
<span>Home</span>
|
<span>Home</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -172,11 +172,18 @@ export default function ForgotPassword() {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="signin-area mb-3.5">
|
<div className="signin-area mb-3.5">
|
||||||
<div className="flex justify-center items-center gap-2">
|
<div className="flex justify-center items-center gap-4">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={() => navigate("/login")}
|
||||||
|
className={`h-[48px] rounded-full mb-6 text-[15px] font-semibold text-white hover:text-white flex justify-center bg-red-500 hover:bg-red-600 transition-all duration-300 items-center py-[0.8875rem] px-[1.8125rem] `}
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={resetHandler}
|
onClick={resetHandler}
|
||||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
className={`h-[48px] rounded-full mb-6 text-[15px] font-semibold text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.81rem]`}
|
||||||
>
|
>
|
||||||
{resetLoading ? (
|
{resetLoading ? (
|
||||||
<div className="signup btn-loader"></div>
|
<div className="signup btn-loader"></div>
|
||||||
@@ -184,13 +191,6 @@ export default function ForgotPassword() {
|
|||||||
<span>Send Code</span>
|
<span>Send Code</span>
|
||||||
)}
|
)}
|
||||||
</button>
|
</button>
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
onClick={() => navigate("/login")}
|
|
||||||
className={`rounded-[0.475rem] mb-6 text-[15px] font-semibold text-[#009ef7] hover:text-white flex justify-center bg-[#f1faff] hover:bg-[#009ef7] transition-all duration-300 items-center py-[0.8875rem] px-[1.8125rem] `}
|
|
||||||
>
|
|
||||||
Cancel
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,10 +14,14 @@ import { useGoogleLogin } from "@react-oauth/google";
|
|||||||
import { useDispatch } from "react-redux";
|
import { useDispatch } from "react-redux";
|
||||||
import { updateUserDetails } from "../../../store/UserDetails";
|
import { updateUserDetails } from "../../../store/UserDetails";
|
||||||
|
|
||||||
|
import ReCAPTCHA from "react-google-recaptcha";
|
||||||
|
|
||||||
export default function Login() {
|
export default function Login() {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const { state } = useLocation();
|
const { state } = useLocation();
|
||||||
|
|
||||||
|
const [validCaptcha, setValidCaptcha] = useState({show: false, valid:''}); // FOR CAPTCHA
|
||||||
|
|
||||||
let [loginType, setLoginType] = useState("");
|
let [loginType, setLoginType] = useState("");
|
||||||
|
|
||||||
const [loginLoading, setLoginLoading] = useState(false);
|
const [loginLoading, setLoginLoading] = useState(false);
|
||||||
@@ -107,6 +111,14 @@ export default function Login() {
|
|||||||
}, Number(process.env.REACT_APP_LOGIN_ERROR_TIMEOUT));
|
}, Number(process.env.REACT_APP_LOGIN_ERROR_TIMEOUT));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(name == "full" && !validCaptcha.valid && validCaptcha.show){ // RUNS AND DISPLAYS CAPTCHA, IF ERROR OCCURED DURING LOGIN FOR FULL LOGIN ALONE
|
||||||
|
setMsgError("Please Verify Captcha");
|
||||||
|
setLoginLoading(false);
|
||||||
|
setTimeout(() => {
|
||||||
|
setMsgError("");
|
||||||
|
}, Number(process.env.REACT_APP_LOGIN_ERROR_TIMEOUT));
|
||||||
|
return;
|
||||||
|
}
|
||||||
userApi
|
userApi
|
||||||
.logInUser(postData)
|
.logInUser(postData)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@@ -120,6 +132,7 @@ export default function Login() {
|
|||||||
// setMsgError("Wrong, email/password");
|
// setMsgError("Wrong, email/password");
|
||||||
setLoginError(true);
|
setLoginError(true);
|
||||||
setLoginLoading(false);
|
setLoginLoading(false);
|
||||||
|
setValidCaptcha(prev => ({...prev, show:true})) // DISPLAYS CAPTCHA IF ERROR
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
localStorage.setItem("member_id", `${res.data.member_id}`);
|
localStorage.setItem("member_id", `${res.data.member_id}`);
|
||||||
@@ -135,6 +148,7 @@ export default function Login() {
|
|||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
setMsgError("Unable to login, try again");
|
setMsgError("Unable to login, try again");
|
||||||
setLoginLoading(false);
|
setLoginLoading(false);
|
||||||
|
setValidCaptcha(prev => ({...prev, show:true})) // DISPLAYS CAPTCHA IF ERROR
|
||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@@ -145,6 +159,14 @@ export default function Login() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function captchaChecker(value) { // FUNCTION TO VALIDATE CAPTCHA
|
||||||
|
if(value){
|
||||||
|
setValidCaptcha({show: true, valid:value})
|
||||||
|
}else{
|
||||||
|
setValidCaptcha({show: true, valid:''})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const googleLogin = useGoogleLogin({
|
const googleLogin = useGoogleLogin({
|
||||||
flow: "auth-code",
|
flow: "auth-code",
|
||||||
ux_mode: "redirect",
|
ux_mode: "redirect",
|
||||||
@@ -296,6 +318,17 @@ export default function Login() {
|
|||||||
forgotPassword
|
forgotPassword
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* hCaptha clone for the time being */}
|
||||||
|
{validCaptcha.show &&
|
||||||
|
<div className="mb-5 flex justify-center w-full">
|
||||||
|
<ReCAPTCHA
|
||||||
|
sitekey={process.env.REACT_APP_GOOGLE_RECAPTCHA_SITEKEY}
|
||||||
|
onChange={captchaChecker}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
{loginError && (
|
{loginError && (
|
||||||
<div className="relative p-4 text-[#912741] bg-[#fcd9e2] border-[#fbc6d3] mb-4 rounded-[0.475rem] text-md font-thin leading-[19.5px] text-[13px]">
|
<div className="relative p-4 text-[#912741] bg-[#fcd9e2] border-[#fbc6d3] mb-4 rounded-[0.475rem] text-md font-thin leading-[19.5px] text-[13px]">
|
||||||
Invalid username or password- Please{" "}
|
Invalid username or password- Please{" "}
|
||||||
@@ -320,7 +353,7 @@ export default function Login() {
|
|||||||
onClick={doLogin}
|
onClick={doLogin}
|
||||||
type="button"
|
type="button"
|
||||||
disabled={loginLoading}
|
disabled={loginLoading}
|
||||||
className={`btn-login rounded-[0.475rem] mb-6 text-xl text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center text-[15px]`}
|
className={`btn-login rounded-full mb-6 text-xl text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center text-[15px]`}
|
||||||
>
|
>
|
||||||
{loginLoading ? (
|
{loginLoading ? (
|
||||||
<div className="signup btn-loader"></div>
|
<div className="signup btn-loader"></div>
|
||||||
@@ -433,7 +466,7 @@ export default function Login() {
|
|||||||
onClick={doLogin}
|
onClick={doLogin}
|
||||||
disabled={loginLoading}
|
disabled={loginLoading}
|
||||||
type="button"
|
type="button"
|
||||||
className={`btn-login rounded-[0.475rem] text-xl text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center text-[15px]`}
|
className={`btn-login rounded-full text-xl text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center text-[15px]`}
|
||||||
>
|
>
|
||||||
{loginLoading ? (
|
{loginLoading ? (
|
||||||
<div className="signup btn-loader"></div>
|
<div className="signup btn-loader"></div>
|
||||||
|
|||||||
@@ -325,7 +325,7 @@ export default function SignUp() {
|
|||||||
disabled={countries.loading}
|
disabled={countries.loading}
|
||||||
type="button"
|
type="button"
|
||||||
onClick={handleSignUp}
|
onClick={handleSignUp}
|
||||||
className={`rounded-[0.475rem] mb-6 text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center h-[42px] py-[0.8875rem] px-[1.81rem] text-[14.95px] btn-login`}
|
className={`rounded-full mb-6 text-white flex justify-center bg-[#4687ba] hover:bg-[#009ef7] transition-all duration-300 items-center h-[42px] py-[0.8875rem] px-[1.81rem] text-[14.95px] btn-login`}
|
||||||
>
|
>
|
||||||
{signUpLoading ? (
|
{signUpLoading ? (
|
||||||
<div className="signup btn-loader"></div>
|
<div className="signup btn-loader"></div>
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ export default function FamilyManageTabs({
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [updatePage, setUpdatePage] = useState(false) // State to determine when to update the page
|
||||||
|
|
||||||
// State for family task data
|
// State for family task data
|
||||||
const [familyTask, setFamilyTask] = useState({ loading: false, data: [] });
|
const [familyTask, setFamilyTask] = useState({ loading: false, data: [] });
|
||||||
|
|
||||||
@@ -235,7 +237,7 @@ export default function FamilyManageTabs({
|
|||||||
|
|
||||||
// Invoke the manageFamily function when the component mounts
|
// Invoke the manageFamily function when the component mounts
|
||||||
manageFamily();
|
manageFamily();
|
||||||
}, []);
|
}, [updatePage]);
|
||||||
|
|
||||||
// Effect to manage family tasks
|
// Effect to manage family tasks
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -371,6 +373,7 @@ export default function FamilyManageTabs({
|
|||||||
setActiveTask={setActiveTask}
|
setActiveTask={setActiveTask}
|
||||||
activeTask={activeTask}
|
activeTask={activeTask}
|
||||||
familyDetailsData={details.familyDetails.data}
|
familyDetailsData={details.familyDetails.data}
|
||||||
|
setUpdatePage={setUpdatePage}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ const AssignTaskPopout = React.memo(
|
|||||||
familyTask,
|
familyTask,
|
||||||
activeTask,
|
activeTask,
|
||||||
setActiveTask,
|
setActiveTask,
|
||||||
|
setUpdatePage
|
||||||
}) => {
|
}) => {
|
||||||
const apiCall = new usersService();
|
const apiCall = new usersService();
|
||||||
|
|
||||||
@@ -143,6 +144,7 @@ const AssignTaskPopout = React.memo(
|
|||||||
status: true,
|
status: true,
|
||||||
message: "action successful",
|
message: "action successful",
|
||||||
});
|
});
|
||||||
|
setUpdatePage(prev => !prev) // Updates family task page by calling the useeffect hook
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setRequestStatus({ loading: false, status: false, message: "" });
|
setRequestStatus({ loading: false, status: false, message: "" });
|
||||||
action(); // FUNCTION THAT CLOSES THE MODAL BOX
|
action(); // FUNCTION THAT CLOSES THE MODAL BOX
|
||||||
|
|||||||
@@ -225,7 +225,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full md:w-[23%] h-full ">
|
<div className="w-full md:w-[23%] h-full flex flex-col">
|
||||||
<div className="mx-auto bg-[#f1f8ff] dark:bg-[#C2C8D3] p-4 rounded-md md:min-h-[498px] flex flex-col justify-between">
|
<div className="mx-auto bg-[#f1f8ff] dark:bg-[#C2C8D3] p-4 rounded-md md:min-h-[498px] flex flex-col justify-between">
|
||||||
<div className="w-full flex flex-col justify-center py-4 gap-2">
|
<div className="w-full flex flex-col justify-center py-4 gap-2">
|
||||||
<p className="w-full text-slate-900 tracking-wide my-1">
|
<p className="w-full text-slate-900 tracking-wide my-1">
|
||||||
@@ -270,7 +270,7 @@ const MarketPopUp = ({ details, onClose, situation, marketInt }) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
className="self-end w-[150px] mt-2 h-[52px] rounded-md text-base bg-transparent border border-red-500 text-red-500 mx-auto"
|
className="self-center w-[150px] mt-2 h-[48px] rounded-full text-base bg-transparent border border-red-500 text-red-500 mx-auto"
|
||||||
name="cancel"
|
name="cancel"
|
||||||
onClick={onClose}
|
onClick={onClose}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -118,7 +118,11 @@ function PastDueJobAction({jobDetails}) {
|
|||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div className="flex justify-center items-center">
|
<div className="flex justify-center items-center">
|
||||||
<button type="button" onClick={popUpHandler} className="w-[180px] h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white">
|
<button
|
||||||
|
type="button"
|
||||||
|
onClick={popUpHandler}
|
||||||
|
className="px-4 h-[48px] flex justify-center items-center btn-gradient text-base rounded-full text-white"
|
||||||
|
>
|
||||||
Cancel or Extend Timeline
|
Cancel or Extend Timeline
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -230,8 +234,12 @@ function PastDueJobAction({jobDetails}) {
|
|||||||
|
|
||||||
{/* cancel btn */}
|
{/* cancel btn */}
|
||||||
<div className='flex justify-end items-center'>
|
<div className='flex justify-end items-center'>
|
||||||
<button onClick={popUpHandler} type="button" className="w-20 h-11 flex justify-center items-center border-gradient text-base rounded-full text-white">
|
<button onClick={popUpHandler} type="button"
|
||||||
<span className='text-gradient'>Cancel</span>
|
// className="w-20 h-11 flex justify-center items-center border-gradient text-base rounded-full text-white"
|
||||||
|
className='w-[150px] mt-2 h-[48px] rounded-full text-base bg-transparent border border-red-500 text-red-500'
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
{/* <span className='text-gradient'>Cancel</span> */}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ export default function PersonalInfoTab({
|
|||||||
coverImgInput,
|
coverImgInput,
|
||||||
browseCoverImg,
|
browseCoverImg,
|
||||||
coverImgChangHandler,
|
coverImgChangHandler,
|
||||||
|
uploadStatus
|
||||||
}) {
|
}) {
|
||||||
let { userDetails } = useSelector((state) => state.userDetails);
|
let { userDetails } = useSelector((state) => state.userDetails);
|
||||||
|
|
||||||
@@ -361,7 +362,7 @@ export default function PersonalInfoTab({
|
|||||||
{/* inputs ends here */}
|
{/* inputs ends here */}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{process.env.REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE != 0 &&
|
{/* {process.env.REACT_APP_SHOW_UPLOAD_PROFILE_PICTURE != 0 && */}
|
||||||
<div className="w-[232px] mb-10">
|
<div className="w-[232px] mb-10">
|
||||||
<div className="update-profile w-full mb-9">
|
<div className="update-profile w-full mb-9">
|
||||||
<h1 className="text-xl tracking-wide font-bold text-dark-gray dark:text-white flex items-center mb-2">
|
<h1 className="text-xl tracking-wide font-bold text-dark-gray dark:text-white flex items-center mb-2">
|
||||||
@@ -417,9 +418,11 @@ export default function PersonalInfoTab({
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{uploadStatus.message && !uploadStatus.loading && <p className={`text-center ${uploadStatus.status ? 'text-green-500':'text-red-500'}`}>{uploadStatus.message}</p>}
|
||||||
|
{uploadStatus.loading && <p className="text-center">{uploadStatus.message}</p>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
{/* } */}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="content-footer w-full">
|
<div className="content-footer w-full">
|
||||||
|
|||||||
@@ -24,10 +24,12 @@ import {
|
|||||||
import RecipientAccountTab from "./Tabs/RecipientAccountTab";
|
import RecipientAccountTab from "./Tabs/RecipientAccountTab";
|
||||||
|
|
||||||
export default function Settings({ faq }) {
|
export default function Settings({ faq }) {
|
||||||
|
const apiCall = new usersService();
|
||||||
const { userDetails } = useSelector((state) => state?.userDetails);
|
const { userDetails } = useSelector((state) => state?.userDetails);
|
||||||
const [profileImg, setProfileImg] = useState(
|
const [profileImg, setProfileImg] = useState(
|
||||||
userDetails?.profile_pic_url ? userDetails.profile_pic_url : profile
|
userDetails?.profile_pic_url ? userDetails.profile_pic_url : profile
|
||||||
);
|
);
|
||||||
|
let [uploadStatus, setUploadStatus] = useState({loading: false, status: false, message:''}) // HOLDS STATE FOR UPLOAD PROFILE PICTURE STATUS
|
||||||
const [coverImg, setCoverImg] = useState(cover);
|
const [coverImg, setCoverImg] = useState(cover);
|
||||||
const [reloadCardList, setReloadCardList] = useState(false); // STATE TO DETERMINE WHEN CARD LIST RELOADS. EG: WHEN USER DELETES A CARD
|
const [reloadCardList, setReloadCardList] = useState(false); // STATE TO DETERMINE WHEN CARD LIST RELOADS. EG: WHEN USER DELETES A CARD
|
||||||
|
|
||||||
@@ -36,12 +38,68 @@ export default function Settings({ faq }) {
|
|||||||
const browseProfileImg = () => {
|
const browseProfileImg = () => {
|
||||||
profileImgInput.current.click();
|
profileImgInput.current.click();
|
||||||
};
|
};
|
||||||
|
|
||||||
const profileImgChangHandler = (e) => {
|
const profileImgChangHandler = (e) => {
|
||||||
|
// if (e.target.value !== "") {
|
||||||
|
// const imgReader = new FileReader();
|
||||||
|
// imgReader.onload = (event) => {
|
||||||
|
// setProfileImg(event.target.result);
|
||||||
|
// };
|
||||||
|
// imgReader.readAsDataURL(e.target.files[0]);
|
||||||
|
// }
|
||||||
|
setUploadStatus({loading: false, status: false, message:''})
|
||||||
|
let acceptedFormat = ["jpeg", "jpg", "png", "bmp", "gif"] // ARRAY OF SUPPORTED FORMATS
|
||||||
|
let uploadedFile = e.target.files[0] //UPLOADED FILE
|
||||||
|
|
||||||
|
if(!acceptedFormat.includes(uploadedFile?.type?.split("/")[1]?.toLowerCase())){ //CHECKING FOR CORRECT UPLOAD FORMAT
|
||||||
|
let msg = 'Please select '
|
||||||
|
for(let i=0; i<=acceptedFormat.length-1; i++){
|
||||||
|
if(i == acceptedFormat.length-1){
|
||||||
|
msg+=`or ${acceptedFormat[i]}`
|
||||||
|
}else{
|
||||||
|
msg+=`${acceptedFormat[i]}, `
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setUploadStatus({loading: false, status: false, message:msg})
|
||||||
|
return setTimeout(()=>{
|
||||||
|
profileImgInput.current.value = '' // clear the input
|
||||||
|
setUploadStatus({loading: false, status: false, message:''})
|
||||||
|
},5000)
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uploadedFile.size > 5*1048576){ // CHECKING FOR CORRECT FILE SIZE
|
||||||
|
setUploadStatus({loading: false, status: false, message:'File must not exceed 5MB'})
|
||||||
|
return setTimeout(()=>{
|
||||||
|
profileImgInput.current.value = '' // clear the input
|
||||||
|
setUploadStatus({loading: false, status: false, message:''})
|
||||||
|
},5000)
|
||||||
|
}
|
||||||
|
|
||||||
if (e.target.value !== "") {
|
if (e.target.value !== "") {
|
||||||
const imgReader = new FileReader();
|
const imgReader = new FileReader();
|
||||||
imgReader.onload = (event) => {
|
imgReader.onload = (event) => {
|
||||||
setProfileImg(event.target.result);
|
let reqData = { // PAYLOAD FOR API CALL
|
||||||
|
file_name: uploadedFile?.name,
|
||||||
|
file_size: uploadedFile?.size,
|
||||||
|
file_type: uploadedFile?.type?.split("/")[0]?.toLowerCase(),
|
||||||
|
file_data: event?.target?.result,
|
||||||
|
msg_type: 'FILE',
|
||||||
|
action: 'WRENCHBOARD_PICTURE_PROFILE',
|
||||||
|
// action: 11307
|
||||||
|
}
|
||||||
|
setUploadStatus({loading: true, status: false, message:'Loading...'})
|
||||||
|
apiCall.sendFiles(reqData).then(res=>{
|
||||||
|
if(res.status != 200 || res.data.internal_return < 0){
|
||||||
|
return setUploadStatus({loading: false, status: false, message: 'Something went wrong, try again'})
|
||||||
|
}
|
||||||
|
setUploadStatus({loading: false, status: true, message: 'Uploaded successfully'})
|
||||||
|
setProfileImg(event.target.result);
|
||||||
|
}).catch(error=>{
|
||||||
|
setUploadStatus({loading: false, status: false, message: 'Network error, try again'})
|
||||||
|
}).finally(()=>{
|
||||||
|
setTimeout(()=>{
|
||||||
|
setUploadStatus({loading: false, status: false, message: ''})
|
||||||
|
},5000)
|
||||||
|
})
|
||||||
};
|
};
|
||||||
imgReader.readAsDataURL(e.target.files[0]);
|
imgReader.readAsDataURL(e.target.files[0]);
|
||||||
}
|
}
|
||||||
@@ -61,7 +119,6 @@ export default function Settings({ faq }) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const apiCall = useMemo(() => new usersService(), []);
|
|
||||||
// Tabs Handling
|
// Tabs Handling
|
||||||
const tabs = [
|
const tabs = [
|
||||||
{
|
{
|
||||||
@@ -113,7 +170,7 @@ export default function Settings({ faq }) {
|
|||||||
iconName: "page-right",
|
iconName: "page-right",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 8,
|
id: 9,
|
||||||
name: "terms",
|
name: "terms",
|
||||||
title: "Terms and Conditions",
|
title: "Terms and Conditions",
|
||||||
iconName: "page-right",
|
iconName: "page-right",
|
||||||
@@ -217,6 +274,7 @@ export default function Settings({ faq }) {
|
|||||||
coverImgChangHandler={coverImgChangHandler}
|
coverImgChangHandler={coverImgChangHandler}
|
||||||
browseCoverImg={browseCoverImg}
|
browseCoverImg={browseCoverImg}
|
||||||
coverImgInput={coverImgInput}
|
coverImgInput={coverImgInput}
|
||||||
|
uploadStatus={uploadStatus}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -351,7 +351,7 @@ const EditJobPopOut = ({
|
|||||||
className="w-[120px] h-[40px] flex justify-center items-center btn-gradient text-base rounded-full text-white"
|
className="w-[120px] h-[40px] flex justify-center items-center btn-gradient text-base rounded-full text-white"
|
||||||
// className='w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white'
|
// className='w-20 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white'
|
||||||
>
|
>
|
||||||
Edit Job
|
Save
|
||||||
</button>
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user