w-aura/src/auth/AuthProvider.tsx
Aidar Shaikhutdin @makeweb.space 6bf832da0d feat: add payment and wallpaper pages
2023-05-18 19:03:20 +06:00

29 lines
966 B
TypeScript

import { useCallback, useMemo } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { actions, selectors } from '../store'
import { AuthToken, User } from '../api'
import { AuthContext } from './AuthContext'
export function AuthProvider({ children }: React.PropsWithChildren<unknown>): JSX.Element {
const dispatch = useDispatch()
const token = useSelector(selectors.selectToken)
const user = useSelector(selectors.selectUser)
const signUp = useCallback((token: AuthToken, user: User.User): AuthToken => {
dispatch(actions.token.update(token))
dispatch(actions.user.update(user))
return token
}, [dispatch])
const logout = useCallback(() => dispatch(actions.reset()), [dispatch])
const auth = useMemo(() => ({
signUp,
logout,
token,
user: user.id ? user : null
}), [token, user, signUp, logout])
return (
<AuthContext.Provider value={auth}>
{children}
</AuthContext.Provider>
)
}