diff --git a/.changeset/add_highlithing_to_to_be_replied.md b/.changeset/add_highlithing_to_to_be_replied.md new file mode 100644 index 000000000..2b868f80c --- /dev/null +++ b/.changeset/add_highlithing_to_to_be_replied.md @@ -0,0 +1,5 @@ +--- +default: minor +--- + +Highlight message that you are about to reply to! diff --git a/src/app/components/message/layout/Base.tsx b/src/app/components/message/layout/Base.tsx index edcf609a7..ca7e8c95a 100644 --- a/src/app/components/message/layout/Base.tsx +++ b/src/app/components/message/layout/Base.tsx @@ -4,12 +4,30 @@ import * as css from './layout.css'; export const MessageBase = as<'div', css.MessageBaseVariants>( ( - { className, highlight, notifyHighlight, selected, collapse, autoCollapse, space, ...props }, + { + className, + highlight, + notifyHighlight, + selected, + isMarked, + collapse, + autoCollapse, + space, + ...props + }, ref ) => (
>[0], @@ -1293,6 +1297,7 @@ export const Event = as<'div', EventProps>( mEvent, highlight, notifyHighlight, + isMarked, collapse, canDelete, onReplyClick, @@ -1388,6 +1393,7 @@ export const Event = as<'div', EventProps>( highlight={highlight} notifyHighlight={highlightMentions ? notifyHighlight : undefined} selected={!!menuAnchor} + isMarked={isMarked} {...props} {...hoverProps} {...focusWithinProps} diff --git a/src/app/hooks/timeline/useTimelineEventRenderer.tsx b/src/app/hooks/timeline/useTimelineEventRenderer.tsx index eb301257b..201d5ebe9 100644 --- a/src/app/hooks/timeline/useTimelineEventRenderer.tsx +++ b/src/app/hooks/timeline/useTimelineEventRenderer.tsx @@ -374,6 +374,7 @@ export function useTimelineEventRenderer({ const reactions = reactionRelations?.getSortedAnnotationsByKey(); const hasReactions = reactions && reactions.length > 0; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const pushActions = pushProcessor.actionsForEvent(mEvent); let notifyHighlight: 'silent' | 'loud' | undefined; @@ -429,6 +430,7 @@ export function useTimelineEventRenderer({ messageSpacing={messageSpacing} messageLayout={messageLayout} highlight={highlighted} + isMarked={marked} notifyHighlight={notifyHighlight} edit={editId === mEventId} canDelete={canRedact || (canDeleteOwn && senderId === mx.getUserId())} @@ -533,6 +535,7 @@ export function useTimelineEventRenderer({ const reactions = reactionRelations?.getSortedAnnotationsByKey(); const hasReactions = reactions && reactions.length > 0; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderDisplayName = getMemberDisplayName(room, senderId, nicknames) ?? getMxIdLocalPart(senderId) ?? senderId; @@ -553,6 +556,7 @@ export function useTimelineEventRenderer({ messageSpacing={messageSpacing} messageLayout={messageLayout} highlight={highlighted} + isMarked={marked} notifyHighlight={notifyHighlight} edit={editId === mEventId} canDelete={canRedact || (canDeleteOwn && senderId === mx.getUserId())} @@ -703,6 +707,7 @@ export function useTimelineEventRenderer({ const reactions = reactionRelations?.getSortedAnnotationsByKey(); const hasReactions = reactions && reactions.length > 0; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderDisplayName = getMemberDisplayName(room, senderId, nicknames) ?? getMxIdLocalPart(senderId) ?? senderId; @@ -718,6 +723,7 @@ export function useTimelineEventRenderer({ messageSpacing={messageSpacing} messageLayout={messageLayout} highlight={highlighted} + isMarked={marked} canDelete={canRedact || (canDeleteOwn && senderId === mx.getUserId())} canSendReaction={canSendReaction} canPinEvent={canPinEvent} @@ -814,6 +820,7 @@ export function useTimelineEventRenderer({ if (!membershipChanged && hideNickAvatarEvents) return null; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const parsed = parseMemberEvent(mEvent); const timeJSX = ( @@ -833,6 +840,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || mEvent.getSender() === mx.getUserId()} onReplyClick={onReplyClick} @@ -857,6 +865,7 @@ export function useTimelineEventRenderer({ }, [EventType.RoomName]: (mEventId, mEvent, item, timelineSet, collapse) => { const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -877,6 +886,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick} @@ -902,6 +912,7 @@ export function useTimelineEventRenderer({ }, [EventType.RoomTopic]: (mEventId, mEvent, item, timelineSet, collapse) => { const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -923,6 +934,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick} @@ -948,6 +960,7 @@ export function useTimelineEventRenderer({ }, [EventType.RoomAvatar]: (mEventId, mEvent, item, timelineSet, collapse) => { const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -969,6 +982,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick} @@ -994,6 +1008,7 @@ export function useTimelineEventRenderer({ }, [EventType.GroupCallMemberPrefix]: (mEventId, mEvent, item, timelineSet, collapse) => { const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId) || getMxIdLocalPart(senderId); @@ -1022,6 +1037,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} hideReadReceipts={hideReads} @@ -1048,6 +1064,7 @@ export function useTimelineEventRenderer({ [EventType.RoomPinnedEvents]: (mEventId, mEvent, item, timelineSet, collapse) => { if (!showHiddenEvents) return null; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -1080,6 +1097,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick} @@ -1133,6 +1151,7 @@ export function useTimelineEventRenderer({ (mEventId, mEvent, item, timelineSet, collapse) => { if (!showHiddenEvents) return null; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -1154,6 +1173,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick} @@ -1186,6 +1206,7 @@ export function useTimelineEventRenderer({ if (mEvent.isRedaction()) return null; const highlighted = focusItem?.index === item && focusItem.highlight; + const marked = activeReplyId === mEventId; const senderId = mEvent.getSender() ?? ''; const senderName = getMemberDisplayName(room, senderId, nicknames) || getMxIdLocalPart(senderId); @@ -1207,6 +1228,7 @@ export function useTimelineEventRenderer({ room={room} mEvent={mEvent} highlight={highlighted} + isMarked={marked} collapse={collapse} canDelete={canRedact || senderId === mx.getUserId()} onReplyClick={onReplyClick}