mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-09-24 21:45:54 +08:00
feat(default-alias): Add functionality to select a default alias
Summary: - Update Account model witha default alias and DraftStore methods that construct new messages to use default alias if available. - Update AccountDetails page and add selector to select default alias Test Plan: - Unit tests Reviewers: evan, bengotow Reviewed By: bengotow Differential Revision: https://phab.nylas.com/D2352
This commit is contained in:
parent
f0cc7afb54
commit
832d0b8dcf
4 changed files with 68 additions and 6 deletions
|
@ -51,6 +51,13 @@ class PreferencesAccountDetails extends Component {
|
|||
return `${name} <${email}>`;
|
||||
}
|
||||
|
||||
_updatedDefaultAlias(originalAlias, newAlias, defaultAlias) {
|
||||
if (originalAlias === defaultAlias) {
|
||||
return newAlias;
|
||||
}
|
||||
return defaultAlias;
|
||||
}
|
||||
|
||||
_saveChanges = ()=> {
|
||||
this.props.onAccountUpdated(this.props.account, this.state);
|
||||
}
|
||||
|
@ -73,21 +80,54 @@ class PreferencesAccountDetails extends Component {
|
|||
_onAccountAliasUpdated = (newAlias, alias, idx)=> {
|
||||
const coercedAlias = this._makeAlias(newAlias);
|
||||
const aliases = this.state.aliases.slice();
|
||||
|
||||
let defaultAlias = this.state.defaultAlias;
|
||||
if (defaultAlias === alias) {
|
||||
defaultAlias = coercedAlias;
|
||||
}
|
||||
aliases[idx] = coercedAlias;
|
||||
this.setState({aliases}, ()=> {
|
||||
this.setState({aliases, defaultAlias}, ()=> {
|
||||
this._saveChanges();
|
||||
});
|
||||
}
|
||||
|
||||
_onAccountAliasRemoved = (alias, idx)=> {
|
||||
const aliases = this.state.aliases.slice();
|
||||
let defaultAlias = this.state.defaultAlias;
|
||||
if (defaultAlias === alias) {
|
||||
defaultAlias = null;
|
||||
}
|
||||
aliases.splice(idx, 1);
|
||||
this.setState({aliases}, ()=> {
|
||||
this.setState({aliases, defaultAlias}, ()=> {
|
||||
this._saveChanges();
|
||||
});
|
||||
}
|
||||
|
||||
_onDefaultAliasSelected = (event)=> {
|
||||
const defaultAlias = event.target.value === 'None' ? null : event.target.value;
|
||||
this.setState({defaultAlias}, ()=> {
|
||||
this._saveChanges();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Renderers
|
||||
|
||||
_renderDefaultAliasSelector(account) {
|
||||
const aliases = account.aliases;
|
||||
const defaultAlias = account.defaultAlias || 'None';
|
||||
if (aliases.length > 0) {
|
||||
return (
|
||||
<div className="default-alias-selector">
|
||||
<span>Default alias: </span>
|
||||
<select value={defaultAlias} onChange={this._onDefaultAliasSelected}>
|
||||
<option>None</option>
|
||||
{aliases.map((alias, idx)=> <option key={`alias-${idx}`} value={alias}>{alias}</option>)}
|
||||
</select>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const account = this.state;
|
||||
const aliasPlaceholder = this._makeAlias(
|
||||
|
@ -111,6 +151,7 @@ class PreferencesAccountDetails extends Component {
|
|||
onDeleteItem={this._onAccountAliasRemoved} >
|
||||
{account.aliases}
|
||||
</EditableList>
|
||||
{this._renderDefaultAliasSelector(account)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -62,6 +62,16 @@
|
|||
font-size: 0.9em;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.default-alias-selector {
|
||||
font-size: 0.9em;
|
||||
float: right;
|
||||
|
||||
&>select {
|
||||
min-width: 35%;
|
||||
max-width: 243px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,6 +53,11 @@ class Account extends Model
|
|||
queryable: false
|
||||
modelKey: 'aliases'
|
||||
|
||||
'defaultAlias': Attributes.Object
|
||||
queryable: false
|
||||
modelKey: 'defaultAlias'
|
||||
jsonKey: 'default_alias'
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
@aliases ||= []
|
||||
|
|
|
@ -151,6 +151,12 @@ class DraftStore
|
|||
|
||||
########### PRIVATE ####################################################
|
||||
|
||||
_getFromField: (account) ->
|
||||
if account.defaultAlias?
|
||||
account.meUsingAlias(account.defaultAlias)
|
||||
else
|
||||
account.me()
|
||||
|
||||
_doneWithSession: (session) ->
|
||||
session.teardown()
|
||||
delete @_draftSessions[session.draftClientId]
|
||||
|
@ -280,7 +286,7 @@ class DraftStore
|
|||
|
||||
_constructDraft: ({attributes, thread}) =>
|
||||
return new Message _.extend {}, attributes,
|
||||
from: [AccountStore.current().me()]
|
||||
from: [@_getFromField(AccountStore.current())]
|
||||
date: (new Date)
|
||||
draft: true
|
||||
pristine: true
|
||||
|
@ -369,7 +375,7 @@ class DraftStore
|
|||
|
||||
draft = new Message
|
||||
body: ""
|
||||
from: [account.me()]
|
||||
from: [@_getFromField(account)]
|
||||
date: (new Date)
|
||||
draft: true
|
||||
pristine: true
|
||||
|
@ -420,7 +426,7 @@ class DraftStore
|
|||
draft = new Message
|
||||
body: query.body || ''
|
||||
subject: query.subject || '',
|
||||
from: [account.me()]
|
||||
from: [@_getFromField(account)]
|
||||
date: (new Date)
|
||||
draft: true
|
||||
pristine: true
|
||||
|
|
Loading…
Add table
Reference in a new issue