Compare commits

...

9 Commits

Author SHA1 Message Date
Chukwumdiebube e6ba42afcd env variables created 2023-02-04 06:28:15 +01:00
tokslaw 63ef5d6699 Merge branch 'theme_color_change' of MyFit/users-myfit into master 2023-02-03 15:00:43 +00:00
victorAnumudu 7840e7b13d theme color changed 2023-02-03 15:22:03 +01:00
jenkins 41c56445fd Calendar page updated 2023-02-02 22:21:42 -05:00
tokslaw fcd6afbf1b Merge branch 'unwanted-popups' of MyFit/users-myfit into master 2023-02-02 23:01:28 +00:00
tokslaw 0138119953 Merge branch 'task-7-implement-reminder-fixed' of MyFit/users-myfit into master 2023-02-02 18:29:14 +00:00
tokslaw 39995b637b Merge branch 'task-3-reset-password' of MyFit/users-myfit into master 2023-02-02 18:07:31 +00:00
Chukwumdiebube b45be9fafd All unwanted pop-ups removed 2023-02-02 10:42:03 +01:00
ChineseChikki 590293d561 reset password implemented 2023-01-31 22:59:13 +01:00
16 changed files with 106 additions and 1073 deletions
+4
View File
@@ -9,5 +9,9 @@ REACT_APP_APPSITE=" https://myfitapp.mermsemr.com"
REACT_APP_AUX_ENDPOINT = "https://devapi.mermsemr.com/en/desktop/api/v2/myfit" REACT_APP_AUX_ENDPOINT = "https://devapi.mermsemr.com/en/desktop/api/v2/myfit"
REACT_APP_USERS_ENDPOINT = "https://devapi.mermsemr.com/en/desktop/api/v2/myfituser" REACT_APP_USERS_ENDPOINT = "https://devapi.mermsemr.com/en/desktop/api/v2/myfituser"
# REACT_APP_PASSWORD_ENDPOINT = "https://devapi.mermsemr.com/en/desktop/api/v2/myfituser/resetpass"
REACT_APP_SESSION_EXPIRE_MINUTES = 5 REACT_APP_SESSION_EXPIRE_MINUTES = 5
REACT_APP_TRACKING = "Tracking"
REACT_APP_RESOURCES = "Resources"
+24
View File
@@ -3348,6 +3348,11 @@
"@xtuc/long": "4.2.2" "@xtuc/long": "4.2.2"
} }
}, },
"@wojtekmaj/date-utils": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@wojtekmaj/date-utils/-/date-utils-1.1.2.tgz",
"integrity": "sha512-06PQad/6pyYDjInBW2ih4Oy30EAg0mtXTCz+b/fGwzN2JB2X2Zsa4QtHl4I8M+IaCKN8bwj61OW3XAWxh+D9hA=="
},
"@xtuc/ieee754": { "@xtuc/ieee754": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@@ -6490,6 +6495,14 @@
"get-intrinsic": "^1.1.1" "get-intrinsic": "^1.1.1"
} }
}, },
"get-user-locale": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/get-user-locale/-/get-user-locale-1.5.1.tgz",
"integrity": "sha512-WiNpoFRcHn1qxP9VabQljzGwkAQDrcpqUtaP0rNBEkFxJdh4f3tik6MfZsMYZc+UgQJdGCxWEjL9wnCUlRQXag==",
"requires": {
"lodash.memoize": "^4.1.1"
}
},
"glob": { "glob": {
"version": "7.2.3", "version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -11049,6 +11062,17 @@
} }
} }
}, },
"react-calendar": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/react-calendar/-/react-calendar-4.0.0.tgz",
"integrity": "sha512-y9Q5Oo3Mq869KExbOCP3aJ3hEnRZKZ0TqUa9QU1wJGgDZFrW1qTaWp5v52oZpmxTTrpAMTUcUGaC0QJcO1f8Nw==",
"requires": {
"@wojtekmaj/date-utils": "^1.0.2",
"clsx": "^1.2.1",
"get-user-locale": "^1.2.0",
"prop-types": "^15.6.0"
}
},
"react-chartjs-2": { "react-chartjs-2": {
"version": "4.3.1", "version": "4.3.1",
"resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz", "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-4.3.1.tgz",
+1
View File
@@ -14,6 +14,7 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"faker": "^6.6.6", "faker": "^6.6.6",
"react": "^18.0.0", "react": "^18.0.0",
"react-calendar": "^4.0.0",
"react-chartjs-2": "^4.1.0", "react-chartjs-2": "^4.1.0",
"react-countup": "^6.2.0", "react-countup": "^6.2.0",
"react-dom": "^18.0.0", "react-dom": "^18.0.0",
+2 -2
View File
@@ -1,4 +1,4 @@
import Toaster from "./components/Helpers/Toaster"; // import Toaster from "./components/Helpers/Toaster";
import Routers from "./Routers"; import Routers from "./Routers";
import Default from "./components/Partials/Default"; import Default from "./components/Partials/Default";
@@ -7,7 +7,7 @@ function App() {
<Default> <Default>
<> <>
<Routers /> <Routers />
<Toaster /> {/* <Toaster /> */}
</> </>
</Default> </Default>
); );
@@ -1,6 +1,6 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
import activeAidsBanner from "../../assets/images/active-aids-banner.jpg"; import activeAidsBanner from "../../assets/images/active-aids-banner.jpg";
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";
@@ -10,10 +10,8 @@ export default function OverviewSection({ className }) {
const favoriteHandler = () => { const favoriteHandler = () => {
if (!addFavorite) { if (!addFavorite) {
setValue(true); setValue(true);
toast.success("Added to Favorite List");
} else { } else {
setValue(false); setValue(false);
toast.warn("Remove to Favorite List");
} }
}; };
return ( return (
@@ -1,10 +1,40 @@
import React from "react"; import React, { useState, useEffect } from "react";
import { Link } from 'react-router-dom'; import { Link, useNavigate } from 'react-router-dom';
import titleShape from "../../../assets/images/shape/title-shape-two.svg"; import titleShape from "../../../assets/images/shape/title-shape-two.svg";
import InputCom from "../../Helpers/Inputs/InputCom"; import InputCom from "../../Helpers/Inputs/InputCom";
import AuthLayout from "../AuthLayout"; import AuthLayout from "../AuthLayout";
export default function ForgotPassword() { export default function ForgotPassword() {
const navigate = useNavigate();
const [validation, setValidation] = useState("")
const [buttonDisabled, setButtonDisabled] = useState(true)
// email
const [email, setEmail] = useState("");
const handleEmail = (e) => {
setEmail(e.target.value);
};
function validationChecker(email) {
const emailCheck = /^[^0-9][a-zA-Z0-9._%+-]+@[a-zA-Z]+(\.[a-zA-Z]+)+$/;
if (email === "") {
setValidation("email is required");
} else if (!email.match(emailCheck)) {
setValidation('Please input a valid email address');
} else {
setValidation("");
setButtonDisabled(false)
}
}
useEffect(() => {
validationChecker(email)
}, [email])
return ( return (
<> <>
<AuthLayout <AuthLayout
@@ -28,19 +58,24 @@ export default function ForgotPassword() {
name="email" name="email"
type="email" type="email"
iconName="message" iconName="message"
inputHandler={handleEmail}
value={email}
/> />
{validation && <p className="my-5 font-bold text-red-500">{validation}</p>}
</div> </div>
<div className="signin-area mb-3.5"> <div className="signin-area mb-3.5">
<a
href="/verify-you" <button
className="w-full rounded-[50px] mb-5 h-[58px] text-xl text-white font-bold flex justify-center bg-purple items-center" className="w-full rounded-[50px] mb-5 h-[58px] text-xl text-white font-bold flex justify-center bg-purple items-center"
disabled={buttonDisabled}
onClick={() => navigate("/verify-you")}
> >
Send Code Send Code
</a> </button>
<Link to="/" <Link to="/"
className=" my-40 font-bold flex justify-center text-red-500 items-center" className="my-40 font-bold flex justify-center text-red-500 items-center"
> >
Back to Home Back to Home
</Link> </Link>
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -1,6 +1,6 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
import localImgLoad from "../../lib/localImgLoad"; import localImgLoad from "../../lib/localImgLoad";
import CountDown from "../Helpers/CountDown"; import CountDown from "../Helpers/CountDown";
import Icons from "../Helpers/Icons"; import Icons from "../Helpers/Icons";
@@ -11,10 +11,8 @@ export default function ProductCardStyleOne({ datas, hidden = false }) {
const favoriteHandler = () => { const favoriteHandler = () => {
if (!addFavorite) { if (!addFavorite) {
setValue(true); setValue(true);
toast.success("Added to Favorite List");
} else { } else {
setValue(false); setValue(false);
toast.warn("Remove to Favorite List");
} }
}; };
return ( return (
+1 -3
View File
@@ -1,6 +1,6 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
import localImgLoad from "../../lib/localImgLoad"; import localImgLoad from "../../lib/localImgLoad";
import Icons from "../Helpers/Icons"; import Icons from "../Helpers/Icons";
@@ -14,10 +14,8 @@ export default function ProductCardStyleTwo({
const favoriteHandler = () => { const favoriteHandler = () => {
if (!addFavorite) { if (!addFavorite) {
setValue(true); setValue(true);
toast.success("Added to Favorite List");
} else { } else {
setValue(false); setValue(false);
toast.warn("Remove to Favorite List");
} }
}; };
return ( return (
+1 -3
View File
@@ -1,6 +1,6 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
import heroBg from "../../assets/images/hero-bg.svg"; import heroBg from "../../assets/images/hero-bg.svg";
import heroUser from "../../assets/images/hero-user.png"; import heroUser from "../../assets/images/hero-user.png";
import slider1 from "../../assets/images/slider-1.jpg"; import slider1 from "../../assets/images/slider-1.jpg";
@@ -21,10 +21,8 @@ export default function Hero({ className }) {
const favoriteHandler = () => { const favoriteHandler = () => {
if (!addFavorite) { if (!addFavorite) {
setValue(true); setValue(true);
toast.success("Added to Favorite List");
} else { } else {
setValue(false); setValue(false);
toast.warn("Remove to Favorite List");
} }
}; };
return ( return (
+4 -4
View File
@@ -1,7 +1,7 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
import useToggle from "../../hooks/useToggle"; import useToggle from "../../hooks/useToggle";
import { drawerToggle } from "../../store/drawer"; import { drawerToggle } from "../../store/drawer";
import ModalCom from "../Helpers/ModalCom"; import ModalCom from "../Helpers/ModalCom";
@@ -26,9 +26,9 @@ export default function Layout({ children }) {
localStorage.removeItem('member_uuid'); localStorage.removeItem('member_uuid');
localStorage.removeItem('session_token'); localStorage.removeItem('session_token');
localStorage.removeItem('status'); localStorage.removeItem('status');
toast.success("Come Back Soon", { // toast.success("Come Back Soon", {
icon: `🙂`, // icon: `🙂`,
}); // });
navigate("/login", { replace: true }); navigate("/login", { replace: true });
}; };
+2 -3
View File
@@ -111,8 +111,7 @@ export default function MobileSidebar({ sidebar, action, logoutModalHandler }) {
<Icons name="market" /> <Icons name="market" />
</span> </span>
<span className="item-content group-hover:text-purple text-[18px] transition-all duration-300 ease-in-out text-lighter-gray relative font-medium active flex-1"> <span className="item-content group-hover:text-purple text-[18px] transition-all duration-300 ease-in-out text-lighter-gray relative font-medium active flex-1">
Tracking {process.env.REACT_APP_TRACKING}
</span> </span>
</NavLink> </NavLink>
</li> </li>
@@ -138,7 +137,7 @@ export default function MobileSidebar({ sidebar, action, logoutModalHandler }) {
<Icons name="star" /> <Icons name="star" />
</span> </span>
<span className="item-content group-hover:text-purple text-[18px] transition-all duration-300 ease-in-out text-lighter-gray relative font-medium active flex-1"> <span className="item-content group-hover:text-purple text-[18px] transition-all duration-300 ease-in-out text-lighter-gray relative font-medium active flex-1">
Resources {process.env.REACT_APP_RESOURCES}
</span> </span>
</NavLink> </NavLink>
</li> </li>
+2 -2
View File
@@ -168,7 +168,7 @@ export default function Sidebar({ sidebar, action, logoutModalHandler }) {
sidebar ? "active flex-1" : "w-0" sidebar ? "active flex-1" : "w-0"
}`} }`}
> >
Tracking {process.env.REACT_APP_TRACKING}
</span> </span>
</NavLink> </NavLink>
</li> </li>
@@ -208,7 +208,7 @@ export default function Sidebar({ sidebar, action, logoutModalHandler }) {
sidebar ? "active flex-1" : "w-0" sidebar ? "active flex-1" : "w-0"
}`} }`}
> >
Resources {process.env.REACT_APP_RESOURCES}
</span> </span>
</NavLink> </NavLink>
</li> </li>
+1 -4
View File
@@ -1,6 +1,6 @@
import React, {useEffect} from "react"; import React, {useEffect} from "react";
import { Navigate, Outlet, useNavigate } from "react-router-dom"; import { Navigate, Outlet, useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; // import { toast } from "react-toastify";
const AuthRoute = ({ redirectPath = "/login", children }) => { const AuthRoute = ({ redirectPath = "/login", children }) => {
const isLogin = localStorage.getItem("email"); const isLogin = localStorage.getItem("email");
@@ -19,9 +19,6 @@ const AuthRoute = ({ redirectPath = "/login", children }) => {
useEffect(()=>{ useEffect(()=>{
setTimeout(()=>{ setTimeout(()=>{
expireSession() expireSession()
toast.success("Opps, session has expired", {
icon: `🙂`,
});
}, 300000) //expires user login session after 5 minutes }, 300000) //expires user login session after 5 minutes
},[]) },[])
+6 -3
View File
@@ -14,6 +14,7 @@ class usersService {
return this.postAuxEnd("/login", reqData); return this.postAuxEnd("/login", reqData);
} }
getUserReminders(){ getUserReminders(){
return this.getAuxEnd("/reminders", null); return this.getAuxEnd("/reminders", null);
} }
@@ -54,14 +55,16 @@ class usersService {
}); });
} }
postAuxEnd(uri, reqData) { postAuxEnd(uri, reqData) {
const endPoint = process.env.REACT_APP_USERS_ENDPOINT + uri; const endPoint = process.env.REACT_APP_USERS_ENDPOINT + uri;
const session_token = localStorage.getItem("session_token"); const token = '..your token..'
let axiosConfig = { let axiosConfig = {
headers: { headers: {
'Accept': 'application/json', 'Accept': 'application/json',
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json;charset=UTF-8', 'Content-Type': 'application/json;charset=UTF-8',
'Authorization': `Basic ${session_token}`, 'Authorization': `Basic ${token}`,
} }
}; };
//Access-Control-Allow-Origin //Access-Control-Allow-Origin
@@ -71,7 +74,7 @@ class usersService {
}; };
// Axios.defaults.headers.post['Content-Type'] ='application/json;charset=utf-8'; // Axios.defaults.headers.post['Content-Type'] ='application/json;charset=utf-8';
// Axios.defaults.headers.post['Access-Control-Allow-Origin'] = '*'; //,axiosConfig // Axios.defaults.headers.post['Access-Control-Allow-Origin'] = '*'; //,axiosConfig
return Axios.post(endPoint, reqData,axiosConfig) return Axios.post(endPoint, reqData)
.then((response) => { .then((response) => {
console.log(response); console.log(response);
// res = response; // res = response;
+1 -1
View File
@@ -5,7 +5,7 @@ module.exports = {
extend: { extend: {
colors: { colors: {
pink: "#F539F8", pink: "#F539F8",
purple: "#5356FB", purple: "#1a3544",
"light-gray": "#E5E5E5", "light-gray": "#E5E5E5",
"thin-light-gray": "#858D98", "thin-light-gray": "#858D98",
"dark-gray": "#374557", "dark-gray": "#374557",