mirror of
https://github.com/mastodon/mastodon.git
synced 2024-06-01 18:32:39 +00:00
aa2035e2a7
This removes the last usage of the old and deprecated React context API (which will be removed from React 19, and outputs deprecation warnings in React 18.3). Modern context can be used through `contextType` in class components, but it makes them not explicit when consumed (it would have been `this.context.me`, not `this.context.identity.me`). I preferred to switch to injecting an `identity` prop using a wrapper component inspired by `withOptionalRouter`, so consuming identity is explicit (`this.props.identity`).
66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
import PropTypes from 'prop-types';
|
|
import { PureComponent } from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';
|
|
import ServerBanner from 'mastodon/components/server_banner';
|
|
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
|
|
import SearchContainer from 'mastodon/features/compose/containers/search_container';
|
|
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
|
|
|
|
import LinkFooter from './link_footer';
|
|
|
|
class ComposePanel extends PureComponent {
|
|
static propTypes = {
|
|
identity: identityContextPropShape,
|
|
dispatch: PropTypes.func.isRequired,
|
|
};
|
|
|
|
onFocus = () => {
|
|
const { dispatch } = this.props;
|
|
dispatch(changeComposing(true));
|
|
};
|
|
|
|
onBlur = () => {
|
|
const { dispatch } = this.props;
|
|
dispatch(changeComposing(false));
|
|
};
|
|
|
|
componentDidMount () {
|
|
const { dispatch } = this.props;
|
|
dispatch(mountCompose());
|
|
}
|
|
|
|
componentWillUnmount () {
|
|
const { dispatch } = this.props;
|
|
dispatch(unmountCompose());
|
|
}
|
|
|
|
render() {
|
|
const { signedIn } = this.props.identity;
|
|
|
|
return (
|
|
<div className='compose-panel' onFocus={this.onFocus}>
|
|
<SearchContainer openInRoute />
|
|
|
|
{!signedIn && (
|
|
<>
|
|
<ServerBanner />
|
|
<div className='flex-spacer' />
|
|
</>
|
|
)}
|
|
|
|
{signedIn && (
|
|
<ComposeFormContainer singleColumn />
|
|
)}
|
|
|
|
<LinkFooter />
|
|
</div>
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
export default connect()(withIdentity(ComposePanel));
|