Add ability to login from embedded site

This commit is contained in:
Jerko Steiner 2019-04-15 00:13:51 +12:00
parent 7c1b6973ae
commit 18fef76807
5 changed files with 32 additions and 17 deletions

View File

@ -5,5 +5,6 @@ export * from './Input'
export * from './Link' export * from './Link'
export * from './Modal' export * from './Modal'
export * from './Redirect' export * from './Redirect'
export * from './withHistory' export * from './ReturnHere'
export * from './TimeAgo' export * from './TimeAgo'
export * from './withHistory'

View File

@ -10,6 +10,14 @@ export type TLoginAction =
type TAction<T extends string> = TGetAction<TLoginAction, T> type TAction<T extends string> = TGetAction<TLoginAction, T>
export const setRedirectTo = (redirectTo: string)
: TAction<'LOGIN_REDIRECT_SET'> => {
return {
payload: {redirectTo},
type: 'LOGIN_REDIRECT_SET',
}
}
export class LoginActions { export class LoginActions {
constructor(protected readonly http: IHTTPClient<IAPIDef>) {} constructor(protected readonly http: IHTTPClient<IAPIDef>) {}
@ -34,10 +42,5 @@ export class LoginActions {
) )
} }
setRedirectTo = (redirectTo: string): TAction<'LOGIN_REDIRECT_SET'> => { setRedirectTo = setRedirectTo
return {
payload: {redirectTo},
type: 'LOGIN_REDIRECT_SET',
}
}
} }

View File

@ -22,8 +22,8 @@ export class LoginForm extends React.PureComponent<ILoginFormProps> {
return <Redirect to={this.props.redirectTo} /> return <Redirect to={this.props.redirectTo} />
} }
return ( return (
<form onSubmit={this.props.onSubmit}> <form className='login-form' onSubmit={this.props.onSubmit}>
<p className='error'>{this.props.error}</p> <p className='has-text-danger'>{this.props.error}</p>
<Input <Input
Icon={FaUser} Icon={FaUser}
label='Username' label='Username'
@ -52,8 +52,8 @@ export class LoginForm extends React.PureComponent<ILoginFormProps> {
/> />
</div> </div>
<p className='small center'> <p className='small center mt-1'>
Don&apos;t have an account? <Link to='/auth/register'>Register!</Link> Don&apos;t have an account? <Link to='/auth/register'>Sign up!</Link>
</p> </p>
</form> </form>
) )

View File

@ -1,7 +1,8 @@
import React from 'react' import React from 'react'
import {FaUser, FaLock} from 'react-icons/fa' import {FaEnvelope, FaUser, FaLock} from 'react-icons/fa'
import {INewUser, IUser} from '@rondo/common' import {INewUser, IUser} from '@rondo/common'
import {Input} from '../components/Input' import {Input} from '../components/Input'
import {Link} from 'react-router-dom'
import {Redirect} from '../components/Redirect' import {Redirect} from '../components/Redirect'
export interface IRegisterFormProps { export interface IRegisterFormProps {
@ -19,10 +20,14 @@ export class RegisterForm extends React.PureComponent<IRegisterFormProps> {
return <Redirect to={this.props.redirectTo} /> return <Redirect to={this.props.redirectTo} />
} }
return ( return (
<form onSubmit={this.props.onSubmit}> <form
<p className='error'>{this.props.error}</p> autoComplete='off'
className='register-form'
onSubmit={this.props.onSubmit}
>
<p className='has-text-danger'>{this.props.error}</p>
<Input <Input
Icon={FaUser} Icon={FaEnvelope}
label='Email' label='Email'
name='username' name='username'
type='email' type='email'
@ -42,6 +47,7 @@ export class RegisterForm extends React.PureComponent<IRegisterFormProps> {
required required
/> />
<Input <Input
Icon={FaUser}
label='First Name' label='First Name'
name='firstName' name='firstName'
type='text' type='text'
@ -51,12 +57,13 @@ export class RegisterForm extends React.PureComponent<IRegisterFormProps> {
required required
/> />
<Input <Input
Icon={FaUser}
label='Last Name' label='Last Name'
name='lastName' name='lastName'
type='text' type='text'
onChange={this.props.onChange} onChange={this.props.onChange}
value={this.props.data.lastName} value={this.props.data.lastName}
placeholder='First name' placeholder='Last name'
required required
/> />
<div className='text-center'> <div className='text-center'>
@ -67,6 +74,9 @@ export class RegisterForm extends React.PureComponent<IRegisterFormProps> {
value='Register' value='Register'
/> />
</div> </div>
<p className='small center mt-1'>
Already have an account? <Link to='/auth/login'>Log in!</Link>
</p>
</form> </form>
) )
} }

View File

@ -31,7 +31,8 @@ export class TestUtils {
readonly createStore = createStore readonly createStore = createStore
render(jsx: JSX.Element) { render(jsx: JSX.Element) {
const component = T.renderIntoDocument(jsx) as React.Component<any> const component = T
.renderIntoDocument(jsx) as unknown as React.Component<any>
const node = ReactDOM.findDOMNode(component) as Element const node = ReactDOM.findDOMNode(component) as Element
return {component, node} return {component, node}
} }