element-hq/element-x-ios/issues/2636 - Expose paths for focusing replied-to timeline items by tapping on an in-reply-to message bubble

This commit is contained in:
Stefan Ceriu
2024-04-16 09:16:06 +03:00
committed by Stefan Ceriu
parent 43c132720d
commit 83c620d685
10 changed files with 252 additions and 147 deletions
@@ -19,8 +19,15 @@ import Foundation
enum TimelineItemReplyDetails: Hashable {
case notLoaded(eventID: String)
case loading(eventID: String)
case loaded(sender: TimelineItemSender, eventContent: TimelineEventContent)
case loaded(sender: TimelineItemSender, eventID: String, eventContent: TimelineEventContent)
case error(eventID: String, message: String)
var eventID: String {
switch self {
case .notLoaded(let eventID), .loading(let eventID), .loaded(_, let eventID, _), .error(let eventID, _):
return eventID
}
}
}
enum TimelineEventContent: Hashable {
@@ -640,7 +640,7 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
switch timelineItem.kind() {
case .message:
return timelineItemReplyDetails(for: timelineItem.asMessage()?.msgtype(), sender: sender)
return timelineItemReplyDetails(sender: sender, eventID: details.eventId, messageType: timelineItem.asMessage()?.msgtype())
case .poll(let question, _, _, _, _, _, _):
replyContent = .poll(question: question)
case .sticker(let body, _, _):
@@ -651,13 +651,13 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
replyContent = .message(.text(.init(body: L10n.commonUnsupportedEvent)))
}
return .loaded(sender: sender, eventContent: replyContent)
return .loaded(sender: sender, eventID: details.eventId, eventContent: replyContent)
case let .error(message):
return .error(eventID: details.eventId, message: message)
}
}
private func timelineItemReplyDetails(for messageType: MessageType?, sender: TimelineItemSender) -> TimelineItemReplyDetails {
private func timelineItemReplyDetails(sender: TimelineItemSender, eventID: String, messageType: MessageType?) -> TimelineItemReplyDetails {
let replyContent: EventBasedMessageTimelineItemContentType
switch messageType {
@@ -685,7 +685,9 @@ struct RoomTimelineItemFactory: RoomTimelineItemFactoryProtocol {
replyContent = .text(.init(body: L10n.commonUnsupportedEvent))
}
return .loaded(sender: sender, eventContent: .message(replyContent))
return .loaded(sender: sender,
eventID: eventID,
eventContent: .message(replyContent))
}
}