diff --git a/frontend/src/components/Progress.tsx b/frontend/src/components/Progress.tsx index 30abaf4..cd36183 100644 --- a/frontend/src/components/Progress.tsx +++ b/frontend/src/components/Progress.tsx @@ -3,12 +3,12 @@ import { Icon } from '@iconify/react'; interface ProgressProps { percent: number; - disableReturn?: boolean; + back: () => void; } -export default function Progress({percent, disableReturn}: ProgressProps) { +export default function Progress({percent, back}: ProgressProps) { return
- {!disableReturn && } + {back != null && }
{percent > 0 &&
}
diff --git a/frontend/src/index.sass b/frontend/src/index.sass index ec52503..8b07175 100644 --- a/frontend/src/index.sass +++ b/frontend/src/index.sass @@ -57,7 +57,7 @@ button.green button.white background-color: white - color: $c-blue + color: $c-default-text border: solid $c-white-shadow border-width: 2px 2px 4px box-shadow: none @@ -99,5 +99,8 @@ h1 width: 100% height: 100% + &.non-center + justify-content: flex-start + .page-pad - padding: 1em + padding: 2em 1em diff --git a/frontend/src/logic/sdk.ts b/frontend/src/logic/sdk.ts index fd624e9..61c1e8c 100644 --- a/frontend/src/logic/sdk.ts +++ b/frontend/src/logic/sdk.ts @@ -1,23 +1,37 @@ +import MandarinChinese from '../assets/img/lang/zh.svg' +import Japanese from '../assets/img/lang/ja.svg' + // db.users: Signup table map // db.user: Current logged-in user const db = localStorage -export function signup(username: string, password: string) +export interface Lang { + name: string + code: string + icon: string +} + +export const possibleLangs = [ + {name: 'Mandarin Chinese', code: 'zh', icon: MandarinChinese}, + {name: 'Japanese', code: 'ja', icon: Japanese}, +] + +export function signup(username: string, password: string, language: string) { if (!db.users) db.users = JSON.stringify({}) const users = JSON.parse(db.users) - users[username] = password + users[username] = {password, language} db.users = JSON.stringify(users) } export function login(username: string, password: string) { const users = JSON.parse(db.users) - if (users[username] !== password) + if (!users[username] || users[username].password !== password) throw new Error('Invalid credentials') db.user = username diff --git a/frontend/src/pages/Signup.tsx b/frontend/src/pages/Signup.tsx index 8232fa8..c5e56e8 100644 --- a/frontend/src/pages/Signup.tsx +++ b/frontend/src/pages/Signup.tsx @@ -1,7 +1,9 @@ import React, { useState } from 'react'; import { useNavigate } from "react-router-dom"; -import { signup } from '../logic/sdk'; -import { sign } from 'crypto'; +import {possibleLangs, signup} from '../logic/sdk'; +import Progress from "../components/Progress"; +import DuoWriting from "../assets/img/duo-writing.png"; +import ChatBox from "../components/ChatBox"; export default function Signup() { @@ -11,6 +13,14 @@ export default function Signup() { const [confirmPassword, setConfirmPassword] = useState(""); const [err, setErr] = useState("") + const [stage, _setStage] = useState(0) + const [lang, setLang] = useState(possibleLangs[0].name) + + function setStage(stage: number) { + setErr("") + _setStage(stage) + } + function submitSignup() { try { if (password !== confirmPassword) { @@ -21,7 +31,7 @@ export default function Signup() { console.log(confirmPassword) return } else { - signup(username, password) + signup(username, password, "") navigate('/courses') } } @@ -31,24 +41,46 @@ export default function Signup() { } } - return
-

Login

- {err && } + return
+ { + if (stage === 0) navigate(-1) + else setStage(stage - 1) + }}/> -
- - setUsername(e.target.value)}> -
-
- - setPassword(e.target.value)}> -
-
- - setConfirmPassword(e.target.value)}> +
+ icon + {/*

Create an Account

*/} +
- - +
+ + {err && } + + {stage === 0 && <> + {possibleLangs.map((lang, i) => )} + } + + {stage === 1 && <> +
+ + setUsername(e.target.value)}> +
+
+ + setPassword(e.target.value)}> +
+
+ + setConfirmPassword(e.target.value)}> +
+ + + + } +
}