diff --git a/frontend/src/CoreLayout.tsx b/frontend/src/CoreLayout.tsx index 52cc4ee..d1a2f9c 100644 --- a/frontend/src/CoreLayout.tsx +++ b/frontend/src/CoreLayout.tsx @@ -1,6 +1,6 @@ import { useUserContext } from './contexts/UserContext' import { Route, Switch } from 'react-router' -import { Link } from 'react-router-dom' +import { Link, useHistory } from 'react-router-dom' import { Dashboard } from './pages/Dashboard' import { NewUser } from './pages/NewUser' import { TransactionList } from './pages/TransactionList' @@ -8,29 +8,32 @@ import { AccountForm } from './forms/AccountForm' import { Login } from './pages/Login' import { AppHeader } from './layout/AppHeader' import { AppFooter } from './layout/AppFooter' +import { TransactionForm } from './pages/TransactionForm' +import { Button } from 'antd' export const CoreLayout = () => { const { user } = useUserContext() + const history = useHistory() return (
- Home - Select Budget - Budget Details + Accounts + Transactions - New User +
{!user ? ( - + +
loading...
) : ( - + diff --git a/frontend/src/contexts/AppContext.tsx b/frontend/src/contexts/AppContext.tsx index be6c32f..2f1530b 100644 --- a/frontend/src/contexts/AppContext.tsx +++ b/frontend/src/contexts/AppContext.tsx @@ -12,6 +12,7 @@ type AppContextInterface = { post: (path: string, body: Partial) => Promise create: (path: string, body: Partial) => Promise destroy: (path: string) => Promise + baseURL?: string } const AppContext = createContext(null) @@ -52,7 +53,7 @@ export const AppContextProvider = ({ children, baseURL }: Props) => { } return ( - + {children} ) diff --git a/frontend/src/contexts/UserContext.tsx b/frontend/src/contexts/UserContext.tsx index c7495ef..3aa6c92 100644 --- a/frontend/src/contexts/UserContext.tsx +++ b/frontend/src/contexts/UserContext.tsx @@ -3,7 +3,8 @@ import { message } from 'antd' import { useHistory } from 'react-router' import { User } from '../types' import { useAppContext } from './AppContext' -import { logOut } from '../api' +import { useEffect } from 'react' +import { useRef } from 'react' type Props = { children: React.ReactNode @@ -18,14 +19,36 @@ type Context = { const UserContext = createContext(null) export const UserContextProvider = ({ children }: Props) => { - const api = useAppContext() - const history = useHistory() + const api = useRef(useAppContext()) + const history = useRef(useHistory()) const [user, setUser] = useState(null) + useEffect(() => { + const get = async () => { + try { + const token = window.localStorage.getItem('cash-stacks-token') + if (!token) throw new Error() + + // const valid = await api.current.post('/dj-rest-auth/token/verify/', { + // token, + // }) + // console.log('token valid?', token) + const user = await api.current.get(`/dj-rest-auth/user/`) + setUser(user) + } catch (err) { + console.log(`couldn't get user, token possibly expired`) + // window.localStorage.removeItem('cash-stacks-token') + history.current.push('/login') + } + } + + get() + }, []) + const handleLogin = async (username: string, password: string) => { try { - const { key } = await api.post( + const { key } = await api.current.post( '/dj-rest-auth/login/', { username, @@ -34,24 +57,18 @@ export const UserContextProvider = ({ children }: Props) => { ) if (!key) throw new Error('Problem logging in!') window.localStorage.setItem('cash-stacks-token', key) - const user = await api.get(`/dj-rest-auth/user/`) - + const user = await api.current.get(`/dj-rest-auth/user/`) console.log('user', user) - - if (!user) message.error(`Couldn't find user`) setUser(user) - - message.success(`logged in as ${user?.name}`, 0.5) } catch (err) { message.error('Login Failed!') } } const handleLogout = async () => { - await logOut() + await api.current.post('/dj-rest-auth/logout/', {}) setUser(null) - message.success('logged out!', 0.5) - history.push('/') + history.current.push('/') } return ( diff --git a/frontend/src/elements/FormItem/index.tsx b/frontend/src/elements/FormItem/index.tsx new file mode 100644 index 0000000..05c853d --- /dev/null +++ b/frontend/src/elements/FormItem/index.tsx @@ -0,0 +1,8 @@ +import { FormItemProps } from 'antd' +import AntFormItem from 'antd/lib/form/FormItem' + +type Props = FormItemProps + +export const FormItem = (props: Props) => { + return +} diff --git a/frontend/src/elements/Input/index.tsx b/frontend/src/elements/Input/index.tsx new file mode 100644 index 0000000..83acb58 --- /dev/null +++ b/frontend/src/elements/Input/index.tsx @@ -0,0 +1,7 @@ +import { Input as AntInput, InputProps } from 'antd' + +type Props = InputProps + +export const Input = (props: Props) => { + return +} diff --git a/frontend/src/elements/InputNumber/index.tsx b/frontend/src/elements/InputNumber/index.tsx new file mode 100644 index 0000000..8cbc351 --- /dev/null +++ b/frontend/src/elements/InputNumber/index.tsx @@ -0,0 +1,7 @@ +import { InputNumber as AntInputNumber, InputNumberProps } from 'antd' + +type Props = InputNumberProps + +export const InputNumber = (props: Props) => { + return +} diff --git a/frontend/src/forms/AccountForm.tsx b/frontend/src/forms/AccountForm.tsx index c8b125c..c9e32e5 100644 --- a/frontend/src/forms/AccountForm.tsx +++ b/frontend/src/forms/AccountForm.tsx @@ -9,7 +9,7 @@ type Props = { } export const AccountForm = ({ account }: Props) => { - const stacks = useStacks('') + const stacks = useStacks() const [name, setName] = useState(account?.name || '') const [details, setDetails] = useState(account?.details || '') diff --git a/frontend/src/forms/UserForm.tsx b/frontend/src/forms/UserForm.tsx index 1d886a8..b7c2b25 100644 --- a/frontend/src/forms/UserForm.tsx +++ b/frontend/src/forms/UserForm.tsx @@ -1,88 +1,39 @@ -import { useState, useEffect } from 'react' - -import { Password, User } from '../types' +import { User } from '../types' import { useUserContext } from '../contexts/UserContext' -import { message } from 'antd' import { Button } from '../elements/Button' +import { Form } from '../elements/Form' +import { useForm } from 'antd/lib/form/Form' +import { FormItem } from '../elements/FormItem' +import { Input } from '../elements/Input' export const UserForm = () => { const { user } = useUserContext() + if (!user) throw new Error('User should be gotten by this point') - console.log(user) - - const [name, setName] = useState(user?.name) - const [email, setEmail] = useState(user?.email) - const [password, setPassword] = useState('') - const [passwordConfirm, setPasswordConfirm] = useState('') - const [valid, setValid] = useState(false) - - useEffect(() => { - passwordConfirm.length > 4 && password === passwordConfirm && name && email - ? setValid(true) - : setValid(false) - }, [password, passwordConfirm, name, email]) - - // @ts-ignore - const handleSubmit = async (e) => { - e.preventDefault() - - if (!name || !email) { - message.error('Name and email required!') - return - } - - const body: Omit & Password = { - name, - email, - password, - passwordConfirm, - } + const [form] = useForm() - try { - // user?.id - // ? await api.updateUser(user.id, body) - // : await api.createUser(body) - console.log('User form wtf') - // if (!user?.id) history.push('/login') - } catch (err) { - message.error('Something went wrong') - } + const handleFinish = (values: User) => { + console.log(values) } return ( <> -

{user?.id ? 'Edit' : 'Create'} Profile

-
- - - - - -
+
+

User Profile

+ + + + + + + + + + + + + +
) } diff --git a/frontend/src/hooks/getMany/useAccounts.ts b/frontend/src/hooks/getMany/useAccounts.ts index 3b9cb4b..7b99941 100644 --- a/frontend/src/hooks/getMany/useAccounts.ts +++ b/frontend/src/hooks/getMany/useAccounts.ts @@ -1,4 +1,4 @@ import { Account } from '../../types' import { useGet } from '../util/useGet' -export const useAccounts = () => useGet(`/accounts`) +export const useAccounts = () => useGet(`/accounts/`) diff --git a/frontend/src/hooks/getMany/useStacks.ts b/frontend/src/hooks/getMany/useStacks.ts index 4c5dab7..81477d5 100644 --- a/frontend/src/hooks/getMany/useStacks.ts +++ b/frontend/src/hooks/getMany/useStacks.ts @@ -1,4 +1,4 @@ import { Stack } from '../../types' import { useGet } from '../util/useGet' -export const useStacks = (accountId: string) => useGet(`/stacks`) +export const useStacks = () => useGet(`/stacks/`) diff --git a/frontend/src/hooks/getMany/useTransactions.ts b/frontend/src/hooks/getMany/useTransactions.ts index 8fb00a9..031faa3 100644 --- a/frontend/src/hooks/getMany/useTransactions.ts +++ b/frontend/src/hooks/getMany/useTransactions.ts @@ -2,4 +2,4 @@ import { Transaction } from '../../types' import { useGet } from '../util/useGet' export const useTransactions = (accountId: string) => - useGet(`/accounts/${accountId}/transactions`) + useGet(`/transactions/`) diff --git a/frontend/src/hooks/util/useGet.ts b/frontend/src/hooks/util/useGet.ts index 1b3c4e6..bab732c 100644 --- a/frontend/src/hooks/util/useGet.ts +++ b/frontend/src/hooks/util/useGet.ts @@ -8,8 +8,8 @@ export const useGet = (path: string) => { const get = useCallback(async () => { const data = await appContext.current.get(path) if (!data) return - - setData(data) + // @ts-ignore + setData(data.results) }, [path]) useEffect(() => { diff --git a/frontend/src/layout/AppFooter/index.tsx b/frontend/src/layout/AppFooter/index.tsx index 58f00cd..b72cada 100644 --- a/frontend/src/layout/AppFooter/index.tsx +++ b/frontend/src/layout/AppFooter/index.tsx @@ -7,7 +7,7 @@ export const AppFooter = () => { return (