diff --git a/internal_packages/composer-signature/images/ic-settings-signatures-win32@2x.png b/internal_packages/composer-signature/images/ic-settings-signatures-win32@2x.png deleted file mode 100644 index 1b5d61666..000000000 Binary files a/internal_packages/composer-signature/images/ic-settings-signatures-win32@2x.png and /dev/null differ diff --git a/internal_packages/composer-signature/images/ic-settings-signatures@2x.png b/internal_packages/composer-signature/images/ic-settings-signatures@2x.png deleted file mode 100755 index a0f4e7144..000000000 Binary files a/internal_packages/composer-signature/images/ic-settings-signatures@2x.png and /dev/null differ diff --git a/internal_packages/composer-signature/lib/main.es6 b/internal_packages/composer-signature/lib/main.es6 index 5aaa35a7e..7dd3c3b90 100644 --- a/internal_packages/composer-signature/lib/main.es6 +++ b/internal_packages/composer-signature/lib/main.es6 @@ -1,7 +1,7 @@ -import {PreferencesUIStore, ExtensionRegistry} from 'nylas-exports'; +import {PreferencesUIStore, ExtensionRegistry, SignatureStore, ComponentRegistry} from 'nylas-exports'; import SignatureComposerExtension from './signature-composer-extension'; -import SignatureStore from './signature-store'; +import SignatureComposerDropdown from './signature-composer-dropdown'; import PreferencesSignatures from "./preferences-signatures"; export function activate() { @@ -14,12 +14,18 @@ export function activate() { ExtensionRegistry.Composer.register(SignatureComposerExtension); PreferencesUIStore.registerPreferencesTab(this.preferencesTab); SignatureStore.activate(); + + ComponentRegistry.register(SignatureComposerDropdown, { + role: 'Composer:FromFieldComponents', + }); } export function deactivate() { ExtensionRegistry.Composer.unregister(SignatureComposerExtension); PreferencesUIStore.unregisterPreferencesTab(this.preferencesTab.sectionId); SignatureStore.deactivate(); + + ComponentRegistry.unregister(SignatureComposerDropdown); } export function serialize() { diff --git a/internal_packages/composer-signature/lib/preferences-signatures.jsx b/internal_packages/composer-signature/lib/preferences-signatures.jsx index bbe91b04d..e87f5ede0 100644 --- a/internal_packages/composer-signature/lib/preferences-signatures.jsx +++ b/internal_packages/composer-signature/lib/preferences-signatures.jsx @@ -1,121 +1,210 @@ import React from 'react'; -import {Contenteditable} from 'nylas-component-kit'; -import {AccountStore} from 'nylas-exports'; -import SignatureStore from './signature-store'; -import SignatureActions from './signature-actions'; +import _ from 'underscore'; +import { + Flexbox, + RetinaImg, + EditableList, + Contenteditable, + MultiselectDropdown, +} from 'nylas-component-kit'; +import {AccountStore, SignatureStore, Actions} from 'nylas-exports'; + export default class PreferencesSignatures extends React.Component { static displayName = 'PreferencesSignatures'; - constructor(props) { - super(props); - this.state = this._getStateFromStores(); + constructor() { + super() + this.state = this._getStateFromStores() } componentDidMount() { - this.usub = AccountStore.listen(this._onChange); + this.unsubscribers = [ + SignatureStore.listen(this._onChange), + ] } componentWillUnmount() { - this.usub(); + this.unsubscribers.forEach(unsubscribe => unsubscribe()); } + _onChange = () => { - this.setState(this._getStateFromStores()); + this.setState(this._getStateFromStores()) } _getStateFromStores() { - const accounts = AccountStore.accounts(); - const state = this.state || {}; - - let {currentAccountId} = state; - if (!accounts.find(acct => acct.id === currentAccountId)) { - currentAccountId = accounts[0].id; - } + const signatures = SignatureStore.getSignatures() + const accounts = AccountStore.accounts() + const selected = SignatureStore.selectedSignature() + const defaults = SignatureStore.getDefaults() return { - accounts, - currentAccountId, - currentSignature: SignatureStore.signatureForAccountId(currentAccountId), - editAsHTML: state.editAsHTML, - }; + signatures: signatures, + selectedSignature: selected, + defaults: defaults, + accounts: accounts, + editAsHTML: this.state ? this.state.editAsHTML : false, + } + } + + + _onCreateButtonClick = () => { + this._onAddSignature() + } + + _onAddSignature = () => { + Actions.addSignature() + } + + _onDeleteSignature = (signature) => { + Actions.removeSignature(signature) + } + + _onEditSignature = (edit) => { + let editedSig; + if (typeof edit === "object") { + editedSig = { + title: this.state.selectedSignature.title, + body: edit.target.value, + } + } else { + editedSig = { + title: edit, + body: this.state.selectedSignature.body, + } + } + Actions.updateSignature(editedSig, this.state.selectedSignature.id) + } + + _onSelectSignature = (sig) => { + Actions.selectSignature(sig.id) + } + + _onToggleAccount = (accountId) => { + Actions.toggleAccount(accountId) + } + + _onToggleEditAsHTML = () => { + const toggled = !this.state.editAsHTML + this.setState({editAsHTML: toggled}) + } + + _renderListItemContent = (sig) => { + return sig.title + } + + _renderSignatureToolbar() { + return ( +
+
+ Default for: {this._renderAccountPicker()} +
+
+ + +
+
+ ) + } + + _selectItemKey = (account) => { + return account.accountId + } + + _isChecked = (account) => { + if (this.state.defaults[account.accountId] === this.state.selectedSignature.id) return true + return false + } + + _numSelected() { + const sel = _.filter(this.state.accounts, (account) => { + return this._isChecked(account) + }) + const numSelected = sel.length + return numSelected.toString() + (numSelected === 1 ? " Account" : " Accounts") } _renderAccountPicker() { - const options = this.state.accounts.map(account => - - ); - + const buttonText = this._numSelected() return ( - - ); + + ) } _renderEditableSignature() { + const selectedBody = this.state.selectedSignature ? this.state.selectedSignature.body : "" return ( - ); + ) } _renderHTMLSignature() { return (