Fix scrolling to detailed status not always working (#28577)
This commit is contained in:
		@@ -582,16 +582,20 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
    ));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setRef = c => {
 | 
			
		||||
  setContainerRef = c => {
 | 
			
		||||
    this.node = c;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  setStatusRef = c => {
 | 
			
		||||
    this.statusNode = c;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  _scrollStatusIntoView () {
 | 
			
		||||
    const { status, multiColumn } = this.props;
 | 
			
		||||
 | 
			
		||||
    if (status) {
 | 
			
		||||
      window.requestAnimationFrame(() => {
 | 
			
		||||
        this.node?.querySelector('.detailed-status__wrapper')?.scrollIntoView(true);
 | 
			
		||||
      requestIdleCallback(() => {
 | 
			
		||||
        this.statusNode?.scrollIntoView(true);
 | 
			
		||||
 | 
			
		||||
        // In the single-column interface, `scrollIntoView` will put the post behind the header,
 | 
			
		||||
        // so compensate for that.
 | 
			
		||||
@@ -629,9 +633,8 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Scroll to focused post if it is loaded
 | 
			
		||||
    const child = this.node?.querySelector('.detailed-status__wrapper');
 | 
			
		||||
    if (child) {
 | 
			
		||||
      return [0, child.offsetTop];
 | 
			
		||||
    if (this.statusNode) {
 | 
			
		||||
      return [0, this.statusNode.offsetTop];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Do not scroll otherwise, `componentDidUpdate` will take care of that
 | 
			
		||||
@@ -692,11 +695,11 @@ class Status extends ImmutablePureComponent {
 | 
			
		||||
        />
 | 
			
		||||
 | 
			
		||||
        <ScrollContainer scrollKey='thread' shouldUpdateScroll={this.shouldUpdateScroll}>
 | 
			
		||||
          <div className={classNames('scrollable', { fullscreen })} ref={this.setRef}>
 | 
			
		||||
          <div className={classNames('scrollable', { fullscreen })} ref={this.setContainerRef}>
 | 
			
		||||
            {ancestors}
 | 
			
		||||
 | 
			
		||||
            <HotKeys handlers={handlers}>
 | 
			
		||||
              <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)}>
 | 
			
		||||
              <div className={classNames('focusable', 'detailed-status__wrapper', `detailed-status__wrapper-${status.get('visibility')}`)} tabIndex={0} aria-label={textForScreenReader(intl, status, false)} ref={this.setStatusRef}>
 | 
			
		||||
                <DetailedStatus
 | 
			
		||||
                  key={`details-${status.get('id')}`}
 | 
			
		||||
                  status={status}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user