wip quote post composing

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
This commit is contained in:
marcin mikołajczak
2022-01-23 18:44:17 +01:00
parent c0bee9be3c
commit 15d4910db5
15 changed files with 146 additions and 18 deletions

View File

@@ -21,6 +21,7 @@ import MarkdownButtonContainer from '../containers/markdown_button_container';
import PollButtonContainer from '../containers/poll_button_container';
import PollFormContainer from '../containers/poll_form_container';
import PrivacyDropdownContainer from '../containers/privacy_dropdown_container';
import QuotedStatusContainer from '../containers/quoted_status_container';
import ReplyIndicatorContainer from '../containers/reply_indicator_container';
import ReplyMentions from '../containers/reply_mentions_container';
import ScheduleButtonContainer from '../containers/schedule_button_container';
@@ -361,6 +362,8 @@ export default class ComposeForm extends ImmutablePureComponent {
}
</AutosuggestTextarea>
<QuotedStatusContainer />
<div className='compose-form__buttons-wrapper'>
<div className='compose-form__buttons'>
<UploadButtonContainer />

View File

@@ -0,0 +1,16 @@
import { connect } from 'react-redux';
import QuotedStatus from 'soapbox/features/status/components/quoted_status';
import { makeGetStatus } from 'soapbox/selectors';
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const mapStateToProps = state => ({
status: getStatus(state, { id: state.getIn(['compose', 'quote']) }),
});
return mapStateToProps;
};
export default connect(makeMapStateToProps)(QuotedStatus);

View File

@@ -9,7 +9,7 @@ import { Link, NavLink } from 'react-router-dom';
import HoverRefWrapper from 'soapbox/components/hover_ref_wrapper';
import Icon from 'soapbox/components/icon';
import QuotedStatus from 'soapbox/features/status/components/quoted_status';
import QuotedStatus from 'soapbox/features/status/containers/quoted_status_container';
import { getDomain } from 'soapbox/utils/accounts';
import Avatar from '../../../components/avatar';

View File

@@ -3,7 +3,6 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component';
import { FormattedMessage, injectIntl } from 'react-intl';
import { connect } from 'react-redux';
import { NavLink } from 'react-router-dom';
import AttachmentThumbs from 'soapbox/components/attachment_thumbs';
@@ -11,20 +10,8 @@ import Avatar from 'soapbox/components/avatar';
import DisplayName from 'soapbox/components/display_name';
import RelativeTimestamp from 'soapbox/components/relative_timestamp';
import { isRtl } from 'soapbox/rtl';
import { makeGetStatus } from 'soapbox/selectors';
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const mapStateToProps = (state, props) => ({
status: getStatus(state, { id: props.statusId }),
});
return mapStateToProps;
};
export default @connect(makeMapStateToProps)
@injectIntl
export default @injectIntl
class QuotedStatus extends ImmutablePureComponent {
static contextTypes = {

View File

@@ -0,0 +1,17 @@
import { connect } from 'react-redux';
import { makeGetStatus } from 'soapbox/selectors';
import QuotedStatus from '../components/quoted_status';
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const mapStateToProps = (state, props) => ({
status: getStatus(state, { id: props.statusId }),
});
return mapStateToProps;
};
export default connect(makeMapStateToProps)(QuotedStatus);

View File

@@ -28,6 +28,7 @@ import {
replyCompose,
mentionCompose,
directCompose,
quoteCompose,
} from '../../actions/compose';
import { simpleEmojiReact } from '../../actions/emoji_reacts';
import {
@@ -258,6 +259,19 @@ class Status extends ImmutablePureComponent {
});
}
handleQuoteClick = (status, e) => {
const { askReplyConfirmation, dispatch, intl } = this.props;
if (askReplyConfirmation) {
dispatch(openModal('CONFIRM', {
message: intl.formatMessage(messages.replyMessage),
confirm: intl.formatMessage(messages.replyConfirm),
onConfirm: () => dispatch(quoteCompose(status, this.context.router.history)),
}));
} else {
dispatch(quoteCompose(status, this.context.router.history));
}
}
handleDeleteClick = (status, history, withRedraft = false) => {
const { dispatch, intl } = this.props;
@@ -681,6 +695,7 @@ class Status extends ImmutablePureComponent {
onFavourite={this.handleFavouriteClick}
onEmojiReact={this.handleEmojiReactClick}
onReblog={this.handleReblogClick}
onQuote={this.handleQuoteClick}
onDelete={this.handleDeleteClick}
onDirect={this.handleDirectClick}
onChat={this.handleChatClick}

View File

@@ -23,6 +23,7 @@ const mapStateToProps = state => {
composeText: state.getIn(['compose', 'text']),
privacy: state.getIn(['compose', 'privacy']),
inReplyTo: state.getIn(['compose', 'in_reply_to']),
quote: state.getIn(['compose', 'quote']),
};
};
@@ -35,6 +36,7 @@ class ComposeModal extends ImmutablePureComponent {
composeText: PropTypes.string,
privacy: PropTypes.string,
inReplyTo: PropTypes.string,
quote: PropTypes.string,
dispatch: PropTypes.func.isRequired,
};
@@ -56,12 +58,14 @@ class ComposeModal extends ImmutablePureComponent {
};
renderTitle = () => {
const { privacy, inReplyTo } = this.props;
const { privacy, inReplyTo, quote } = this.props;
if (privacy === 'direct') {
return <FormattedMessage id='navigation_bar.compose_direct' defaultMessage='Direct message' />;
} else if (inReplyTo) {
return <FormattedMessage id='navigation_bar.compose_reply' defaultMessage='Reply to post' />;
} else if (quote) {
return <FormattedMessage id='navigation_bar.compose_quote' defaultMessage='Quote post' />;
} else {
return <FormattedMessage id='navigation_bar.compose' defaultMessage='Compose new post' />;
}