mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Hook up the emoji picker to the custom status row. (#5902)
* Refactor EmojiPickerScreen to take a continuation instead of a timeline/itemID. * Hook up the emoji picker to the custom status row.
This commit is contained in:
@@ -430,13 +430,12 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
presentMediaUploadPickerWithMode(mode, caption: caption, timelineController: timelineController, animated: animated)
|
||||
|
||||
case (_, .presentEmojiPicker, .emojiPicker(let itemID, let selectedEmoji, _)):
|
||||
guard let timelineController = (context.userInfo as? EventUserInfo)?.timelineController else {
|
||||
fatalError("Missing required TimelineController")
|
||||
case (_, .presentEmojiPicker, .emojiPicker(let selectedEmojis, _)):
|
||||
guard let continuation = (context.userInfo as? EventUserInfo)?.emojiPickerContinuation else {
|
||||
fatalError("Missing required emoji continuation")
|
||||
}
|
||||
presentEmojiPicker(for: itemID,
|
||||
selectedEmoji: selectedEmoji,
|
||||
timelineController: timelineController,
|
||||
presentEmojiPicker(selectedEmojis: selectedEmojis,
|
||||
emojiPickerContinuation: continuation,
|
||||
animated: animated)
|
||||
|
||||
case (_, .presentMessageForwarding(let forwardingItem), .messageForwarding):
|
||||
@@ -706,9 +705,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
case .presentMediaUploadPreviewScreen(let url, let caption):
|
||||
stateMachine.tryEvent(.presentMediaUploadPreview(mediaURLs: url, caption: caption),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentEmojiPicker(let itemID, let selectedEmojis):
|
||||
stateMachine.tryEvent(.presentEmojiPicker(itemID: itemID, selectedEmojis: selectedEmojis),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentEmojiPicker(let selectedEmojis, let continuation):
|
||||
stateMachine.tryEvent(.presentEmojiPicker(selectedEmojis: selectedEmojis),
|
||||
userInfo: EventUserInfo(animated: animated, emojiPickerContinuation: continuation))
|
||||
case .presentLocationPicker:
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .picker(shouldShowLiveLocationOption: true)),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
@@ -831,9 +830,9 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
stateMachine.tryEvent(.presentMapNavigator(interactionMode: .viewStatic(location)),
|
||||
userInfo: EventUserInfo(animated: animated,
|
||||
timelineController: timelineController))
|
||||
case .presentEmojiPicker(let itemID, let selectedEmojis):
|
||||
stateMachine.tryEvent(.presentEmojiPicker(itemID: itemID, selectedEmojis: selectedEmojis),
|
||||
userInfo: EventUserInfo(animated: animated, timelineController: timelineController))
|
||||
case .presentEmojiPicker(let selectedEmojis, let continuation):
|
||||
stateMachine.tryEvent(.presentEmojiPicker(selectedEmojis: selectedEmojis),
|
||||
userInfo: EventUserInfo(animated: animated, emojiPickerContinuation: continuation))
|
||||
case .presentRoomMemberDetails(let userID):
|
||||
stateMachine.tryEvent(.startMembersFlow(entryPoint: .roomMember(userID: userID)))
|
||||
case .presentMessageForwarding(let forwardingItem):
|
||||
@@ -1146,14 +1145,12 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
private func presentEmojiPicker(for itemID: TimelineItemIdentifier,
|
||||
selectedEmoji: Set<String>,
|
||||
timelineController: TimelineControllerProtocol,
|
||||
private func presentEmojiPicker(selectedEmojis: Set<String>,
|
||||
emojiPickerContinuation: EmojiPickerScreenContinuation,
|
||||
animated: Bool) {
|
||||
let params = EmojiPickerScreenCoordinatorParameters(itemID: itemID,
|
||||
selectedEmojis: selectedEmoji,
|
||||
let params = EmojiPickerScreenCoordinatorParameters(selectedEmojis: selectedEmojis,
|
||||
emojiProvider: flowParameters.emojiProvider,
|
||||
timelineController: timelineController)
|
||||
continuation: emojiPickerContinuation)
|
||||
let coordinator = EmojiPickerScreenCoordinator(parameters: params)
|
||||
|
||||
coordinator.actions.sink { [weak self] action in
|
||||
|
||||
@@ -56,7 +56,7 @@ extension RoomFlowCoordinator {
|
||||
case inviteUsersScreen(flow: InviteUsersFlow, previousState: State)
|
||||
case mediaUploadPicker(mode: MediaPickerScreenMode, caption: NSAttributedString, previousState: State)
|
||||
case mediaUploadPreview(mediaURLs: [URL], caption: NSAttributedString?, previousState: State)
|
||||
case emojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>, previousState: State)
|
||||
case emojiPicker(selectedEmojis: Set<String>, previousState: State)
|
||||
case mapNavigator(previousState: State)
|
||||
case messageForwarding(forwardingItem: MessageForwardingItem, previousState: State)
|
||||
case reportContent(itemID: TimelineItemIdentifier, senderID: String, previousState: State)
|
||||
@@ -90,6 +90,7 @@ extension RoomFlowCoordinator {
|
||||
var timelineController: TimelineControllerProtocol?
|
||||
var spaceRoomListProxy: SpaceRoomListProxyProtocol?
|
||||
var authorizedSpacesSelection: AuthorizedSpacesSelection?
|
||||
var emojiPickerContinuation: EmojiPickerScreenContinuation?
|
||||
}
|
||||
|
||||
enum Event: EventType {
|
||||
@@ -133,7 +134,7 @@ extension RoomFlowCoordinator {
|
||||
case presentMediaUploadPreview(mediaURLs: [URL], caption: NSAttributedString?)
|
||||
case dismissMediaUploadPreview
|
||||
|
||||
case presentEmojiPicker(itemID: TimelineItemIdentifier, selectedEmojis: Set<String>)
|
||||
case presentEmojiPicker(selectedEmojis: Set<String>)
|
||||
case dismissEmojiPicker
|
||||
|
||||
case presentMapNavigator(interactionMode: LocationSharingInteractionMode)
|
||||
@@ -204,8 +205,8 @@ extension RoomFlowCoordinator {
|
||||
case (.room, .presentMediaUploadPreview(let mediaURLs, let caption)):
|
||||
return .mediaUploadPreview(mediaURLs: mediaURLs, caption: caption, previousState: fromState)
|
||||
|
||||
case (.room, .presentEmojiPicker(let itemID, let selectedEmoji)):
|
||||
return .emojiPicker(itemID: itemID, selectedEmojis: selectedEmoji, previousState: fromState)
|
||||
case (.room, .presentEmojiPicker(let selectedEmojis)):
|
||||
return .emojiPicker(selectedEmojis: selectedEmojis, previousState: fromState)
|
||||
|
||||
case (.room, .presentMessageForwarding(let forwardingItem)):
|
||||
return .messageForwarding(forwardingItem: forwardingItem, previousState: fromState)
|
||||
@@ -253,8 +254,8 @@ extension RoomFlowCoordinator {
|
||||
case (.thread, .presentMediaUploadPreview(let mediaURLs, let caption)):
|
||||
return .mediaUploadPreview(mediaURLs: mediaURLs, caption: caption, previousState: fromState)
|
||||
|
||||
case (.thread, .presentEmojiPicker(let itemID, let selectedEmoji)):
|
||||
return .emojiPicker(itemID: itemID, selectedEmojis: selectedEmoji, previousState: fromState)
|
||||
case (.thread, .presentEmojiPicker(let selectedEmojis)):
|
||||
return .emojiPicker(selectedEmojis: selectedEmojis, previousState: fromState)
|
||||
|
||||
case (.thread, .presentMessageForwarding(let forwardingItem)):
|
||||
return .messageForwarding(forwardingItem: forwardingItem, previousState: fromState)
|
||||
@@ -273,7 +274,7 @@ extension RoomFlowCoordinator {
|
||||
case (.mediaUploadPicker(_, _, let previousState), .dismissMediaUploadPicker):
|
||||
return previousState
|
||||
|
||||
case (.emojiPicker(_, _, let previouState), .dismissEmojiPicker):
|
||||
case (.emojiPicker(_, let previouState), .dismissEmojiPicker):
|
||||
return previouState
|
||||
|
||||
case (.reportContent(_, _, let previousState), .dismissReportContent):
|
||||
|
||||
@@ -91,6 +91,8 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
startEncryptionSettingsFlow()
|
||||
case .userDetails:
|
||||
presentUserDetailsEditScreen()
|
||||
case let .userStatusEmojiPicker(continuation):
|
||||
presentEmojiPicker(emojiPickerContinuation: continuation)
|
||||
case .linkNewDevice:
|
||||
startLinkNewDeviceFlow()
|
||||
case let .manageAccount(url):
|
||||
@@ -159,6 +161,22 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
|
||||
coordinator.start()
|
||||
}
|
||||
|
||||
private func presentEmojiPicker(emojiPickerContinuation: EmojiPickerScreenContinuation) {
|
||||
let coordinator = EmojiPickerScreenCoordinator(parameters: .init(selectedEmojis: [],
|
||||
emojiProvider: flowParameters.emojiProvider,
|
||||
continuation: emojiPickerContinuation))
|
||||
coordinator.actions
|
||||
.sink { [weak self] action in
|
||||
switch action {
|
||||
case .dismiss:
|
||||
self?.navigationStackCoordinator.setSheetCoordinator(nil)
|
||||
}
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
navigationStackCoordinator.setSheetCoordinator(coordinator)
|
||||
}
|
||||
|
||||
private func presentUserDetailsEditScreen() {
|
||||
let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(orientationManager: flowParameters.windowManager,
|
||||
userSession: flowParameters.userSession,
|
||||
|
||||
Reference in New Issue
Block a user