From bfbc2ca0d8dcef47f8581585b42f13b6b4c933d9 Mon Sep 17 00:00:00 2001 From: Eugen Date: Wed, 19 Apr 2017 15:37:18 +0200 Subject: Attachment list for uncached attachments (#2110) * For undownloaded attachments, set type :unknown, display them as a list in the web UI * Fix case when attachment type is set explicitly --- .../components/components/attachment_list.jsx | 34 ++++++++++++++++++++++ .../javascripts/components/components/status.jsx | 5 +++- .../features/status/components/detailed_status.jsx | 5 +++- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/components/components/attachment_list.jsx (limited to 'app/assets/javascripts') diff --git a/app/assets/javascripts/components/components/attachment_list.jsx b/app/assets/javascripts/components/components/attachment_list.jsx new file mode 100644 index 000000000..56238fe19 --- /dev/null +++ b/app/assets/javascripts/components/components/attachment_list.jsx @@ -0,0 +1,34 @@ +import ImmutablePropTypes from 'react-immutable-proptypes'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; + +const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; + +const AttachmentList = React.createClass({ + propTypes: { + media: ImmutablePropTypes.list.isRequired + }, + + mixins: [PureRenderMixin], + + render () { + const { media } = this.props; + + return ( +
+
+ +
+ + +
+ ); + } +}); + +export default AttachmentList; diff --git a/app/assets/javascripts/components/components/status.jsx b/app/assets/javascripts/components/components/status.jsx index abc123f26..a5b9ad87c 100644 --- a/app/assets/javascripts/components/components/status.jsx +++ b/app/assets/javascripts/components/components/status.jsx @@ -5,6 +5,7 @@ import PureRenderMixin from 'react-addons-pure-render-mixin'; import DisplayName from './display_name'; import MediaGallery from './media_gallery'; import VideoPlayer from './video_player'; +import AttachmentList from './attachment_list'; import StatusContent from './status_content'; import StatusActionBar from './status_action_bar'; import { FormattedMessage } from 'react-intl'; @@ -77,7 +78,9 @@ const Status = React.createClass({ } if (status.get('media_attachments').size > 0 && !this.props.muted) { - if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) { + + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { media = ; } else { media = ; diff --git a/app/assets/javascripts/components/features/status/components/detailed_status.jsx b/app/assets/javascripts/components/features/status/components/detailed_status.jsx index 9d854f0d3..620af36fe 100644 --- a/app/assets/javascripts/components/features/status/components/detailed_status.jsx +++ b/app/assets/javascripts/components/features/status/components/detailed_status.jsx @@ -5,6 +5,7 @@ import DisplayName from '../../../components/display_name'; import StatusContent from '../../../components/status_content'; import MediaGallery from '../../../components/media_gallery'; import VideoPlayer from '../../../components/video_player'; +import AttachmentList from '../../../components/attachment_list'; import { Link } from 'react-router'; import { FormattedDate, FormattedNumber } from 'react-intl'; import CardContainer from '../containers/card_container'; @@ -40,7 +41,9 @@ const DetailedStatus = React.createClass({ let applicationLink = ''; if (status.get('media_attachments').size > 0) { - if (status.getIn(['media_attachments', 0, 'type']) === 'video') { + if (status.get('media_attachments').some(item => item.get('type') === 'unknown')) { + media = ; + } else if (status.getIn(['media_attachments', 0, 'type']) === 'video') { media = ; } else { media = ; -- cgit