2018-10-01 14:01:20 -07:00
|
|
|
import React from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
2018-10-01 16:22:56 -07:00
|
|
|
import { Form, Input, Button, Alert } from 'antd';
|
2018-10-01 14:01:20 -07:00
|
|
|
import Identicon from 'components/Identicon';
|
|
|
|
import ShortAddress from 'components/ShortAddress';
|
|
|
|
import { AUTH_PROVIDER } from 'utils/auth';
|
|
|
|
import { authActions } from 'modules/auth';
|
|
|
|
import { AppState } from 'store/reducers';
|
|
|
|
import './SignUp.less';
|
|
|
|
|
|
|
|
interface StateProps {
|
|
|
|
isCreatingUser: AppState['auth']['isCreatingUser'];
|
|
|
|
createUserError: AppState['auth']['createUserError'];
|
|
|
|
}
|
|
|
|
|
|
|
|
interface DispatchProps {
|
|
|
|
createUser: typeof authActions['createUser'];
|
|
|
|
}
|
|
|
|
|
|
|
|
interface OwnProps {
|
|
|
|
address: string;
|
|
|
|
provider: AUTH_PROVIDER;
|
|
|
|
reset(): void;
|
|
|
|
}
|
|
|
|
|
|
|
|
type Props = StateProps & DispatchProps & OwnProps;
|
|
|
|
|
|
|
|
interface State {
|
|
|
|
name: string;
|
2018-10-01 16:22:56 -07:00
|
|
|
title: string;
|
2018-10-01 14:01:20 -07:00
|
|
|
email: string;
|
|
|
|
}
|
|
|
|
|
2018-10-01 16:22:56 -07:00
|
|
|
class SignUp extends React.Component<Props, State> {
|
2018-10-01 14:01:20 -07:00
|
|
|
state: State = {
|
|
|
|
name: '',
|
2018-10-01 16:22:56 -07:00
|
|
|
title: '',
|
2018-10-01 14:01:20 -07:00
|
|
|
email: '',
|
|
|
|
};
|
|
|
|
|
|
|
|
render() {
|
2018-10-01 16:22:56 -07:00
|
|
|
const { address, isCreatingUser, createUserError } = this.props;
|
|
|
|
const { name, title, email } = this.state;
|
2018-10-01 14:01:20 -07:00
|
|
|
|
|
|
|
return (
|
|
|
|
<div className="SignUp">
|
|
|
|
<div className="SignUp-container">
|
|
|
|
<div className="SignUp-identity">
|
|
|
|
<Identicon address={address} className="SignUp-identity-identicon" />
|
|
|
|
<ShortAddress address={address} className="SignUp-identity-address" />
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<Form className="SignUp-form" onSubmit={this.handleSubmit} layout="vertical">
|
|
|
|
<Form.Item className="SignUp-form-item" label="Display name">
|
|
|
|
<Input
|
|
|
|
name="name"
|
|
|
|
value={name}
|
|
|
|
onChange={this.handleChange}
|
|
|
|
placeholder="Non-unique name that others will see you as"
|
|
|
|
size="large"
|
|
|
|
/>
|
|
|
|
</Form.Item>
|
|
|
|
|
2018-10-01 16:22:56 -07:00
|
|
|
<Form.Item className="SignUp-form-item" label="Title">
|
|
|
|
<Input
|
|
|
|
name="title"
|
|
|
|
value={title}
|
|
|
|
onChange={this.handleChange}
|
|
|
|
placeholder="A short description about you, e.g. Core Ethereum Developer"
|
|
|
|
/>
|
|
|
|
</Form.Item>
|
|
|
|
|
2018-10-01 14:01:20 -07:00
|
|
|
<Form.Item className="SignUp-form-item" label="Email address">
|
|
|
|
<Input
|
|
|
|
name="email"
|
|
|
|
value={email}
|
|
|
|
onChange={this.handleChange}
|
|
|
|
placeholder="We promise not to spam you or share your email"
|
|
|
|
/>
|
|
|
|
</Form.Item>
|
|
|
|
|
|
|
|
<Button
|
|
|
|
type="primary"
|
|
|
|
htmlType="submit"
|
|
|
|
size="large"
|
|
|
|
block
|
|
|
|
loading={isCreatingUser}
|
|
|
|
>
|
|
|
|
Claim Identity
|
|
|
|
</Button>
|
2018-10-01 16:22:56 -07:00
|
|
|
|
|
|
|
{createUserError && (
|
|
|
|
<Alert
|
|
|
|
type="error"
|
|
|
|
message={createUserError}
|
|
|
|
showIcon
|
|
|
|
closable
|
|
|
|
style={{ marginTop: '1rem' }}
|
|
|
|
/>
|
|
|
|
)}
|
2018-10-01 14:01:20 -07:00
|
|
|
</Form>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<p className="SignUp-back">
|
|
|
|
Want to use a different identity? <a onClick={this.props.reset}>Click here</a>.
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
private handleChange = (ev: React.ChangeEvent<HTMLInputElement>) => {
|
|
|
|
const { name, value } = ev.currentTarget;
|
|
|
|
this.setState({ [name]: value } as any);
|
|
|
|
};
|
|
|
|
|
|
|
|
private handleSubmit = (ev: React.FormEvent<HTMLFormElement>) => {
|
|
|
|
ev.preventDefault();
|
2018-10-01 16:22:56 -07:00
|
|
|
const { address, createUser } = this.props;
|
|
|
|
const { name, title, email } = this.state;
|
|
|
|
createUser({ address, name, title, email });
|
2018-10-01 14:01:20 -07:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export default connect<StateProps, DispatchProps, OwnProps, AppState>(
|
|
|
|
state => ({
|
|
|
|
isCreatingUser: state.auth.isCreatingUser,
|
|
|
|
createUserError: state.auth.createUserError,
|
|
|
|
}),
|
|
|
|
{
|
|
|
|
createUser: authActions.createUser,
|
|
|
|
},
|
|
|
|
)(SignUp);
|