diff --git a/src/app/components/editor/Elements.tsx b/src/app/components/editor/Elements.tsx
index a7438ecd..6a6659b9 100644
--- a/src/app/components/editor/Elements.tsx
+++ b/src/app/components/editor/Elements.tsx
@@ -162,7 +162,7 @@ export function RenderElement({ attributes, element, children }: RenderElementPr
visibility="Hover"
hideTrack
>
-
{children}
+ {children}
);
diff --git a/src/app/components/message/content/style.css.ts b/src/app/components/message/content/style.css.ts
index f6cadd3c..93f3649c 100644
--- a/src/app/components/message/content/style.css.ts
+++ b/src/app/components/message/content/style.css.ts
@@ -16,6 +16,7 @@ export const AbsoluteContainer = style([
position: 'absolute',
top: 0,
left: 0,
+ zIndex: 1,
width: '100%',
height: '100%',
},
diff --git a/src/app/features/room/RoomTimeline.tsx b/src/app/features/room/RoomTimeline.tsx
index ac33f4c6..244eb327 100644
--- a/src/app/features/room/RoomTimeline.tsx
+++ b/src/app/features/room/RoomTimeline.tsx
@@ -936,7 +936,7 @@ export function RoomTimeline({
);
const handleReplyClick: MouseEventHandler = useCallback(
- (evt) => {
+ (evt, startThread = false) => {
const replyId = evt.currentTarget.getAttribute('data-event-id');
if (!replyId) {
console.warn('Button should have "data-event-id" attribute!');
@@ -947,7 +947,9 @@ export function RoomTimeline({
const editedReply = getEditedEvent(replyId, replyEvt, room.getUnfilteredTimelineSet());
const content: IContent = editedReply?.getContent()['m.new_content'] ?? replyEvt.getContent();
const { body, formatted_body: formattedBody } = content;
- const { 'm.relates_to': relation } = replyEvt.getWireContent();
+ const { 'm.relates_to': relation } = startThread
+ ? { 'm.relates_to': { rel_type: 'm.thread', event_id: replyId } }
+ : replyEvt.getWireContent();
const senderId = replyEvt.getSender();
if (senderId && typeof body === 'string') {
setReplyDraft({
diff --git a/src/app/features/room/message/Message.tsx b/src/app/features/room/message/Message.tsx
index b91491b1..e906a024 100644
--- a/src/app/features/room/message/Message.tsx
+++ b/src/app/features/room/message/Message.tsx
@@ -669,7 +669,10 @@ export type MessageProps = {
messageSpacing: MessageSpacing;
onUserClick: MouseEventHandler;
onUsernameClick: MouseEventHandler;
- onReplyClick: MouseEventHandler;
+ onReplyClick: (
+ ev: Parameters>[0],
+ startThread?: boolean
+ ) => void;
onEditId?: (eventId?: string) => void;
onReactionToggle: (targetEventId: string, key: string, shortcode?: string) => void;
reply?: ReactNode;
@@ -868,6 +871,8 @@ export const Message = as<'div', MessageProps>(
}, 100);
};
+ const isThreadedMessage = mEvent.threadRootId !== undefined;
+
return (
(
>
+ {!isThreadedMessage && (
+ onReplyClick(ev, true)}
+ data-event-id={mEvent.getId()}
+ variant="SurfaceVariant"
+ size="300"
+ radii="300"
+ >
+
+
+ )}
{canEditEvent(mx, mEvent) && onEditId && (
onEditId(mEvent.getId())}
@@ -1009,6 +1025,27 @@ export const Message = as<'div', MessageProps>(
Reply
+ {!isThreadedMessage && (
+ }
+ radii="300"
+ data-event-id={mEvent.getId()}
+ onClick={(evt: any) => {
+ onReplyClick(evt, true);
+ closeMenu();
+ }}
+ >
+
+ Reply in Thread
+
+
+ )}
{canEditEvent(mx, mEvent) && onEditId && (