Fix column header scrolling with the page (#11458)
Regression from aa22b38
This commit is contained in:
		
							parent
							
								
									c4043ba2f2
								
							
						
					
					
						commit
						706a48ee1f
					
				| @ -1,5 +1,6 @@ | |||||||
| import React from 'react'; | import React from 'react'; | ||||||
| import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||||
|  | import { createPortal } from 'react-dom'; | ||||||
| import classNames from 'classnames'; | import classNames from 'classnames'; | ||||||
| import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; | import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; | ||||||
| import Icon from 'mastodon/components/icon'; | import Icon from 'mastodon/components/icon'; | ||||||
| @ -28,6 +29,7 @@ class ColumnHeader extends React.PureComponent { | |||||||
|     showBackButton: PropTypes.bool, |     showBackButton: PropTypes.bool, | ||||||
|     children: PropTypes.node, |     children: PropTypes.node, | ||||||
|     pinned: PropTypes.bool, |     pinned: PropTypes.bool, | ||||||
|  |     placeholder: PropTypes.bool, | ||||||
|     onPin: PropTypes.func, |     onPin: PropTypes.func, | ||||||
|     onMove: PropTypes.func, |     onMove: PropTypes.func, | ||||||
|     onClick: PropTypes.func, |     onClick: PropTypes.func, | ||||||
| @ -79,7 +81,7 @@ class ColumnHeader extends React.PureComponent { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   render () { |   render () { | ||||||
|     const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage } } = this.props; |     const { title, icon, active, children, pinned, multiColumn, extraButton, showBackButton, intl: { formatMessage }, placeholder } = this.props; | ||||||
|     const { collapsed, animating } = this.state; |     const { collapsed, animating } = this.state; | ||||||
| 
 | 
 | ||||||
|     const wrapperClassName = classNames('column-header__wrapper', { |     const wrapperClassName = classNames('column-header__wrapper', { | ||||||
| @ -146,7 +148,7 @@ class ColumnHeader extends React.PureComponent { | |||||||
| 
 | 
 | ||||||
|     const hasTitle = icon && title; |     const hasTitle = icon && title; | ||||||
| 
 | 
 | ||||||
|     return ( |     const component = ( | ||||||
|       <div className={wrapperClassName}> |       <div className={wrapperClassName}> | ||||||
|         <h1 className={buttonClassName}> |         <h1 className={buttonClassName}> | ||||||
|           {hasTitle && ( |           {hasTitle && ( | ||||||
| @ -172,6 +174,12 @@ class ColumnHeader extends React.PureComponent { | |||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     ); |     ); | ||||||
|  | 
 | ||||||
|  |     if (multiColumn || placeholder) { | ||||||
|  |       return component; | ||||||
|  |     } else { | ||||||
|  |       return createPortal(component, document.getElementById('tabs-bar__portal')); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -146,6 +146,7 @@ class Status extends ImmutablePureComponent { | |||||||
|     descendantsIds: ImmutablePropTypes.list, |     descendantsIds: ImmutablePropTypes.list, | ||||||
|     intl: PropTypes.object.isRequired, |     intl: PropTypes.object.isRequired, | ||||||
|     askReplyConfirmation: PropTypes.bool, |     askReplyConfirmation: PropTypes.bool, | ||||||
|  |     multiColumn: PropTypes.bool, | ||||||
|     domain: PropTypes.string.isRequired, |     domain: PropTypes.string.isRequired, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| @ -437,13 +438,13 @@ class Status extends ImmutablePureComponent { | |||||||
| 
 | 
 | ||||||
|   render () { |   render () { | ||||||
|     let ancestors, descendants; |     let ancestors, descendants; | ||||||
|     const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain } = this.props; |     const { shouldUpdateScroll, status, ancestorsIds, descendantsIds, intl, domain, multiColumn } = this.props; | ||||||
|     const { fullscreen } = this.state; |     const { fullscreen } = this.state; | ||||||
| 
 | 
 | ||||||
|     if (status === null) { |     if (status === null) { | ||||||
|       return ( |       return ( | ||||||
|         <Column> |         <Column> | ||||||
|           <ColumnBackButton /> |           <ColumnBackButton multiColumn={multiColumn} /> | ||||||
|           <MissingIndicator /> |           <MissingIndicator /> | ||||||
|         </Column> |         </Column> | ||||||
|       ); |       ); | ||||||
| @ -473,6 +474,7 @@ class Status extends ImmutablePureComponent { | |||||||
|       <Column label={intl.formatMessage(messages.detailedStatus)}> |       <Column label={intl.formatMessage(messages.detailedStatus)}> | ||||||
|         <ColumnHeader |         <ColumnHeader | ||||||
|           showBackButton |           showBackButton | ||||||
|  |           multiColumn={multiColumn} | ||||||
|           extraButton={( |           extraButton={( | ||||||
|             <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button> |             <button className='column-header__button' title={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} aria-label={intl.formatMessage(status.get('hidden') ? messages.revealAll : messages.hideAll)} onClick={this.handleToggleAll} aria-pressed={status.get('hidden') ? 'false' : 'true'}><Icon id={status.get('hidden') ? 'eye-slash' : 'eye'} /></button> | ||||||
|           )} |           )} | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ export default class ColumnLoading extends ImmutablePureComponent { | |||||||
|     let { title, icon } = this.props; |     let { title, icon } = this.props; | ||||||
|     return ( |     return ( | ||||||
|       <Column> |       <Column> | ||||||
|         <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} /> |         <ColumnHeader icon={icon} title={title} multiColumn={false} focusable={false} placeholder /> | ||||||
|         <div className='scrollable' /> |         <div className='scrollable' /> | ||||||
|       </Column> |       </Column> | ||||||
|     ); |     ); | ||||||
|  | |||||||
| @ -73,9 +73,13 @@ class TabsBar extends React.PureComponent { | |||||||
|     const { intl: { formatMessage } } = this.props; |     const { intl: { formatMessage } } = this.props; | ||||||
| 
 | 
 | ||||||
|     return ( |     return ( | ||||||
|       <nav className='tabs-bar' ref={this.setRef}> |       <div className='tabs-bar__wrapper'> | ||||||
|         {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} |         <nav className='tabs-bar' ref={this.setRef}> | ||||||
|       </nav> |           {links.map(link => React.cloneElement(link, { key: link.props.to, onClick: this.handleClick, 'aria-label': formatMessage({ id: link.props['data-preview-title-id'] }) }))} | ||||||
|  |         </nav> | ||||||
|  | 
 | ||||||
|  |         <div id='tabs-bar__portal' /> | ||||||
|  |       </div> | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ body { | |||||||
| 
 | 
 | ||||||
|     &.layout-single-column { |     &.layout-single-column { | ||||||
|       height: auto; |       height: auto; | ||||||
|       min-height: 100%; |       min-height: 100vh; | ||||||
|       overflow-y: scroll; |       overflow-y: scroll; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1852,6 +1852,26 @@ a.account__display-name { | |||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .tabs-bar__wrapper { | ||||||
|  |   background: darken($ui-base-color, 8%); | ||||||
|  |   position: sticky; | ||||||
|  |   top: 0; | ||||||
|  |   z-index: 2; | ||||||
|  |   padding-top: 0; | ||||||
|  | 
 | ||||||
|  |   @media screen and (min-width: $no-gap-breakpoint) { | ||||||
|  |     padding-top: 10px; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   .tabs-bar { | ||||||
|  |     margin-bottom: 0; | ||||||
|  | 
 | ||||||
|  |     @media screen and (min-width: $no-gap-breakpoint) { | ||||||
|  |       margin-bottom: 10px; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
| .react-swipeable-view-container { | .react-swipeable-view-container { | ||||||
|   &, |   &, | ||||||
|   .columns-area, |   .columns-area, | ||||||
| @ -1949,9 +1969,6 @@ a.account__display-name { | |||||||
|   background: lighten($ui-base-color, 8%); |   background: lighten($ui-base-color, 8%); | ||||||
|   flex: 0 0 auto; |   flex: 0 0 auto; | ||||||
|   overflow-y: auto; |   overflow-y: auto; | ||||||
|   position: sticky; |  | ||||||
|   top: 0; |  | ||||||
|   z-index: 3; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .tabs-bar__link { | .tabs-bar__link { | ||||||
| @ -2014,6 +2031,14 @@ a.account__display-name { | |||||||
|     padding: 0; |     padding: 0; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   //.column { | ||||||
|  |   //  margin-top: 0; | ||||||
|  | 
 | ||||||
|  |   //  @media screen and (min-width: $no-gap-breakpoint) { | ||||||
|  |   //    margin-top: 10px; | ||||||
|  |   //  } | ||||||
|  |   //} | ||||||
|  | 
 | ||||||
|   .autosuggest-textarea__textarea { |   .autosuggest-textarea__textarea { | ||||||
|     font-size: 16px; |     font-size: 16px; | ||||||
|   } |   } | ||||||
| @ -2039,6 +2064,7 @@ a.account__display-name { | |||||||
| 
 | 
 | ||||||
|   @media screen and (min-width: $no-gap-breakpoint) { |   @media screen and (min-width: $no-gap-breakpoint) { | ||||||
|     padding: 10px 0; |     padding: 10px 0; | ||||||
|  |     padding-top: 0; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   @media screen and (min-width: 630px) { |   @media screen and (min-width: 630px) { | ||||||
| @ -2153,13 +2179,11 @@ a.account__display-name { | |||||||
| 
 | 
 | ||||||
| @media screen and (min-width: $no-gap-breakpoint) { | @media screen and (min-width: $no-gap-breakpoint) { | ||||||
|   .tabs-bar { |   .tabs-bar { | ||||||
|     margin: 10px auto; |  | ||||||
|     margin-bottom: 0; |  | ||||||
|     width: 100%; |     width: 100%; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .react-swipeable-view-container .columns-area--mobile { |   .react-swipeable-view-container .columns-area--mobile { | ||||||
|     height: calc(100% - 20px) !important; |     height: calc(100% - 10px) !important; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .getting-started__wrapper, |   .getting-started__wrapper, | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user