isHidden: false,
}
+ // Avoid checking props that are functions (and whose equality will always
+ // evaluate to false. See react-immutable-pure-component for usage.
+ updateOnProps = [
+ 'status',
+ 'account',
+ 'wrapped',
+ 'me',
+ 'boostModal',
+ 'autoPlayGif',
+ 'muted',
+ ]
+
+ updateOnStates = []
+
+ shouldComponentUpdate (nextProps, nextState) {
+ if (nextProps.isIntersecting === false && nextState.isHidden) {
+ // It's only if we're not intersecting (i.e. offscreen) and isHidden is true
+ // that either "isIntersecting" or "isHidden" matter, and then they're
+ // the only things that matter.
+ return this.props.isIntersecting !== false || !this.state.isHidden;
+ } else if (nextProps.isIntersecting !== false && this.props.isIntersecting === false) {
+ // If we're going from a non-intersecting state to an intersecting state,
+ // (i.e. offscreen to onscreen), then we definitely need to re-render
+ return true;
+ }
+ // Otherwise, diff based on "updateOnProps" and "updateOnStates"
+ return super.shouldComponentUpdate(nextProps, nextState);
+ }
+
componentWillReceiveProps (nextProps) {
if (nextProps.isIntersecting === false && this.props.isIntersecting !== false) {
requestIdleCallback(() => this.setState({ isHidden: true }));
}
}
- shouldComponentUpdate (nextProps, nextState) {
- if (nextProps.isIntersecting === false && this.props.isIntersecting !== false) {
- return nextState.isHidden;
- }
-
- return true;
- }
-
handleRef = (node) => {
if (this.props.onRef) {
this.props.onRef(node);
import IconButton from './icon_button';
import DropdownMenu from './dropdown_menu';
import { defineMessages, injectIntl } from 'react-intl';
+import ImmutablePureComponent from 'react-immutable-pure-component';
const messages = defineMessages({
delete: { id: 'status.delete', defaultMessage: 'Delete' },
unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' },
});
-class StatusActionBar extends React.PureComponent {
+class StatusActionBar extends ImmutablePureComponent {
static contextTypes = {
router: PropTypes.object,
intl: PropTypes.object.isRequired,
};
+ // Avoid checking props that are functions (and whose equality will always
+ // evaluate to false. See react-immutable-pure-component for usage.
+ updateOnProps = [
+ 'status',
+ 'me',
+ 'withDismiss',
+ ]
+
handleReplyClick = () => {
this.props.onReply(this.props.status, this.context.router);
}