import React from 'react'; import { Flexbox, RetinaImg, EditableList, Contenteditable, ScrollRegion, MultiselectDropdown, } from 'nylas-component-kit'; import { AccountStore, SignatureStore, Actions } from 'nylas-exports'; export default class PreferencesSignatures extends React.Component { static displayName = 'PreferencesSignatures'; constructor() { super(); this.state = this._getStateFromStores(); } componentDidMount() { this.unsubscribers = [SignatureStore.listen(this._onChange)]; } componentWillUnmount() { this.unsubscribers.forEach(unsubscribe => unsubscribe()); } _onChange = () => { this.setState(this._getStateFromStores()); }; _getStateFromStores() { const signatures = SignatureStore.getSignatures(); const accountsAndAliases = AccountStore.aliases(); const selected = SignatureStore.selectedSignature(); const defaults = SignatureStore.getDefaults(); return { signatures: signatures, selectedSignature: selected, defaults: defaults, accountsAndAliases: accountsAndAliases, 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 = account => { Actions.toggleAccount(account.email); }; _onToggleEditAsHTML = () => { const toggled = !this.state.editAsHTML; this.setState({ editAsHTML: toggled }); }; _renderListItemContent = sig => { return sig.title; }; _renderSignatureToolbar() { return (
Default for: {this._renderAccountPicker()}
); } _selectItemKey = accountOrAlias => { return accountOrAlias.id; }; _isChecked = accountOrAlias => { if (!this.state.selectedSignature) { return false; } return this.state.defaults[accountOrAlias.email] === this.state.selectedSignature.id; }; _labelForAccountPicker() { const sel = this.state.accountsAndAliases.filter(accountOrAlias => { return this._isChecked(accountOrAlias); }); const numSelected = sel.length; return numSelected.toString() + (numSelected === 1 ? ' Account' : ' Accounts'); } _renderAccountPicker() { const buttonText = this._labelForAccountPicker(); return ( accountOrAlias.email} /> ); } _renderEditableSignature() { const selectedBody = this.state.selectedSignature ? this.state.selectedSignature.body : ''; return ( ); } _renderHTMLSignature() { return