mirror of https://github.com/vector-im/riot-web
Add reply in thread hint to m.replace relations
parent
65c7657e3c
commit
94573568fd
|
@ -35,7 +35,7 @@ import { getKeyBindingsManager, MessageComposerAction } from '../../../KeyBindin
|
||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
||||||
import SendHistoryManager from '../../../SendHistoryManager';
|
import SendHistoryManager from '../../../SendHistoryManager';
|
||||||
import Modal from '../../../Modal';
|
import Modal from '../../../Modal';
|
||||||
import { MsgType } from 'matrix-js-sdk/src/@types/event';
|
import { MsgType, UNSTABLE_ELEMENT_REPLY_IN_THREAD } from 'matrix-js-sdk/src/@types/event';
|
||||||
import { Room } from 'matrix-js-sdk/src/models/room';
|
import { Room } from 'matrix-js-sdk/src/models/room';
|
||||||
import ErrorDialog from "../dialogs/ErrorDialog";
|
import ErrorDialog from "../dialogs/ErrorDialog";
|
||||||
import QuestionDialog from "../dialogs/QuestionDialog";
|
import QuestionDialog from "../dialogs/QuestionDialog";
|
||||||
|
@ -46,7 +46,7 @@ import SettingsStore from "../../../settings/SettingsStore";
|
||||||
|
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { withMatrixClientHOC, MatrixClientProps } from '../../../contexts/MatrixClientContext';
|
import { withMatrixClientHOC, MatrixClientProps } from '../../../contexts/MatrixClientContext';
|
||||||
import RoomContext from '../../../contexts/RoomContext';
|
import RoomContext, { AppRenderingContext } from '../../../contexts/RoomContext';
|
||||||
|
|
||||||
function getHtmlReplyFallback(mxEvent: MatrixEvent): string {
|
function getHtmlReplyFallback(mxEvent: MatrixEvent): string {
|
||||||
const html = mxEvent.getContent().formatted_body;
|
const html = mxEvent.getContent().formatted_body;
|
||||||
|
@ -67,7 +67,11 @@ function getTextReplyFallback(mxEvent: MatrixEvent): string {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
function createEditContent(model: EditorModel, editedEvent: MatrixEvent): IContent {
|
function createEditContent(
|
||||||
|
model: EditorModel,
|
||||||
|
editedEvent: MatrixEvent,
|
||||||
|
renderingContext?: AppRenderingContext,
|
||||||
|
): IContent {
|
||||||
const isEmote = containsEmote(model);
|
const isEmote = containsEmote(model);
|
||||||
if (isEmote) {
|
if (isEmote) {
|
||||||
model = stripEmoteCommand(model);
|
model = stripEmoteCommand(model);
|
||||||
|
@ -100,13 +104,19 @@ function createEditContent(model: EditorModel, editedEvent: MatrixEvent): IConte
|
||||||
contentBody.formatted_body = `${htmlPrefix} * ${formattedBody}`;
|
contentBody.formatted_body = `${htmlPrefix} * ${formattedBody}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.assign({
|
const relation = {
|
||||||
"m.new_content": newContent,
|
"m.new_content": newContent,
|
||||||
"m.relates_to": {
|
"m.relates_to": {
|
||||||
"rel_type": "m.replace",
|
"rel_type": "m.replace",
|
||||||
"event_id": editedEvent.getId(),
|
"event_id": editedEvent.getId(),
|
||||||
},
|
},
|
||||||
}, contentBody);
|
};
|
||||||
|
|
||||||
|
if (renderingContext === AppRenderingContext.Thread) {
|
||||||
|
relation['m.relates_to'][UNSTABLE_ELEMENT_REPLY_IN_THREAD.name] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.assign(relation, contentBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IEditMessageComposerProps extends MatrixClientProps {
|
interface IEditMessageComposerProps extends MatrixClientProps {
|
||||||
|
@ -132,8 +142,11 @@ class EditMessageComposer extends React.Component<IEditMessageComposerProps, ISt
|
||||||
|
|
||||||
const isRestored = this.createEditorModel();
|
const isRestored = this.createEditorModel();
|
||||||
const ev = this.props.editState.getEvent();
|
const ev = this.props.editState.getEvent();
|
||||||
|
|
||||||
|
const renderingContext = this.context.renderingContext;
|
||||||
|
const editContent = createEditContent(this.model, ev, renderingContext);
|
||||||
this.state = {
|
this.state = {
|
||||||
saveDisabled: !isRestored || !this.isContentModified(createEditContent(this.model, ev)["m.new_content"]),
|
saveDisabled: !isRestored || !this.isContentModified(editContent["m.new_content"]),
|
||||||
};
|
};
|
||||||
|
|
||||||
window.addEventListener("beforeunload", this.saveStoredEditorState);
|
window.addEventListener("beforeunload", this.saveStoredEditorState);
|
||||||
|
@ -356,8 +369,8 @@ class EditMessageComposer extends React.Component<IEditMessageComposerProps, ISt
|
||||||
const position = this.model.positionForOffset(caret.offset, caret.atNodeEnd);
|
const position = this.model.positionForOffset(caret.offset, caret.atNodeEnd);
|
||||||
this.editorRef.current?.replaceEmoticon(position, REGEX_EMOTICON);
|
this.editorRef.current?.replaceEmoticon(position, REGEX_EMOTICON);
|
||||||
}
|
}
|
||||||
|
const renderingContext = this.context.renderingContext;
|
||||||
const editContent = createEditContent(this.model, editedEvent);
|
const editContent = createEditContent(this.model, editedEvent, renderingContext);
|
||||||
const newContent = editContent["m.new_content"];
|
const newContent = editContent["m.new_content"];
|
||||||
|
|
||||||
let shouldSend = true;
|
let shouldSend = true;
|
||||||
|
|
Loading…
Reference in New Issue