Mailspring/internal_packages/preferences/lib/tabs/preferences-accounts.cjsx
Juan Tejada 415d612458 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

61 lines
1.6 KiB
CoffeeScript

React = require 'react'
_ = require 'underscore'
{AccountStore, Actions} = require 'nylas-exports'
PreferencesAccountList = require './preferences-account-list'
PreferencesAccountDetails = require './preferences-account-details'
class PreferencesAccounts extends React.Component
@displayName: 'PreferencesAccounts'
constructor: (@props) ->
@state = @getStateFromStores()
@state.selected = @state.accounts[0]
componentDidMount: =>
@unsubscribe = AccountStore.listen @_onAccountsChanged
componentWillUnmount: =>
@unsubscribe?()
getStateFromStores: =>
accounts: AccountStore.items()
_onAccountsChanged: =>
@setState(@getStateFromStores())
# Update account list actions
#
_onAddAccount: =>
ipc = require('electron').ipcRenderer
ipc.send('command', 'application:add-account')
_onAccountSelected: (account) =>
@setState(selected: account)
_onRemoveAccount: (account) =>
Actions.removeAccount(account.id)
# Update account actions
#
_onAccountUpdated: (account, updates) =>
Actions.updateAccount(account.id, updates)
render: =>
<section className="preferences-accounts">
<h2>Accounts</h2>
<div className="accounts-content">
<PreferencesAccountList
accounts={@state.accounts}
onAddAccount={@_onAddAccount}
onAccountSelected={@_onAccountSelected}
onRemoveAccount={@_onRemoveAccount} />
<PreferencesAccountDetails
account={@state.selected}
onAccountUpdated={@_onAccountUpdated} />
</div>
</section>
module.exports = PreferencesAccounts