2020-10-29 07:03:45 +01:00
|
|
|
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
|
|
|
|
import Combine
|
|
|
|
import Foundation
|
|
|
|
import Mastodon
|
|
|
|
import ServiceLayer
|
|
|
|
|
|
|
|
public final class ConversationViewModel: CollectionItemViewModel, ObservableObject {
|
|
|
|
public let accountViewModels: [AccountViewModel]
|
|
|
|
public let statusViewModel: StatusViewModel?
|
|
|
|
public let events: AnyPublisher<AnyPublisher<CollectionItemEvent, Error>, Never>
|
2021-01-26 01:45:18 +01:00
|
|
|
public let identityContext: IdentityContext
|
2020-10-29 07:03:45 +01:00
|
|
|
|
|
|
|
private let conversationService: ConversationService
|
|
|
|
private let eventsSubject = PassthroughSubject<AnyPublisher<CollectionItemEvent, Error>, Never>()
|
|
|
|
|
2021-01-26 01:06:35 +01:00
|
|
|
init(conversationService: ConversationService, identityContext: IdentityContext) {
|
2020-10-29 07:03:45 +01:00
|
|
|
accountViewModels = conversationService.conversation.accounts.map {
|
|
|
|
AccountViewModel(
|
|
|
|
accountService: conversationService.navigationService.accountService(account: $0),
|
2021-01-26 01:06:35 +01:00
|
|
|
identityContext: identityContext)
|
2020-10-29 07:03:45 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if let status = conversationService.conversation.lastStatus {
|
|
|
|
statusViewModel = StatusViewModel(
|
|
|
|
statusService: conversationService.navigationService.statusService(status: status),
|
2021-01-26 01:06:35 +01:00
|
|
|
identityContext: identityContext)
|
2020-10-29 07:03:45 +01:00
|
|
|
} else {
|
|
|
|
statusViewModel = nil
|
|
|
|
}
|
|
|
|
|
|
|
|
self.conversationService = conversationService
|
2021-01-26 01:06:35 +01:00
|
|
|
self.identityContext = identityContext
|
2020-10-29 07:03:45 +01:00
|
|
|
self.events = eventsSubject.eraseToAnyPublisher()
|
|
|
|
}
|
|
|
|
}
|