mirror of https://github.com/mastodon/mastodon
Improve performance of compose form
parent
5997bb47a8
commit
974d712fbe
@ -0,0 +1,32 @@
|
||||
import PureRenderMixin from 'react-addons-pure-render-mixin';
|
||||
import { FormattedMessage } from 'react-intl';
|
||||
import Toggle from 'react-toggle';
|
||||
import Collapsable from '../../../components/collapsable';
|
||||
|
||||
const UnlistedToggle = React.createClass({
|
||||
|
||||
propTypes: {
|
||||
isPrivate: React.PropTypes.bool,
|
||||
isUnlisted: React.PropTypes.bool,
|
||||
isReplyToOther: React.PropTypes.bool,
|
||||
onChangeListability: React.PropTypes.func.isRequired
|
||||
},
|
||||
|
||||
mixins: [PureRenderMixin],
|
||||
|
||||
render () {
|
||||
const { isPrivate, isUnlisted, isReplyToOther, onChangeListability } = this.props;
|
||||
|
||||
return (
|
||||
<Collapsable isVisible={!(isPrivate || isReplyToOther)} fullHeight={39.5}>
|
||||
<label className='compose-form__label'>
|
||||
<Toggle checked={isUnlisted} onChange={onChangeListability} />
|
||||
<span className='compose-form__label__text'><FormattedMessage id='compose_form.unlisted' defaultMessage='Do not display on public timelines' /></span>
|
||||
</label>
|
||||
</Collapsable>
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
export default UnlistedToggle;
|
@ -0,0 +1,24 @@
|
||||
import { connect } from 'react-redux';
|
||||
import { cancelReplyCompose } from '../../../actions/compose';
|
||||
import { makeGetStatus } from '../../../selectors';
|
||||
import ReplyIndicator from '../components/reply_indicator';
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
const getStatus = makeGetStatus();
|
||||
|
||||
const mapStateToProps = (state, props) => ({
|
||||
status: getStatus(state, state.getIn(['compose', 'in_reply_to'])),
|
||||
});
|
||||
|
||||
return mapStateToProps;
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
||||
onCancel () {
|
||||
dispatch(cancelReplyCompose());
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
export default connect(makeMapStateToProps, mapDispatchToProps)(ReplyIndicator);
|
@ -0,0 +1,31 @@
|
||||
import { connect } from 'react-redux';
|
||||
import UnlistedToggle from '../components/unlisted_toggle';
|
||||
import { makeGetStatus } from '../../../selectors';
|
||||
import { changeComposeListability } from '../../../actions/compose';
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
const getStatus = makeGetStatus();
|
||||
|
||||
const mapStateToProps = state => {
|
||||
const status = getStatus(state, state.getIn(['compose', 'in_reply_to']));
|
||||
const me = state.getIn(['compose', 'me']);
|
||||
|
||||
return {
|
||||
isPrivate: state.getIn(['compose', 'private']),
|
||||
isUnlisted: state.getIn(['compose', 'unlisted']),
|
||||
isReplyToOther: status ? status.getIn(['account', 'id']) !== me : false
|
||||
};
|
||||
};
|
||||
|
||||
return mapStateToProps;
|
||||
};
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
|
||||
onChangeListability (e) {
|
||||
dispatch(changeComposeListability(e.target.checked));
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
export default connect(makeMapStateToProps, mapDispatchToProps)(UnlistedToggle);
|
Loading…
Reference in New Issue