mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 18:32:20 +08:00
86 lines
2.8 KiB
JavaScript
86 lines
2.8 KiB
JavaScript
import React from 'react';
|
|
import {RegExpUtils} from 'nylas-exports';
|
|
|
|
import OnboardingActions from './onboarding-actions';
|
|
import CreatePageForForm from './decorators/create-page-for-form';
|
|
import {accountInfoWithIMAPAutocompletions} from './onboarding-helpers';
|
|
import FormField from './form-field';
|
|
|
|
class AccountBasicSettingsForm extends React.Component {
|
|
static displayName = 'AccountBasicSettingsForm';
|
|
|
|
static propTypes = {
|
|
accountInfo: React.PropTypes.object,
|
|
errorFieldNames: React.PropTypes.array,
|
|
submitting: React.PropTypes.bool,
|
|
onConnect: React.PropTypes.func,
|
|
onFieldChange: React.PropTypes.func,
|
|
onFieldKeyPress: React.PropTypes.func,
|
|
};
|
|
|
|
static submitLabel = (accountInfo) => {
|
|
return (accountInfo.type === 'imap') ? 'Continue' : 'Connect Account';
|
|
}
|
|
|
|
static titleLabel = (AccountType) => {
|
|
return AccountType.title || `Add your ${AccountType.displayName} account`;
|
|
}
|
|
|
|
static subtitleLabel = () => {
|
|
return 'Enter your email account credentials to get started.';
|
|
}
|
|
|
|
static validateAccountInfo = (accountInfo) => {
|
|
const {email, password, name} = accountInfo;
|
|
const errorFieldNames = [];
|
|
let errorMessage = null;
|
|
|
|
if (!email || !password || !name) {
|
|
return {errorMessage, errorFieldNames, populated: false};
|
|
}
|
|
|
|
if (!RegExpUtils.emailRegex().test(accountInfo.email)) {
|
|
errorFieldNames.push('email')
|
|
errorMessage = "Please provide a valid email address."
|
|
}
|
|
if (!accountInfo.password) {
|
|
errorFieldNames.push('password')
|
|
errorMessage = "Please provide a password for your account."
|
|
}
|
|
if (!accountInfo.name) {
|
|
errorFieldNames.push('name')
|
|
errorMessage = "Please provide your name."
|
|
}
|
|
|
|
return {errorMessage, errorFieldNames, populated: true};
|
|
}
|
|
|
|
submit() {
|
|
if (!['gmail', 'office365'].includes(this.props.accountInfo.type)) {
|
|
const accountInfo = accountInfoWithIMAPAutocompletions(this.props.accountInfo);
|
|
OnboardingActions.setAccountInfo(accountInfo);
|
|
if (this.props.accountInfo.type === 'imap') {
|
|
OnboardingActions.moveToPage('account-settings-imap');
|
|
} else {
|
|
// We have to pass in the updated accountInfo, because the onConnect()
|
|
// we're calling exists on a component that won't have had it's state
|
|
// updated from the OnboardingStore change yet.
|
|
this.props.onConnect(accountInfo);
|
|
}
|
|
} else {
|
|
this.props.onConnect();
|
|
}
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<form className="settings">
|
|
<FormField field="name" title="Name" {...this.props} />
|
|
<FormField field="email" title="Email" {...this.props} />
|
|
<FormField field="password" title="Password" type="password" {...this.props} />
|
|
</form>
|
|
)
|
|
}
|
|
}
|
|
|
|
export default CreatePageForForm(AccountBasicSettingsForm);
|