_ = require 'underscore' path = require 'path' fs = require 'fs' React = require 'react' {RetinaImg, Flexbox} = require 'nylas-component-kit' {Actions, Utils, FileDownloadStore} = require 'nylas-exports' class AttachmentComponent extends React.Component @displayName: 'AttachmentComponent' @propTypes: file: React.PropTypes.object.isRequired download: React.PropTypes.object removable: React.PropTypes.bool targetPath: React.PropTypes.string messageClientId: React.PropTypes.string constructor: (@props) -> @state = progressPercent: 0 render: =>
{@props.file.displayName()} {@_renderFileActions()}
_renderFileActions: => if @props.removable
{@_renderRemoveIcon()}
else if @_isDownloading() and @_canAbortDownload()
{@_renderRemoveIcon()}
else
{@_renderDownloadButton()}
_downloadProgressStyle: => width: "#{@props.download?.percent ? 0}%" _canAbortDownload: -> true _canClickToView: => not @props.removable _isDownloading: => @props.download?.state is "downloading" _renderRemoveIcon: -> _renderDownloadButton: -> _onDragStart: (event) => path = FileDownloadStore.pathForFile(@props.file) if fs.existsSync(path) DownloadURL = "#{@props.file.contentType}:#{@props.file.displayName()}:file://#{path}" event.dataTransfer.setData("DownloadURL", DownloadURL) event.dataTransfer.setData("text/nylas-file-url", DownloadURL) else event.preventDefault() return _onClickView: => Actions.fetchAndOpenFile(@props.file) if @_canClickToView() _onClickRemove: (event) => Actions.removeFile file: @props.file messageClientId: @props.messageClientId event.stopPropagation() # Prevent 'onClickView' _onClickDownload: (event) => Actions.fetchAndSaveFile(@props.file) event.stopPropagation() # Prevent 'onClickView' _onClickAbort: (event) => Actions.abortFetchFile(@props.file) event.stopPropagation() # Prevent 'onClickView' module.exports = AttachmentComponent