mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-06 12:28:29 +00:00
Send reaction method placeholder (#355)
* Send reaction method placeholder * Removed unnecessary emoji skin parsing * Code review fixes
This commit is contained in:
committed by
GitHub
parent
7db7eec98f
commit
1e197d48de
@@ -22,7 +22,7 @@ struct RoomScreenCoordinatorParameters {
|
||||
let mediaProvider: MediaProviderProtocol
|
||||
let roomName: String?
|
||||
let roomAvatarUrl: String?
|
||||
let emojiProvide: EmojiProviderProtocol
|
||||
let emojiProvider: EmojiProviderProtocol
|
||||
}
|
||||
|
||||
final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
@@ -113,7 +113,8 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
}
|
||||
|
||||
private func displayEmojiPickerScreen(for itemId: String) {
|
||||
guard let emojiProvider = parameters?.emojiProvide else {
|
||||
guard let emojiProvider = parameters?.emojiProvider,
|
||||
let timelineController = parameters?.timelineController else {
|
||||
fatalError()
|
||||
}
|
||||
let params = EmojiPickerScreenCoordinatorParameters(emojiProvider: emojiProvider,
|
||||
@@ -121,12 +122,14 @@ final class RoomScreenCoordinator: CoordinatorProtocol {
|
||||
let coordinator = EmojiPickerScreenCoordinator(parameters: params)
|
||||
coordinator.callback = { [weak self] action in
|
||||
switch action {
|
||||
case let .selectEmoji(emojiId: emojiId, itemId: itemId):
|
||||
case let .emojiSelected(emoji: emoji, itemId: itemId):
|
||||
self?.navigationController.dismissSheet()
|
||||
MXLog.debug("Save \(emojiId) for \(itemId)")
|
||||
Task {
|
||||
await timelineController.sendReaction(emoji, for: itemId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
navigationController.presentSheet(coordinator)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ enum RoomScreenComposerMode: Equatable {
|
||||
|
||||
enum RoomScreenViewAction {
|
||||
case displayEmojiPicker(itemId: String)
|
||||
case emojiTapped(emoji: String, itemId: String)
|
||||
case paginateBackwards
|
||||
case itemAppeared(id: String)
|
||||
case itemDisappeared(id: String)
|
||||
|
||||
@@ -117,6 +117,9 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
|
||||
state.composerMode = .default
|
||||
case .cancelEdit:
|
||||
state.composerMode = .default
|
||||
case .emojiTapped(let emoji, let itemId):
|
||||
await timelineController.sendReaction(emoji, for: itemId)
|
||||
state.displayReactionsMenuForItemId = ""
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-1
@@ -19,13 +19,18 @@ import SwiftUI
|
||||
struct TimelineItemReactionsMenuView: View {
|
||||
private let emojis = ["👍🏼", "👎🏼", "😄", "🙏🏼", "😇"]
|
||||
|
||||
var onEmojiSelected: ((String) -> Void)?
|
||||
var onDisplayEmojiPicker: (() -> Void)?
|
||||
|
||||
var body: some View {
|
||||
HStack {
|
||||
HStack(spacing: 10) {
|
||||
ForEach(emojis, id: \.self) { emoji in
|
||||
Text(emoji)
|
||||
Button {
|
||||
onEmojiSelected?(emoji)
|
||||
} label: {
|
||||
Text(emoji)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(10)
|
||||
|
||||
@@ -183,9 +183,11 @@ struct TimelineTableView: UIViewRepresentable {
|
||||
cell.contentConfiguration = UIHostingConfiguration {
|
||||
VStack {
|
||||
if viewModelContext.viewState.displayReactionsMenuForItemId == timelineItem.id {
|
||||
TimelineItemReactionsMenuView {
|
||||
TimelineItemReactionsMenuView(onEmojiSelected: { emoji in
|
||||
viewModelContext.send(viewAction: .emojiTapped(emoji: emoji, itemId: timelineItem.id))
|
||||
}, onDisplayEmojiPicker: {
|
||||
viewModelContext.send(viewAction: .displayEmojiPicker(itemId: timelineItem.id))
|
||||
}
|
||||
})
|
||||
}
|
||||
timelineItem
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
|
||||
Reference in New Issue
Block a user