diff --git a/package-lock.json b/package-lock.json
index d9f194d6..b4641d82 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
"framer-motion": "^11.3.17",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^6.26.1",
"tailwindcss": "^3.4.7",
"typescript": "^5.3.3"
},
@@ -1052,6 +1053,15 @@
"node": ">=14"
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz",
+ "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.9.6",
"cpu": [
@@ -5948,6 +5958,38 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-router": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz",
+ "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz",
+ "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.1",
+ "react-router": "6.26.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
"license": "MIT",
diff --git a/package.json b/package.json
index be46e271..49c4d2ac 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"framer-motion": "^11.3.17",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^6.26.1",
"tailwindcss": "^3.4.7",
"typescript": "^5.3.3"
},
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 00000000..c0cb3af4
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { Outlet, RouterProvider, createBrowserRouter } from 'react-router-dom';
+
+import Nav from '@components/Nav';
+import BorrowPage from '@pages/borrow/BorrowPage';
+import LandingPage from '@pages/landing/LandingPage';
+import LendPage from '@pages/lend/LendPage';
+import LiquidatePage from '@pages/liquidate/LiquidatePage';
+
+const PageWrapper = () => (
+ <>
+
+
+
+
+ >
+);
+
+const router = createBrowserRouter([
+ {
+ element: ,
+ children: [
+ { path: '', element: },
+ { path: 'lend', element: },
+ { path: 'borrow', element: },
+ { path: 'liquidate', element: },
+ ],
+ },
+]);
+
+const App = () => {
+ return (
+
+
+
+ );
+};
+
+export default App;
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index 5b619639..8893fa95 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -1,4 +1,5 @@
import type { PropsWithChildren } from 'react';
+import { Link } from 'react-router-dom';
export interface ButtonProps {
onClick: () => void;
@@ -20,15 +21,15 @@ export const SelectButtonWrapper = ({ children }: PropsWithChildren) => (
);
export interface SelectLinkButtonProps {
- href: string;
+ to: string;
selected: boolean;
}
-export const SelectLinkButton = ({ href, selected, children }: PropsWithChildren) => (
- ) => (
+
{children}
-
+
);
diff --git a/src/components/Nav.tsx b/src/components/Nav.tsx
index 9e0250c3..564e0023 100644
--- a/src/components/Nav.tsx
+++ b/src/components/Nav.tsx
@@ -1,27 +1,26 @@
+import { Link, useLocation } from 'react-router-dom';
import logo from '/public/laina_v3_shrinked.png';
import { SelectButtonWrapper, SelectLinkButton } from './Button';
-interface NavProps {
- pathname: 'index' | 'lend' | 'borrow' | 'liquidate';
-}
+export default function Nav() {
+ const { pathname } = useLocation();
-export default function Nav({ pathname }: NavProps) {
return (