52 lines
2.1 KiB
Swift
52 lines
2.1 KiB
Swift
/*
|
|
Copyright 2020-2024 New Vector Ltd.
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
Please see LICENSE in the repository root for full details.
|
|
*/
|
|
|
|
import Foundation
|
|
|
|
/// `RoomReactionsViewModelBuilder` enables to build a RoomReactionsViewModel for a given `RoomBubbleCellData` and `MXKRoomBubbleComponent` index.
|
|
@objcMembers
|
|
final class RoomReactionsViewModelBuilder: NSObject {
|
|
|
|
func buildForFirstVisibleComponent(of roomBubbleCellData: RoomBubbleCellData) -> RoomReactionsViewModel? {
|
|
|
|
guard roomBubbleCellData.firstVisibleComponentIndex() != NSNotFound else {
|
|
return nil
|
|
}
|
|
|
|
return self.build(from: roomBubbleCellData, componentIndex: roomBubbleCellData.firstVisibleComponentIndex())
|
|
}
|
|
|
|
func build(from roomBubbleCellData: RoomBubbleCellData, componentIndex: Int) -> RoomReactionsViewModel? {
|
|
|
|
let isCollapsableCellCollapsed = roomBubbleCellData.collapsable && roomBubbleCellData.collapsed
|
|
|
|
guard isCollapsableCellCollapsed == false else {
|
|
return nil
|
|
}
|
|
|
|
guard let bubbleComponents = roomBubbleCellData.bubbleComponents, componentIndex < roomBubbleCellData.bubbleComponents.count else {
|
|
return nil
|
|
}
|
|
|
|
let bubbleComponent: MXKRoomBubbleComponent = bubbleComponents[componentIndex]
|
|
|
|
guard let bubbleComponentEvent = bubbleComponent.event,
|
|
bubbleComponentEvent.isRedactedEvent() == false,
|
|
let componentEventId = bubbleComponentEvent.eventId,
|
|
let cellDataReactions = roomBubbleCellData.reactions,
|
|
let componentReactions = cellDataReactions[componentEventId] as? MXAggregatedReactions,
|
|
let aggregatedReactions = componentReactions.withNonZeroCount() else {
|
|
return nil
|
|
}
|
|
|
|
let showAllReactions = roomBubbleCellData.showAllReactions(forEvent: componentEventId)
|
|
return RoomReactionsViewModel(aggregatedReactions: aggregatedReactions,
|
|
eventId: componentEventId,
|
|
showAll: showAllReactions)
|
|
}
|
|
}
|