|
|
|
@ -68,6 +68,9 @@ class Status extends ImmutablePureComponent { |
|
|
|
|
static propTypes = { |
|
|
|
|
status: ImmutablePropTypes.map, |
|
|
|
|
account: ImmutablePropTypes.map, |
|
|
|
|
previousId: PropTypes.string, |
|
|
|
|
nextInReplyToId: PropTypes.string, |
|
|
|
|
rootId: PropTypes.string, |
|
|
|
|
onClick: PropTypes.func, |
|
|
|
|
onReply: PropTypes.func, |
|
|
|
|
onFavourite: PropTypes.func, |
|
|
|
@ -309,10 +312,7 @@ class Status extends ImmutablePureComponent { |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
render () { |
|
|
|
|
let media = null; |
|
|
|
|
let statusAvatar, prepend, rebloggedByText; |
|
|
|
|
|
|
|
|
|
const { intl, hidden, featured, unread, showThread, scrollKey, pictureInPicture } = this.props; |
|
|
|
|
const { intl, hidden, featured, unread, showThread, scrollKey, pictureInPicture, previousId, nextInReplyToId, rootId } = this.props; |
|
|
|
|
|
|
|
|
|
let { status, account, ...other } = this.props; |
|
|
|
|
|
|
|
|
@ -334,6 +334,8 @@ class Status extends ImmutablePureComponent { |
|
|
|
|
openMedia: this.handleHotkeyOpenMedia, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
let media, statusAvatar, prepend, rebloggedByText; |
|
|
|
|
|
|
|
|
|
if (hidden) { |
|
|
|
|
return ( |
|
|
|
|
<HotKeys handlers={handlers}> |
|
|
|
@ -345,7 +347,11 @@ class Status extends ImmutablePureComponent { |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const connectUp = previousId && previousId === status.get('in_reply_to_id'); |
|
|
|
|
const connectToRoot = rootId && rootId === status.get('in_reply_to_id'); |
|
|
|
|
const connectReply = nextInReplyToId && nextInReplyToId === status.get('id'); |
|
|
|
|
const matchedFilters = status.get('matched_filters'); |
|
|
|
|
|
|
|
|
|
if (this.state.forceFilter === undefined ? matchedFilters : this.state.forceFilter) { |
|
|
|
|
const minHandlers = this.props.muted ? {} : { |
|
|
|
|
moveUp: this.handleHotkeyMoveUp, |
|
|
|
@ -519,7 +525,9 @@ class Status extends ImmutablePureComponent { |
|
|
|
|
<div className={classNames('status__wrapper', `status__wrapper-${status.get('visibility')}`, { 'status__wrapper-reply': !!status.get('in_reply_to_id'), unread, focusable: !this.props.muted })} tabIndex={this.props.muted ? null : 0} data-featured={featured ? 'true' : null} aria-label={textForScreenReader(intl, status, rebloggedByText)} ref={this.handleRef}> |
|
|
|
|
{prepend} |
|
|
|
|
|
|
|
|
|
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), muted: this.props.muted })} data-id={status.get('id')}> |
|
|
|
|
<div className={classNames('status', `status-${status.get('visibility')}`, { 'status-reply': !!status.get('in_reply_to_id'), 'status--in-thread': !!rootId, 'status--first-in-thread': previousId && (!connectUp || connectToRoot), muted: this.props.muted })} data-id={status.get('id')}> |
|
|
|
|
{(connectReply || connectUp || connectToRoot) && <div className={classNames('status__line', { 'status__line--full': connectReply, 'status__line--first': !status.get('in_reply_to_id') && !connectToRoot })} />} |
|
|
|
|
|
|
|
|
|
{/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */} |
|
|
|
|
<div onClick={this.handleClick} className='status__info'> |
|
|
|
|
<a href={`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`} className='status__relative-time' target='_blank' rel='noopener noreferrer'> |
|
|
|
|