Setup composer actions within threaded timelines.

This commit is contained in:
Stefan Ceriu
2025-06-03 17:53:43 +03:00
committed by Stefan Ceriu
parent c3a9e5deaa
commit 21e07e164c
9 changed files with 66 additions and 37 deletions
@@ -120,9 +120,11 @@ final class ThreadTimelineScreenCoordinator: CoordinatorProtocol {
actionsSubject.send(.presentLocationViewer(body: body, geoURI: geoURI, description: description))
case .displayResolveSendFailure(let failure, let sendHandle):
actionsSubject.send(.presentResolveSendFailure(failure: failure, sendHandle: sendHandle))
case .displayThread, .composer, .hasScrolled, .displayRoom:
case .hasScrolled, .displayRoom:
break
case .viewInRoomTimeline:
case .composer(let action):
composerViewModel.process(timelineAction: action)
case .viewInRoomTimeline, .displayThread:
fatalError("The action: \(action) should not be sent to this coordinator")
}
}
@@ -125,7 +125,7 @@ struct TimelineItemMenuActionProvider {
secondaryActions = secondaryActions.filter(\.canAppearInRedacted)
}
let isReactable = timelineKind == .live || timelineKind == .detached || timelineKind == .thread ? item.isReactable : false
let isReactable = timelineKind == .live || timelineKind == .detached || timelineKind.isThread ? item.isReactable : false
return .init(isReactable: isReactable, actions: actions, secondaryActions: secondaryActions, emojiProvider: emojiProvider)
}
@@ -120,7 +120,7 @@ struct TimelineItemBubbledStylerView<Content: View>: View {
.onTapGesture { }
}
if context.viewState.timelineKind != .thread, let threadSummary = timelineItem.properties.threadSummary {
if !context.viewState.timelineKind.isThread, let threadSummary = timelineItem.properties.threadSummary {
TimelineThreadSummaryView(threadSummary: threadSummary) {
context.send(viewAction: .displayThread(itemID: timelineItem.id))
}
@@ -177,7 +177,7 @@ struct TimelineItemBubbledStylerView<Content: View>: View {
@ViewBuilder
var contentWithReply: some View {
TimelineBubbleLayout(spacing: 8) {
if context.viewState.timelineKind != .thread, timelineItem.properties.isThreaded {
if !context.viewState.timelineKind.isThread, timelineItem.properties.isThreaded {
ThreadDecorator()
.padding(.leading, 4)
.layoutPriority(TimelineBubbleLayout.Priority.regularText)
@@ -213,7 +213,7 @@ struct TimelineItemBubbledStylerView<Content: View>: View {
}
private var shouldShowReplyDetails: Bool {
!timelineItem.properties.isThreaded || (timelineItem.properties.isThreaded && context.viewState.timelineKind != .thread)
!timelineItem.properties.isThreaded || (timelineItem.properties.isThreaded && !context.viewState.timelineKind.isThread)
}
private var messageBubbleTopPadding: CGFloat {