mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-11 18:32:20 +08:00
85 lines
2.7 KiB
JavaScript
85 lines
2.7 KiB
JavaScript
import { React, PropTypes, RegExpUtils } from 'mailspring-exports';
|
|
|
|
import OnboardingActions from './onboarding-actions';
|
|
import CreatePageForForm from './decorators/create-page-for-form';
|
|
import { expandAccountWithCommonSettings } from './onboarding-helpers';
|
|
import FormField from './form-field';
|
|
|
|
class AccountBasicSettingsForm extends React.Component {
|
|
static displayName = 'AccountBasicSettingsForm';
|
|
|
|
static propTypes = {
|
|
account: PropTypes.object,
|
|
errorFieldNames: PropTypes.array,
|
|
submitting: PropTypes.bool,
|
|
onConnect: PropTypes.func,
|
|
onFieldChange: PropTypes.func,
|
|
onFieldKeyPress: PropTypes.func,
|
|
};
|
|
|
|
static submitLabel = account => {
|
|
return account.provider === 'imap' ? 'Continue' : 'Connect Account';
|
|
};
|
|
|
|
static titleLabel = providerConfig => {
|
|
return providerConfig.title || `Add your ${providerConfig.displayName} account`;
|
|
};
|
|
|
|
static subtitleLabel = () => {
|
|
return `Enter your email account credentials to get started. Mailspring\nstores your email password securely and it is never sent to our servers.`;
|
|
};
|
|
|
|
static validateAccount = account => {
|
|
const errorFieldNames = [];
|
|
let errorMessage = null;
|
|
|
|
if (!account.emailAddress || !account.settings.imap_password || !account.name) {
|
|
return { errorMessage, errorFieldNames, populated: false };
|
|
}
|
|
|
|
if (!RegExpUtils.emailRegex().test(account.emailAddress)) {
|
|
errorFieldNames.push('email');
|
|
errorMessage = 'Please provide a valid email address.';
|
|
}
|
|
if (!account.name) {
|
|
errorFieldNames.push('name');
|
|
errorMessage = 'Please provide your name.';
|
|
}
|
|
if (!account.settings.imap_password) {
|
|
errorFieldNames.push('password');
|
|
errorMessage = 'Please provide a password for your account.';
|
|
}
|
|
|
|
return { errorMessage, errorFieldNames, populated: true };
|
|
};
|
|
|
|
submit() {
|
|
const account = expandAccountWithCommonSettings(this.props.account);
|
|
OnboardingActions.setAccount(account);
|
|
if (this.props.account.provider === 'imap') {
|
|
OnboardingActions.moveToPage('account-settings-imap');
|
|
} else {
|
|
// We have to pass in the updated account, 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(account);
|
|
}
|
|
}
|
|
|
|
render() {
|
|
return (
|
|
<form className="settings">
|
|
<FormField field="name" title="Name" {...this.props} />
|
|
<FormField field="emailAddress" title="Email" {...this.props} />
|
|
<FormField
|
|
field="settings.imap_password"
|
|
title="Password"
|
|
type="password"
|
|
{...this.props}
|
|
/>
|
|
</form>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default CreatePageForForm(AccountBasicSettingsForm);
|