import PropTypes from 'prop-types'; import { PureComponent } from 'react'; import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; import { Link, withRouter } from 'react-router-dom'; import { connect } from 'react-redux'; import SearchIcon from 'mastodon/../material-icons/400-24px/search.svg?react'; import { openModal } from 'mastodon/actions/modal'; import { fetchServer } from 'mastodon/actions/server'; import { Avatar } from 'mastodon/components/avatar'; import { Icon } from 'mastodon/components/icon'; import { WordmarkLogo, SymbolLogo } from 'mastodon/components/logo'; import { registrationsOpen, me, sso_redirect } from 'mastodon/initial_state'; const Account = connect(state => ({ account: state.getIn(['accounts', me]), }))(({ account }) => ( )); const messages = defineMessages({ search: { id: 'navigation_bar.search', defaultMessage: 'Search' }, }); const mapStateToProps = (state) => ({ signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up', }); const mapDispatchToProps = (dispatch) => ({ openClosedRegistrationsModal() { dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })); }, dispatchServer() { dispatch(fetchServer()); } }); class Header extends PureComponent { static contextTypes = { identity: PropTypes.object, }; static propTypes = { openClosedRegistrationsModal: PropTypes.func, location: PropTypes.object, signupUrl: PropTypes.string.isRequired, dispatchServer: PropTypes.func, intl: PropTypes.object.isRequired, }; componentDidMount () { const { dispatchServer } = this.props; dispatchServer(); } render () { const { signedIn } = this.context.identity; const { location, openClosedRegistrationsModal, signupUrl, intl } = this.props; let content; if (signedIn) { content = ( <> {location.pathname !== '/search' && } {location.pathname !== '/publish' && } ); } else { if (sso_redirect) { content = ( ); } else { let signupButton; if (registrationsOpen) { signupButton = ( ); } else { signupButton = ( ); } content = ( <> {signupButton} ); } } return (
{content}
); } } export default injectIntl(withRouter(connect(mapStateToProps, mapDispatchToProps)(Header)));