| @@ -18,9 +18,10 @@ import { IProfile } from "./structure/profile"; | |||
| import { ALL_WORDS } from "./data/all-words"; | |||
| import { WordDetails } from "./components/word-details/WordDetails"; | |||
| import { Calendar } from "./components/calendar/Calendar"; | |||
| import { Login } from "./components/auth/Login"; | |||
| export var userProfileData : IProfile = { | |||
| export var userProfileData: IProfile = { | |||
| name: 'Neymar Jr', | |||
| image: 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSERA5Pm3aRBV7AaI8tvpZfzpD24ZgrU1_8NA&usqp=CAU', | |||
| medal: { | |||
| @@ -68,23 +69,28 @@ export var userProfileData : IProfile = { | |||
| }; | |||
| function App() { | |||
| return ( | |||
| <BrowserRouter> | |||
| <Switch> | |||
| <Route path="/home" component={Home} /> | |||
| <Route path="/add-word" component={AddWord} /> | |||
| <Route path="/add-shelf" component={AddShelf} /> | |||
| <Route path="/categories" component={Categories} /> | |||
| <Route path="/category-details/" component={CategoryDetails} /> | |||
| <Route path="/shelf-details/" component={ShelfDetails} /> | |||
| <Route path="/word-details/" component={WordDetails} /> | |||
| <Route path="/revise" component={Revise} /> | |||
| <Route path="/calendar" component={Calendar} /> | |||
| <Redirect from="/" to="/home" /> | |||
| </Switch> | |||
| <Tabs /> | |||
| </BrowserRouter> | |||
| ); | |||
| const borwserRouter = localStorage.anamnesisToken ? <BrowserRouter> | |||
| <Switch> | |||
| <Route path="/home" component={Home} /> | |||
| <Route path="/add-word" component={AddWord} /> | |||
| <Route path="/add-shelf" component={AddShelf} /> | |||
| <Route path="/categories" component={Categories} /> | |||
| <Route path="/category-details/" component={CategoryDetails} /> | |||
| <Route path="/shelf-details/" component={ShelfDetails} /> | |||
| <Route path="/word-details/" component={WordDetails} /> | |||
| <Route path="/revise" component={Revise} /> | |||
| <Route path="/calendar" component={Calendar} /> | |||
| <Redirect from="/" to="/home" /> | |||
| </Switch> | |||
| <Tabs /> | |||
| </BrowserRouter> : <BrowserRouter> | |||
| <Switch> | |||
| <Route path="/login" component={Login} /> | |||
| <Redirect from="/" to="/login" /> | |||
| </Switch> | |||
| </BrowserRouter> | |||
| return borwserRouter; | |||
| } | |||
| export default App; | |||
| @@ -0,0 +1 @@ | |||
| <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><title>ionicons-v5-i</title><path d="M432,448a15.92,15.92,0,0,1-11.31-4.69l-352-352A16,16,0,0,1,91.31,68.69l352,352A16,16,0,0,1,432,448Z"/><path d="M255.66,384c-41.49,0-81.5-12.28-118.92-36.5-34.07-22-64.74-53.51-88.7-91l0-.08c19.94-28.57,41.78-52.73,65.24-72.21a2,2,0,0,0,.14-2.94L93.5,161.38a2,2,0,0,0-2.71-.12c-24.92,21-48.05,46.76-69.08,76.92a31.92,31.92,0,0,0-.64,35.54c26.41,41.33,60.4,76.14,98.28,100.65C162,402,207.9,416,255.66,416a239.13,239.13,0,0,0,75.8-12.58,2,2,0,0,0,.77-3.31l-21.58-21.58a4,4,0,0,0-3.83-1A204.8,204.8,0,0,1,255.66,384Z"/><path d="M490.84,238.6c-26.46-40.92-60.79-75.68-99.27-100.53C349,110.55,302,96,255.66,96a227.34,227.34,0,0,0-74.89,12.83,2,2,0,0,0-.75,3.31l21.55,21.55a4,4,0,0,0,3.88,1A192.82,192.82,0,0,1,255.66,128c40.69,0,80.58,12.43,118.55,37,34.71,22.4,65.74,53.88,89.76,91a.13.13,0,0,1,0,.16,310.72,310.72,0,0,1-64.12,72.73,2,2,0,0,0-.15,2.95l19.9,19.89a2,2,0,0,0,2.7.13,343.49,343.49,0,0,0,68.64-78.48A32.2,32.2,0,0,0,490.84,238.6Z"/><path d="M256,160a95.88,95.88,0,0,0-21.37,2.4,2,2,0,0,0-1,3.38L346.22,278.34a2,2,0,0,0,3.38-1A96,96,0,0,0,256,160Z"/><path d="M165.78,233.66a2,2,0,0,0-3.38,1,96,96,0,0,0,115,115,2,2,0,0,0,1-3.38Z"/></svg> | |||
| @@ -0,0 +1 @@ | |||
| <svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512"><title>ionicons-v5-i</title><path d="M255.66,112c-77.94,0-157.89,45.11-220.83,135.33a16,16,0,0,0-.27,17.77C82.92,340.8,161.8,400,255.66,400,348.5,400,429,340.62,477.45,264.75a16.14,16.14,0,0,0,0-17.47C428.89,172.28,347.8,112,255.66,112Z" style="fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:32px"/><circle cx="256" cy="256" r="80" style="fill:none;stroke:#000;stroke-miterlimit:10;stroke-width:32px"/></svg> | |||
| @@ -0,0 +1,78 @@ | |||
| .pageHeader { | |||
| background-color: var(--orange); | |||
| text-align: center; | |||
| height: 30vh; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| svg { | |||
| transform: scale(1.5); | |||
| } | |||
| } | |||
| .form { | |||
| border-radius: 20px; | |||
| margin: 30px; | |||
| } | |||
| .inputHolder { | |||
| margin: 0px auto 20px; | |||
| width: 100%; | |||
| position: relative; | |||
| input { | |||
| display: block; | |||
| width: 100%; | |||
| height: 40px; | |||
| font-size: 12px; | |||
| font-weight: 500; | |||
| letter-spacing: 0.5px; | |||
| padding: 0 15px; | |||
| background-color: transparent; | |||
| border-radius: 20px; | |||
| border: none; | |||
| border: 2px solid rgba(black, 0.1); | |||
| color: var(--grey); | |||
| &:focus { | |||
| border-color: var(--teal); | |||
| color: var(--black); | |||
| } | |||
| } | |||
| .rightButton { | |||
| position: absolute; | |||
| right: 10px; | |||
| top: 10px; | |||
| border: none; | |||
| background-color: transparent; | |||
| svg { | |||
| fill: var(--light-grey); | |||
| width: 20px; | |||
| height: 20px; | |||
| } | |||
| } | |||
| } | |||
| .submitButton { | |||
| height: 40px; | |||
| font-size: 14px; | |||
| color: white; | |||
| border-radius: 20px; | |||
| border: none; | |||
| display: block; | |||
| width: 100%; | |||
| background-color: teal; | |||
| } | |||
| .otherLinks { | |||
| text-align: center; | |||
| display: block; | |||
| color: var(--red); | |||
| margin: 20px auto; | |||
| font-weight: 600; | |||
| font-size: 14px; | |||
| letter-spacing: 0.5px; | |||
| } | |||
| @@ -0,0 +1,42 @@ | |||
| import React, { useState } from "react"; | |||
| import styles from './Auth.module.scss'; | |||
| import { ReactComponent as LogoIcon } from '../../assets/icons/anamnesis.svg'; | |||
| import { ReactComponent as EyeOffIcon } from '../../assets/icons/eye-off-outline.svg'; | |||
| import { ReactComponent as EyeIcon } from '../../assets/icons/eye-outline.svg'; | |||
| import { NavLink } from "react-router-dom"; | |||
| export const Login: React.FC = () => { | |||
| const [showPassowrd, setShowPassword] = useState<boolean>(true); | |||
| const [userName, setUsername] = useState<string>(''); | |||
| const [password, setPassword] = useState<string>(''); | |||
| return <section className="page"> | |||
| <header className={styles.pageHeader}> | |||
| <LogoIcon /> | |||
| </header> | |||
| <section className={styles.form}> | |||
| <div className={styles.inputHolder}> | |||
| <input defaultValue={userName} onInput={(e) => setUsername(e.currentTarget.value)} | |||
| type="email" placeholder="Email ID" /> | |||
| </div> | |||
| <div className={styles.inputHolder}> | |||
| <input defaultValue={password} onInput={(e) => setPassword(e.currentTarget.value)} | |||
| type={ showPassowrd ? "text" : "password" } placeholder="Password" /> | |||
| <button className={styles.rightButton} onClick={() => setShowPassword(!showPassowrd)}> | |||
| { showPassowrd ? <EyeOffIcon /> : <EyeIcon /> } | |||
| </button> | |||
| </div> | |||
| <button className={styles.submitButton}> | |||
| Knock Knock | |||
| </button> | |||
| <NavLink className={styles.otherLinks} to="/signup"> Signup? </NavLink> | |||
| </section> | |||
| </section> | |||
| }; | |||