import Icon from 'mastodon/components/icon';
import PollContainer from 'mastodon/containers/poll_container';
import { displayMedia } from '../initial_state';
+import { is } from 'immutable';
// We use the component (and not the container) since we do not want
// to use the progress bar to show download progress
return values.join(', ');
};
+export const defaultMediaVisibility = (status) => {
+ if (!status) {
+ return undefined;
+ }
+
+ if (status.get('reblog', null) !== null && typeof status.get('reblog') === 'object') {
+ status = status.get('reblog');
+ }
+
+ return (displayMedia !== 'hide_all' && !status.get('sensitive') || displayMedia === 'show_all');
+};
+
export default @injectIntl
class Status extends ImmutablePureComponent {
];
state = {
- showMedia: displayMedia !== 'hide_all' && !this.props.status.get('sensitive') || displayMedia === 'show_all',
+ showMedia: defaultMediaVisibility(this.props.status),
};
// Track height changes we know about to compensate scrolling
}
}
+ componentWillReceiveProps (nextProps) {
+ if (!is(nextProps.status, this.props.status) && nextProps.status) {
+ this.setState({ showMedia: defaultMediaVisibility(nextProps.status) });
+ }
+ }
+
// Compensate height changes
componentDidUpdate (prevProps, prevState, snapshot) {
const doShowCard = !this.props.muted && !this.props.hidden && this.props.status && this.props.status.get('card');
+
if (doShowCard && !this.didShowCard) {
this.didShowCard = true;
+
if (snapshot !== null && this.props.updateScrollBottom) {
if (this.node && this.node.offsetTop < snapshot.top) {
this.props.updateScrollBottom(snapshot.height - snapshot.top);
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { HotKeys } from 'react-hotkeys';
-import { boostModal, deleteModal, displayMedia } from '../../initial_state';
+import { boostModal, deleteModal } from '../../initial_state';
import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from '../ui/util/fullscreen';
-import { textForScreenReader } from '../../components/status';
+import { textForScreenReader, defaultMediaVisibility } from '../../components/status';
import Icon from 'mastodon/components/icon';
const messages = defineMessages({
state = {
fullscreen: false,
- showMedia: !this.props.status ? undefined : (displayMedia !== 'hide_all' && !this.props.status.get('sensitive') || displayMedia === 'show_all'),
+ showMedia: defaultMediaVisibility(this.props.status),
};
componentWillMount () {
this._scrolledIntoView = false;
this.props.dispatch(fetchStatus(nextProps.params.statusId));
}
+
if (!Immutable.is(nextProps.status, this.props.status) && nextProps.status) {
- this.setState({ showMedia: displayMedia !== 'hide_all' && !nextProps.status.get('sensitive') || displayMedia === 'show_all' });
+ this.setState({ showMedia: defaultMediaVisibility(nextProps.status) });
}
}