Send reaction method placeholder (#355)

* Send reaction method placeholder

* Removed unnecessary emoji skin parsing

* Code review fixes
This commit is contained in:
Aleksandrs Proskurins
2022-12-07 13:19:47 +02:00
committed by GitHub
parent 7db7eec98f
commit 1e197d48de
24 changed files with 88 additions and 80 deletions
@@ -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 = ""
}
}
@@ -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)