_ = 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 # 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 onChangeEnabledFields: React.PropTypes.func # Callback for the participants change onChangeParticipants: React.PropTypes.func @defaultProps: to: [] cc: [] bcc: [] from: [] enabledFields: [] constructor: (@props={}) -> componentDidMount: => @_applyFocusedField() componentDidUpdate: -> @_applyFocusedField() render: ->
{@_renderFields()}
_applyFocusedField: -> if @props.focusedField return unless @refs[@props.focusedField] if @refs[@props.focusedField].focus @refs[@props.focusedField].focus() else React.findDOMNode(@refs[@props.focusedField]).focus() _renderFields: => # Note: We need to physically add and remove these elements, not just hide them. # If they're hidden, shift-tab between fields breaks. fields = [] fields.push(
{if Fields.Cc not in @props.enabledFields Cc } { if Fields.Bcc not in @props.enabledFields Bcc } { if Fields.Subject not in @props.enabledFields Subject } { if @props.mode is "inline" }
) if Fields.Cc in @props.enabledFields fields.push( ) if Fields.Bcc in @props.enabledFields fields.push( ) if Fields.From in @props.enabledFields fields.push( @props.onChangeParticipants(from: [me]) } value={@props.from?[0]} /> ) fields _showAndFocusBcc: => @props.onChangeEnabledFields show: [Fields.Bcc] focus: Fields.Bcc _showAndFocusCc: => @props.onChangeEnabledFields show: [Fields.Cc] focus: Fields.Cc _showAndFocusSubject: => @props.onChangeEnabledFields show: [Fields.Subject] focus: Fields.Subject _onEmptyCc: => @props.onChangeEnabledFields hide: [Fields.Cc] focus: Fields.To _onEmptyBcc: => if Fields.Cc in @props.enabledFields focus = Fields.Cc else focus = Fields.To @props.onChangeEnabledFields hide: [Fields.Bcc] focus: focus module.exports = ExpandedParticipants