aws-amplify-react
Version:
AWS Amplify is a JavaScript library for Frontend and mobile developers building cloud-enabled applications.
127 lines (114 loc) • 4.79 kB
JSX
/*
* Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0/
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
import * as React from 'react';
import { I18n, ConsoleLogger as Logger } from '@aws-amplify/core';
import Auth from '@aws-amplify/auth';
import AuthPiece from './AuthPiece';
import {
FormSection,
SectionHeader,
SectionBody,
SectionFooter,
Button,
Link,
InputLabel,
Input,
SectionFooterPrimaryContent,
SectionFooterSecondaryContent,
FormField,
Hint,
} from '../Amplify-UI/Amplify-UI-Components-React';
const logger = new Logger('ConfirmSignUp');
export default class ConfirmSignUp extends AuthPiece {
constructor(props) {
super(props);
this._validAuthStates = ['confirmSignUp'];
this.confirm = this.confirm.bind(this);
this.resend = this.resend.bind(this);
}
confirm() {
const username = this.usernameFromAuthData() || this.inputs.username;
const { code } = this.inputs;
if (!Auth || typeof Auth.confirmSignUp !== 'function') {
throw new Error('No Auth module found, please ensure @aws-amplify/auth is imported');
}
Auth.confirmSignUp(username, code)
.then(() => this.changeState('signedUp'))
.catch(err => this.error(err));
}
resend() {
const username = this.usernameFromAuthData() || this.inputs.username;
if (!Auth || typeof Auth.resendSignUp !== 'function') {
throw new Error('No Auth module found, please ensure @aws-amplify/auth is imported');
}
Auth.resendSignUp(username)
.then(() => logger.debug('code resent'))
.catch(err => this.error(err));
}
showComponent(theme) {
const { hide } = this.props;
const username = this.usernameFromAuthData();
if (hide && hide.includes(ConfirmSignUp)) { return null; }
return (
<FormSection theme={theme}>
<SectionHeader theme={theme}>
{I18n.get('Confirm Sign Up')}
</SectionHeader>
<SectionBody theme={theme}>
<FormField theme={theme}>
<InputLabel theme={theme}>{I18n.get('Username')} *</InputLabel>
<Input
placeholder={I18n.get('Username')}
theme={theme}
key="username"
name="username"
onChange={this.handleInputChange}
disabled={username}
value={username ? username : ""}
/>
</FormField>
<FormField theme={theme}>
<InputLabel theme={theme}>{I18n.get('Confirmation Code')} *</InputLabel>
<Input
autoFocus
placeholder={I18n.get('Enter your code')}
theme={theme}
key="code"
name="code"
autoComplete="off"
onChange={this.handleInputChange}
/>
<Hint theme={theme}>
{I18n.get('Lost your code? ')}
<Link theme={theme} onClick={this.resend}>
{I18n.get('Resend Code')}
</Link>
</Hint>
</FormField>
</SectionBody>
<SectionFooter theme={theme}>
<SectionFooterPrimaryContent theme={theme}>
<Button theme={theme} onClick={this.confirm}>
{I18n.get('Confirm')}
</Button>
</SectionFooterPrimaryContent>
<SectionFooterSecondaryContent theme={theme}>
<Link theme={theme} onClick={() => this.changeState('signIn')}>
{I18n.get('Back to Sign In')}
</Link>
</SectionFooterSecondaryContent>
</SectionFooter>
</FormSection>
);
}
}