[Glitch] Add support for editing for published statuses
Port front-end changes from 1060666c58 to glitch-soc
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
			
			
This commit is contained in:
		
							parent
							
								
									1af4618a06
								
							
						
					
					
						commit
						d4654dc892
					
				
					 6 changed files with 42 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -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…
	
		Reference in a new issue