60731df277
the logo wasn’t showing on the small screen layout. this fixes that. it also neatly aligns the buttons in the header area.
124 lines
3.8 KiB
React
124 lines
3.8 KiB
React
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 { openModal } from "flavours/glitch/actions/modal";
|
|
import { fetchServer } from "flavours/glitch/actions/server";
|
|
import { Avatar } from "flavours/glitch/components/avatar";
|
|
import { Icon } from "flavours/glitch/components/icon";
|
|
import { WordmarkLogo, SymbolLogo } from "flavours/glitch/components/logo";
|
|
import Permalink from "flavours/glitch/components/permalink";
|
|
import { registrationsOpen, me, sso_redirect } from "flavours/glitch/initial_state";
|
|
|
|
const Account = connect(state => ({
|
|
account: state.getIn(["accounts", me]),
|
|
}))(({ account }) => (
|
|
<Permalink href={account.get("url")} to={`/@${account.get("acct")}`} title={account.get("acct")}>
|
|
<Avatar account={account} size={34} />
|
|
</Permalink>
|
|
));
|
|
|
|
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" && <Link to='/search' className='button button-secondary' aria-label={intl.formatMessage(messages.search)}><Icon id='magnifying-glass' /></Link>}
|
|
{location.pathname !== "/publish" && <Link to='/publish' className='button button-secondary'><FormattedMessage id='compose_form.publish_form' defaultMessage='New post' /></Link>}
|
|
<Account />
|
|
</>
|
|
);
|
|
} else {
|
|
|
|
if (sso_redirect) {
|
|
content = (
|
|
<a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>
|
|
);
|
|
} else {
|
|
let signupButton;
|
|
|
|
if (registrationsOpen) {
|
|
signupButton = (
|
|
<a href={signupUrl} className='button'>
|
|
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
|
</a>
|
|
);
|
|
} else {
|
|
signupButton = (
|
|
<button className='button' onClick={openClosedRegistrationsModal}>
|
|
<FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />
|
|
</button>
|
|
);
|
|
}
|
|
|
|
content = (
|
|
<>
|
|
{signupButton}
|
|
<a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>
|
|
</>
|
|
);
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div className='ui__header'>
|
|
<Link to='/' className='ui__header__logo'>
|
|
<Icon id='gts-simple' />
|
|
</Link>
|
|
|
|
<div className='ui__header__links'>
|
|
{content}
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
export default injectIntl(withRouter(connect(mapStateToProps, mapDispatchToProps)(Header)));
|