Fix the emoji picker's title when setting a custom status. (#6039)

This commit is contained in:
Doug
2026-08-18 08:12:56 +01:00
committed by GitHub
parent 55a1a21f08
commit d3b068cbad
6 changed files with 22 additions and 6 deletions
@@ -1149,7 +1149,8 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
private func presentEmojiPicker(selectedEmojis: Set<String>, private func presentEmojiPicker(selectedEmojis: Set<String>,
emojiPickerContinuation: EmojiPickerScreenContinuation, emojiPickerContinuation: EmojiPickerScreenContinuation,
animated: Bool) { animated: Bool) {
let params = EmojiPickerScreenCoordinatorParameters(selectedEmojis: selectedEmojis, let params = EmojiPickerScreenCoordinatorParameters(mode: .reaction,
selectedEmojis: selectedEmojis,
emojiProvider: flowParameters.emojiProvider, emojiProvider: flowParameters.emojiProvider,
continuation: emojiPickerContinuation) continuation: emojiPickerContinuation)
let coordinator = EmojiPickerScreenCoordinator(parameters: params) let coordinator = EmojiPickerScreenCoordinator(parameters: params)
@@ -162,7 +162,8 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
} }
private func presentEmojiPicker(emojiPickerContinuation: EmojiPickerScreenContinuation) { private func presentEmojiPicker(emojiPickerContinuation: EmojiPickerScreenContinuation) {
let coordinator = EmojiPickerScreenCoordinator(parameters: .init(selectedEmojis: [], let coordinator = EmojiPickerScreenCoordinator(parameters: .init(mode: .userStatus,
selectedEmojis: [],
emojiProvider: flowParameters.emojiProvider, emojiProvider: flowParameters.emojiProvider,
continuation: emojiPickerContinuation)) continuation: emojiPickerContinuation))
coordinator.actions coordinator.actions
@@ -10,6 +10,7 @@ import Combine
import SwiftUI import SwiftUI
struct EmojiPickerScreenCoordinatorParameters { struct EmojiPickerScreenCoordinatorParameters {
let mode: EmojiPickerScreenMode
/// Any emojis that should be displayed as already selected. /// Any emojis that should be displayed as already selected.
let selectedEmojis: Set<String> let selectedEmojis: Set<String>
let emojiProvider: EmojiProviderProtocol let emojiProvider: EmojiProviderProtocol
@@ -32,7 +33,8 @@ final class EmojiPickerScreenCoordinator: CoordinatorProtocol {
} }
init(parameters: EmojiPickerScreenCoordinatorParameters) { init(parameters: EmojiPickerScreenCoordinatorParameters) {
viewModel = EmojiPickerScreenViewModel(selectedEmojis: parameters.selectedEmojis, viewModel = EmojiPickerScreenViewModel(mode: parameters.mode,
selectedEmojis: parameters.selectedEmojis,
emojiProvider: parameters.emojiProvider, emojiProvider: parameters.emojiProvider,
continuation: parameters.continuation) continuation: parameters.continuation)
} }
@@ -9,14 +9,23 @@
import Foundation import Foundation
typealias EmojiPickerScreenContinuation = AsyncStream<String>.Continuation typealias EmojiPickerScreenContinuation = AsyncStream<String>.Continuation
enum EmojiPickerScreenMode { case reaction, userStatus }
enum EmojiPickerScreenViewModelAction { enum EmojiPickerScreenViewModelAction {
case dismiss case dismiss
} }
struct EmojiPickerScreenViewState: BindableState { struct EmojiPickerScreenViewState: BindableState {
let mode: EmojiPickerScreenMode
var categories: [EmojiPickerEmojiCategoryViewData] var categories: [EmojiPickerEmojiCategoryViewData]
var selectedEmojis: Set<String> var selectedEmojis: Set<String>
var title: String {
switch mode {
case .reaction: L10n.commonReactions
case .userStatus: L10n.a11yCustomEmoji
}
}
} }
enum EmojiPickerScreenViewAction { enum EmojiPickerScreenViewAction {
@@ -20,8 +20,11 @@ class EmojiPickerScreenViewModel: EmojiPickerScreenViewModelType, EmojiPickerScr
actionsSubject.eraseToAnyPublisher() actionsSubject.eraseToAnyPublisher()
} }
init(selectedEmojis: Set<String>, emojiProvider: EmojiProviderProtocol, continuation: EmojiPickerScreenContinuation) { init(mode: EmojiPickerScreenMode = .reaction,
let initialViewState = EmojiPickerScreenViewState(categories: [], selectedEmojis: selectedEmojis) selectedEmojis: Set<String>,
emojiProvider: EmojiProviderProtocol,
continuation: EmojiPickerScreenContinuation) {
let initialViewState = EmojiPickerScreenViewState(mode: mode, categories: [], selectedEmojis: selectedEmojis)
self.emojiProvider = emojiProvider self.emojiProvider = emojiProvider
self.continuation = continuation self.continuation = continuation
super.init(initialViewState: initialViewState) super.init(initialViewState: initialViewState)
@@ -47,7 +47,7 @@ struct EmojiPickerScreen: View {
} }
.padding(.horizontal, 6) .padding(.horizontal, 6)
} }
.navigationTitle(L10n.commonReactions) .navigationTitle(context.viewState.title)
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbar { toolbar } .toolbar { toolbar }
.isSearching($isSearching) .isSearching($isSearching)