_ = require 'underscore' React = require 'react' AccountContactField = require './account-contact-field' ParticipantsTextField = require './participants-text-field' {Actions} = require 'nylas-exports' {RetinaImg} = require 'nylas-component-kit' Fields = require './fields' class ExpandedParticipants extends React.Component @displayName: "ExpandedParticipants" @propTypes: # Arrays of Contact objects. to: React.PropTypes.array cc: React.PropTypes.array bcc: React.PropTypes.array from: React.PropTypes.array # We need to know if the draft is ready so we can enable and disable # ParticipantTextFields. # # It's possible for a ParticipantTextField, before the draft is # ready, to start the request to `add`, `remove`, or `edit`. This # happens when there are multiple drafts rendering, each requesting # focus. A blur event gets fired before the draft is loaded, causing # logic to run that sets an empty field. These requests are # asynchronous. They may resolve after the draft is in fact ready. # This is bad because the desire to `remove` participants may have # been made with an empty, non-loaded draft, but executed on the new # draft that was loaded in the time it took the async request to # return. draftReady: React.PropTypes.bool # The account to which the current draft belongs accounts: React.PropTypes.array # Either "fullwindow" or "inline" mode: React.PropTypes.string # The field that should be focused focusedField: React.PropTypes.string # An enum array of visible fields. Can be any constant in the `Fields` # dict. We are passed these as props instead of holding it as state # since this component is frequently unmounted and re-mounted every # time it is displayed enabledFields: React.PropTypes.array # Callback for when a user changes which fields should be visible onAdjustEnabledFields: React.PropTypes.func # Callback for the participants change onChangeParticipants: React.PropTypes.func # Callback for the field focus changes onChangeFocusedField: React.PropTypes.func @defaultProps: to: [] cc: [] bcc: [] from: [] accounts: [] draftReady: false enabledFields: [] constructor: (@props={}) -> componentDidMount: => @_applyFocusedField() componentDidUpdate: -> @_applyFocusedField() render: ->