From 9310d281ced908b3cd059a07a899fe66393454a1 Mon Sep 17 00:00:00 2001 From: Amit Ron Date: Wed, 9 Nov 2022 18:20:29 +0200 Subject: [PATCH] update CompositionViewModel.maxCharacters whenever the identity changes --- .../ViewModels/View Models/CompositionViewModel.swift | 10 +++++++--- .../ViewModels/View Models/NewStatusViewModel.swift | 9 +++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift b/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift index a64c94d..449b0cf 100644 --- a/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/CompositionViewModel.swift @@ -30,7 +30,7 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab public let canRemoveAttachments = true private let eventsSubject: PassthroughSubject - private let maxCharacters: Int + @Published private var maxCharacters: Int private var cancellables = Set() init(eventsSubject: PassthroughSubject, maxCharacters: Int?) { @@ -62,8 +62,8 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab return tokens.map(\.countShorteningIfURL).reduce(tokens.count - 1, +) } - .combineLatest($displayContentWarning, $contentWarning) - .map { (maxCharacters ?? Self.defaultMaxCharacters) - ($0 + ($1 ? $2.count : 0)) } + .combineLatest($displayContentWarning, $contentWarning, $maxCharacters) + .map { ($3) - ($0 + ($1 ? $2.count : 0)) } .assign(to: &$remainingCharacters) $displayContentWarning.filter { $0 }.assign(to: &$sensitive) @@ -86,6 +86,10 @@ public final class CompositionViewModel: AttachmentsRenderingViewModel, Observab public func removeAttachment(viewModel: AttachmentViewModel) { attachmentViewModels.removeAll { $0 === viewModel } } + + public func setMaxCharactersOrDefault(_ newMaxCharacters: Int?) { + maxCharacters = newMaxCharacters ?? Self.defaultMaxCharacters + } } public extension CompositionViewModel { diff --git a/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift b/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift index 261277f..fa1dfd4 100644 --- a/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift +++ b/ViewModels/Sources/ViewModels/View Models/NewStatusViewModel.swift @@ -101,6 +101,15 @@ public final class NewStatusViewModel: ObservableObject { .sink { [weak self] in self?.handle(event: $0) } .store(in: &cancellables) + $identityContext + .map { $0.identity.instance?.maxTootChars } + .sink { [weak self] maxTootChars in + self?.compositionViewModels.forEach { cvm in + cvm.setMaxCharactersOrDefault(maxTootChars) + } + } + .store(in: &cancellables) + if let identity = identity { setIdentity(identity) }