Mailspring/internal_packages/composer/lib/account-contact-field.cjsx
Juan Tejada 281e458d39 feat(account-prefs): Adds new page for Account in preferences
Summary:
Adds the new Account preferences page. This consists of two major React components,
PreferencesAccountList and PreferencesAccountDetails, both of which use EditableList.

I added a bunch of fixes and updated the API for EditableList, plus a bit of
refactoring for PreferencesAccount component, and a bunch of CSS so its a big diff.

The detailed changelog:

Updates to EditableList:
  - Fix bug updating selection state when arrows pressed to move selection
  - Add new props:
    - allowEmptySelection to allow the list to have no selection
    - createInputProps to pass aditional props to the createInput
  - Add scroll region for list items
  - Update styles and refactor render methods

Other Updates:
- Updates Account model to hold aliases and a label
  - Adds getter for label to default to email
- Update accountswitcher to display label, update styles and spec

- Refactor PreferencesAccounts component:
  - Splits it into smaller components,
  - Removes unused code
- Splits preferences styelsheets into smaller separate stylesheet for
  account page. Adds some updates and fixes (scroll-region padding)
- Update AccountStore to be able to perform updates on an account.
- Adds new Action to update account, and an action to remove account to
  be consistent with Action usage
- Adds components for Account list and Aliases list using EditableList

Test Plan: - All specs pass, but need to write new tests!

Reviewers: bengotow, evan

Reviewed By: bengotow

Differential Revision: https://phab.nylas.com/D2332
2015-12-10 15:27:29 -08:00

50 lines
1.5 KiB
CoffeeScript

React = require 'react'
_ = require 'underscore'
{AccountStore} = require 'nylas-exports'
{Menu, ButtonDropdown} = require 'nylas-component-kit'
class AccountContactField extends React.Component
@displayName: 'AccountContactField'
@propTypes:
value: React.PropTypes.object
account: React.PropTypes.object,
onChange: React.PropTypes.func.isRequired
render: =>
<div className="composer-participant-field">
<div className="composer-field-label">{"From:"}</div>
{@_renderFromPicker()}
</div>
_renderFromPicker: ->
if @props.account? && @props.value?
label = @props.value.toString()
if @props.account.aliases.length is 0
return @_renderAccountSpan(label)
return <ButtonDropdown
ref="dropdown"
bordered={false}
primaryItem={<span>{label}</span>}
menu={@_renderAliasesMenu(@props.account)}/>
else
return @_renderAccountSpan("Please select an account")
_renderAliasesMenu: (account) =>
<Menu
items={[account.me().toString()].concat account.aliases}
itemKey={ (alias) -> alias }
itemContent={ (alias) -> alias }
onSelect={@_onChooseAlias.bind(@, account)} />
_renderAccountSpan: (label) ->
<span className="from-picker" style={position: "relative", top: 6, left: "0.5em"}>{label}</span>
_onChooseAlias: (account, alias) =>
@props.onChange(account.meUsingAlias(alias))
@refs.dropdown.toggleDropdown()
module.exports = AccountContactField