2015-06-09 08:02:50 +08:00
|
|
|
_ = require 'underscore'
|
|
|
|
React = require 'react'
|
|
|
|
{Actions,
|
|
|
|
Utils,
|
|
|
|
Thread,
|
|
|
|
AddRemoveTagsTask,
|
|
|
|
NamespaceStore} = require 'nylas-exports'
|
|
|
|
|
|
|
|
class ThreadListIcon extends React.Component
|
|
|
|
@displayName: 'ThreadListIcon'
|
|
|
|
@propTypes:
|
|
|
|
thread: React.PropTypes.object
|
|
|
|
|
|
|
|
_iconType: =>
|
|
|
|
myEmail = NamespaceStore.current()?.emailAddress
|
|
|
|
|
|
|
|
if @props.thread.hasTagId('starred')
|
|
|
|
return 'thread-icon-star'
|
2015-06-10 01:35:21 +08:00
|
|
|
|
|
|
|
if @props.thread.unread
|
2015-06-09 08:02:50 +08:00
|
|
|
return 'thread-icon-unread thread-icon-star-on-hover'
|
2015-06-10 01:35:21 +08:00
|
|
|
|
|
|
|
msgs = @_nonDraftMessages()
|
|
|
|
last = msgs[msgs.length - 1]
|
|
|
|
|
|
|
|
if msgs.length > 1 and last.from[0]?.email is myEmail
|
|
|
|
if Utils.isForwardedMessage(last)
|
|
|
|
return 'thread-icon-forwarded thread-icon-star-on-hover'
|
|
|
|
else
|
|
|
|
return 'thread-icon-replied thread-icon-star-on-hover'
|
|
|
|
|
|
|
|
return 'thread-icon-star-on-hover'
|
|
|
|
|
|
|
|
_nonDraftMessages: =>
|
|
|
|
msgs = @props.thread.metadata
|
|
|
|
return [] unless msgs and msgs instanceof Array
|
|
|
|
msgs = _.filter msgs, (m) -> m.isSaved() and not m.draft
|
|
|
|
return msgs
|
2015-06-09 08:02:50 +08:00
|
|
|
|
|
|
|
render: =>
|
|
|
|
<div className="thread-icon #{@_iconType()}" onClick={@_onToggleStar}></div>
|
|
|
|
|
|
|
|
_onToggleStar: (event) =>
|
|
|
|
if @props.thread.hasTagId('starred')
|
|
|
|
star = new AddRemoveTagsTask(@props.thread, [], ['starred'])
|
|
|
|
else
|
|
|
|
star = new AddRemoveTagsTask(@props.thread, ['starred'], [])
|
|
|
|
Actions.queueTask(star)
|
|
|
|
|
|
|
|
# Don't trigger the thread row click
|
|
|
|
event.stopPropagation()
|
|
|
|
|
|
|
|
module.exports = ThreadListIcon
|