Merge pull request #362 from ThibG/glitch-soc/fix-notifications-clearing
Revert 245816ab2721f386184878d71be01143d207abf5 (fixes #348)
This commit is contained in:
		
						commit
						136458eaf4
					
				| @ -1,15 +1,10 @@ | ||||
| import React from 'react'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import scheduleIdleTask from 'flavours/glitch/util/schedule_idle_task'; | ||||
| import getRectFromEntry from 'flavours/glitch/util/get_rect_from_entry'; | ||||
| import { is } from 'immutable'; | ||||
| 
 | ||||
| // Diff these props in the "rendered" state
 | ||||
| const updateOnPropsForRendered = ['id', 'index', 'listLength']; | ||||
| // Diff these props in the "unrendered" state
 | ||||
| const updateOnPropsForUnrendered = ['id', 'index', 'listLength', 'cachedHeight']; | ||||
| 
 | ||||
| export default class IntersectionObserverArticle extends React.Component { | ||||
| export default class IntersectionObserverArticle extends ImmutablePureComponent { | ||||
| 
 | ||||
|   static propTypes = { | ||||
|     intersectionObserverWrapper: PropTypes.object.isRequired, | ||||
| @ -27,15 +22,18 @@ export default class IntersectionObserverArticle extends React.Component { | ||||
|   } | ||||
| 
 | ||||
|   shouldComponentUpdate (nextProps, nextState) { | ||||
|     const isUnrendered = !this.state.isIntersecting && (this.state.isHidden || this.props.cachedHeight); | ||||
|     const willBeUnrendered = !nextState.isIntersecting && (nextState.isHidden || nextProps.cachedHeight); | ||||
|     if (!!isUnrendered !== !!willBeUnrendered) { | ||||
|       // If we're going from rendered to unrendered (or vice versa) then update
 | ||||
|     if (!nextState.isIntersecting && 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 (and updated ARIA attributes).
 | ||||
|       return this.state.isIntersecting || !this.state.isHidden || nextProps.listLength !== this.props.listLength; | ||||
|     } else if (nextState.isIntersecting && !this.state.isIntersecting) { | ||||
|       // 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 props
 | ||||
|     const propsToDiff = isUnrendered ? updateOnPropsForUnrendered : updateOnPropsForRendered; | ||||
|     return !propsToDiff.every(prop => is(nextProps[prop], this.props[prop])); | ||||
|     // Otherwise, diff based on "updateOnProps" and "updateOnStates"
 | ||||
|     return super.shouldComponentUpdate(nextProps, nextState); | ||||
|   } | ||||
| 
 | ||||
|   componentDidMount () { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user