_ = require 'underscore' React = require "react/addons" classNames = require 'classnames' ThreadListStore = require './thread-list-store' {RetinaImg} = require 'nylas-component-kit' {Actions, TaskFactory, CategoryStore, FocusedContentStore, FocusedMailViewStore} = require "nylas-exports" class ThreadBulkArchiveButton extends React.Component @displayName: 'ThreadBulkArchiveButton' @containerRequired: false @propTypes: selection: React.PropTypes.object.isRequired render: -> mailViewFilter = FocusedMailViewStore.mailView() return false unless mailViewFilter?.canArchiveThreads() _onArchive: => task = TaskFactory.taskForArchiving threads: @props.selection.items(), fromView: FocusedMailViewStore.mailView() Actions.queueTask(task) class ThreadBulkTrashButton extends React.Component @displayName: 'ThreadBulkTrashButton' @containerRequired: false @propTypes: selection: React.PropTypes.object.isRequired render: -> mailViewFilter = FocusedMailViewStore.mailView() return false unless mailViewFilter?.canTrashThreads() _onRemove: => task = TaskFactory.taskForMovingToTrash threads: @props.selection.items(), fromView: FocusedMailViewStore.mailView() Actions.queueTask(task) class ThreadBulkStarButton extends React.Component @displayName: 'ThreadBulkStarButton' @containerRequired: false @propTypes: selection: React.PropTypes.object.isRequired render: -> noStars = _.every @props.selection.items(), (t) -> _.isMatch(t, {starred: false}) title = if noStars then "Star all" else "Remove stars from all" _onStar: => task = TaskFactory.taskForInvertingStarred(threads: @props.selection.items()) Actions.queueTask(task) class ThreadBulkToggleUnreadButton extends React.Component @displayName: 'ThreadBulkToggleUnreadButton' @containerRequired: false @propTypes: selection: React.PropTypes.object.isRequired render: => postClickUnreadState = _.every @props.selection.items(), (t) -> _.isMatch(t, {unread: false}) fragment = if postClickUnreadState then "unread" else "read" _onClick: => task = TaskFactory.taskForInvertingUnread(threads: @props.selection.items()) Actions.queueTask(task) ThreadNavButtonMixin = getInitialState: -> @_getStateFromStores() componentDidMount: -> @_unsubscribe = ThreadListStore.listen @_onStoreChange @_unsubscribe_focus = FocusedContentStore.listen @_onStoreChange isFirstThread: -> selectedId = FocusedContentStore.focusedId('thread') ThreadListStore.view().get(0)?.id is selectedId isLastThread: -> selectedId = FocusedContentStore.focusedId('thread') lastIndex = ThreadListStore.view().count() - 1 ThreadListStore.view().get(lastIndex)?.id is selectedId componentWillUnmount: -> @_unsubscribe() @_unsubscribe_focus() _onStoreChange: -> @setState @_getStateFromStores() DownButton = React.createClass displayName: 'DownButton' mixins: [ThreadNavButtonMixin] render: ->
_classSet: -> classNames "btn-icon": true "message-toolbar-arrow": true "down": true "disabled": @state.disabled _onClick: -> return if @state.disabled NylasEnv.commands.dispatch(document.body, 'core:next-item') _getStateFromStores: -> disabled: @isLastThread() UpButton = React.createClass displayName: 'UpButton' mixins: [ThreadNavButtonMixin] render: ->
_classSet: -> classNames "btn-icon": true "message-toolbar-arrow": true "up": true "disabled": @state.disabled _onClick: -> return if @state.disabled NylasEnv.commands.dispatch(document.body, 'core:previous-item') _getStateFromStores: -> disabled: @isFirstThread() UpButton.containerRequired = false DownButton.containerRequired = false module.exports = { DownButton, UpButton, ThreadBulkArchiveButton, ThreadBulkTrashButton, ThreadBulkStarButton, ThreadBulkToggleUnreadButton }