From 9310d281ced908b3cd059a07a899fe66393454a1 Mon Sep 17 00:00:00 2001 From: Amit Ron Date: Wed, 9 Nov 2022 18:20:29 +0200 Subject: [PATCH 1/2] 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) } From 36d58ab99aaaf57028600c6164dc8896f404b191 Mon Sep 17 00:00:00 2001 From: Amit Ron Date: Wed, 9 Nov 2022 19:36:31 +0200 Subject: [PATCH 2/2] fixed bug where the context menu for CompositionView.changeIdentityButton didn't update properly after changing identity --- Views/UIKit/CompositionView.swift | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Views/UIKit/CompositionView.swift b/Views/UIKit/CompositionView.swift index 5c0cda0..e3a3280 100644 --- a/Views/UIKit/CompositionView.swift +++ b/Views/UIKit/CompositionView.swift @@ -203,11 +203,14 @@ private extension CompositionView { self.changeIdentityButton.accessibilityLabel = $0.identity.handle self.changeIdentityButton.accessibilityHint = NSLocalizedString("compose.change-identity-button.accessibility-hint", comment: "") - } - .store(in: &cancellables) - parentViewModel.identityContext.$authenticatedOtherIdentities - .sink { [weak self] in self?.changeIdentityButton.menu = self?.changeIdentityMenu(identities: $0) } + $0.$authenticatedOtherIdentities + .sink { [weak self] authenticatedOtherIdentities in + self?.changeIdentityButton.menu = + self?.changeIdentityMenu(identities: authenticatedOtherIdentities) + } + .store(in: &self.cancellables) + } .store(in: &cancellables) viewModel.$attachmentViewModels