Compare commits

...

10 Commits

8 changed files with 86 additions and 20 deletions
@@ -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={`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={`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>
+2 -2
View File
@@ -320,7 +320,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 +433,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>
+1 -1
View File
@@ -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
@@ -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">
+62 -4
View File
@@ -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>
)} )}
+1 -1
View File
@@ -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>