[Glitch] Display AttachmentList in timelines in compact style when media missing
Port 5079c1e322 to glitch-soc
			
			
This commit is contained in:
		
							parent
							
								
									ae55717f50
								
							
						
					
					
						commit
						9454cfc0ad
					
				
					 3 changed files with 74 additions and 38 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| import React from 'react'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| 
 | ||||
| const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; | ||||
|  | @ -8,10 +9,25 @@ export default class AttachmentList extends ImmutablePureComponent { | |||
| 
 | ||||
|   static propTypes = { | ||||
|     media: ImmutablePropTypes.list.isRequired, | ||||
|     compact: PropTypes.bool, | ||||
|   }; | ||||
| 
 | ||||
|   render () { | ||||
|     const { media } = this.props; | ||||
|     const { media, compact } = this.props; | ||||
| 
 | ||||
|     if (compact) { | ||||
|       return ( | ||||
|         <div className='attachment-list compact'> | ||||
|           <ul className='attachment-list__list'> | ||||
|             {media.map(attachment => ( | ||||
|               <li key={attachment.get('id')}> | ||||
|                 <a href={attachment.get('remote_url')} target='_blank' rel='noopener'><i className='fa fa-link' /> {filename(attachment.get('remote_url'))}</a> | ||||
|               </li> | ||||
|             ))} | ||||
|           </ul> | ||||
|         </div> | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|       <div className='attachment-list'> | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ import StatusHeader from './status_header'; | |||
| import StatusIcons from './status_icons'; | ||||
| import StatusContent from './status_content'; | ||||
| import StatusActionBar from './status_action_bar'; | ||||
| import AttachmentList from './attachment_list'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import { MediaGallery, Video } from 'flavours/glitch/util/async-components'; | ||||
| import { HotKeys } from 'react-hotkeys'; | ||||
|  | @ -311,7 +312,12 @@ export default class Status extends ImmutablePureComponent { | |||
|     attachments = status.get('media_attachments'); | ||||
|     if (attachments.size > 0 && !muted) { | ||||
|       if (attachments.some(item => item.get('type') === 'unknown')) {  //  Media type is 'unknown'
 | ||||
|         /*  Do nothing  */ | ||||
|         media = ( | ||||
|           <AttachmentList | ||||
|             compact | ||||
|             media={status.get('media_attachments')} | ||||
|           /> | ||||
|         ); | ||||
|       } else if (attachments.getIn([0, 'type']) === 'video') {  //  Media type is 'video'
 | ||||
|         const video = status.getIn(['media_attachments', 0]); | ||||
| 
 | ||||
|  |  | |||
|  | @ -5,45 +5,59 @@ | |||
|   border-radius: 4px; | ||||
|   margin-top: 14px; | ||||
|   overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| .attachment-list__icon { | ||||
|   flex: 0 0 auto; | ||||
|   color: $ui-base-lighter-color; | ||||
|   padding: 8px 18px; | ||||
|   cursor: default; | ||||
|   border-right: 1px solid lighten($ui-base-color, 8%); | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
|   font-size: 26px; | ||||
| 
 | ||||
|   .fa { | ||||
|     display: block; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .attachment-list__list { | ||||
|   list-style: none; | ||||
|   padding: 4px 0; | ||||
|   padding-left: 8px; | ||||
|   display: flex; | ||||
|   flex-direction: column; | ||||
|   justify-content: center; | ||||
| 
 | ||||
|   li { | ||||
|     display: block; | ||||
|     padding: 4px 0; | ||||
|   } | ||||
| 
 | ||||
|   a { | ||||
|     text-decoration: none; | ||||
|   &__icon { | ||||
|     flex: 0 0 auto; | ||||
|     color: $ui-base-lighter-color; | ||||
|     font-weight: 500; | ||||
|     padding: 8px 18px; | ||||
|     cursor: default; | ||||
|     border-right: 1px solid lighten($ui-base-color, 8%); | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     align-items: center; | ||||
|     justify-content: center; | ||||
|     font-size: 26px; | ||||
| 
 | ||||
|     &:hover { | ||||
|       text-decoration: underline; | ||||
|     .fa { | ||||
|       display: block; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   &__list { | ||||
|     list-style: none; | ||||
|     padding: 4px 0; | ||||
|     padding-left: 8px; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     justify-content: center; | ||||
| 
 | ||||
|     li { | ||||
|       display: block; | ||||
|       padding: 4px 0; | ||||
|     } | ||||
| 
 | ||||
|     a { | ||||
|       text-decoration: none; | ||||
|       color: $ui-base-lighter-color; | ||||
|       font-weight: 500; | ||||
| 
 | ||||
|       &:hover { | ||||
|         text-decoration: underline; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   &.compact { | ||||
|     border: 0; | ||||
|     margin-top: 4px; | ||||
| 
 | ||||
|     .attachment-list__list { | ||||
|       padding: 0; | ||||
|       display: block; | ||||
|     } | ||||
| 
 | ||||
|     .fa { | ||||
|       color: $ui-base-lighter-color; | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue