{fullDisplay ?
@@ -234,6 +258,18 @@ function draftyFormatter(style, data, values, key) {
case 'RW':
// Form element formatting is dependent on element content.
break;
+ case 'QQ':
+ // Quote/citation.
+ attr.className = 'reply-quote'
+ attr.onClick = this.handleQuoteClick;
+ break;
+ case 'QH':
+ // Quote header.
+ attr.className = 'reply-quote-header';
+ break;
+ case 'QB':
+ // Quote body.
+ break;
default:
if (el == '_UNKN') {
// Unknown element.
@@ -247,3 +283,5 @@ function draftyFormatter(style, data, values, key) {
return values;
}
};
+
+export default injectIntl(ChatMessage);
diff --git a/src/widgets/context-menu.jsx b/src/widgets/context-menu.jsx
index 6777c4a8..83bd9701 100644
--- a/src/widgets/context-menu.jsx
+++ b/src/widgets/context-menu.jsx
@@ -45,6 +45,11 @@ const messages = defineMessages({
defaultMessage: 'Unmute',
description: 'Turn notifications on'
},
+ reply: {
+ id: 'menu_item_reply',
+ defaultMessage: 'Reply',
+ description: 'Reply to message'
+ },
topic_delete: {
id: 'menu_item_delete_topic',
defaultMessage: 'Delete',
@@ -171,6 +176,13 @@ class ContextMenu extends React.Component {
return this.retryMessage(params, errorHandler);
}
},
+ 'menu_item_reply': {
+ id: 'menu_item_reply',
+ title: formatMessage(messages.reply),
+ handler: (params, errorHandler) => {
+ return this.replyToMessage(params, errorHandler);
+ }
+ },
'topic_unmute': {
id: 'topic_unmute',
title: formatMessage(messages.unmute),
@@ -411,6 +423,11 @@ class ContextMenu extends React.Component {
return result;
}
+ replyToMessage(params, errorHandler) {
+ console.log("Reply to message", params);
+ params.pickReply({ seq: params.seq, content: params.content })
+ }
+
render() {
let count = 0;
let menu = [];
diff --git a/src/widgets/send-message.jsx b/src/widgets/send-message.jsx
index bf268d50..d02ca082 100644
--- a/src/widgets/send-message.jsx
+++ b/src/widgets/send-message.jsx
@@ -50,6 +50,8 @@ class SendMessage extends React.PureComponent {
this.handleSend = this.handleSend.bind(this);
this.handleKeyPress = this.handleKeyPress.bind(this);
this.handleMessageTyping = this.handleMessageTyping.bind(this);
+
+ this.handleQuoteClick = this.handleQuoteClick.bind(this);
}
componentDidMount() {
@@ -141,6 +143,17 @@ class SendMessage extends React.PureComponent {
this.setState(newState);
}
+ handleQuoteClick(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ if (this.props.replyTo) {
+ //quote = Drafty.format(this.props.replyTo.content, quoteFormatter, this);
+ //quote = Drafty.format(this.props.replyTo.content, this.props.onFormatQuote, this);
+ const replyToSeq = this.props.replyTo.seq;
+ this.props.onQuoteClick(replyToSeq);
+ }
+ }
+
render() {
const {formatMessage} = this.props.intl;
const prompt = this.props.disabled ?
@@ -148,7 +161,22 @@ class SendMessage extends React.PureComponent {
(this.props.messagePrompt ?
formatMessage(messages[this.props.messagePrompt]) :
formatMessage(messages.type_new_message));
+
+ let quote = null;
+ if (this.props.replyTo) {
+ quote = Drafty.format(this.props.replyTo.content, this.props.onFormatQuote, this);
+ }
+
return (
+
+ {quote ?
+
+ :
+ null}
+
{!this.props.disabled ?
<>
@@ -182,6 +210,7 @@ class SendMessage extends React.PureComponent {
{prompt}
}
+
);
}
};