diff --git a/src/new-frontend/index.html b/src/new-frontend/index.html index e4b78ea..39bc239 100644 --- a/src/new-frontend/index.html +++ b/src/new-frontend/index.html @@ -1,13 +1,14 @@ - + - Vite + React + TS + Full Stack Project Generator +
- + diff --git a/src/new-frontend/package.json b/src/new-frontend/package.json index bc9ce06..e1187f3 100644 --- a/src/new-frontend/package.json +++ b/src/new-frontend/package.json @@ -11,10 +11,18 @@ "generate-client": "openapi --input ./openapi.json --useOptions --useUnionTypes --output ./src/client --client axios --exportSchemas true" }, "dependencies": { + "@chakra-ui/icons": "2.1.1", + "@chakra-ui/react": "2.8.2", + "@emotion/react": "11.11.3", + "@emotion/styled": "11.11.0", + "@types/react-router-dom": "5.3.3", "axios": "1.6.2", "form-data": "4.0.0", + "framer-motion": "10.16.16", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-hook-form": "7.49.3", + "react-router-dom": "6.21.1" }, "devDependencies": { "@types/node": "20.10.5", diff --git a/src/new-frontend/src/App.tsx b/src/new-frontend/src/App.tsx index 6893d8c..db440f5 100644 --- a/src/new-frontend/src/App.tsx +++ b/src/new-frontend/src/App.tsx @@ -1,11 +1,16 @@ -import './App.css' +import { BrowserRouter, Route, Routes } from 'react-router-dom'; + +import Login from './pages/auth/Login'; +import RecoverPassword from './pages/auth/RecoverPassword'; function App() { - - return ( - <> - + + + } /> + } /> + + ) } diff --git a/src/new-frontend/src/assets/images/fastapi-logo.png b/src/new-frontend/src/assets/images/fastapi-logo.png new file mode 100644 index 0000000..57d9eec Binary files /dev/null and b/src/new-frontend/src/assets/images/fastapi-logo.png differ diff --git a/src/new-frontend/src/assets/images/favicon.png b/src/new-frontend/src/assets/images/favicon.png new file mode 100644 index 0000000..b3dcdd3 Binary files /dev/null and b/src/new-frontend/src/assets/images/favicon.png differ diff --git a/src/new-frontend/src/main.tsx b/src/new-frontend/src/main.tsx index 3d7150d..f9ebbd9 100644 --- a/src/new-frontend/src/main.tsx +++ b/src/new-frontend/src/main.tsx @@ -1,10 +1,21 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.tsx' -import './index.css' +import React from 'react'; +import ReactDOM from 'react-dom/client'; + +import { ChakraProvider } from '@chakra-ui/react'; + +import App from './App'; +import { OpenAPI } from './client'; + +OpenAPI.BASE = import.meta.env.VITE_API_URL; +OpenAPI.TOKEN = async () => { + return localStorage.getItem('access_token') || ''; +} ReactDOM.createRoot(document.getElementById('root')!).render( - + + + , ) + diff --git a/src/new-frontend/src/pages/auth/Login.tsx b/src/new-frontend/src/pages/auth/Login.tsx new file mode 100644 index 0000000..112ae1c --- /dev/null +++ b/src/new-frontend/src/pages/auth/Login.tsx @@ -0,0 +1,72 @@ +import React from "react"; + +import { ViewIcon, ViewOffIcon } from "@chakra-ui/icons"; +import { Button, Center, Container, FormControl, Icon, Image, Input, InputGroup, InputRightElement, Link, useBoolean } from "@chakra-ui/react"; +import { SubmitHandler, useForm } from "react-hook-form"; +import { Link as ReactRouterLink, useNavigate } from "react-router-dom"; + +import Logo from "../../assets/images/fastapi-logo.png"; +import { LoginService } from "../../client"; +import { Body_login_login_access_token as AccessToken } from "../../client/models/Body_login_login_access_token"; + +const Login: React.FC = () => { + const [show, setShow] = useBoolean(); + const navigate = useNavigate(); + const { register, handleSubmit } = useForm(); + + const onSubmit: SubmitHandler = async (data) => { + const response = await LoginService.loginAccessToken({ + formData: data, + }); + localStorage.setItem("access_token", response.access_token); + navigate("/"); + }; + + return ( + + FastAPI logo + + + + + + + + + {show ? : } + + + +
+ + Forgot password? + +
+
+ +
+ ); +}; + +export default Login;