- import React from 'react';
- import { FormattedMessage } from 'react-intl';
- import PropTypes from 'prop-types';
- import Icon from 'mastodon/components/icon';
- import { createPortal } from 'react-dom';
-
- export default class ColumnBackButton extends React.PureComponent {
-
- static contextTypes = {
- router: PropTypes.object,
- };
-
- static propTypes = {
- multiColumn: PropTypes.bool,
- };
-
- handleClick = () => {
- if (window.history && window.history.length === 1) {
- this.context.router.history.push('/');
- } else {
- this.context.router.history.goBack();
- }
- }
-
- render () {
- const { multiColumn } = this.props;
-
- const component = (
- <button onClick={this.handleClick} className='column-back-button'>
- <Icon id='chevron-left' className='column-back-button__icon' fixedWidth />
- <FormattedMessage id='column_back_button.label' defaultMessage='Back' />
- </button>
- );
-
- if (multiColumn) {
- return component;
- } else {
- // The portal container and the component may be rendered to the DOM in
- // the same React render pass, so the container might not be available at
- // the time `render()` is called.
- const container = document.getElementById('tabs-bar__portal');
- if (container === null) {
- // The container wasn't available, force a re-render so that the
- // component can eventually be inserted in the container and not scroll
- // with the rest of the area.
- this.forceUpdate();
- return component;
- } else {
- return createPortal(component, container);
- }
- }
- }
-
- }
|