[Glitch] Add support for editing for published statuses
Port front-end changes from 1060666c583670bb3b89ed5154e61038331e30c3 to glitch-soc Signed-off-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
		
							parent
							
								
									1af4618a06
								
							
						
					
					
						commit
						d4654dc892
					
				| @ -54,9 +54,10 @@ export function normalizeStatus(status, normalOldStatus) { | ||||
|     normalStatus.poll = status.poll.id; | ||||
|   } | ||||
| 
 | ||||
|   // Only calculate these values when status first encountered
 | ||||
|   // Otherwise keep the ones already in the reducer
 | ||||
|   if (normalOldStatus) { | ||||
|   // Only calculate these values when status first encountered and
 | ||||
|   // when the underlying values change. Otherwise keep the ones
 | ||||
|   // already in the reducer
 | ||||
|   if (normalOldStatus && normalOldStatus.get('content') === normalStatus.content && normalOldStatus.get('spoiler_text') === normalStatus.spoiler_text) { | ||||
|     normalStatus.search_index = normalOldStatus.get('search_index'); | ||||
|     normalStatus.contentHtml = normalOldStatus.get('contentHtml'); | ||||
|     normalStatus.spoilerHtml = normalOldStatus.get('spoilerHtml'); | ||||
|  | ||||
| @ -128,6 +128,9 @@ export function deleteStatusFail(id, error) { | ||||
|   }; | ||||
| }; | ||||
| 
 | ||||
| export const updateStatus = status => dispatch => | ||||
|   dispatch(importFetchedStatus(status)); | ||||
| 
 | ||||
| export function fetchContext(id) { | ||||
|   return (dispatch, getState) => { | ||||
|     dispatch(fetchContextRequest(id)); | ||||
|  | ||||
| @ -10,6 +10,7 @@ import { | ||||
| } from './timelines'; | ||||
| import { updateNotifications, expandNotifications } from './notifications'; | ||||
| import { updateConversations } from './conversations'; | ||||
| import { updateStatus } from './statuses'; | ||||
| import { | ||||
|   fetchAnnouncements, | ||||
|   updateAnnouncements, | ||||
| @ -75,6 +76,9 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti | ||||
|         case 'update': | ||||
|           dispatch(updateTimeline(timelineId, JSON.parse(data.payload), options.accept)); | ||||
|           break; | ||||
|         case 'status.update': | ||||
|           dispatch(updateStatus(JSON.parse(data.payload))); | ||||
|           break; | ||||
|         case 'delete': | ||||
|           dispatch(deleteFromTimelines(data.payload)); | ||||
|           break; | ||||
|  | ||||
| @ -38,6 +38,7 @@ const messages = defineMessages({ | ||||
|   admin_status: { id: 'status.admin_status', defaultMessage: 'Open this status in the moderation interface' }, | ||||
|   copy: { id: 'status.copy', defaultMessage: 'Copy link to status' }, | ||||
|   hide: { id: 'status.hide', defaultMessage: 'Hide toot' }, | ||||
|   edited: { id: 'status.edited', defaultMessage: 'Edited {date}' }, | ||||
| }); | ||||
| 
 | ||||
| export default @injectIntl | ||||
| @ -324,7 +325,9 @@ class StatusActionBar extends ImmutablePureComponent { | ||||
|           </div>, | ||||
|         ]} | ||||
| 
 | ||||
|         <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a> | ||||
|         <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'> | ||||
|           <RelativeTimestamp timestamp={status.get('created_at')} />{status.get('edited_at') && <abbr title={intl.formatMessage(messages.edited, { date: intl.formatDate(status.get('edited_at'), { hour12: false, year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) })}> *</abbr>} | ||||
|         </a> | ||||
|       </div> | ||||
|     ); | ||||
|   } | ||||
|  | ||||
| @ -7,7 +7,7 @@ import StatusContent from 'flavours/glitch/components/status_content'; | ||||
| import MediaGallery from 'flavours/glitch/components/media_gallery'; | ||||
| import AttachmentList from 'flavours/glitch/components/attachment_list'; | ||||
| import { Link } from 'react-router-dom'; | ||||
| import { FormattedDate } from 'react-intl'; | ||||
| import { injectIntl, FormattedDate, FormattedMessage } from 'react-intl'; | ||||
| import Card from './card'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import Video from 'flavours/glitch/features/video'; | ||||
| @ -20,7 +20,8 @@ import Icon from 'flavours/glitch/components/icon'; | ||||
| import AnimatedNumber from 'flavours/glitch/components/animated_number'; | ||||
| import PictureInPicturePlaceholder from 'flavours/glitch/components/picture_in_picture_placeholder'; | ||||
| 
 | ||||
| export default class DetailedStatus extends ImmutablePureComponent { | ||||
| export default @injectIntl | ||||
| class DetailedStatus extends ImmutablePureComponent { | ||||
| 
 | ||||
|   static contextTypes = { | ||||
|     router: PropTypes.object, | ||||
| @ -40,6 +41,7 @@ export default class DetailedStatus extends ImmutablePureComponent { | ||||
|     showMedia: PropTypes.bool, | ||||
|     usingPiP: PropTypes.bool, | ||||
|     onToggleMediaVisibility: PropTypes.func, | ||||
|     intl: PropTypes.object.isRequired, | ||||
|   }; | ||||
| 
 | ||||
|   state = { | ||||
| @ -111,7 +113,7 @@ export default class DetailedStatus extends ImmutablePureComponent { | ||||
| 
 | ||||
|   render () { | ||||
|     const status = (this.props.status && this.props.status.get('reblog')) ? this.props.status.get('reblog') : this.props.status; | ||||
|     const { expanded, onToggleHidden, settings, usingPiP } = this.props; | ||||
|     const { expanded, onToggleHidden, settings, usingPiP, intl } = this.props; | ||||
|     const outerStyle = { boxSizing: 'border-box' }; | ||||
|     const { compact } = this.props; | ||||
| 
 | ||||
| @ -125,6 +127,7 @@ export default class DetailedStatus extends ImmutablePureComponent { | ||||
|     let reblogLink = ''; | ||||
|     let reblogIcon = 'retweet'; | ||||
|     let favouriteLink = ''; | ||||
|     let edited = ''; | ||||
| 
 | ||||
|     if (this.props.measureHeight) { | ||||
|       outerStyle.height = `${this.state.height}px`; | ||||
| @ -258,6 +261,15 @@ export default class DetailedStatus extends ImmutablePureComponent { | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     if (status.get('edited_at')) { | ||||
|       edited = ( | ||||
|         <React.Fragment> | ||||
|           <React.Fragment> · </React.Fragment> | ||||
|           <FormattedMessage id='status.edited' defaultMessage='Edited {date}' values={{ date: intl.formatDate(status.get('edited_at'), { hour12: false, month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }) }} /> | ||||
|         </React.Fragment> | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|       <div style={outerStyle}> | ||||
|         <div ref={this.setRef} className={classNames('detailed-status', `detailed-status-${status.get('visibility')}`, { compact })} data-status-by={status.getIn(['account', 'acct'])}> | ||||
| @ -283,7 +295,7 @@ export default class DetailedStatus extends ImmutablePureComponent { | ||||
|           <div className='detailed-status__meta'> | ||||
|             <a className='detailed-status__datetime' href={status.get('url')} target='_blank' rel='noopener noreferrer'> | ||||
|               <FormattedDate value={new Date(status.get('created_at'))} hour12={false} year='numeric' month='short' day='2-digit' hour='2-digit' minute='2-digit' /> | ||||
|             </a>{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink} | ||||
|             </a>{edited}{visibilityLink}{applicationLink}{reblogLink} · {favouriteLink} | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|  | ||||
| @ -205,6 +205,17 @@ | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| .status__content__edited-label { | ||||
|   display: block; | ||||
|   cursor: default; | ||||
|   font-size: 15px; | ||||
|   line-height: 20px; | ||||
|   padding: 0; | ||||
|   padding-top: 8px; | ||||
|   color: $dark-text-color; | ||||
|   font-weight: 500; | ||||
| } | ||||
| 
 | ||||
| .status__content__spoiler-link { | ||||
|   display: inline-block; | ||||
|   border-radius: 2px; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user