diff --git a/cool_todo_manager/package-lock.json b/cool_todo_manager/package-lock.json
index 28cdaa3..6d7f662 100644
--- a/cool_todo_manager/package-lock.json
+++ b/cool_todo_manager/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@hello-pangea/dnd": "^18.0.1",
+ "@radix-ui/react-form": "^0.1.2",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/themes": "^3.2.0",
"@tailwindcss/vite": "^4.0.6",
@@ -18,6 +19,7 @@
"jotai": "^2.12.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
+ "react-router-dom": "^6.26.2",
"tailwindcss": "^4.0.6"
},
"devDependencies": {
@@ -2545,6 +2547,15 @@
}
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz",
+ "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.34.7",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz",
@@ -5323,6 +5334,38 @@
}
}
},
+ "node_modules/react-router": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz",
+ "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz",
+ "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.2",
+ "react-router": "6.26.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-style-singleton": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
diff --git a/cool_todo_manager/package.json b/cool_todo_manager/package.json
index 091c7b8..e51fa4e 100644
--- a/cool_todo_manager/package.json
+++ b/cool_todo_manager/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@hello-pangea/dnd": "^18.0.1",
+ "@radix-ui/react-form": "^0.1.2",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/themes": "^3.2.0",
"@tailwindcss/vite": "^4.0.6",
@@ -20,6 +21,7 @@
"jotai": "^2.12.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
+ "react-router-dom": "^6.26.2",
"tailwindcss": "^4.0.6"
},
"devDependencies": {
diff --git a/cool_todo_manager/src/App.tsx b/cool_todo_manager/src/App.tsx
index 1cf69e1..3d02b76 100644
--- a/cool_todo_manager/src/App.tsx
+++ b/cool_todo_manager/src/App.tsx
@@ -1,14 +1,21 @@
import { Theme } from '@radix-ui/themes';
import '@radix-ui/themes/styles.css';
+import { QueryClientProvider } from '@tanstack/react-query';
+import { createBrowserRouter, RouterProvider } from 'react-router-dom';
+import queryClient from './api/queryClient';
import './App.css';
-import MainBoard from './components/MainBoard/MainBoard';
+import MyRoutes from './routes/routes';
+
+const router = createBrowserRouter(MyRoutes);
function App() {
return (
-
-
+
+
{/* */}
-
+
+
+
);
}
diff --git a/cool_todo_manager/src/api/axios.ts b/cool_todo_manager/src/api/axios.ts
new file mode 100644
index 0000000..7b0f02d
--- /dev/null
+++ b/cool_todo_manager/src/api/axios.ts
@@ -0,0 +1,14 @@
+import axios from "axios";
+
+const BASE_URL = 'http://localhost:4567';
+
+export const axiosBase = axios.create({
+ baseURL: BASE_URL,
+});
+
+export const axiosAuth = axios.create({
+ baseURL: BASE_URL,
+ headers: {
+ Authorization: `Bearer ${localStorage.getItem('token')}` // Maybe we will use cookies
+ }
+});
\ No newline at end of file
diff --git a/cool_todo_manager/src/api/queryClient.ts b/cool_todo_manager/src/api/queryClient.ts
new file mode 100644
index 0000000..75e4ae8
--- /dev/null
+++ b/cool_todo_manager/src/api/queryClient.ts
@@ -0,0 +1,11 @@
+import { QueryClient } from "@tanstack/react-query";
+
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ retry: 2,
+ },
+ },
+})
+
+export default queryClient;
\ No newline at end of file
diff --git a/cool_todo_manager/src/components/CardGroup/CardGroup.tsx b/cool_todo_manager/src/components/CardGroup/CardGroup.tsx
index daa0ea9..cdd8109 100644
--- a/cool_todo_manager/src/components/CardGroup/CardGroup.tsx
+++ b/cool_todo_manager/src/components/CardGroup/CardGroup.tsx
@@ -8,29 +8,26 @@ const tasks = [
];
type TCardGroup = {
- id: string
-}
+ id: string;
+};
export default function CardGroup(props: TCardGroup) {
return (
-
- {(provided) => (
-
- {tasks.map((task, i) => (
-
- ))}
- {provided.placeholder}
-
- )}
-
+
+ {(provided) => (
+
+ {tasks.map((task, i) => (
+
+ ))}
+ {provided.placeholder}
+
+ )}
+
);
}
diff --git a/cool_todo_manager/src/index.css b/cool_todo_manager/src/index.css
index d4b5078..358e675 100644
--- a/cool_todo_manager/src/index.css
+++ b/cool_todo_manager/src/index.css
@@ -1 +1,5 @@
@import 'tailwindcss';
+
+#root {
+ height: 100vh;
+}
\ No newline at end of file
diff --git a/cool_todo_manager/src/main.tsx b/cool_todo_manager/src/main.tsx
index 68176a7..35f6c8f 100644
--- a/cool_todo_manager/src/main.tsx
+++ b/cool_todo_manager/src/main.tsx
@@ -1,5 +1,5 @@
-import { createRoot } from "react-dom/client";
-import App from "./App.tsx";
-import "./index.css";
+import { createRoot } from 'react-dom/client';
+import App from './App.tsx';
+import './index.css';
-createRoot(document.getElementById("root")!).render();
+createRoot(document.getElementById('root')!).render();
diff --git a/cool_todo_manager/src/pages/auth/LoginPage/LoginPage.tsx b/cool_todo_manager/src/pages/auth/LoginPage/LoginPage.tsx
new file mode 100644
index 0000000..61064a3
--- /dev/null
+++ b/cool_todo_manager/src/pages/auth/LoginPage/LoginPage.tsx
@@ -0,0 +1,52 @@
+import { Button, Card, Heading, Text, TextField } from '@radix-ui/themes';
+import { Form } from 'radix-ui';
+
+export default function LoginPage() {
+ return (
+ <>
+
+ Login
+
+ e.preventDefault()}>
+
+
+ Email is required
+
+
+
+ Email is not valid
+
+
+
+
+
+
+
+
+
+
+
+ Password is required
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/cool_todo_manager/src/pages/auth/RegisterPage/RegisterPage.tsx b/cool_todo_manager/src/pages/auth/RegisterPage/RegisterPage.tsx
new file mode 100644
index 0000000..7dceaf2
--- /dev/null
+++ b/cool_todo_manager/src/pages/auth/RegisterPage/RegisterPage.tsx
@@ -0,0 +1,49 @@
+import { Button, Card, Heading, Text, TextField } from '@radix-ui/themes';
+import { Form } from 'radix-ui';
+
+export default function RegisterPage() {
+ return (
+
+ Register
+ e.preventDefault()}>
+
+
+ Email is required
+
+
+
+ Email is not valid
+
+
+
+
+
+
+
+
+
+
+
+ Password is required
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/cool_todo_manager/src/pages/main/MainPage.tsx b/cool_todo_manager/src/pages/main/MainPage.tsx
new file mode 100644
index 0000000..e03c3e5
--- /dev/null
+++ b/cool_todo_manager/src/pages/main/MainPage.tsx
@@ -0,0 +1,10 @@
+import { Box } from '@radix-ui/themes'
+import { Outlet } from 'react-router-dom'
+
+export default function MainPage() {
+ return (
+
+
+
+ )
+}
diff --git a/cool_todo_manager/src/routes/routes.tsx b/cool_todo_manager/src/routes/routes.tsx
new file mode 100644
index 0000000..2801816
--- /dev/null
+++ b/cool_todo_manager/src/routes/routes.tsx
@@ -0,0 +1,18 @@
+import { createRoutesFromElements, Route } from 'react-router-dom';
+import MainBoard from '../components/MainBoard/MainBoard';
+import LoginPage from '../pages/auth/LoginPage/LoginPage';
+import RegisterPage from '../pages/auth/RegisterPage/RegisterPage';
+import MainPage from '../pages/main/MainPage';
+
+const MyRoutes = createRoutesFromElements(
+ <>
+ }>
+ } />
+
+
+ } />
+ } />
+ >,
+);
+
+export default MyRoutes;