Skip to content

Commit b33b497

Browse files
Merge branch 'master' into PS-90
2 parents ceeefc9 + fca8f16 commit b33b497

10 files changed

Lines changed: 84 additions & 43 deletions

File tree

‎src/App.js‎

Lines changed: 51 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,41 @@
1-
import React from 'react';
1+
import React, { useEffect, useState } from 'react';
22
import { BrowserRouter } from 'react-router-dom';
33
import { Navigation } from './components/shared';
44
import { Footer } from './components/mainPage/footer/Footer';
55
import AccountForm from './components/accountForm/accountForm.jsx';
66
import Views from './Views';
7-
import { AppProvider } from './appContext';
7+
import { ApiProvider } from './contexts/apiContext';
8+
import ApiQuery from './components/shared/api/ApiQuery';
9+
import LoadingSpinner from './components/shared/loadingSpinner/LoadingSpinner';
10+
import { UserProvider } from './contexts/userContext';
811
import { checkIfLoggedIn } from './utils/checkLoggedIn';
912
import { LS_TOKEN, LS_USER_DATA } from './constants/localStorage';
1013

1114
function App() {
12-
const [isLoggedIn, setIsLoggedIn] = React.useState(false);
13-
const [modalShow, setModalShow] = React.useState(false);
14-
const [isNewUser, setIsNewUser] = React.useState(false);
15+
const [isLoggedIn, setIsLoggedIn] = useState(false);
16+
const [modalShow, setModalShow] = useState(false);
17+
const [isNewUser, setIsNewUser] = useState(false);
1518
const keysToRemove = [LS_TOKEN, LS_USER_DATA];
1619

20+
const [isLoading, setIsLoading] = useState(true);
21+
const [pageResource, setPageResource] = useState({
22+
mealPlans: [],
23+
recipes: [],
24+
});
25+
26+
const fetchData = async () => {
27+
try {
28+
const { data } = await ApiQuery.get('api/pageResource');
29+
setPageResource(data);
30+
} finally {
31+
setIsLoading(false);
32+
}
33+
};
34+
35+
useEffect(() => {
36+
fetchData();
37+
}, []);
38+
1739
const onSignInHandler = (e) => {
1840
e.preventDefault();
1941
setIsNewUser(false);
@@ -45,24 +67,30 @@ function App() {
4567
return (
4668
<>
4769
<BrowserRouter>
48-
<Navigation
49-
isLoggedIn={isLoggedIn}
50-
onRegister={onRegisterClick}
51-
onSignIn={onSignInClick}
52-
onLogOut={onLogOut}
53-
/>
54-
<AccountForm
55-
isCentered={true}
56-
isModalShown={modalShow}
57-
closeModal={() => setModalShow(false)}
58-
newUserHandler={() => setIsNewUser(!isNewUser)}
59-
handleSave={onSignInHandler}
60-
isNewUser={isNewUser}
61-
onLogIn={onPositiveLogIn}
62-
/>
63-
<AppProvider value={{}}>
64-
<Views />
65-
</AppProvider>
70+
<UserProvider>
71+
<Navigation
72+
isLoggedIn={isLoggedIn}
73+
onRegister={onRegisterClick}
74+
onSignIn={onSignInClick}
75+
onLogOut={onLogOut}
76+
/>
77+
<AccountForm
78+
isCentered={true}
79+
isModalShown={modalShow}
80+
closeModal={() => setModalShow(false)}
81+
newUserHandler={() => setIsNewUser(!isNewUser)}
82+
handleSave={onSignInHandler}
83+
isNewUser={isNewUser}
84+
onLogIn={onPositiveLogIn}
85+
/>
86+
{isLoading ? (
87+
<LoadingSpinner />
88+
) : (
89+
<ApiProvider value={{ pageResource }}>
90+
<Views />
91+
</ApiProvider>
92+
)}
93+
</UserProvider>
6694
</BrowserRouter>
6795
<Footer />
6896
</>

‎src/appContext.js‎

Lines changed: 0 additions & 13 deletions
This file was deleted.

‎src/components/ConfirmRemovalModal/ConfirmRemovalModal.jsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { CustomModal } from '../shared/modal/Modal';
21
// import { useState } from 'react';
32

3+
import { CustomModal } from '../shared/Modal/Modal';
4+
45
export const ConfirmRemovalModal = (props) => {
56
const { closeModal, handleSave, id } = props;
67
return (

‎src/components/accountForm/SignUp/SignUp.jsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { React, useState } from 'react';
1+
import { useState } from 'react';
22
import { Button, Form } from 'react-bootstrap';
33
import ApiQuery from '../../../components/shared/api/ApiQuery';
44
import LoadingSpinner from '../../shared/loadingSpinner/LoadingSpinner';
@@ -61,7 +61,7 @@ const SignUp = ({
6161
} else if (name.length > 40) {
6262
newErrors.name = 'Name is too long!';
6363
}
64-
if (!surname || surname === '') {
64+
if (!surname || surname === '') {
6565
newErrors.surname = 'Surname is required!';
6666
} else if (surname.length > 40) {
6767
newErrors.surname = 'Surname is too long!';

‎src/components/accountForm/accountForm.jsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import React from 'react';
2-
import { CustomModal } from '../shared/modal/Modal';
32
import SignIn from './SignIn/SignIn';
43
import SignUp from './SignUp/SignUp';
54
import './accountForm.css';
5+
import { CustomModal } from '../shared/Modal/Modal';
66

77
const AccountForm = (props) => {
88
return (

‎src/components/shared/editControls/EditControls.jsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import React, { useEffect, useState } from 'react';
22
import { Link } from 'react-router-dom';
33
import { Button } from 'react-bootstrap';
4-
import { CustomModal } from '../modal/Modal';
54
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
65
import { faEdit, faList, faTrash } from '@fortawesome/free-solid-svg-icons';
76
import ApiQuery from '../api/ApiQuery';
87
import { ConfirmRemovalModal } from '../../ConfirmRemovalModal/ConfirmRemovalModal';
98
import './edit.css';
9+
import { CustomModal } from '../Modal/Modal';
1010

1111
export function EditControls(props) {
1212
const { isLoggedIn, isOwner, url, endpoint, id, handleSave } = props;

‎src/components/shared/loadingSpinner/LoadingSpinner.jsx‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,3 @@ const LoadingSpinner = (props) => {
88
export default LoadingSpinner;
99

1010
// <LoadingSpinner style={loadingStyles} /> // in this way you can use this component with any styles
11-

‎src/contexts/apiContext.js‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import React, { createContext } from 'react';
2+
3+
const ApiContext = createContext();
4+
5+
const ApiProvider = ({ children }) => {
6+
return <ApiContext.Provider value={{}}>{children}</ApiContext.Provider>;
7+
};
8+
9+
// eslint-disable-next-line react/display-name
10+
const withApp = (Child) => (props) =>
11+
<ApiContext.Consumer>{(context) => <Child {...props} {...context} />}</ApiContext.Consumer>;
12+
13+
export { ApiContext, ApiProvider, withApp };

‎src/contexts/userContext.js‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import React, { createContext, useState } from 'react';
2+
3+
const UserContext = createContext();
4+
5+
const UserProvider = ({ children }) => {
6+
const [userData, setUserData] = useState();
7+
8+
return (
9+
<UserContext.Provider value={{ userData, setUserData }}>{children}</UserContext.Provider>
10+
);
11+
};
12+
13+
export { UserContext, UserProvider };

‎src/pages/MainPage/MainPage.jsx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Banner from '../../components/mainPage/banner/Banner.jsx';
1+
import Banner from '../../components/mainPage/Banner/Banner';
22
import Contact from '../../components/mainPage/contact/Contact.jsx';
33
import './style.css';
44

0 commit comments

Comments
 (0)