Skip to content

Commit ff1539f

Browse files
authored
Merge pull request #8 from atlp-rwanda/ch-setup-react-187584854
Deliver - [ch-setup-react-router-#187584858]
2 parents 1deaad2 + 328dd6e commit ff1539f

File tree

10 files changed

+143
-11
lines changed

10 files changed

+143
-11
lines changed

package-lock.json

+39
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"react": "^18.3.1",
1818
"react-dom": "^18.3.1",
1919
"react-redux": "^9.1.2",
20+
"react-router-dom": "^6.24.0",
2021
"sass": "^1.77.6",
2122
"save-dev": "0.0.1-security"
2223
},

src/App.tsx

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
/* eslint-disable linebreak-style */
12
import React from 'react';
2-
import LandingPage from './pages/LandingPage';
3+
import { BrowserRouter as Router } from 'react-router-dom';
4+
import AppRouter from './router';
35

46
const App: React.FC = () => (
5-
<div>
6-
<LandingPage />
7-
</div>
7+
<Router>
8+
<AppRouter />
9+
</Router>
810
);
911

10-
export default App;
12+
export default App;

src/components/layout/Footer.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/* eslint-disable linebreak-style */
2+
import React from 'react';
3+
4+
const getYear = (): number => new Date().getFullYear();
5+
6+
const Footer: React.FC = () => (
7+
<footer>
8+
<p>
9+
&copy;
10+
{getYear()}
11+
{' '}
12+
Ninja E-Commerce Store
13+
</p>
14+
</footer>
15+
);
16+
17+
export default Footer;

src/components/layout/Header.tsx

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/* eslint-disable linebreak-style */
2+
/* eslint-disable import/no-extraneous-dependencies */
3+
import React from 'react';
4+
import { Link } from 'react-router-dom';
5+
6+
const Header: React.FC = () => (
7+
<header>
8+
<nav>
9+
<ul>
10+
<li><Link to="/">Home</Link></li>
11+
<li><Link to="/login">Login</Link></li>
12+
</ul>
13+
</nav>
14+
</header>
15+
);
16+
17+
export default Header;

src/index.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
/* eslint-disable linebreak-style */
12
import React from 'react';
23
import { createRoot } from 'react-dom/client';
34
import { Provider } from 'react-redux';
45
import { store } from './store/store';
56
import App from './App';
67

78
const root = createRoot(document.getElementById('root')!);
8-
root.render(<Provider store={store}><App /></Provider>);
9+
root.render(
10+
<Provider store={store}>
11+
<App />
12+
</Provider>
13+
);

src/pages/LandingPage.tsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import React, { useEffect } from 'react';
22
import { useAppDispatch, useAppSelector } from '../store/store';
33
import { loadWelcomeMessage } from '../store/features/welcomeSlice';
44
import { IWelcomeMessage } from '../utils/types/store';
5+
import Header from '../components/layout/Header';
6+
import Footer from '../components/layout/Footer';
57
import '../styles/LandingPage.scss';
68

79
const LandingPage: React.FC = () => {
@@ -13,11 +15,15 @@ const LandingPage: React.FC = () => {
1315
}, [dispatch]);
1416

1517
return (
16-
<div className="landingPage">
17-
<h1>
18-
{welcomeMessage.message}
19-
</h1>
20-
</div>
18+
<>
19+
<Header />
20+
<div className="landingPage">
21+
<h1>
22+
{welcomeMessage.message}
23+
</h1>
24+
</div>
25+
<Footer />
26+
</>
2127
);
2228
};
2329

src/pages/Login.tsx

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import React from 'react';
2+
import Header from '../components/layout/Header';
3+
4+
const Login: React.FC = () => (
5+
<>
6+
<Header />
7+
<main>
8+
<h2>Login Page</h2>
9+
<p>Please login to continue.</p>
10+
</main>
11+
</>
12+
);
13+
14+
export default Login;

src/pages/NotFound.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
3+
const NotFound: React.FC = () => (
4+
<main>
5+
<h1> 404 -Not found </h1>
6+
<p> The page you are looking for does not exist. </p>
7+
</main>
8+
);
9+
10+
export default NotFound;

src/router.tsx

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* eslint-disable linebreak-style */
2+
/* eslint-disable arrow-body-style */
3+
import React from 'react';
4+
import { Route, Routes } from 'react-router-dom';
5+
import LandingPage from './pages/LandingPage';
6+
import Login from './pages/Login';
7+
import NotFound from './pages/NotFound';
8+
9+
const AppRouter: React.FC = () => {
10+
return (
11+
<div>
12+
<Routes>
13+
<Route path="/" element={<LandingPage />} />
14+
<Route path="/login" element={<Login />} />
15+
<Route path="*" element={<NotFound />} />
16+
</Routes>
17+
</div>
18+
);
19+
};
20+
21+
export default AppRouter;

0 commit comments

Comments
 (0)