}
+
+
+
+
+ >
+ ) : (
+ <>
+
+
+ Email: {currentUser.email || 'Incomplete'}
+
+
+
+
+ Phone: {currentUser.phone || 'Incomplete'}
+
+
+
+
+ Bank Number: {currentUser.bankNumber || 'Incomplete'}
+
+
+
+
+ Bank Name: {currentUser.bankName || 'Incomplete'}
+
+
+
+
+ Type: {currentUser.type || 'Incomplete'}
+
+
+
+
+ Is Active: {currentUser.isActive !== null ? currentUser.isActive.toString() : 'Incomplete'}
+
+
+ >
+ )}
+
+ );
+
+ const ThirdRow = () => (
+
+
+ {isEditing ? (
+ <>
+
+
+ >
+ ) : (
+
+ )}
+
+
+ );
+
+ if (isLoading)
+ return ;
+
+ console.log('rendering return');
+ return (
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default ProfileMainCard;
diff --git a/web/src/contexts/UserContext.jsx b/web/src/contexts/UserContext.jsx
index 71d4581..7f0cb0e 100644
--- a/web/src/contexts/UserContext.jsx
+++ b/web/src/contexts/UserContext.jsx
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import axios from "axios";
import storeService from '../services/store.jsx';
import cartService from '../services/cart.jsx';
-import { setRefreshToken as setRefreshTokenInApi } from '../services/api.jsx';
+// import { setRefreshToken as setRefreshTokenInApi } from '../services/api.jsx';
import {jwtDecode} from 'jwt-decode';
const host = import.meta.env.VITE_API_URL
@@ -25,14 +25,16 @@ export const UserProvider = ({ children }) => {
result.cart = response.data.id ? response.data.id : null;
}
} catch (error) {
- if (error.status === 404) {
+ console.log('getExtraUserDetails encountered error: ', error)
+ if (error.status === '404') {
+ console.log('User does not have a store or cart')
if (user.type === 'Farmer') {
result.store = null;
} else {
result.cart = null;
}
}
- }
+ }console.log('returning result: ', result)
return result;
};
@@ -52,6 +54,7 @@ export const UserProvider = ({ children }) => {
if (storedUser) {
const parsedUser = JSON.parse(storedUser);
setUser(parsedUser);
+ console.log('parsed user from local storage: ', parsedUser)
if (isTokenExpired(parsedUser.accessToken)) {
console.log('Token is expired');
@@ -81,9 +84,16 @@ export const UserProvider = ({ children }) => {
setUser(fullDetails);
console.log('setting user to context after login: ', fullDetails);
localStorage.setItem('user', JSON.stringify(fullDetails));
- setRefreshTokenInApi(refreshAccessToken); // Set the refreshAccessToken function in the api module
+ // setRefreshTokenInApi(refreshAccessToken); // Set the refreshAccessToken function in the api module
};
+ const updateUserDetails = async () => {
+ const extraDetails = await getExtraUserDetails(user);
+ const fullDetails = { ...user, ...extraDetails };
+ console.log('updating user in global context to: ', fullDetails);
+ setUser(fullDetails)
+ }
+
const logout = () => {
setUser(null);
localStorage.removeItem('user');
@@ -107,13 +117,15 @@ export const UserProvider = ({ children }) => {
setUser(updatedUser);
localStorage.setItem('user', JSON.stringify(updatedUser));
console.log('Token refreshed successfully');
+ return response.data;
} catch (error) {
console.error('Failed to refresh token', error);
+ throw error;
}
};
return (
-
+
{children}
);
diff --git a/web/src/pages/CreateStorePage.jsx b/web/src/pages/CreateStorePage.jsx
new file mode 100644
index 0000000..0124c08
--- /dev/null
+++ b/web/src/pages/CreateStorePage.jsx
@@ -0,0 +1,55 @@
+import React, {useContext, useEffect, useState} from "react";
+import UserContext from "../contexts/UserContext.jsx";
+import {useUserCheck} from "../hooks/useUserCheck.jsx";
+import CircularProgress from "@mui/material/CircularProgress";
+import CreateStoreForm from "../components/CreateStoreForm.jsx";
+import accountService from "../services/account.jsx";
+import {toast} from "react-toastify";
+import {useNavigate} from "react-router-dom";
+
+const CreateStorePage = () => {
+ const { user, loading } = useContext(UserContext);
+ const [isLoading, setIsLoading] = useState(false);
+ const [fullUser, setFullUser] = useState({})
+ const navigate = useNavigate();
+
+ useUserCheck();
+
+ useEffect(() => {
+ console.log('rendering CreateStorePage, validating user details')
+ const validateCompleteUserDetails = async () => {
+ const response = await accountService.getById(user.id);
+ const userDetails = response.data;
+ console.log('retrieved user details: ', userDetails)
+ if (userDetails.id && userDetails.email && userDetails.name && userDetails.phone && userDetails.bankNumber && userDetails.bankName && userDetails.image){
+ setFullUser(userDetails)
+ return true
+ }
+ toast.info('Complete account details first to create store')
+ navigate('/profile')
+ return false;
+ }
+
+ const fetchData = async () => {
+ setIsLoading(true);
+ console.log('valid for store creation: ', await validateCompleteUserDetails());
+ setIsLoading(false)
+ }
+
+ fetchData();
+ }, []);
+
+ if (loading || isLoading) {
+ return ;
+ }
+
+ if (!user) {
+ return null;
+ }
+
+ return (
+
+ );
+}
+
+export default CreateStorePage;
\ No newline at end of file
diff --git a/web/src/pages/ProfilePage.jsx b/web/src/pages/ProfilePage.jsx
index 2158661..380f723 100644
--- a/web/src/pages/ProfilePage.jsx
+++ b/web/src/pages/ProfilePage.jsx
@@ -16,6 +16,7 @@ const ProfilePage = () => {
useUserCheck();
useEffect(() => {
+ console.log('profile page, useEffect in run')
const fetchUserDetails = async () => {
setIsLoading(true);
try {
@@ -45,6 +46,7 @@ const ProfilePage = () => {
console.log('profile page, currentUser supposedly fetched from context: ', currentUser)
}
+ console.log('ProfilePage, rendering return')
return (
Profile Page
diff --git a/web/src/pages/StorePage.jsx b/web/src/pages/StorePage.jsx
index 3c31bd7..2ec82fe 100644
--- a/web/src/pages/StorePage.jsx
+++ b/web/src/pages/StorePage.jsx
@@ -1,8 +1,8 @@
import React, { useContext, useEffect, useState } from 'react';
import UserContext from "../contexts/UserContext.jsx";
import { useNavigate } from 'react-router-dom';
-import storeService from '../services/store'; // Service for store-related API calls
-import produceService from '../services/produce'; // Service for produce-related API calls
+import storeService from '../services/store';
+import produceService from '../services/produce';
import CircularProgress from '@mui/material/CircularProgress';
import ProduceCard from "../components/ProduceCard.jsx";
import { Grid, Container, Button, Box, Typography } from '@mui/material';
@@ -31,7 +31,6 @@ const StorePage = () => {
setProduceList(produceListData);
} else {
console.log('User does not have a store')
- // Handle the case when user.store is null
}
} catch (error) {
console.error("Error fetching store or produce:", error);
@@ -58,10 +57,11 @@ const StorePage = () => {
{store ? (
<>
-
- {user.name}'s Store
-
+
+
+
+ {user.name}'s Store